diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml index 3d7f0db..b9acfd0 100644 --- a/.idea/jarRepositories.xml +++ b/.idea/jarRepositories.xml @@ -31,5 +31,10 @@ + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 42e3abe..67e1e61 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,3 +1,4 @@ + diff --git a/src/main/java/com/utopiaindustries/config/SecurityConfiguration.java b/src/main/java/com/utopiaindustries/config/SecurityConfiguration.java index 47ecd70..2f0f136 100644 --- a/src/main/java/com/utopiaindustries/config/SecurityConfiguration.java +++ b/src/main/java/com/utopiaindustries/config/SecurityConfiguration.java @@ -42,7 +42,7 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter { protected void configure(HttpSecurity http) throws Exception { http.csrf().disable() .authorizeRequests() - .antMatchers("/login", "/rest/**") + .antMatchers("/login", "/rest/**","/dashboard/**") .permitAll() .antMatchers("/**") .hasAnyRole("USER", "ADMIN") diff --git a/src/main/java/com/utopiaindustries/controller/DashboardController.java b/src/main/java/com/utopiaindustries/controller/DashboardController.java new file mode 100644 index 0000000..3ed49d3 --- /dev/null +++ b/src/main/java/com/utopiaindustries/controller/DashboardController.java @@ -0,0 +1,32 @@ +package com.utopiaindustries.controller; + +import com.utopiaindustries.service.DashboardService; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.ui.Model; + +import java.time.LocalDate; + +@Controller +@RequestMapping("/dashboard") +public class DashboardController { + + private final DashboardService dashboardService; + + public DashboardController(DashboardService dashboardService) { + this.dashboardService = dashboardService; + } + + @GetMapping("/{lineNumber}") + public String getDashboard(@PathVariable("lineNumber") String lineNumber, Model model) { + model.addAttribute("refresh", true); + model.addAttribute("phases", dashboardService.getPhasesProgressDayWise(lineNumber)); + model.addAttribute("date", LocalDate.now()); + model.addAttribute("day", LocalDate.now().getDayOfWeek()); + model.addAttribute("detail", dashboardService.getLineDetails(lineNumber) ); + + return "dashboard"; + } +} diff --git a/src/main/java/com/utopiaindustries/controller/PurchaseOrderCTPController.java b/src/main/java/com/utopiaindustries/controller/PurchaseOrderCTPController.java index a5ddee9..6656c04 100644 --- a/src/main/java/com/utopiaindustries/controller/PurchaseOrderCTPController.java +++ b/src/main/java/com/utopiaindustries/controller/PurchaseOrderCTPController.java @@ -2,13 +2,13 @@ package com.utopiaindustries.controller; import com.utopiaindustries.auth.PurchaseOrderCTPRole; import com.utopiaindustries.model.ctp.JobCard; +import com.utopiaindustries.model.ctp.PurchaseOrderCTP; import com.utopiaindustries.service.PurchaseOrderCTPService; import com.utopiaindustries.util.StringUtils; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; import java.time.LocalDate; import java.util.List; @@ -37,7 +37,7 @@ public class PurchaseOrderCTPController { model.addAttribute("purchaseOrder", purchaseOrderCTPService.getAllPurchaseOrderCtp(purchaseOrderCode, articleName, startDate.toString(), endDate.toString(), limit) ); model.addAttribute("startDate", startDate); model.addAttribute("endDate", endDate); - return "job-card-list"; + return "/purchaseOrder/purchase-order-list"; } @GetMapping( "/new" ) @@ -45,4 +45,46 @@ public class PurchaseOrderCTPController { model.addAttribute("purchaseOrder", purchaseOrderCTPService.createNewPurchaseOrderCTP() ); return "/purchaseOrder/purchase-order-form"; } + + @GetMapping( value = "/edit/{id}" ) + public String showJobCardEditForm( @PathVariable("id") long id, + Model model ){ + model.addAttribute("purchaseOrder", purchaseOrderCTPService.searchPurchaseOrderById( id ) ); + return "/purchaseOrder/purchase-order-form"; + } + + /* + * draft + * */ + @PostMapping( value ="/edit" , params = "user=draft" ) + public String saveJobCard( @ModelAttribute PurchaseOrderCTP purchaseOrderCTP, + RedirectAttributes redirectAttributes, + Model model ){ + try { + purchaseOrderCTP.setStatus( PurchaseOrderCTP.Status.DRAFT.name() ); + purchaseOrderCTPService.save( purchaseOrderCTP ); + redirectAttributes.addFlashAttribute("success", "Successfully saved!" ); + } catch ( Exception ex ){ + redirectAttributes.addFlashAttribute("error", ex.getMessage() ); + } + return "redirect:/purchase-order"; + } + + @PostMapping( value ="/edit" , params = "user=post" ) + public String postJobCard( @ModelAttribute PurchaseOrderCTP purchaseOrderCTP, + RedirectAttributes redirectAttributes, + Model model ){ + + try { + purchaseOrderCTP.setStatus( PurchaseOrderCTP.Status.POSTED.name() ); + purchaseOrderCTPService.save( purchaseOrderCTP ); + redirectAttributes.addFlashAttribute("success", "Successfully saved!" ); + } catch ( Exception ex ){ + redirectAttributes.addFlashAttribute("error", ex.getMessage() ); + } + return "redirect:/purchase-order"; + } + + + } diff --git a/src/main/java/com/utopiaindustries/dao/ctp/FinishedItemDAO.java b/src/main/java/com/utopiaindustries/dao/ctp/FinishedItemDAO.java index 81a022c..3977c18 100644 --- a/src/main/java/com/utopiaindustries/dao/ctp/FinishedItemDAO.java +++ b/src/main/java/com/utopiaindustries/dao/ctp/FinishedItemDAO.java @@ -1,7 +1,6 @@ package com.utopiaindustries.dao.ctp; import com.utopiaindustries.model.ctp.FinishedItem; -import com.utopiaindustries.model.ctp.JobCard; import com.utopiaindustries.model.ctp.StitchingOfflineItem; import com.utopiaindustries.util.KeyHolderFunctions; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; @@ -25,7 +24,7 @@ public class FinishedItemDAO { private final String SELECT_QUERY_BY_BARCODE_QA_STATUS = String.format("SELECT case when EXISTS ( SELECT * FROM %s WHERE barcode = :barcode AND (qa_status = 'APPROVED' OR qa_status = 'WASHED') ) then true else false End as Result", TABLE_NAME); private final String SELECT_QUERY_BY_JOB_CARD = String.format("SELECT * FROM %s WHERE job_card_id = :job_card_id", 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, item_id, sku, barcode, created_at, created_by, job_card_id, is_qa, stitched_item_id, is_segregated, qa_status, is_packed) VALUES (:id, :item_id, :sku, :barcode, :created_at, :created_by, :job_card_id, :is_qa, :stitched_item_id, :is_segregated, :qa_status, :is_packed) ON DUPLICATE KEY UPDATE item_id = VALUES(item_id), sku = VALUES(sku), barcode = VALUES(barcode), created_at = VALUES(created_at), created_by = VALUES(created_by), job_card_id = VALUES(job_card_id), is_qa = VALUES(is_qa), stitched_item_id = VALUES(stitched_item_id), is_segregated = VALUES(is_segregated), qa_status = VALUES(qa_status), is_packed = VALUES(is_packed)", TABLE_NAME); + private final String INSERT_QUERY = String.format("INSERT INTO %s (id, item_id, sku, barcode, created_at, created_by, job_card_id, is_qa, stitched_item_id, is_segregated, qa_status, is_packed, operation_date) VALUES (:id, :item_id, :sku, :barcode, :created_at, :created_by, :job_card_id, :is_qa, :stitched_item_id, :is_segregated, :qa_status, :is_packed, :operation_date) ON DUPLICATE KEY UPDATE item_id = VALUES(item_id), sku = VALUES(sku), barcode = VALUES(barcode), created_at = VALUES(created_at), created_by = VALUES(created_by), job_card_id = VALUES(job_card_id), is_qa = VALUES(is_qa), stitched_item_id = VALUES(stitched_item_id), is_segregated = VALUES(is_segregated), qa_status = VALUES(qa_status), is_packed = VALUES(is_packed), operation_date = VALUES(operation_date) ", TABLE_NAME); private final String SELECT_BY_LIMIT = String.format("SELECT * FROM %s ORDER BY id DESC LIMIT :limit", TABLE_NAME); private final String SELECT_BY_IDS = String.format("SELECT * FROM %s WHERE id IN (:ids)", TABLE_NAME); private final String FIND_TOTAL_COUNT = String.format("SELECT COUNT(*) FROM %s where job_card_id = :job_card_id And item_id = :item_id", TABLE_NAME); @@ -35,6 +34,7 @@ public class FinishedItemDAO { private final String SELECT_BY_STITCHED_ITEM_IDS = String.format("SELECT * FROM %s WHERE stitched_item_id IN (:stitched_item_ids)", TABLE_NAME); private final String COUNT_TOTAL_FINISH_ITEM = String.format("SELECT COUNT(*) FROM %s WHERE job_card_id = :job_card_id AND is_segregated IS TRUE ", TABLE_NAME); private final String SELECT_BY_JOB_CARD_AND_DATE = String.format("SELECT * FROM %s WHERE job_card_id = :job_card_id AND (:start_date IS NULL OR :end_date IS NULL OR created_at BETWEEN :start_date AND :end_date)", TABLE_NAME); + private final String SELECT_BY_DATE_QA_STATUS = String.format( "SELECT COUNT(*) FROM %s WHERE (:start_date IS NULL OR operation_date >= :start_date) AND operation_date <= :end_date AND qa_status = :qa_status AND id in (:ids) AND is_packed = FALSE", TABLE_NAME ); public FinishedItemDAO(NamedParameterJdbcTemplate namedParameterJdbcTemplate) { this.namedParameterJdbcTemplate = namedParameterJdbcTemplate; @@ -54,7 +54,8 @@ public class FinishedItemDAO { .addValue("stitched_item_id", finishedItem.getStitchedItemId()) .addValue("is_segregated", finishedItem.getIsSegregated()) .addValue("qa_status", finishedItem.getQaStatus()) - .addValue("is_packed", finishedItem.isPackaging()); + .addValue("is_packed", finishedItem.isPackaging()) + .addValue("operation_date", finishedItem.getOperationDate()); return params; } @@ -195,4 +196,14 @@ 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){ + MapSqlParameterSource params = new MapSqlParameterSource(); + params.addValue( "start_date", startDate ); + params.addValue( "end_date", endDate ); + params.addValue( "qa_status", qaStatus ); + params.addValue( "ids", ids ); + Long count = namedParameterJdbcTemplate.queryForObject(SELECT_BY_DATE_QA_STATUS, params, Long.class); + return count != null ? count : 0; + } + } \ No newline at end of file diff --git a/src/main/java/com/utopiaindustries/dao/ctp/FinishedItemRowMapper.java b/src/main/java/com/utopiaindustries/dao/ctp/FinishedItemRowMapper.java index 0dc7cab..a472742 100644 --- a/src/main/java/com/utopiaindustries/dao/ctp/FinishedItemRowMapper.java +++ b/src/main/java/com/utopiaindustries/dao/ctp/FinishedItemRowMapper.java @@ -16,6 +16,9 @@ public class FinishedItemRowMapper implements RowMapper { if ( rs.getTimestamp( "created_at" ) != null ) { finishedItem.setCreatedAt( rs.getTimestamp( "created_at" ).toLocalDateTime() ); } + if ( rs.getTimestamp( "operation_date" ) != null ) { + finishedItem.setOperationDate( rs.getTimestamp( "operation_date" ).toLocalDateTime() ); + } finishedItem.setCreatedBy( rs.getString( "created_by" ) ); finishedItem.setJobCardId( rs.getLong("job_card_id") ); finishedItem.setIsQa( rs.getBoolean("is_qa")); diff --git a/src/main/java/com/utopiaindustries/dao/ctp/InventoryTransactionLegDAO.java b/src/main/java/com/utopiaindustries/dao/ctp/InventoryTransactionLegDAO.java index 3ec92a8..6a5d757 100644 --- a/src/main/java/com/utopiaindustries/dao/ctp/InventoryTransactionLegDAO.java +++ b/src/main/java/com/utopiaindustries/dao/ctp/InventoryTransactionLegDAO.java @@ -48,6 +48,8 @@ public class InventoryTransactionLegDAO { private final String COUNT_TOTAL_SEGREGATE_ITEMS = String.format("SELECT COUNT(*) FROM %s WHERE parent_document_id IN (:parent_document_id) AND account_id = :account_id", TABLE_NAME); private final String SELECT_FIRST_TRANSACTION_PARENT_TYPE_PARENT_ID = String.format("SELECT * FROM %s WHERE parent_document_id IN (:parent_document_id) AND parent_document_type = :parent_document_type ORDER BY transaction_leg_datetime ASC LIMIT 1", TABLE_NAME); private final String SELECT_GROUP_By_TRANSACTION_PARENT_TYPE_PARENT_ID = String.format("SELECT * FROM %s WHERE parent_document_id IN (:parent_document_id) AND parent_document_type = :parent_document_type GROUP BY account_id", TABLE_NAME); + private final String SELECT_TRANSACTIONS_REMAINING = String.format("SELECT parent_document_id as parentIds FROM %s WHERE account_id = :account_id AND parent_document_type = :parent_document_type AND type = 'IN' AND parent_document_id NOT IN (SELECT parent_document_id FROM %s WHERE account_id = :account_id AND parent_document_type = :parent_document_type AND type = 'OUT')", TABLE_NAME, TABLE_NAME); + private final String SELECT_PARENT_ID_BY_TYPE_GROUP = String.format("SELECT parent_document_id as parentIds FROM %s WHERE account_id = :account_id AND parent_document_type = :parent_document_type AND type = 'IN' GROUP BY parent_document_id", TABLE_NAME); private final String SELECT_JOB_CARD_DATES = String.format("SELECT * FROM %s WHERE job_card_id = :job_card_id AND (:start_date IS NULL OR :end_date IS NULL OR transaction_leg_datetime BETWEEN :start_date AND :end_date) AND type = :type ", TABLE_NAME); private final String SELECT_JOB_CARD_And_Date_Type_Account_Id = String.format("SELECT * FROM %s WHERE job_card_id = :job_card_id AND (:start_date IS NULL OR :end_date IS NULL OR transaction_leg_datetime BETWEEN :start_date AND :end_date) AND type = :type AND account_id IN (:account_ids)", TABLE_NAME); @@ -218,4 +220,18 @@ public class InventoryTransactionLegDAO { params.addValue("account_ids", accountId ); return namedParameterJdbcTemplate.query( SELECT_JOB_CARD_And_Date_Type_Account_Id , params, new InventoryTransactionLegRowMapper() ); } + + public List getParentIDsOFRemainingINVENTORY(String parentType, Integer accountId){ + MapSqlParameterSource params = new MapSqlParameterSource(); + params.addValue("account_id", accountId ); + params.addValue("parent_document_type", parentType ); + return namedParameterJdbcTemplate.queryForList( SELECT_TRANSACTIONS_REMAINING , params, Long.class ); + } + + public List getInParentIdIdByDate(String parentType, Integer accountId){ + MapSqlParameterSource params = new MapSqlParameterSource(); + params.addValue("account_id", accountId ); + params.addValue("parent_document_type", parentType ); + return namedParameterJdbcTemplate.queryForList( SELECT_PARENT_ID_BY_TYPE_GROUP , params, Long.class ); + } } \ No newline at end of file diff --git a/src/main/java/com/utopiaindustries/dao/ctp/PackagingItemsDAO.java b/src/main/java/com/utopiaindustries/dao/ctp/PackagingItemsDAO.java index bdded8e..4d83629 100644 --- a/src/main/java/com/utopiaindustries/dao/ctp/PackagingItemsDAO.java +++ b/src/main/java/com/utopiaindustries/dao/ctp/PackagingItemsDAO.java @@ -1,5 +1,6 @@ package com.utopiaindustries.dao.ctp; +import com.utopiaindustries.model.ctp.FinishedItem; import com.utopiaindustries.model.ctp.PackagingItems; import com.utopiaindustries.util.KeyHolderFunctions; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; @@ -38,6 +39,7 @@ public class PackagingItemsDAO { "qa_status = VALUES(qa_status), bundle_id = VALUES(bundle_id), account_title = VALUES(account_title)", TABLE_NAME ); + private final String SELECT_BY_DATE_AND_IDs = String.format( "SELECT COUNT(*) FROM %s WHERE (:start_date IS NULL OR created_at >=:start_date) AND created_at <= :end_date AND id IN (:ids)", TABLE_NAME ); public PackagingItemsDAO(NamedParameterJdbcTemplate namedParameterJdbcTemplate) { this.namedParameterJdbcTemplate = namedParameterJdbcTemplate; @@ -96,5 +98,13 @@ public class PackagingItemsDAO { return namedParameterJdbcTemplate.query(SELECT_BY_JOB_CARD_ID, params, new PackagingItemsRowMapper()); } + public Long findByDateANDIDs(String startDate, String endDate,List ids){ + MapSqlParameterSource params = new MapSqlParameterSource(); + params.addValue( "start_date", startDate ); + params.addValue( "end_date", endDate ); + params.addValue( "ids", ids ); + Long count = namedParameterJdbcTemplate.queryForObject(SELECT_BY_DATE_AND_IDs, params, Long.class); + return count != null ? count : 0; + } } diff --git a/src/main/java/com/utopiaindustries/dao/ctp/PurchaseOrderCTPDao.java b/src/main/java/com/utopiaindustries/dao/ctp/PurchaseOrderCTPDao.java index 2e230a4..686aaef 100644 --- a/src/main/java/com/utopiaindustries/dao/ctp/PurchaseOrderCTPDao.java +++ b/src/main/java/com/utopiaindustries/dao/ctp/PurchaseOrderCTPDao.java @@ -1,7 +1,9 @@ package com.utopiaindustries.dao.ctp; +import com.utopiaindustries.dao.uind.PurchaseOrderRowMapper; import com.utopiaindustries.model.ctp.JobCard; import com.utopiaindustries.model.ctp.PurchaseOrderCTP; +import com.utopiaindustries.model.uind.PurchaseOrder; import com.utopiaindustries.util.KeyHolderFunctions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; @@ -36,6 +38,7 @@ public class PurchaseOrderCTPDao { "status = VALUES(status)", TABLE_NAME); private final String SELECT_BY_LIMIT = String.format( "SELECT * FROM %s WHERE created_by = :created_by ORDER BY id ASC limit :limit", TABLE_NAME ); + private final String SELECT_BY_TERM = String.format( "SELECT * FROM %s WHERE purchase_order_code LIKE :term limit 100 offset 0", TABLE_NAME ); // prepare query params @@ -109,4 +112,13 @@ public class PurchaseOrderCTPDao { params.addValue("limit", limit.intValue()); return namedParameterJdbcTemplate.query( SELECT_ALL_QUERY_WITH_LIMIT, params, new PurchaseOrderCTPRowMapper() ); } + + /* + * find by term + * */ + public List findByTerm(String term ){ + MapSqlParameterSource params = new MapSqlParameterSource(); + params.addValue("term", "%" + term + "%" ); + return namedParameterJdbcTemplate.query( SELECT_BY_TERM, params, new PurchaseOrderCTPRowMapper() ); + } } diff --git a/src/main/java/com/utopiaindustries/dao/ctp/StitchingOfflineItemDAO.java b/src/main/java/com/utopiaindustries/dao/ctp/StitchingOfflineItemDAO.java index 89aac52..ff8b5f8 100644 --- a/src/main/java/com/utopiaindustries/dao/ctp/StitchingOfflineItemDAO.java +++ b/src/main/java/com/utopiaindustries/dao/ctp/StitchingOfflineItemDAO.java @@ -1,5 +1,6 @@ package com.utopiaindustries.dao.ctp; +import com.utopiaindustries.model.ctp.FinishedItem; import com.utopiaindustries.model.ctp.InventoryTransactionLeg; import com.utopiaindustries.model.ctp.StitchingOfflineItem; import com.utopiaindustries.util.KeyHolderFunctions; @@ -23,7 +24,7 @@ public class StitchingOfflineItemDAO { private final String SELECT_ALL_QUERY = String.format( "SELECT * FROM %s ORDER BY id DESC", TABLE_NAME ); private final String SELECT_QUERY_BY_JOB_CARD = String.format( "SELECT * FROM %s WHERE job_card_id = :job_card_id", 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, item_id, sku, barcode, created_at, created_by, job_card_id, is_qa, qa_remarks, qa_status,bundle_id) VALUES (:id, :item_id, :sku, :barcode, :created_at, :created_by, :job_card_id, :is_qa, :qa_remarks, :qa_status, :bundle_id) ON DUPLICATE KEY UPDATE item_id = VALUES(item_id), sku = VALUES(sku), barcode = VALUES(barcode), created_at = VALUES(created_at), created_by = VALUES(created_by), job_card_id = VALUES(job_card_id), is_qa = VALUES(is_qa), qa_remarks = VALUES(qa_remarks), qa_status = VALUES(qa_status), bundle_id = VALUES(bundle_id)", TABLE_NAME ); + private final String INSERT_QUERY = String.format( "INSERT INTO %s (id, item_id, sku, barcode, created_at, created_by, job_card_id, is_qa, qa_remarks, qa_status,bundle_id, qc_done_at) VALUES (:id, :item_id, :sku, :barcode, :created_at, :created_by, :job_card_id, :is_qa, :qa_remarks, :qa_status, :bundle_id, :qc_done_at) ON DUPLICATE KEY UPDATE item_id = VALUES(item_id), sku = VALUES(sku), barcode = VALUES(barcode), created_at = VALUES(created_at), created_by = VALUES(created_by), job_card_id = VALUES(job_card_id), is_qa = VALUES(is_qa), qa_remarks = VALUES(qa_remarks), qa_status = VALUES(qa_status), bundle_id = VALUES(bundle_id), qc_done_at = VALUES(qc_done_at)", TABLE_NAME ); private final String SELECT_BY_LIMIT = String.format("SELECT * FROM %s ORDER BY id DESC LIMIT :limit", TABLE_NAME ); private final String FIND_TOTAL_COUNT = String.format("SELECT COUNT(*) FROM %s where job_card_id = :job_card_id And item_id = :item_id", TABLE_NAME ); private final String SELECT_BY_IDS = String.format( "SELECT * FROM %s WHERE id IN (:ids)", TABLE_NAME ); @@ -32,6 +33,8 @@ public class StitchingOfflineItemDAO { private final String COUNT_TOTAL_QA_ITEMS= String.format("SELECT COUNT(*) FROM %s WHERE job_card_id = :job_card_id AND is_qa IS TRUE",TABLE_NAME); private final String SELECT_BY_TIME_AND_CARD_ID= String.format("SELECT * FROM %s WHERE job_card_id = :job_card_id ORDER BY created_at DESC LIMIT 1;",TABLE_NAME); private final String SELECT_BY_JOB_CARD_AND_DATE = String.format( "SELECT * FROM %s WHERE job_card_id = :job_card_id AND (:start_date IS NULL OR :end_date IS NULL OR created_at BETWEEN :start_date AND :end_date)", TABLE_NAME ); + private final String SELECT_BY_DATE_QA_STATUS = String.format( "SELECT COUNT(*) FROM %s WHERE (:start_date IS NULL OR qc_done_at >= :start_date) AND qc_done_at <= :end_date AND qa_status = :qa_status AND id IN (:ids)", TABLE_NAME ); + private final String SELECT_BY_DATE_QA_STATUS_APPROVED= String.format( "SELECT COUNT(*) FROM %s WHERE (:start_date IS NULL OR qc_done_at >= :start_date) AND qc_done_at <= :end_date AND qa_status = :qa_status", TABLE_NAME ); public StitchingOfflineItemDAO(NamedParameterJdbcTemplate namedParameterJdbcTemplate) { this.namedParameterJdbcTemplate = namedParameterJdbcTemplate; @@ -50,6 +53,7 @@ public class StitchingOfflineItemDAO { .addValue("job_card_id", stitchingOfflineItem.getJobCardId() ) .addValue("is_qa", stitchingOfflineItem.getIsQa() ) .addValue("qa_remarks", stitchingOfflineItem.getQaRemarks() ) + .addValue("qc_done_at", stitchingOfflineItem.getQcDoneAt() ) .addValue("qa_status", stitchingOfflineItem.getQaStatus() ); return params; } @@ -169,4 +173,22 @@ public class StitchingOfflineItemDAO { params.addValue( "end_date", endDate ); return namedParameterJdbcTemplate.query( SELECT_BY_JOB_CARD_AND_DATE , params, new StitchingOfflineItemRowMapper() ); } + + public Long findByQCDoneDate(String startDate, String endDate, String qaStatus, List ids){ + MapSqlParameterSource params = new MapSqlParameterSource(); + params.addValue( "start_date", startDate ); + params.addValue( "end_date", endDate ); + params.addValue( "qa_status", qaStatus ); + params.addValue( "ids", ids); + 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){ + MapSqlParameterSource params = new MapSqlParameterSource(); + params.addValue( "start_date", startDate ); + params.addValue( "end_date", endDate ); + params.addValue( "qa_status", qaStatus ); + Long count = namedParameterJdbcTemplate.queryForObject(SELECT_BY_DATE_QA_STATUS_APPROVED, params, Long.class); + return count != null ? count : 0; + } } diff --git a/src/main/java/com/utopiaindustries/dao/ctp/StitchingOfflineItemRowMapper.java b/src/main/java/com/utopiaindustries/dao/ctp/StitchingOfflineItemRowMapper.java index baf4c2a..895d178 100644 --- a/src/main/java/com/utopiaindustries/dao/ctp/StitchingOfflineItemRowMapper.java +++ b/src/main/java/com/utopiaindustries/dao/ctp/StitchingOfflineItemRowMapper.java @@ -19,6 +19,9 @@ public class StitchingOfflineItemRowMapper implements RowMapper findByTerm(@RequestParam("term") String term ) { return purchaseOrderService.findByTerm( term ); } + + /* + * search by term in ctp purchase order table + * */ + @GetMapping( "/ctp-po-search" ) + public List findByTermInCtpPurchaseOrderTable(@RequestParam("term") String term ) { + return purchaseOrderCTPService.findByTerm( term ); + } } diff --git a/src/main/java/com/utopiaindustries/service/DashboardService.java b/src/main/java/com/utopiaindustries/service/DashboardService.java new file mode 100644 index 0000000..62b6eee --- /dev/null +++ b/src/main/java/com/utopiaindustries/service/DashboardService.java @@ -0,0 +1,128 @@ +package com.utopiaindustries.service; + +import com.utopiaindustries.dao.ctp.*; +import com.utopiaindustries.model.ctp.*; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.stream.Collectors; + +@Service +public class DashboardService { + + private final InventoryTransactionLegDAO inventoryTransactionLegDAO; + private final JobCardDAO jobCardDAO; + private final FinishedItemDAO finishedItemDAO; + private final StitchingOfflineItemDAO stitchingOfflineItemDAO; + private final InventoryAccountDAO inventoryAccountDAO; + private final PackagingItemsDAO packagingItemsDAO; + + + public DashboardService(InventoryTransactionLegDAO inventoryTransactionLegDAO, JobCardDAO jobCardDAO, FinishedItemDAO finishedItemDAO, StitchingOfflineItemDAO stitchingOfflineItemDAO, InventoryAccountDAO inventoryAccountDAO, PackagingItemsDAO packagingItemsDAO) { + this.inventoryTransactionLegDAO = inventoryTransactionLegDAO; + this.jobCardDAO = jobCardDAO; + this.finishedItemDAO = finishedItemDAO; + this.stitchingOfflineItemDAO = stitchingOfflineItemDAO; + this.inventoryAccountDAO = inventoryAccountDAO; + this.packagingItemsDAO = packagingItemsDAO; + } + + public Map getPhasesProgressDayWise(String lineNo) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + String cuttingAccount = "CUTTING ACCOUNT " + lineNo; + String stitchingAccount = "STITCHING ACCOUNT " + lineNo; + String finishingAccount = "FINISHING ACCOUNT " + lineNo; + String packagingAccount = "A GRADE ACCOUNT " + lineNo; + + String startDate1 = LocalDateTime.now().withHour(0).withMinute(0).withSecond(1).format(formatter); + String endDate1 = LocalDateTime.now().withHour(23).withMinute(59).withSecond(59).format(formatter); + String startDateWithHour = LocalDateTime.now().minusHours(1).format(formatter); + String endDateWithHour = LocalDateTime.now().format(formatter); + + + HashMap progress = new HashMap<>(); + + List inventoryAccounts = inventoryAccountDAO.findAll(); + + Map inventoryAccountMap = inventoryAccounts.stream() + .filter(e -> cuttingAccount.equals(e.getTitle()) || + stitchingAccount.equals(e.getTitle()) || + finishingAccount.equals(e.getTitle()) || + packagingAccount.equals(e.getTitle())) + .collect(Collectors.toMap(InventoryAccount::getTitle, e -> (int) e.getId())); + + + List stitchingItemIds = inventoryTransactionLegDAO.getParentIDsOFRemainingINVENTORY("STITCHING_OFFLINE", inventoryAccountMap.get(stitchingAccount)); + List finishing = inventoryTransactionLegDAO.getInParentIdIdByDate("FINISHED_ITEM", inventoryAccountMap.get(finishingAccount)); + + List packagingItemIDs = inventoryTransactionLegDAO.getParentIDsOFRemainingINVENTORY("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); + } + + Long alterationPieceFinish = 0L; + Long rejectFinishedItem = 0L; + Long washFinishedItem = 0L; + Long approved = 0L; + 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); + } + + + Long packagingItems = 0L; + Long packagingItemsHourly = 0L; + if (packagingItemIDs != null && !packagingItemIDs.isEmpty()) { + packagingItems = packagingItemsDAO.findByDateANDIDs(startDate1, endDate1, packagingItemIDs); + packagingItemsHourly = packagingItemsDAO.findByDateANDIDs(startDateWithHour, endDateWithHour, packagingItemIDs); + } + + progress.put("Stitching", (float) approvedStitchingOfflineItems + qcReject); + progress.put("totalWips", (float) stitchingItemIds.size() - qcReject); + progress.put("Alteration", (float) qcReject); + + progress.put("finishing", (float) approved + operationNotPerformed); + progress.put("ALTER", (float) alterationPieceFinish); + progress.put("Reject", (float) rejectFinishedItem); + progress.put("wash", (float) washFinishedItem); + 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)); + + + return progress; + } + + 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); + + 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("Total Induction", String.valueOf(jobCards.size())); + details.put("Total Machine", String.valueOf(30)); + details.put("Total Worker", String.valueOf(30)); + details.put("line", "Line " + lineNo); + return details; + } +} diff --git a/src/main/java/com/utopiaindustries/service/InventoryAccountService.java b/src/main/java/com/utopiaindustries/service/InventoryAccountService.java index 70d2af4..d35a7bf 100644 --- a/src/main/java/com/utopiaindustries/service/InventoryAccountService.java +++ b/src/main/java/com/utopiaindustries/service/InventoryAccountService.java @@ -71,11 +71,7 @@ public class InventoryAccountService { } public List findInventoryAccounts(){ - List accounts = inventoryAccountDAO.findAll(); - for( InventoryAccount account : accounts ){ - account.setLocationTitle( locationSiteDAO.find( account.getLocationSiteId() ).getTitle() ); - } - return accounts; + return inventoryAccountDAO.findAll(); } public List findInventoryAccountsByFilter(String id, String title, String active, String createdBy, String startDate, String endDate, diff --git a/src/main/java/com/utopiaindustries/service/InventoryService.java b/src/main/java/com/utopiaindustries/service/InventoryService.java index 3b4cdd0..c93f9ab 100644 --- a/src/main/java/com/utopiaindustries/service/InventoryService.java +++ b/src/main/java/com/utopiaindustries/service/InventoryService.java @@ -83,14 +83,14 @@ public class InventoryService { .collect(Collectors.toList()); // save updated cut pieces - List cutPieces = jobCardItemWrappers.stream() - .flatMap(wrapper -> wrapper.getPieces().stream()) - .collect(Collectors.toList()); - cutPieceDAO.saveAll(cutPieces); +// List cutPieces = jobCardItemWrappers.stream() +// .flatMap(wrapper -> wrapper.getPieces().stream()) +// .collect(Collectors.toList()); +// cutPieceDAO.saveAll(cutPieces); - Map> piecesMap = cutPieceDAO.findByJobCardItemIds(jobCardItemIds) - .stream() - .collect(Collectors.groupingBy(CutPiece::getJobCardItemId)); +// Map> piecesMap = cutPieceDAO.findByJobCardItemIds(jobCardItemIds) +// .stream() +// .collect(Collectors.groupingBy(CutPiece::getJobCardItemId)); for (JobCardItem jobCardItem : items) { @@ -506,6 +506,8 @@ public class InventoryService { finishedItem.setBarcode(stitchingOfflineItem.getBarcode()); finishedItem.setCreatedBy(authentication.getName()); finishedItem.setCreatedAt(LocalDateTime.now()); + finishedItem.setOperationDate(LocalDateTime.now()); + finishedItem.setQaStatus("-"); finishedItem.setStitchedItemId(stitchingOfflineItem.getId()); finishedItem.setJobCardId(stitchingOfflineItem.getJobCardId()); finishedItem.setIsQa(true); @@ -528,7 +530,7 @@ public class InventoryService { if (lastInvTransaction != null) { // OUT long fromAccount = lastInvTransaction.getAccountId(); - createInventoryTransactionLeg(transaction, stitchingOfflineItem, fromAccount, InventoryTransactionLeg.Type.OUT.name(), InventoryArtifactType.FINISHED_ITEM.name()); + createInventoryTransactionLeg(transaction, preCreatedItem, fromAccount, InventoryTransactionLeg.Type.OUT.name(), InventoryArtifactType.FINISHED_ITEM.name()); } preCreatedItem.setIsQa(true); finishedItemsForUlter.add(preCreatedItem); @@ -537,11 +539,14 @@ public class InventoryService { } } else { FinishedItem preCreatedItem = finishedItemDAO.findByStitchedItem(stitchingOfflineItem.getId()); - preCreatedItem.setIsQa(false); - finishedItemsForUlter.add(preCreatedItem); + if (preCreatedItem != null) { + preCreatedItem.setIsQa(false); + finishedItemsForUlter.add(preCreatedItem); + } } - stitchingOfflineItem.setIsQa(true); + stitchingOfflineItem.setIsQa(false); stitchingOfflineItem.setQaStatus(qaStatus); + stitchingOfflineItem.setQcDoneAt(LocalDateTime.now()); updatedStitchedItems.add(stitchingOfflineItem); } for (FinishedItem finishedItem : finishedItems) { @@ -590,6 +595,7 @@ public class InventoryService { for (FinishedItem finishedItem : items) { InventoryTransactionLeg lastInvTransaction = lastFinishedItemIdInTransactionMap.getOrDefault(finishedItem.getId(), null); finishedItem.setIsQa(true); + finishedItem.setOperationDate(LocalDateTime.now()); /* * item is approved and alter is selected then finished item will to stitching account @@ -604,7 +610,7 @@ public class InventoryService { // get the stitching account id long stitchedItemId = finishedItem.getStitchedItemId(); InventoryTransactionLeg lastOutTransaction = lastStitchedItemOutTransactionMap.getOrDefault(stitchedItemId, null); - createInventoryTransactionLeg(transaction, finishedItem, lastOutTransaction.getAccountId(), InventoryTransactionLeg.Type.IN.name(), InventoryArtifactType.STITCHING_OFFLINE.name()); + createInventoryTransactionLeg(transaction, finishedItem, lastOutTransaction.getAccountId(), InventoryTransactionLeg.Type.IN.name(), InventoryArtifactType.FINISHED_ITEM.name()); finishedItem.setQaStatus("ALTER"); finishedItem.setIsSegregated(false); } @@ -631,9 +637,9 @@ public class InventoryService { * item is not approved and C grade is selected then item remain in Finishing account because after * alteration item will be moved to A grade account for segregation * */ - if (status.equalsIgnoreCase("C GRADE")) { + if (status.equalsIgnoreCase("REJECT")) { finishedItem.setIsSegregated(false); - finishedItem.setQaStatus("C GRADE"); + finishedItem.setQaStatus("REJECT"); } /* diff --git a/src/main/java/com/utopiaindustries/service/JobCardService.java b/src/main/java/com/utopiaindustries/service/JobCardService.java index b3e1966..42a0eb0 100644 --- a/src/main/java/com/utopiaindustries/service/JobCardService.java +++ b/src/main/java/com/utopiaindustries/service/JobCardService.java @@ -149,20 +149,7 @@ public class JobCardService { for (JobCardItem item : jobCard.getItems()) { item.setJobCardId(jobCardId); long itemId = jobCardItemDAO.save(item); - for (CutPiece cutPiece : item.getCutPieces()) { - cutPiece.setJobCardItemId(itemId); - if (!skuCutPiecesDAO.doesExist(cutPiece.getType(), item.getSku())){ - SkuCutPieces skuCutPieces = new SkuCutPieces(); - skuCutPieces.setType(cutPiece.getType()); - skuCutPieces.setSku(item.getSku()); - //save cut-piece for sku next time fetch - skuCutPiecesDAO.save(skuCutPieces); - } - cutPieces.add(cutPiece); - } } - // save all pieces - cutPieceDAO.saveAll(cutPieces); } } diff --git a/src/main/java/com/utopiaindustries/service/PurchaseOrderCTPService.java b/src/main/java/com/utopiaindustries/service/PurchaseOrderCTPService.java index 306c795..71bb926 100644 --- a/src/main/java/com/utopiaindustries/service/PurchaseOrderCTPService.java +++ b/src/main/java/com/utopiaindustries/service/PurchaseOrderCTPService.java @@ -2,6 +2,7 @@ package com.utopiaindustries.service; import com.utopiaindustries.dao.ctp.PurchaseOrderCTPDao; import com.utopiaindustries.model.ctp.*; +import com.utopiaindustries.model.uind.PurchaseOrder; import com.utopiaindustries.querybuilder.ctp.JobCardQueryBuilder; import com.utopiaindustries.querybuilder.ctp.PurchaseOrderCTPQueryBuilder; import com.utopiaindustries.util.StringUtils; @@ -32,7 +33,7 @@ public class PurchaseOrderCTPService { } /* - * create new job card + * create new purchase * */ public PurchaseOrderCTP createNewPurchaseOrderCTP() { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); @@ -43,27 +44,27 @@ public class PurchaseOrderCTPService { } /* - * save card + * save purchase order for ctp * */ @Transactional( rollbackFor = Exception.class ) public void save(PurchaseOrderCTP purchaseOrderCTP) { purchaseOrderCTPDao.save(purchaseOrderCTP); } - public List getAllPurchaseOrderCtp(String purchaseOrderCode, String articleName, String StartDate, String EndDate, Long limit) { + public List getAllPurchaseOrderCtp(String purchaseOrderCode, String articleName, String startDate, String endDate, Long limit) { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); List list = new ArrayList<>(); String createdBy = authentication.getName(); if( limit == null ){ limit = 100L; } - if( !StringUtils.isAnyNotNullOrEmpty(purchaseOrderCode, articleName) ){ + if(StringUtils.isAnyNotNullOrEmpty(purchaseOrderCode, articleName,startDate,endDate) ){ for (GrantedAuthority role : authentication.getAuthorities()){ if (role.toString().equals("ROLE_ADMIN")){ createdBy = ""; } } - String query = PurchaseOrderCTPQueryBuilder.buildQuery(purchaseOrderCode, articleName, createdBy, StartDate, EndDate, limit ); + String query = PurchaseOrderCTPQueryBuilder.buildQuery(purchaseOrderCode, articleName, createdBy, startDate, endDate, limit ); System.out.println( query ); list = purchaseOrderCTPDao.findByQuery( query ); }else { @@ -72,4 +73,8 @@ public class PurchaseOrderCTPService { return list; } + public List findByTerm(String term ){ + return purchaseOrderCTPDao.findByTerm( term ); + } + } diff --git a/src/main/resources/static/img/finishing.jfif b/src/main/resources/static/img/finishing.jfif new file mode 100644 index 0000000..c1d9053 Binary files /dev/null and b/src/main/resources/static/img/finishing.jfif differ diff --git a/src/main/resources/static/img/packaging.jfif b/src/main/resources/static/img/packaging.jfif new file mode 100644 index 0000000..cfbac53 Binary files /dev/null and b/src/main/resources/static/img/packaging.jfif differ diff --git a/src/main/resources/static/img/quality.png b/src/main/resources/static/img/quality.png new file mode 100644 index 0000000..7bc00ad Binary files /dev/null and b/src/main/resources/static/img/quality.png differ diff --git a/src/main/resources/static/img/stitchingImage.jpg b/src/main/resources/static/img/stitchingImage.jpg new file mode 100644 index 0000000..46cd2bd Binary files /dev/null and b/src/main/resources/static/img/stitchingImage.jpg differ diff --git a/src/main/resources/static/js/charts.js b/src/main/resources/static/js/charts.js index f0dfc24..cda9bce 100644 --- a/src/main/resources/static/js/charts.js +++ b/src/main/resources/static/js/charts.js @@ -136,6 +136,54 @@ document.addEventListener("DOMContentLoaded", function () { }] }); } + function dashboardChart(divId, height, width, title, aHeading, aData, bHeading, bData, cHeading, cData,dates, fontSize, maxValue) { + if (!document.getElementById(divId)) { + return; + } + Highcharts.chart(divId, { + chart: { + type: 'bar', + }, + title: { + text: title + }, + xAxis: { + }, + yAxis: { + max: maxValue, + min: 0, + title: { + align: 'high' + }, + labels: { + overflow: 'justify' + }, + gridLineWidth: 0 + }, + plotOptions: { + bar: { + borderRadius: '50%', + dataLabels: { + enabled: true + }, + groupPadding: 0.1 + } + }, + credits: { + enabled: false + }, + series: [{ + name: aHeading, + data: aData + }, { + name: bHeading, + data: bData + }, { + name: cHeading, + data: cData + }] + }); + } function createSingleBarChart(divId, height, width, title,Heading, Data, dates, fontSize, maxValue) { if (!document.getElementById(divId)) { @@ -260,6 +308,50 @@ document.addEventListener("DOMContentLoaded", function () { createBarChart( divId, height, width, title, aHeading, aData, bHeading, bData, cHeading, cData, dHeading, dData, datesArray, fontSize, maxValue); }); + const dashboardBarChart = document.querySelectorAll('.dashboardBarChart'); // fixed name + dashboardBarChart.forEach(function (div) { + const title = div.getAttribute('data-title'); + const height = div.getAttribute('data-height'); + const width = div.getAttribute('data-width'); + const fontSize = div.getAttribute('data-fontSize'); + const rawValue = div.getAttribute('data-totalProduction') || "0"; + const cleanValue = rawValue.replace(/[^0-9.-]+/g, ''); + const maxValue = Number(cleanValue); + + const cHeading = 'Achieved'; + const cDataString = div.getAttribute('data-achieved'); + const cleanValueAchieved = cDataString.replace(/[^0-9.-]+/g, ''); + const cData = [Number(cleanValueAchieved)]; + + const aHeading = 'Stitching'; + const aDataString = div.getAttribute('data-stitching'); + const cleanValueStitch = aDataString.replace(/[^0-9.-]+/g, ''); + const aData = [Number(cleanValueStitch)]; + + const bHeading = 'Packaging'; + const bDataString =div.getAttribute('data-packaging'); + const packaging = bDataString.replace(/[^0-9.-]+/g, ''); + const bData = [Number(packaging)]; + + const dates = [div.getAttribute('data-dates')]; + const divId = div.id; + dashboardChart( + divId, + height, + width, + title, + aHeading, + aData, + bHeading, + bData, + cHeading, + cData, + dates, + fontSize, + maxValue + ); + }); + const cuttingBarChart = document.querySelectorAll('.singleBarChart'); cuttingBarChart.forEach(function (div) { const title = div.getAttribute('data-title'); diff --git a/src/main/resources/static/js/job-card-form.js b/src/main/resources/static/js/job-card-form.js index 6cc224c..72b106c 100644 --- a/src/main/resources/static/js/job-card-form.js +++ b/src/main/resources/static/js/job-card-form.js @@ -219,7 +219,11 @@ data: { jobCard: {}, items: [], - }, + purchaseOrderID:0, + articleName: '', + purchaseOrderQuantity: 0, + purchaseOrderCode: '', + }, methods: { addItem: function (e) { e.preventDefault(); @@ -259,10 +263,19 @@ } } return false; + }, onPoSelect(id,purchaseOrder) { + this.purchaseOrderID = id, + this.articleName = purchaseOrder.articleName, + this.purchaseOrderQuantity = purchaseOrder.purchaseOrderQuantity, + this.purchaseOrderCode = purchaseOrder.purchaseOrderCode } }, mounted: function () { this.jobCard = window.ctp.jobCard; + this.purchaseOrderID = this.jobCard.purchaseOrderId, + this.articleName = this.jobCard.articleName, + this.purchaseOrderQuantity = this.jobCard.poQuantity, + this.purchaseOrderCode = this.jobCard.purchaseOrderTitle this.items = this.jobCard.items; } diff --git a/src/main/resources/static/js/packaging/packaging-item-form.js b/src/main/resources/static/js/packaging/packaging-item-form.js index 55adca8..118c95c 100644 --- a/src/main/resources/static/js/packaging/packaging-item-form.js +++ b/src/main/resources/static/js/packaging/packaging-item-form.js @@ -45,6 +45,7 @@ + {{item.id}} {{item.itemId}} diff --git a/src/main/resources/static/js/vue-components.js b/src/main/resources/static/js/vue-components.js index 5af935d..c667641 100644 --- a/src/main/resources/static/js/vue-components.js +++ b/src/main/resources/static/js/vue-components.js @@ -3592,8 +3592,50 @@ if ( typeof Vue !== 'undefined' ) { }); + /* + * search po + * */ + Vue.component('search-ctp-po',{ + mixins: [searchComponentMixin], + data: { + purchaseOrderCode: '', + }, + methods : { + getSearchUrl : function () { + return `/ctp/rest/purchase-orders/ctp-po-search?term=${encodeURIComponent( this.list.term )}` + }, + getEmittedEventName: function() { + return 'select-po'; + }, + getTitle: function( po ) { + this.purchaseOrderCode = po.purchaseOrderCode; + return this.purchaseOrderCode; + } + }, + props: { + labelText: { + default: 'Search PO ' + }, + titleFieldName: { + default: 'poCode' + }, + idFieldName: { + default: 'poId' + }, + codeFieldName : { + default : 'poCode' + }, + received : { + default : false + }, + inputMode: { + default : 'none' + }, + } + }) -Vue.component('search-item', { + + Vue.component('search-item', { props: { label: { type: String, diff --git a/src/main/resources/templates/_fragments.html b/src/main/resources/templates/_fragments.html index 833f851..f6924ac 100644 --- a/src/main/resources/templates/_fragments.html +++ b/src/main/resources/templates/_fragments.html @@ -3,6 +3,7 @@ + @@ -20,6 +21,17 @@ + @@ -31,10 +43,10 @@ - - - - + + Purchase Order + Job Cards diff --git a/src/main/resources/templates/_job-card-fragment.html b/src/main/resources/templates/_job-card-fragment.html index ec31654..805d8cd 100644 --- a/src/main/resources/templates/_job-card-fragment.html +++ b/src/main/resources/templates/_job-card-fragment.html @@ -1,98 +1,113 @@ - - - - - - - - - - - - - - - - - Info - - - Job Order - - - - Customer - - - - Lot Number - - - - Article Name - - - - - - Purchase Order - - - - PO Quantity - - - - - - - - Generated Date - - - - - - Description* - - - + + + + + + + + + + + + + + + + + + + + + + + + Info + + + Job Order + - - Items - - - Duplicate Items Selected - - Add Item - + + Customer + - - Save Draft - Post - Cancel + + Lot Number + - - - - + + Article Name + + {{ articleName || jobCard.articleName }} + + + + + + + + PO Quantity + + {{ purchaseOrderQuantity || jobCard.poQuantity }} + + + + + + + + Generated Date + + + + + + + + Description* + + + - + + Items + + + Duplicate Items Selected + + Add Item + + + + Save Draft + Post + Cancel + + + + + - - - \ No newline at end of file + + + + + diff --git a/src/main/resources/templates/dashboard.html b/src/main/resources/templates/dashboard.html new file mode 100644 index 0000000..f671d71 --- /dev/null +++ b/src/main/resources/templates/dashboard.html @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + 0 + + + + + + + % + Shift Target + + + + + Achieved + + + + + + + + + + + + Stitching Offline + + + + + + WIP QTY + + + + ALTERATION + + + + + + + + + + + + + + 0% + Efficiency + + + + + Hourly Target + + + + + + + + + + + + + Finishing + + + + + + REJECTION + + + + ALTERATION + + + + + + WASH/STAIN + + + + + + + + + + + + + Packaging + + + + + + + + + + + + + diff --git a/src/main/resources/templates/finishing/segregate-inventory.html b/src/main/resources/templates/finishing/segregate-inventory.html index 3a5f90e..a67f1bd 100644 --- a/src/main/resources/templates/finishing/segregate-inventory.html +++ b/src/main/resources/templates/finishing/segregate-inventory.html @@ -50,7 +50,7 @@ @click="submitWithQaStatus('B GRADE')">B GRADE C GRADE + @click="submitWithQaStatus('REJECT')">REJECT WASHED diff --git a/src/main/resources/templates/packaging/receive-inventory-form.html b/src/main/resources/templates/packaging/receive-inventory-form.html index 50fb9c2..d55d285 100644 --- a/src/main/resources/templates/packaging/receive-inventory-form.html +++ b/src/main/resources/templates/packaging/receive-inventory-form.html @@ -39,7 +39,7 @@ Duplicate Item Selected Submit - Cancel + Cancel + + + +