cut-to-pack-service/src/main/java/com/utopiaindustries/controller/JobCardController.java

185 lines
8.6 KiB
Java

package com.utopiaindustries.controller;
import com.utopiaindustries.auth.JobCardRole;
import com.utopiaindustries.dao.ctp.JobCardDAO;
import com.utopiaindustries.model.ctp.JobCard;
import com.utopiaindustries.model.ctp.JobCardItem;
import com.utopiaindustries.service.InventoryAccountService;
import com.utopiaindustries.service.JobCardService;
import com.utopiaindustries.service.LocationService;
import com.utopiaindustries.util.StringUtils;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@Controller
@JobCardRole
@RequestMapping( "/job-cards" )
public class JobCardController {
private final JobCardService jobCardService;
private final LocationService locationService;
private final InventoryAccountService inventoryAccountService;
private final JobCardDAO jobCardDAO;
public JobCardController(JobCardService jobCardService, LocationService locationService, InventoryAccountService inventoryAccountService, JobCardDAO jobCardDAO){
this.jobCardService = jobCardService;
this.locationService = locationService;
this.inventoryAccountService = inventoryAccountService;
this.jobCardDAO = jobCardDAO;
}
/**
* get all job cards
* */
@GetMapping
public String showJobCardList( @RequestParam( value = "code", required = false ) String code,
@RequestParam( value = "status", required = false ) String status,
@RequestParam( value = "inventory-status" , required = false) String inventoryStatus,
@RequestParam( value = "customer" ,required = false ) String customer,
@RequestParam( value = "lot-number", required = false ) String lotNumber,
@RequestParam( value = "purchase-order-id", required = false ) String purchaseOrderId,
@RequestParam( value = "site-id", required = false ) String locationSiteId,
@RequestParam( value = "created-start-date", required = false ) String createdStartDate,
@RequestParam( value = "created-end-date", required = false ) String createdEndDate,
@RequestParam( value = "limit" , required = false) Long limit,
Model model ){
LocalDate startDate = StringUtils.isNullOrEmpty(createdStartDate) ? LocalDate.now().minusDays(30) : LocalDate.parse(createdStartDate);
LocalDate endDate = StringUtils.isNullOrEmpty(createdEndDate) ? LocalDate.now() : LocalDate.parse(createdEndDate);
String code1 = StringUtils.isNullOrEmpty(code) ? "" : code;
model.addAttribute("startDate", startDate);
model.addAttribute("endDate", endDate);
List<JobCard> cards = jobCardService.getCards(code1, status, inventoryStatus, customer, lotNumber, purchaseOrderId, locationSiteId,startDate.toString(), endDate.toString(), limit );
model.addAttribute("cards", cards );
model.addAttribute("statuses", JobCard.Status.values() );
model.addAttribute("invStatuses", JobCard.InventoryStatus.values() );
model.addAttribute("locations", locationService.findAll() );
return "job-card-list";
}
@GetMapping( "/new" )
public String showJobCardForm( Model model ){
model.addAttribute("jobCard", jobCardService.createNewJobCard() );
model.addAttribute("cutPieceTypes", jobCardService.getAllPieceTypes() );
model.addAttribute("accounts", inventoryAccountService.getAllCuttingAccounts( ) );
return "job-card-add";
}
@GetMapping( value = "/edit/{id}" )
public String showJobCardEditForm( @PathVariable("id") long id,
Model model ){
model.addAttribute("jobCard", jobCardService.findCardRecursivelyForView( id ) );
model.addAttribute("cutPieceTypes", jobCardService.getAllPieceTypes() );
model.addAttribute("accounts", inventoryAccountService.getAllCuttingAccounts() );
return "job-card-edit";
}
/*
* draft
* */
@PostMapping( value ="/edit" , params = "user=draft" )
public String saveJobCard( @ModelAttribute JobCard jobCard,
RedirectAttributes redirectAttributes,
Model model ){
try {
jobCard.setStatus( JobCard.Status.DRAFT.name() );
jobCard.setInventoryStatus( JobCard.InventoryStatus.NOT_RECEIVED_YET.name() );
jobCardService.save( jobCard );
redirectAttributes.addFlashAttribute("success", "Successfully saved!" );
} catch ( Exception ex ){
redirectAttributes.addFlashAttribute("error", ex.getMessage() );
}
return "redirect:/job-cards";
}
/*
* draft after save
* */
@PostMapping( value ="/edit/{id}" , params = "user=draft" )
public String saveJobCardEdit( @ModelAttribute JobCard jobCard,
@PathVariable long id,
RedirectAttributes redirectAttributes,
Model model ){
try {
jobCard.setStatus( JobCard.Status.DRAFT.name() );
jobCard.setInventoryStatus( JobCard.InventoryStatus.NOT_RECEIVED_YET.name() );
jobCardService.save( jobCard );
redirectAttributes.addFlashAttribute("success", "Successfully saved!" );
} catch ( Exception ex ){
redirectAttributes.addFlashAttribute("error", ex.getMessage() );
}
return "redirect:/job-cards";
}
@PostMapping( value ="/edit" , params = "user=post" )
public String postJobCard( @ModelAttribute JobCard jobCard,
RedirectAttributes redirectAttributes,
Model model ){
try {
jobCard.setStatus(JobCard.Status.POSTED.name() );
jobCardService.save( jobCard );
redirectAttributes.addFlashAttribute("success", "Successfully saved!" );
} catch ( Exception ex ){
redirectAttributes.addFlashAttribute("error", ex.getMessage() );
}
return "redirect:/job-cards";
}
/*
* post after draft
* */
@PostMapping( value ="/edit/{id}" , params = "user=post" )
public String postJobCardEdit( @ModelAttribute JobCard jobCard,
@PathVariable long id,
RedirectAttributes redirectAttributes,
Model model ){
try {
jobCard.setStatus(JobCard.Status.POSTED.name() );
jobCardService.save( jobCard );
redirectAttributes.addFlashAttribute("success", "Successfully saved!" );
} catch ( Exception ex ){
redirectAttributes.addFlashAttribute("error", ex.getMessage() );
}
return "redirect:/job-cards";
}
@GetMapping( value = "/view/{id}" )
public String showJobCardDetail( @PathVariable("id") long id,
Model model ){
List<JobCardItem> jobCardItems = jobCardService.findJobCardItemByJobCardId(id);
List<Long> jobCardItemIds = jobCardItems.stream()
.map(JobCardItem::getItemId)
.collect(Collectors.toList());
List<Long> itemIds = jobCardItems.stream()
.map(JobCardItem::getId)
.collect(Collectors.toList());
model.addAttribute( "card", jobCardService.findByID(id));
model.addAttribute("jobCardItems", jobCardItems);
model.addAttribute("cutPiece",jobCardService.findCutPieceByJobCardItemIds(itemIds));
model.addAttribute("finishItem",jobCardService.findFinishItemByJobCardId(id));
model.addAttribute("stitchingItem",jobCardService.findStitchItemByJobCardId(id));
model.addAttribute("totalFinishItem",jobCardService.totalFinishItem(jobCardItemIds, id));
model.addAttribute("totalStitchingItem",jobCardService.totalStitchingItem(jobCardItemIds, id));
return "job-card-view";
}
private ArrayList<LocalDate> generateDateList(LocalDate start, LocalDate end) {
ArrayList<LocalDate> localDates = new ArrayList<>();
while (start.isBefore(end)) {
localDates.add(start);
start = start.plusDays(1);
}
return localDates;
}
}