From 29ccd209f6480ecaa9d0684581c3e1198bd1d2fd Mon Sep 17 00:00:00 2001 From: "usama.jameel" Date: Thu, 22 May 2025 09:25:13 +0500 Subject: [PATCH] add line wise detail day target total machine --- .../auth/InventoryAccountRole.java | 14 +++++++ .../InventoryAccountController.java | 5 +-- .../dao/ctp/FinishedItemDAO.java | 2 +- .../dao/ctp/InventoryAccountDAO.java | 24 ++++++++++- .../dao/ctp/InventoryAccountRowMapper.java | 4 ++ .../dao/ctp/InventoryTransactionLegDAO.java | 2 +- .../dao/ctp/PackagingItemsDAO.java | 2 +- .../dao/ctp/StitchingOfflineItemDAO.java | 4 +- .../com/utopiaindustries/model/Roles.java | 3 +- .../model/ctp/InventoryAccount.java | 40 ++++++++++++++++++ .../service/DashboardService.java | 41 ++++++++++--------- src/main/resources/templates/_fragments.html | 9 ++++ .../_inventory-account-fragment.html | 16 ++++++++ src/main/resources/templates/dashboard.html | 2 +- 14 files changed, 138 insertions(+), 30 deletions(-) create mode 100644 src/main/java/com/utopiaindustries/auth/InventoryAccountRole.java diff --git a/src/main/java/com/utopiaindustries/auth/InventoryAccountRole.java b/src/main/java/com/utopiaindustries/auth/InventoryAccountRole.java new file mode 100644 index 0000000..bb55e8f --- /dev/null +++ b/src/main/java/com/utopiaindustries/auth/InventoryAccountRole.java @@ -0,0 +1,14 @@ +package com.utopiaindustries.auth; + +import org.springframework.security.access.prepost.PreAuthorize; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD, ElementType.TYPE}) +@PreAuthorize("hasAnyRole('ROLE_INVENTORY_ACCOUNT','ROLE_ADMIN')") +public @interface InventoryAccountRole { +} diff --git a/src/main/java/com/utopiaindustries/controller/InventoryAccountController.java b/src/main/java/com/utopiaindustries/controller/InventoryAccountController.java index 30f0400..6f3057d 100644 --- a/src/main/java/com/utopiaindustries/controller/InventoryAccountController.java +++ b/src/main/java/com/utopiaindustries/controller/InventoryAccountController.java @@ -1,16 +1,15 @@ package com.utopiaindustries.controller; -import com.utopiaindustries.auth.AdminRole; +import com.utopiaindustries.auth.InventoryAccountRole; import com.utopiaindustries.model.ctp.InventoryAccount; import com.utopiaindustries.service.InventoryAccountService; -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; @Controller -@AdminRole +@InventoryAccountRole @RequestMapping( "/inventory-accounts" ) public class InventoryAccountController { diff --git a/src/main/java/com/utopiaindustries/dao/ctp/FinishedItemDAO.java b/src/main/java/com/utopiaindustries/dao/ctp/FinishedItemDAO.java index 3977c18..172f042 100644 --- a/src/main/java/com/utopiaindustries/dao/ctp/FinishedItemDAO.java +++ b/src/main/java/com/utopiaindustries/dao/ctp/FinishedItemDAO.java @@ -196,7 +196,7 @@ public class FinishedItemDAO { return namedParameterJdbcTemplate.query(SELECT_BY_JOB_CARD_AND_DATE, params, new FinishedItemRowMapper()); } - public Long findByOperationDoneDate(String startDate, String endDate, String qaStatus, List ids){ + public Long findByOperationDoneDateAndIdsAndQaStatus(String startDate, String endDate, String qaStatus, List ids){ MapSqlParameterSource params = new MapSqlParameterSource(); params.addValue( "start_date", startDate ); params.addValue( "end_date", endDate ); diff --git a/src/main/java/com/utopiaindustries/dao/ctp/InventoryAccountDAO.java b/src/main/java/com/utopiaindustries/dao/ctp/InventoryAccountDAO.java index 1719428..fe10062 100644 --- a/src/main/java/com/utopiaindustries/dao/ctp/InventoryAccountDAO.java +++ b/src/main/java/com/utopiaindustries/dao/ctp/InventoryAccountDAO.java @@ -20,7 +20,25 @@ public class InventoryAccountDAO { private final String SELECT_QUERY = String.format( "SELECT * FROM %s WHERE id = :id", TABLE_NAME ); private final String SELECT_ALL_QUERY = String.format( "SELECT * FROM %s ORDER BY title DESC", TABLE_NAME ); private final String DELETE_QUERY = String.format( "DELETE FROM %s WHERE id = :id", TABLE_NAME ); - private final String INSERT_QUERY = String.format( "INSERT INTO %s (id, title, parent_entity_type, parent_entity_id, active, created_by, created_at, location_site_id, notes, is_packaging) VALUES (:id, :title, :parent_entity_type, :parent_entity_id, :active, :created_by, :created_at, :location_site_id, :notes, :is_packaging) ON DUPLICATE KEY UPDATE title = VALUES(title), parent_entity_type = VALUES(parent_entity_type), parent_entity_id = VALUES(parent_entity_id), active = VALUES(active), created_by = VALUES(created_by), created_at = VALUES(created_at), location_site_id = VALUES(location_site_id), notes = VALUES(notes), is_packaging = VALUES(is_packaging)", TABLE_NAME ); + private final String INSERT_QUERY = String.format( + "INSERT INTO %s (id, title, parent_entity_type, parent_entity_id, active, created_by, created_at, location_site_id, notes, is_packaging, article_name, daily_target, total_machines, hourly_target) " + + "VALUES (:id, :title, :parent_entity_type, :parent_entity_id, :active, :created_by, :created_at, :location_site_id, :notes, :is_packaging, :article_name, :daily_target, :total_machines, :hourly_target) " + + "ON DUPLICATE KEY UPDATE " + + "title = VALUES(title), " + + "parent_entity_type = VALUES(parent_entity_type), " + + "parent_entity_id = VALUES(parent_entity_id), " + + "active = VALUES(active), " + + "created_by = VALUES(created_by), " + + "created_at = VALUES(created_at), " + + "location_site_id = VALUES(location_site_id), " + + "notes = VALUES(notes), " + + "is_packaging = VALUES(is_packaging), " + + "article_name = VALUES(article_name), " + + "daily_target = VALUES(daily_target), " + + "hourly_target = VALUES(hourly_target), " + + "total_machines = VALUES(total_machines)", + TABLE_NAME + ); private final String SELECT_BY_IDS = String.format( "SELECT * FROM %s WHERE id IN (:ids)", TABLE_NAME ); private final String SELECT_BY_IDS_AND_PARENT_ID = String.format( "SELECT * FROM %s WHERE active = TRUE AND id IN (:ids) AND parent_entity_id = :parent_entity_id", TABLE_NAME ); private final String SELECT_BY_IDS_AND_PARENT_IDS = String.format( "SELECT * FROM %s WHERE active = TRUE AND id IN (:ids) AND parent_entity_id IN (:parent_entity_ids)", TABLE_NAME ); @@ -45,6 +63,10 @@ public class InventoryAccountDAO { .addValue( "created_at", inventoryAccount.getCreatedAt() ) .addValue( "location_site_id", inventoryAccount.getLocationSiteId() ) .addValue( "notes", inventoryAccount.getNotes() ) + .addValue( "article_name", inventoryAccount.getArticleName() ) + .addValue( "total_machines", inventoryAccount.getTotalMachines() ) + .addValue( "daily_target", inventoryAccount.getDailyTarget() ) + .addValue( "hourly_target", inventoryAccount.getHourlyTarget() ) .addValue("is_packaging", inventoryAccount.getIsPackaging() ); return params; } diff --git a/src/main/java/com/utopiaindustries/dao/ctp/InventoryAccountRowMapper.java b/src/main/java/com/utopiaindustries/dao/ctp/InventoryAccountRowMapper.java index 1442d83..12930e5 100644 --- a/src/main/java/com/utopiaindustries/dao/ctp/InventoryAccountRowMapper.java +++ b/src/main/java/com/utopiaindustries/dao/ctp/InventoryAccountRowMapper.java @@ -20,6 +20,10 @@ public class InventoryAccountRowMapper implements RowMapper { } inventoryAccount.setLocationSiteId( rs.getInt( "location_site_id" ) ); inventoryAccount.setNotes( rs.getString( "notes" ) ); + inventoryAccount.setArticleName( rs.getString( "article_name" ) ); + inventoryAccount.setDailyTarget( rs.getLong( "daily_target" ) ); + inventoryAccount.setTotalMachines( rs.getLong( "total_machines" ) ); + inventoryAccount.setHourlyTarget( rs.getLong( "hourly_target" ) ); inventoryAccount.setIsPackaging( rs.getBoolean("is_packaging" ) ); return inventoryAccount; } diff --git a/src/main/java/com/utopiaindustries/dao/ctp/InventoryTransactionLegDAO.java b/src/main/java/com/utopiaindustries/dao/ctp/InventoryTransactionLegDAO.java index 6a5d757..839781d 100644 --- a/src/main/java/com/utopiaindustries/dao/ctp/InventoryTransactionLegDAO.java +++ b/src/main/java/com/utopiaindustries/dao/ctp/InventoryTransactionLegDAO.java @@ -221,7 +221,7 @@ public class InventoryTransactionLegDAO { return namedParameterJdbcTemplate.query( SELECT_JOB_CARD_And_Date_Type_Account_Id , params, new InventoryTransactionLegRowMapper() ); } - public List getParentIDsOFRemainingINVENTORY(String parentType, Integer accountId){ + public List findRemainingByParentTypeAndAccountID(String parentType, Integer accountId){ MapSqlParameterSource params = new MapSqlParameterSource(); params.addValue("account_id", accountId ); params.addValue("parent_document_type", parentType ); diff --git a/src/main/java/com/utopiaindustries/dao/ctp/PackagingItemsDAO.java b/src/main/java/com/utopiaindustries/dao/ctp/PackagingItemsDAO.java index 4d83629..8ddefbe 100644 --- a/src/main/java/com/utopiaindustries/dao/ctp/PackagingItemsDAO.java +++ b/src/main/java/com/utopiaindustries/dao/ctp/PackagingItemsDAO.java @@ -98,7 +98,7 @@ public class PackagingItemsDAO { return namedParameterJdbcTemplate.query(SELECT_BY_JOB_CARD_ID, params, new PackagingItemsRowMapper()); } - public Long findByDateANDIDs(String startDate, String endDate,List ids){ + public Long findByDateAndIds(String startDate, String endDate,List ids){ MapSqlParameterSource params = new MapSqlParameterSource(); params.addValue( "start_date", startDate ); params.addValue( "end_date", endDate ); diff --git a/src/main/java/com/utopiaindustries/dao/ctp/StitchingOfflineItemDAO.java b/src/main/java/com/utopiaindustries/dao/ctp/StitchingOfflineItemDAO.java index ff8b5f8..53c5d31 100644 --- a/src/main/java/com/utopiaindustries/dao/ctp/StitchingOfflineItemDAO.java +++ b/src/main/java/com/utopiaindustries/dao/ctp/StitchingOfflineItemDAO.java @@ -174,7 +174,7 @@ public class StitchingOfflineItemDAO { return namedParameterJdbcTemplate.query( SELECT_BY_JOB_CARD_AND_DATE , params, new StitchingOfflineItemRowMapper() ); } - public Long findByQCDoneDate(String startDate, String endDate, String qaStatus, List ids){ + public Long findByQCOperationDateAndIds(String startDate, String endDate, String qaStatus, List ids){ MapSqlParameterSource params = new MapSqlParameterSource(); params.addValue( "start_date", startDate ); params.addValue( "end_date", endDate ); @@ -183,7 +183,7 @@ public class StitchingOfflineItemDAO { Long count = namedParameterJdbcTemplate.queryForObject(SELECT_BY_DATE_QA_STATUS, params, Long.class); return count != null ? count : 0; } - public Long findByQCDoneDateApproved(String startDate, String endDate, String qaStatus){ + public Long findByQCOperationDateAndApproved(String startDate, String endDate, String qaStatus){ MapSqlParameterSource params = new MapSqlParameterSource(); params.addValue( "start_date", startDate ); params.addValue( "end_date", endDate ); diff --git a/src/main/java/com/utopiaindustries/model/Roles.java b/src/main/java/com/utopiaindustries/model/Roles.java index 7a8abbd..864dca6 100644 --- a/src/main/java/com/utopiaindustries/model/Roles.java +++ b/src/main/java/com/utopiaindustries/model/Roles.java @@ -10,5 +10,6 @@ public enum Roles { ROLE_FINISHING, ROLE_PACKAGING, ROLE_REPORTING, - ROLE_PURCHASE_ORDER + ROLE_PURCHASE_ORDER, + ROLE_INVENTORY_ACCOUNT } diff --git a/src/main/java/com/utopiaindustries/model/ctp/InventoryAccount.java b/src/main/java/com/utopiaindustries/model/ctp/InventoryAccount.java index 5b3ff7e..7f13cb7 100644 --- a/src/main/java/com/utopiaindustries/model/ctp/InventoryAccount.java +++ b/src/main/java/com/utopiaindustries/model/ctp/InventoryAccount.java @@ -14,6 +14,11 @@ public class InventoryAccount { private Integer locationSiteId; private String notes; private Boolean isPackaging; + private String articleName; + private long dailyTarget; + private long totalMachines; + private long hourlyTarget; + //wrapper private String locationTitle; @@ -105,6 +110,37 @@ public class InventoryAccount { this.locationTitle = locationTitle; } + public String getArticleName() { + return articleName; + } + + public void setArticleName(String articleName) { + this.articleName = articleName; + } + + public long getDailyTarget() { + return dailyTarget; + } + + public void setDailyTarget(long dailyTarget) { + this.dailyTarget = dailyTarget; + } + + public long getTotalMachines() { + return totalMachines; + } + + public void setTotalMachines(long totalMachines) { + this.totalMachines = totalMachines; + } + + public long getHourlyTarget() { + return hourlyTarget; + } + + public void setHourlyTarget(long hourlyTarget) { + this.hourlyTarget = hourlyTarget; + } @Override public String toString() { @@ -119,6 +155,10 @@ public class InventoryAccount { ", locationSiteId=" + locationSiteId + ", notes='" + notes + '\'' + ", isPackaging=" + isPackaging + + ", articleName='" + articleName + '\'' + + ", dailyTarget=" + dailyTarget + + ", totalMachines=" + totalMachines + + ", hourlyTarget=" + hourlyTarget + ", locationTitle='" + locationTitle + '\'' + '}'; } diff --git a/src/main/java/com/utopiaindustries/service/DashboardService.java b/src/main/java/com/utopiaindustries/service/DashboardService.java index 62b6eee..4a54793 100644 --- a/src/main/java/com/utopiaindustries/service/DashboardService.java +++ b/src/main/java/com/utopiaindustries/service/DashboardService.java @@ -47,6 +47,9 @@ public class DashboardService { List inventoryAccounts = inventoryAccountDAO.findAll(); + InventoryAccount inventoryAccount = inventoryAccounts.stream() + .filter(e -> cuttingAccount.equals(e.getTitle())).findFirst().orElse(new InventoryAccount()); + Map inventoryAccountMap = inventoryAccounts.stream() .filter(e -> cuttingAccount.equals(e.getTitle()) || stitchingAccount.equals(e.getTitle()) || @@ -55,16 +58,17 @@ public class DashboardService { .collect(Collectors.toMap(InventoryAccount::getTitle, e -> (int) e.getId())); - List stitchingItemIds = inventoryTransactionLegDAO.getParentIDsOFRemainingINVENTORY("STITCHING_OFFLINE", inventoryAccountMap.get(stitchingAccount)); + List stitchingItemIds = inventoryTransactionLegDAO.findRemainingByParentTypeAndAccountID("STITCHING_OFFLINE", inventoryAccountMap.get(stitchingAccount)); + List finishing = inventoryTransactionLegDAO.getInParentIdIdByDate("FINISHED_ITEM", inventoryAccountMap.get(finishingAccount)); - List packagingItemIDs = inventoryTransactionLegDAO.getParentIDsOFRemainingINVENTORY("PACKAGING", inventoryAccountMap.get(packagingAccount)); + List packagingItemIDs = inventoryTransactionLegDAO.findRemainingByParentTypeAndAccountID("PACKAGING", inventoryAccountMap.get(packagingAccount)); Long approvedStitchingOfflineItems = 0L; Long qcReject = 0L; if (stitchingItemIds != null && !stitchingItemIds.isEmpty()) { - approvedStitchingOfflineItems = stitchingOfflineItemDAO.findByQCDoneDateApproved(startDate1, endDate1, "APPROVED"); - qcReject = stitchingOfflineItemDAO.findByQCDoneDate(null, endDate1, "REJECT", stitchingItemIds); + approvedStitchingOfflineItems = stitchingOfflineItemDAO.findByQCOperationDateAndApproved(startDate1, endDate1, "APPROVED"); + qcReject = stitchingOfflineItemDAO.findByQCOperationDateAndIds(null, endDate1, "REJECT", stitchingItemIds); } Long alterationPieceFinish = 0L; @@ -74,19 +78,19 @@ public class DashboardService { Long operationNotPerformed = 0L; if (finishing != null && !finishing.isEmpty()) { - approved = finishedItemDAO.findByOperationDoneDate(startDate1, endDate1, "APPROVED", finishing); - operationNotPerformed = finishedItemDAO.findByOperationDoneDate(null, endDate1, "-", finishing); - rejectFinishedItem = finishedItemDAO.findByOperationDoneDate(null, endDate1, "REJECT", finishing); - washFinishedItem = finishedItemDAO.findByOperationDoneDate(startDate1, endDate1, "WASHED", finishing); - alterationPieceFinish = finishedItemDAO.findByOperationDoneDate(null, endDate1, "ALTER", finishing); + approved = finishedItemDAO.findByOperationDoneDateAndIdsAndQaStatus(startDate1, endDate1, "APPROVED", finishing); + operationNotPerformed = finishedItemDAO.findByOperationDoneDateAndIdsAndQaStatus(null, endDate1, "-", finishing); + rejectFinishedItem = finishedItemDAO.findByOperationDoneDateAndIdsAndQaStatus(null, endDate1, "REJECT", finishing); + washFinishedItem = finishedItemDAO.findByOperationDoneDateAndIdsAndQaStatus(startDate1, endDate1, "WASHED", finishing); + alterationPieceFinish = finishedItemDAO.findByOperationDoneDateAndIdsAndQaStatus(null, endDate1, "ALTER", finishing); } Long packagingItems = 0L; Long packagingItemsHourly = 0L; if (packagingItemIDs != null && !packagingItemIDs.isEmpty()) { - packagingItems = packagingItemsDAO.findByDateANDIDs(startDate1, endDate1, packagingItemIDs); - packagingItemsHourly = packagingItemsDAO.findByDateANDIDs(startDateWithHour, endDateWithHour, packagingItemIDs); + packagingItems = packagingItemsDAO.findByDateAndIds(startDate1, endDate1, packagingItemIDs); + packagingItemsHourly = packagingItemsDAO.findByDateAndIds(startDateWithHour, endDateWithHour, packagingItemIDs); } progress.put("Stitching", (float) approvedStitchingOfflineItems + qcReject); @@ -100,8 +104,8 @@ public class DashboardService { progress.put("packaging", (float) packagingItems); progress.put("Shift Achieved", (float) packagingItems); - progress.put("Efficiency", (float) packagingItems / 1000 * 100); progress.put("Hourly Achieved", Float.valueOf(packagingItemsHourly)); + progress.put("Efficiency", (float) packagingItems / inventoryAccount.getDailyTarget() * 100); return progress; @@ -110,17 +114,16 @@ public class DashboardService { public Map getLineDetails(String lineNo) { String cuttingAccount = "CUTTING ACCOUNT " + lineNo; List inventoryAccounts = inventoryAccountDAO.findAll(); - String articleNote = inventoryAccounts.stream() - .filter(e -> cuttingAccount.equals(e.getTitle())) - .map(InventoryAccount::getNotes).findFirst().orElse(null); + InventoryAccount inventoryAccount = inventoryAccounts.stream() + .filter(e -> cuttingAccount.equals(e.getTitle())).findFirst().orElse(new InventoryAccount()); HashMap details = new HashMap<>(); List jobCards = jobCardDAO.findAll(); - details.put("Shift Target", 1000 + " Pcs"); - details.put("articleNote", articleNote); - details.put("Hourly Target", 1000 / 24 + " Pcs"); + details.put("Shift Target", inventoryAccount.getDailyTarget() + " Pcs"); + details.put("articleName", inventoryAccount.getArticleName()); + details.put("Hourly Target", inventoryAccount.getHourlyTarget() + " Pcs"); details.put("Total Induction", String.valueOf(jobCards.size())); - details.put("Total Machine", String.valueOf(30)); + details.put("Total Machine", String.valueOf(inventoryAccount.getTotalMachines())); details.put("Total Worker", String.valueOf(30)); details.put("line", "Line " + lineNo); return details; diff --git a/src/main/resources/templates/_fragments.html b/src/main/resources/templates/_fragments.html index f6924ac..3ffc86f 100644 --- a/src/main/resources/templates/_fragments.html +++ b/src/main/resources/templates/_fragments.html @@ -94,6 +94,15 @@ class="dropdown-item">User And Roles + +
+ + +
+
+ + +
+
+ + +
+
+ + +
diff --git a/src/main/resources/templates/dashboard.html b/src/main/resources/templates/dashboard.html index f671d71..35075f4 100644 --- a/src/main/resources/templates/dashboard.html +++ b/src/main/resources/templates/dashboard.html @@ -28,7 +28,7 @@

0

-

+

0