diff --git a/src/main/java/com/utopiaindustries/model/ctp/POsDetails.java b/src/main/java/com/utopiaindustries/model/ctp/POsDetails.java index 467fe7b..f7bab54 100644 --- a/src/main/java/com/utopiaindustries/model/ctp/POsDetails.java +++ b/src/main/java/com/utopiaindustries/model/ctp/POsDetails.java @@ -9,17 +9,24 @@ public class POsDetails { private long poRequiredQuantity; // items detail - private long totalCutting; - private long remainingCutting; - private long totalStitching; - private long remainingStitching; - private long totalEndLineQC; - private long remainingEndLineQC; - private long totalFinishing; - private long remainingFinishing; - private long totalAGradeItem; - private long totalBGradeItem; - private long totalCGradeItem; + private long actualCutting; + private long balanceToCutting; + private long cuttingReceived; + private long cuttingOki; + private long cuttingReject; + private long stitchingIn; + private long stitchingWips; + private long stitchingOut; + private long finishIn; + private long finishRej; + private long finishQaApproved; + private long storeReceived; + private long storeWaiting; + private long packagingIn; + private long packagingOut; + private long packagingStock; + private long shippedScan; + private long shippedNet; private boolean poStatus; public long getPoQuantity() { @@ -46,94 +53,6 @@ public class POsDetails { this.articleTitle = articleTitle; } - public long getTotalCutting() { - return totalCutting; - } - - public void setTotalCutting(long totalCutting) { - this.totalCutting = totalCutting; - } - - public long getRemainingCutting() { - return remainingCutting; - } - - public void setRemainingCutting(long remainingCutting) { - this.remainingCutting = remainingCutting; - } - - public long getTotalStitching() { - return totalStitching; - } - - public void setTotalStitching(long totalStitching) { - this.totalStitching = totalStitching; - } - - public long getRemainingStitching() { - return remainingStitching; - } - - public void setRemainingStitching(long remainingStitching) { - this.remainingStitching = remainingStitching; - } - - public long getTotalEndLineQC() { - return totalEndLineQC; - } - - public void setTotalEndLineQC(long totalEndLineQC) { - this.totalEndLineQC = totalEndLineQC; - } - - public long getRemainingEndLineQC() { - return remainingEndLineQC; - } - - public void setRemainingEndLineQC(long remainingEndLineQC) { - this.remainingEndLineQC = remainingEndLineQC; - } - - public long getTotalFinishing() { - return totalFinishing; - } - - public void setTotalFinishing(long totalFinishing) { - this.totalFinishing = totalFinishing; - } - - public long getRemainingFinishing() { - return remainingFinishing; - } - - public void setRemainingFinishing(long remainingFinishing) { - this.remainingFinishing = remainingFinishing; - } - - public long getTotalAGradeItem() { - return totalAGradeItem; - } - - public void setTotalAGradeItem(long totalAGradeItem) { - this.totalAGradeItem = totalAGradeItem; - } - - public long getTotalBGradeItem() { - return totalBGradeItem; - } - - public void setTotalBGradeItem(long totalBGradeItem) { - this.totalBGradeItem = totalBGradeItem; - } - - public long getTotalCGradeItem() { - return totalCGradeItem; - } - - public void setTotalCGradeItem(long totalCGradeItem) { - this.totalCGradeItem = totalCGradeItem; - } - public long getPoId() { return poId; } @@ -150,6 +69,150 @@ public class POsDetails { this.poRequiredQuantity = poRequiredQuantity; } + public long getActualCutting() { + return actualCutting; + } + + public void setActualCutting(long actualCutting) { + this.actualCutting = actualCutting; + } + + public long getBalanceToCutting() { + return balanceToCutting; + } + + public void setBalanceToCutting(long balanceToCutting) { + this.balanceToCutting = balanceToCutting; + } + + public long getCuttingReceived() { + return cuttingReceived; + } + + public void setCuttingReceived(long cuttingReceived) { + this.cuttingReceived = cuttingReceived; + } + + public long getCuttingOki() { + return cuttingOki; + } + + public void setCuttingOki(long cuttingOki) { + this.cuttingOki = cuttingOki; + } + + public long getCuttingReject() { + return cuttingReject; + } + + public void setCuttingReject(long cuttingReject) { + this.cuttingReject = cuttingReject; + } + + public long getStitchingIn() { + return stitchingIn; + } + + public void setStitchingIn(long stitchingIn) { + this.stitchingIn = stitchingIn; + } + + public long getStitchingWips() { + return stitchingWips; + } + + public void setStitchingWips(long stitchingWips) { + this.stitchingWips = stitchingWips; + } + + public long getStitchingOut() { + return stitchingOut; + } + + public void setStitchingOut(long stitchingOut) { + this.stitchingOut = stitchingOut; + } + + public long getFinishIn() { + return finishIn; + } + + public void setFinishIn(long finishIn) { + this.finishIn = finishIn; + } + + public long getFinishRej() { + return finishRej; + } + + public void setFinishRej(long finishRej) { + this.finishRej = finishRej; + } + + public long getFinishQaApproved() { + return finishQaApproved; + } + + public void setFinishQaApproved(long finishQaApproved) { + this.finishQaApproved = finishQaApproved; + } + + public long getStoreReceived() { + return storeReceived; + } + + public void setStoreReceived(long storeReceived) { + this.storeReceived = storeReceived; + } + + public long getStoreWaiting() { + return storeWaiting; + } + + public void setStoreWaiting(long storeWaiting) { + this.storeWaiting = storeWaiting; + } + + public long getPackagingIn() { + return packagingIn; + } + + public void setPackagingIn(long packagingIn) { + this.packagingIn = packagingIn; + } + + public long getPackagingOut() { + return packagingOut; + } + + public void setPackagingOut(long packagingOut) { + this.packagingOut = packagingOut; + } + + public long getPackagingStock() { + return packagingStock; + } + + public void setPackagingStock(long packagingStock) { + this.packagingStock = packagingStock; + } + + public long getShippedScan() { + return shippedScan; + } + + public void setShippedScan(long shippedScan) { + this.shippedScan = shippedScan; + } + + public long getShippedNet() { + return shippedNet; + } + + public void setShippedNet(long shippedNet) { + this.shippedNet = shippedNet; + } + public boolean isPoStatus() { return poStatus; } @@ -161,17 +224,29 @@ public class POsDetails { @Override public String toString() { return "POsDetails{" + - "totalCutting=" + totalCutting + - ", remainingCutting=" + remainingCutting + - ", totalStitching=" + totalStitching + - ", remainingStitching=" + remainingStitching + - ", totalEndLineQC=" + totalEndLineQC + - ", remainingEndLineQC=" + remainingEndLineQC + - ", totalFinishing=" + totalFinishing + - ", remainingFinishing=" + remainingFinishing + - ", totalAGradeItem=" + totalAGradeItem + - ", totalBGradeItem=" + totalBGradeItem + - ", totalCGradeItem=" + totalCGradeItem + + "poId=" + poId + + ", poNumber='" + poNumber + '\'' + + ", articleTitle='" + articleTitle + '\'' + + ", poQuantity=" + poQuantity + + ", poRequiredQuantity=" + poRequiredQuantity + + ", actualCutting=" + actualCutting + + ", balanceToCutting=" + balanceToCutting + + ", cuttingReceived=" + cuttingReceived + + ", cuttingOki=" + cuttingOki + + ", cuttingReject=" + cuttingReject + + ", stitchingIn=" + stitchingIn + + ", stitchingWips=" + stitchingWips + + ", stitchingOut=" + stitchingOut + + ", finishIn=" + finishIn + + ", finishRej=" + finishRej + + ", finishQaApproved=" + finishQaApproved + + ", storeReceived=" + storeReceived + + ", storeWaiting=" + storeWaiting + + ", packagingIn=" + packagingIn + + ", packagingOut=" + packagingOut + + ", packagingStock=" + packagingStock + + ", shippedScan=" + shippedScan + + ", shippedNet=" + shippedNet + '}'; } } diff --git a/src/main/java/com/utopiaindustries/service/PackagingService.java b/src/main/java/com/utopiaindustries/service/PackagingService.java index 734ef99..4d4f759 100644 --- a/src/main/java/com/utopiaindustries/service/PackagingService.java +++ b/src/main/java/com/utopiaindustries/service/PackagingService.java @@ -17,6 +17,6 @@ public class PackagingService { public void createPackagingItem(FinishedItemWrapper wrapper){ inventoryService.createPackagingItemAndTransaction(wrapper, wrapper.getAccountId()); - } + } diff --git a/src/main/java/com/utopiaindustries/service/PurchaseOrderService.java b/src/main/java/com/utopiaindustries/service/PurchaseOrderService.java index 6de4da8..e9bd00e 100644 --- a/src/main/java/com/utopiaindustries/service/PurchaseOrderService.java +++ b/src/main/java/com/utopiaindustries/service/PurchaseOrderService.java @@ -43,6 +43,7 @@ public class PurchaseOrderService { Map storeItems = purchaseOrderCTPService.getStoreItemsByPoId(pOsDetails.getPoId()); model.addAttribute("poDetail", pOsDetails); model.addAttribute( "baseUrl", URLUtils.getCurrentBaseUrl() ); + if (storeDetail && !storeItems.isEmpty()){ model.addAttribute("showStore", true); model.addAttribute("store", storeItems); diff --git a/src/main/java/com/utopiaindustries/service/ReportingService.java b/src/main/java/com/utopiaindustries/service/ReportingService.java index 5f3f15b..3056c02 100644 --- a/src/main/java/com/utopiaindustries/service/ReportingService.java +++ b/src/main/java/com/utopiaindustries/service/ReportingService.java @@ -30,8 +30,9 @@ public class ReportingService { private final InventoryAccountDAO inventoryAccountDAO; private final PurchaseOrderCTPDao purchaseOrderCTPDao; private final StoreItemDao storeItemDao; + private final PackagingItemsDAO packagingItemsDAO; - public ReportingService(JobCardItemDAO jobCardItemDAO, BundleDAO bundleDAO, InventoryTransactionLegDAO inventoryTransactionLegDAO, JobCardDAO jobCardDAO, FinishedItemDAO finishedItemDAO, StitchingOfflineItemDAO stitchingOfflineItemDAO, InventoryAccountDAO inventoryAccountDAO, PurchaseOrderCTPDao purchaseOrderCTPDao, StoreItemDao storeItemDao) { + public ReportingService(JobCardItemDAO jobCardItemDAO, BundleDAO bundleDAO, InventoryTransactionLegDAO inventoryTransactionLegDAO, JobCardDAO jobCardDAO, FinishedItemDAO finishedItemDAO, StitchingOfflineItemDAO stitchingOfflineItemDAO, InventoryAccountDAO inventoryAccountDAO, PurchaseOrderCTPDao purchaseOrderCTPDao, StoreItemDao storeItemDao, PackagingItemsDAO packagingItemsDAO) { this.jobCardItemDAO = jobCardItemDAO; this.bundleDAO = bundleDAO; this.inventoryTransactionLegDAO = inventoryTransactionLegDAO; @@ -41,6 +42,7 @@ public class ReportingService { this.inventoryAccountDAO = inventoryAccountDAO; this.purchaseOrderCTPDao = purchaseOrderCTPDao; this.storeItemDao = storeItemDao; + this.packagingItemsDAO = packagingItemsDAO; } public Map getJobCardProgress(String jobCardID) { @@ -446,18 +448,25 @@ public class ReportingService { purchaseOrderCTPList = purchaseOrderCTPDao.findAll(); } - Map jobCardCompleteItems = new HashMap<>(); for (PurchaseOrderCTP pos : purchaseOrderCTPList) { List jobCards = jobCardDAO.findByPoId(pos.getId()); BigDecimal totalProduction = BigDecimal.ZERO; + BigDecimal expectedProduction = BigDecimal.ZERO; BigDecimal actualProduction = BigDecimal.ZERO; - Long qaProgressItems = 0L; - Long totalFinishItem = 0L; - Long totalRejectPieces = 0L; + long stitchingIn = 0L; + long stitchingOut = 0L; + long finishApprovedItem = 0L; + long finishRejectItem = 0L; + long storeItems = 0L; + long packagingItems = 0L; POsDetails pOsDetails = new POsDetails(); for (JobCard jobCard : jobCards) { List jobCardItems = jobCardItemDAO.findByCardId(jobCard.getId()); + expectedProduction = expectedProduction.add(jobCardItems.stream() + .map(item -> Optional.ofNullable(item.getExpectedProduction()).orElse(BigDecimal.ZERO)) + .reduce(BigDecimal.ZERO, BigDecimal::add)); + totalProduction = totalProduction.add(jobCardItems.stream() .map(item -> Optional.ofNullable(item.getTotalProduction()).orElse(BigDecimal.ZERO)) .reduce(BigDecimal.ZERO, BigDecimal::add)); @@ -465,34 +474,49 @@ public class ReportingService { actualProduction = actualProduction.add(jobCardItems.stream() .map(item -> Optional.ofNullable(item.getActualProduction()).orElse(BigDecimal.ZERO)) .reduce(BigDecimal.ZERO, BigDecimal::add)); - qaProgressItems += Optional.ofNullable(stitchingOfflineItemDAO.CalculateTotalQA(jobCard.getId())).orElse(0L); - totalFinishItem += Optional.ofNullable(finishedItemDAO.calculateTotalFinishItem(jobCard.getId())).orElse(0L); - totalRejectPieces += Optional.ofNullable(storeItemDao.calculateTotalRejectItemByJobCardId(jobCard.getId())).orElse(0L); - jobCardCompleteItems = getSegregateItems(String.valueOf(jobCard.getId())); - if (jobCardCompleteItems == null) { - jobCardCompleteItems = new HashMap<>(); - } + //stitching detail + stitchingIn += Optional.of(stitchingOfflineItemDAO.findByJobCardId(jobCard.getId()).size()).orElse(0); + stitchingOut += Optional.ofNullable(stitchingOfflineItemDAO.CalculateTotalQA(jobCard.getId())).orElse(0L); + + //finishItems detail + List finishedItems = finishedItemDAO.findByJobCardId(jobCard.getId()); + finishApprovedItem += finishedItems.stream().filter(e -> e.getQaStatus().equals("APPROVED")).count(); + finishRejectItem += finishedItems.stream().filter(e -> e.getQaStatus().equals("REJECT")).count(); + + //reject store details + storeItems += Optional.ofNullable(storeItemDao.calculateTotalRejectItemByJobCardId(jobCard.getId())).orElse(0L); + + //reject packaging details + packagingItems += Optional.of(packagingItemsDAO.findByJobCardId(jobCard.getId()).size()).orElse(0); + } pOsDetails.setPoId(pos.getId()); pOsDetails.setPoNumber(pos.getPurchaseOrderCode()); pOsDetails.setArticleTitle(pos.getArticleName()); pOsDetails.setPoQuantity(pos.getPurchaseOrderQuantity()); pOsDetails.setPoRequiredQuantity(pos.getPurchaseOrderQuantityRequired()); - pOsDetails.setTotalCutting(actualProduction.intValue()); - pOsDetails.setTotalStitching(qaProgressItems); - pOsDetails.setTotalEndLineQC(qaProgressItems.intValue()); - pOsDetails.setTotalFinishing(totalFinishItem); + pOsDetails.setActualCutting(expectedProduction.longValue()); + pOsDetails.setBalanceToCutting(pos.getPurchaseOrderQuantityRequired() - actualProduction.longValue()); + pOsDetails.setCuttingReceived(expectedProduction.longValue()); + pOsDetails.setCuttingOki(actualProduction.intValue()); + pOsDetails.setCuttingReject(expectedProduction.subtract(actualProduction).intValue()); + pOsDetails.setStitchingIn(stitchingIn); + pOsDetails.setStitchingOut(stitchingOut); + pOsDetails.setStitchingWips(stitchingIn - stitchingOut); + pOsDetails.setFinishIn(stitchingOut); + pOsDetails.setFinishRej(finishRejectItem); + pOsDetails.setFinishQaApproved(finishApprovedItem); + pOsDetails.setStoreReceived(storeItems); + pOsDetails.setStoreWaiting(finishRejectItem - storeItems); + pOsDetails.setFinishQaApproved(finishApprovedItem); + pOsDetails.setPackagingIn(packagingItems); + pOsDetails.setPackagingOut(packagingItems); + pOsDetails.setPackagingStock(0); + pOsDetails.setShippedScan(packagingItems); + pOsDetails.setShippedNet(packagingItems); + pOsDetails.setPackagingStock(0); pOsDetails.setPoStatus(false); - - pOsDetails.setRemainingCutting(pos.getPurchaseOrderQuantityRequired() - actualProduction.intValue()); - pOsDetails.setRemainingStitching(pos.getPurchaseOrderQuantityRequired() - qaProgressItems); - pOsDetails.setRemainingEndLineQC(pos.getPurchaseOrderQuantityRequired() - qaProgressItems); - pOsDetails.setRemainingFinishing(pos.getPurchaseOrderQuantityRequired() - totalFinishItem); - - pOsDetails.setTotalAGradeItem(jobCardCompleteItems.getOrDefault("A GRADE", 0)); - pOsDetails.setTotalBGradeItem(totalRejectPieces.intValue()); - pOsDetailsList.add(pOsDetails); } return pOsDetailsList; diff --git a/src/main/resources/templates/po-status-pdf.html b/src/main/resources/templates/po-status-pdf.html index 3e28128..8c1f928 100644 --- a/src/main/resources/templates/po-status-pdf.html +++ b/src/main/resources/templates/po-status-pdf.html @@ -10,43 +10,60 @@ Job Card +
- -
+ Utopia Industries + - + - - + - - + - - + + - - + + - - + @@ -57,47 +74,77 @@
PO Code + PO Code
Article Name + Article Name
PO QuantityPO Quantity
PO Required Excess+PO Required Excess+
PO Status + PO Status
- +
PO Details
- + - - - - - - - - - - + + + + + + + + + +
CuttingCutting BalanceStitchingStitching BalanceEnd Line QCEnd Line QC BalanceFinishing ItemsFinishing Items BalanceA Grade ItemsReject Items In StoreCutting Insp.StitchingFinishedRej. StorePackagingShipped
+ + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + + + + + + + + +
Actual CutBal.To CutRcvd.OkRej.InWIPOutInRejQA Approv.Rcvd.waitingInOutStockScanNet
- + - - + diff --git a/src/main/resources/templates/reporting/po-report.html b/src/main/resources/templates/reporting/po-report.html index 621e1c4..a8ca5b8 100644 --- a/src/main/resources/templates/reporting/po-report.html +++ b/src/main/resources/templates/reporting/po-report.html @@ -7,25 +7,35 @@
-
-

All PO's

-
+
+
+

All PO's

+
+
- - - - - - - - - - + + + + + + + + + + + + + + + + + + @@ -39,16 +49,25 @@ - - - - - - - - - - + + + + + + + + + + + + + + + + + + +
PO Number PO Article PO Quantity Req+ ExcessCuttingCutting BalanceStitchingStitching BalanceEnd Line QCEnd Line QC BalanceFinishing ItemsFinishing Items BalanceA Grade ItemsReject Items In StoreCut.Cut Bal.Cut Recv.Cut okiCut Rej.Stit. InStit. OutStit. Wipsfinish Infinish Rej.finish QA APP.Rej. Store RcvdRej. Store WaitingPacked InPacked OutPacked StockShipped ScanShipped Net PO Status Generate PDF @@ -67,18 +86,25 @@ - - - - - - - - - - + + + + + + + + + + + + + + + + + + -

No PO found.

+
-
No Inventory Transactions found.
+
No Items found.