From cef37b40e617f56da313bd6a95df0ee0b0416b35 Mon Sep 17 00:00:00 2001 From: Usama Khan Date: Wed, 30 Apr 2025 17:09:11 -0700 Subject: [PATCH] set naming convention and add receive inventory in packaging phase --- .../auth/PurchaseOrderCTPRole.java | 15 ++ .../controller/PackagingController.java | 37 ++- .../PurchaseOrderCTPController.java | 48 ++++ .../controller/StitchingController.java | 8 +- .../dao/ctp/PackagingItemsDAO.java | 101 +++++++ .../dao/ctp/PurchaseOrderCTPDao.java | 112 ++++++++ .../dao/ctp/PurchaseOrderCTPRowMapper.java | 24 ++ .../model/ctp/InventoryArtifactType.java | 3 +- .../model/ctp/PackagingItems.java | 180 +++++++++++++ .../model/ctp/PackagingItemsRowMapper.java | 28 ++ .../model/ctp/PurchaseOrderCTP.java | 84 ++++++ .../ctp/PurchaseOrderCTPQueryBuilder.java | 46 ++++ .../ctp/StichedOfflineItemQueryBuilder.java | 20 +- .../FinishedItemRestController.java | 5 + .../service/BarcodeService.java | 2 +- .../service/BundleService.java | 4 +- .../service/InventoryService.java | 74 +++++- .../service/PackagingService.java | 22 ++ .../service/PurchaseOrderCTPService.java | 75 ++++++ .../finished-item-segregation-form.js | 1 - .../js/packaging/packaging-item-form.js | 92 +++++++ src/main/resources/templates/_fragments.html | 18 ++ .../resources/templates/cutting/bundles.html | 2 +- .../templates/cutting/master-bundles.html | 4 +- .../templates/cutting/receive-inventory.html | 2 +- .../packaging/receive-inventory-form.html | 54 ++++ .../purchaseOrder/purchase-order-form.html | 38 +++ .../quality-control/qc-items-list.html | 2 +- .../templates/reporting/QA-report.html | 10 + .../templates/reporting/cutting-report.html | 133 +++++----- .../templates/reporting/job-card-report.html | 248 +++++++++--------- .../reporting/po-job-card-report.html | 15 +- .../templates/reporting/stitching-report.html | 9 +- .../stitching/_finished-item-sidebar.html | 9 + .../stitching/receive-inventory.html | 2 +- .../stitching/stitched-offline-items.html | 6 +- 36 files changed, 1293 insertions(+), 240 deletions(-) create mode 100644 src/main/java/com/utopiaindustries/auth/PurchaseOrderCTPRole.java create mode 100644 src/main/java/com/utopiaindustries/controller/PurchaseOrderCTPController.java create mode 100644 src/main/java/com/utopiaindustries/dao/ctp/PackagingItemsDAO.java create mode 100644 src/main/java/com/utopiaindustries/dao/ctp/PurchaseOrderCTPDao.java create mode 100644 src/main/java/com/utopiaindustries/dao/ctp/PurchaseOrderCTPRowMapper.java create mode 100644 src/main/java/com/utopiaindustries/model/ctp/PackagingItems.java create mode 100644 src/main/java/com/utopiaindustries/model/ctp/PackagingItemsRowMapper.java create mode 100644 src/main/java/com/utopiaindustries/model/ctp/PurchaseOrderCTP.java create mode 100644 src/main/java/com/utopiaindustries/querybuilder/ctp/PurchaseOrderCTPQueryBuilder.java create mode 100644 src/main/java/com/utopiaindustries/service/PackagingService.java create mode 100644 src/main/java/com/utopiaindustries/service/PurchaseOrderCTPService.java create mode 100644 src/main/resources/static/js/packaging/packaging-item-form.js create mode 100644 src/main/resources/templates/packaging/receive-inventory-form.html create mode 100644 src/main/resources/templates/purchaseOrder/purchase-order-form.html create mode 100644 src/main/resources/templates/reporting/QA-report.html diff --git a/src/main/java/com/utopiaindustries/auth/PurchaseOrderCTPRole.java b/src/main/java/com/utopiaindustries/auth/PurchaseOrderCTPRole.java new file mode 100644 index 0000000..ee43696 --- /dev/null +++ b/src/main/java/com/utopiaindustries/auth/PurchaseOrderCTPRole.java @@ -0,0 +1,15 @@ +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_PURCHASE_ORDER','ROLE_ADMIN')") +public @interface PurchaseOrderCTPRole { +} diff --git a/src/main/java/com/utopiaindustries/controller/PackagingController.java b/src/main/java/com/utopiaindustries/controller/PackagingController.java index 8a7a597..b2afda8 100644 --- a/src/main/java/com/utopiaindustries/controller/PackagingController.java +++ b/src/main/java/com/utopiaindustries/controller/PackagingController.java @@ -1,14 +1,15 @@ package com.utopiaindustries.controller; import com.utopiaindustries.auth.PackagingRole; +import com.utopiaindustries.model.ctp.FinishedItemWrapper; import com.utopiaindustries.service.InventoryAccountService; import com.utopiaindustries.service.LocationService; +import com.utopiaindustries.service.PackagingService; 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; @@ -17,19 +18,39 @@ import java.time.LocalDate; @RequestMapping("/packaging" ) public class PackagingController { - private final InventoryAccountService inventoryAccountService; + private final PackagingService packagingService; private final LocationService locationService; - public PackagingController(InventoryAccountService inventoryAccountService, LocationService locationService) { + public PackagingController(InventoryAccountService inventoryAccountService, PackagingService packagingService, LocationService locationService) { this.inventoryAccountService = inventoryAccountService; + this.packagingService = packagingService; this.locationService = locationService; } - @GetMapping - public String showHome( Model model ){ - return "redirect:/packaging/inventory-accounts"; + public String showHome(Model model ){ + return "redirect:/packaging/receive-inventory"; + } + + @GetMapping("/receive-inventory") + public String packagingItemReceive( Model model ){ + model.addAttribute("wrapper", new FinishedItemWrapper() ); + return "/packaging/receive-inventory-form"; + } + + + @PostMapping( "/packaging-items" ) + public String packagingItems( @ModelAttribute FinishedItemWrapper wrapper, + RedirectAttributes redirectAttributes, + Model model ){ + try { + packagingService.createPackagingItem( wrapper ); + redirectAttributes.addFlashAttribute("success", "Items Successfully received !" ); + } catch ( Exception e ){ + redirectAttributes.addFlashAttribute("error", e.getMessage() ); + } + return "redirect:/finishing/finished-items"; } @GetMapping( "/inventory-accounts" ) diff --git a/src/main/java/com/utopiaindustries/controller/PurchaseOrderCTPController.java b/src/main/java/com/utopiaindustries/controller/PurchaseOrderCTPController.java new file mode 100644 index 0000000..a5ddee9 --- /dev/null +++ b/src/main/java/com/utopiaindustries/controller/PurchaseOrderCTPController.java @@ -0,0 +1,48 @@ +package com.utopiaindustries.controller; + +import com.utopiaindustries.auth.PurchaseOrderCTPRole; +import com.utopiaindustries.model.ctp.JobCard; +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 java.time.LocalDate; +import java.util.List; + +@Controller +@RequestMapping("/purchase-order") +@PurchaseOrderCTPRole + +public class PurchaseOrderCTPController { + private final PurchaseOrderCTPService purchaseOrderCTPService; + + public PurchaseOrderCTPController(PurchaseOrderCTPService purchaseOrderCTPService) { + this.purchaseOrderCTPService = purchaseOrderCTPService; + } + + @GetMapping + public String showJobCardList( @RequestParam( value = "purchaseOrderCode", required = false ) String purchaseOrderCode, + @RequestParam( value = "articleName", required = false ) String articleName, + @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); + model.addAttribute("purchaseOrder", purchaseOrderCTPService.getAllPurchaseOrderCtp(purchaseOrderCode, articleName, startDate.toString(), endDate.toString(), limit) ); + model.addAttribute("startDate", startDate); + model.addAttribute("endDate", endDate); + return "job-card-list"; + } + + @GetMapping( "/new" ) + public String showPurchaseOrderCTPForm( Model model ){ + model.addAttribute("purchaseOrder", purchaseOrderCTPService.createNewPurchaseOrderCTP() ); + return "/purchaseOrder/purchase-order-form"; + } +} diff --git a/src/main/java/com/utopiaindustries/controller/StitchingController.java b/src/main/java/com/utopiaindustries/controller/StitchingController.java index 8930c48..1bf7e4a 100644 --- a/src/main/java/com/utopiaindustries/controller/StitchingController.java +++ b/src/main/java/com/utopiaindustries/controller/StitchingController.java @@ -74,8 +74,6 @@ public class StitchingController { @RequestParam( value = "count", required = false ) Long count, Model model ) { // 2 for stitching - - model.addAttribute("accounts", inventoryAccountService.getInventoryAccounts(id, title, active, createdBy, startDate, endDate, siteId, count, "PROCESS", "2", false)); model.addAttribute("locations", locationService.findAll() ); if(count == null){ @@ -95,11 +93,11 @@ public class StitchingController { @RequestParam( value = "end-date", required = false ) String endDate, @RequestParam(value = "bundle-id", required = false) Long bundleId, @RequestParam( value = "count", required = false, defaultValue = "100") Long count, - Model model - ,RedirectAttributes redirect){ + @RequestParam( value = "status", required = false) String status, + Model model, RedirectAttributes redirect){ LocalDate startDate1 = StringUtils.isNullOrEmpty(startDate) ? LocalDate.now().minusDays(30) : LocalDate.parse(startDate); LocalDate endDate1 = StringUtils.isNullOrEmpty(endDate) ? LocalDate.now() : LocalDate.parse(endDate); - List itemList = bundleService.getStitchedOfflineItems( id, itemId, sku, startDate, endDate, bundleId ,count ); + List itemList = bundleService.getStitchedOfflineItems( id, itemId, sku, status, startDate, endDate, bundleId ,count ); model.addAttribute("items", itemList ) ; model.addAttribute("startDate", startDate1); model.addAttribute("endDate", endDate1); diff --git a/src/main/java/com/utopiaindustries/dao/ctp/PackagingItemsDAO.java b/src/main/java/com/utopiaindustries/dao/ctp/PackagingItemsDAO.java new file mode 100644 index 0000000..e748fde --- /dev/null +++ b/src/main/java/com/utopiaindustries/dao/ctp/PackagingItemsDAO.java @@ -0,0 +1,101 @@ +package com.utopiaindustries.dao.ctp; + +import com.utopiaindustries.model.ctp.PackagingItems; +import com.utopiaindustries.model.ctp.PackagingItemsRowMapper; +import com.utopiaindustries.util.KeyHolderFunctions; +import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; +import org.springframework.jdbc.support.GeneratedKeyHolder; +import org.springframework.jdbc.support.KeyHolder; +import org.springframework.stereotype.Repository; + +import java.util.ArrayList; +import java.util.List; + +@Repository +public class PackagingItemsDAO { + + private final NamedParameterJdbcTemplate namedParameterJdbcTemplate; + + private static final String TABLE_NAME = "packaging_items"; + + private static final String SELECT_BY_ID = String.format("SELECT * FROM %s WHERE id = :id", TABLE_NAME); + private static final String SELECT_ALL = String.format("SELECT * FROM %s ORDER BY id DESC", TABLE_NAME); + private static final String DELETE_BY_ID = String.format("DELETE FROM %s WHERE id = :id", TABLE_NAME); + private static final String SELECT_BY_JOB_CARD_ID = String.format("SELECT * FROM %s WHERE job_card_id = :job_card_id", TABLE_NAME); + + private static final String INSERT_QUERY = String.format( + "INSERT INTO %s (" + + "id, item_id, sku, barcode, job_card_id, created_at, created_by, " + + "is_qa, finish_item_id, is_segregated, account_id, qa_status, bundle_id, account_title" + + ") VALUES (" + + ":id, :item_id, :sku, :barcode, :job_card_id, :created_at, :created_by, " + + ":is_qa, :finish_item_id, :is_segregated, :account_id, :qa_status, :bundle_id, :account_title" + + ") ON DUPLICATE KEY UPDATE " + + "item_id = VALUES(item_id), sku = VALUES(sku), barcode = VALUES(barcode), " + + "job_card_id = VALUES(job_card_id), created_at = VALUES(created_at), created_by = VALUES(created_by), " + + "is_qa = VALUES(is_qa), finish_item_id = VALUES(finish_item_id), " + + "is_segregated = VALUES(is_segregated), account_id = VALUES(account_id), " + + "qa_status = VALUES(qa_status), bundle_id = VALUES(bundle_id), account_title = VALUES(account_title)", + TABLE_NAME + ); + + public PackagingItemsDAO(NamedParameterJdbcTemplate namedParameterJdbcTemplate) { + this.namedParameterJdbcTemplate = namedParameterJdbcTemplate; + } + + private MapSqlParameterSource prepareParams(PackagingItems item) { + return new MapSqlParameterSource() + .addValue("id", item.getId()) + .addValue("item_id", item.getItemId()) + .addValue("sku", item.getSku()) + .addValue("barcode", item.getBarcode()) + .addValue("job_card_id", item.getJobCardId()) + .addValue("created_at", item.getCreatedAt()) + .addValue("created_by", item.getCreatedBy()) + .addValue("is_qa", item.getIsQa()) + .addValue("finish_item_id", item.getFinishedItemId()) + .addValue("is_segregated", item.getIsSegregated()) + .addValue("account_id", item.getAccountId()) + .addValue("qa_status", item.getQaStatus()) + .addValue("bundle_id", item.getBundleId()) + .addValue("account_title", item.getAccountTitle()); + } + + public PackagingItems find(long id) { + MapSqlParameterSource params = new MapSqlParameterSource("id", id); + return namedParameterJdbcTemplate.query(SELECT_BY_ID, params, new PackagingItemsRowMapper()) + .stream().findFirst().orElse(new PackagingItems()); + } + + public List findAll() { + return namedParameterJdbcTemplate.query(SELECT_ALL, new PackagingItemsRowMapper()); + } + + public long save(PackagingItems item) { + KeyHolder keyHolder = new GeneratedKeyHolder(); + MapSqlParameterSource params = prepareParams(item); + namedParameterJdbcTemplate.update(INSERT_QUERY, params, keyHolder); + return KeyHolderFunctions.getKey(item.getId(), keyHolder); + } + + public int[] saveAll(List items) { + List batchParams = new ArrayList<>(); + for (PackagingItems item : items) { + batchParams.add(prepareParams(item)); + } + return namedParameterJdbcTemplate.batchUpdate(INSERT_QUERY, batchParams.toArray(new MapSqlParameterSource[0])); + } + + public boolean delete(long id) { + MapSqlParameterSource params = new MapSqlParameterSource("id", id); + return namedParameterJdbcTemplate.update(DELETE_BY_ID, params) > 0; + } + + public List findByJobCardId(long jobCardId) { + MapSqlParameterSource params = new MapSqlParameterSource("job_card_id", jobCardId); + return namedParameterJdbcTemplate.query(SELECT_BY_JOB_CARD_ID, params, new PackagingItemsRowMapper()); + } + +} + diff --git a/src/main/java/com/utopiaindustries/dao/ctp/PurchaseOrderCTPDao.java b/src/main/java/com/utopiaindustries/dao/ctp/PurchaseOrderCTPDao.java new file mode 100644 index 0000000..2e230a4 --- /dev/null +++ b/src/main/java/com/utopiaindustries/dao/ctp/PurchaseOrderCTPDao.java @@ -0,0 +1,112 @@ +package com.utopiaindustries.dao.ctp; + +import com.utopiaindustries.model.ctp.JobCard; +import com.utopiaindustries.model.ctp.PurchaseOrderCTP; +import com.utopiaindustries.util.KeyHolderFunctions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; +import org.springframework.jdbc.support.GeneratedKeyHolder; +import org.springframework.jdbc.support.KeyHolder; +import org.springframework.stereotype.Repository; + +import java.util.ArrayList; +import java.util.List; + +@Repository +public class PurchaseOrderCTPDao { + + @Autowired + private NamedParameterJdbcTemplate namedParameterJdbcTemplate; + + private final String TABLE_NAME = "cut_to_pack.purchase_order"; + 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 id DESC", TABLE_NAME ); + private final String SELECT_ALL_QUERY_WITH_LIMIT = String.format( "SELECT * FROM %s ORDER BY id DESC limit :limit", 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, purchase_order_code, purchase_order_quantity, purchase_order_quantity_required, article_name, created_by, status) " + + "VALUES (:id, :purchase_order_code, :purchase_order_quantity, :purchase_order_quantity_required, :article_name, :created_by, :status) " + + "ON DUPLICATE KEY UPDATE " + + "purchase_order_code = VALUES(purchase_order_code), " + + "purchase_order_quantity = VALUES(purchase_order_quantity), " + + "purchase_order_quantity_required = VALUES(purchase_order_quantity_required), " + + "article_name = VALUES(article_name), " + + "created_by = VALUES(created_by), " + + "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 ); + + + // prepare query params + private MapSqlParameterSource prepareInsertQueryParams(PurchaseOrderCTP purchaseOrderCTP) { + MapSqlParameterSource params = new MapSqlParameterSource(); + params.addValue("id", purchaseOrderCTP.getId()) + .addValue("purchase_order_code", purchaseOrderCTP.getPurchaseOrderCode()) + .addValue("purchase_order_quantity", purchaseOrderCTP.getPurchaseOrderQuantity()) + .addValue("purchase_order_quantity_required", purchaseOrderCTP.getPurchaseOrderQuantityRequired()) + .addValue("article_name", purchaseOrderCTP.getArticleName()) + .addValue("created_by", purchaseOrderCTP.getCreatedBy()) + .addValue("status", purchaseOrderCTP.getStatus()); + return params; + } + + + // find + public PurchaseOrderCTP find(long id ) { + MapSqlParameterSource params = new MapSqlParameterSource(); + params.addValue( "id", id ); + return namedParameterJdbcTemplate.query( SELECT_QUERY, params, new PurchaseOrderCTPRowMapper() ) + .stream() + .findFirst() + .orElse( new PurchaseOrderCTP() ); + } + + + // find all + public List findAll() { + return namedParameterJdbcTemplate.query( SELECT_ALL_QUERY, new PurchaseOrderCTPRowMapper() ); + } + + // save + public long save( PurchaseOrderCTP PurchaseOrderCTP) { + KeyHolder keyHolder = new GeneratedKeyHolder(); + MapSqlParameterSource params = prepareInsertQueryParams(PurchaseOrderCTP); + namedParameterJdbcTemplate.update( INSERT_QUERY, params, keyHolder ); + return KeyHolderFunctions.getKey( PurchaseOrderCTP.getId(), keyHolder ); + } + + // save all + public int[] saveAll( List purchaseOrderCTPS) { + List batchArgs = new ArrayList<>(); + for ( PurchaseOrderCTP PurchaseOrderCTP : purchaseOrderCTPS) { + MapSqlParameterSource params = prepareInsertQueryParams(PurchaseOrderCTP); + batchArgs.add( params ); + } + return namedParameterJdbcTemplate.batchUpdate( INSERT_QUERY, batchArgs.toArray(new MapSqlParameterSource[purchaseOrderCTPS.size()]) ); + } + + // delete + public boolean delete( long id ) { + MapSqlParameterSource params = new MapSqlParameterSource(); + params.addValue( "id", id ); + return namedParameterJdbcTemplate.update( DELETE_QUERY, params ) > 0; + } + + public List findByQuery(String query ){ + return namedParameterJdbcTemplate.query( query, new PurchaseOrderCTPRowMapper() ); + } + + public List findByUserAndLimit(String createdBy, Long limit ){ + MapSqlParameterSource params = new MapSqlParameterSource(); + params.addValue("limit", limit.intValue() ); + params.addValue("created_by", createdBy ); + return namedParameterJdbcTemplate.query( SELECT_BY_LIMIT, params, new PurchaseOrderCTPRowMapper() ); + } + + public List findByAllWithLimit(Long limit){ + MapSqlParameterSource params = new MapSqlParameterSource(); + params.addValue("limit", limit.intValue()); + return namedParameterJdbcTemplate.query( SELECT_ALL_QUERY_WITH_LIMIT, params, new PurchaseOrderCTPRowMapper() ); + } +} diff --git a/src/main/java/com/utopiaindustries/dao/ctp/PurchaseOrderCTPRowMapper.java b/src/main/java/com/utopiaindustries/dao/ctp/PurchaseOrderCTPRowMapper.java new file mode 100644 index 0000000..d1ec8e6 --- /dev/null +++ b/src/main/java/com/utopiaindustries/dao/ctp/PurchaseOrderCTPRowMapper.java @@ -0,0 +1,24 @@ +package com.utopiaindustries.dao.ctp; + +import com.utopiaindustries.model.ctp.PurchaseOrderCTP; +import org.springframework.jdbc.core.RowMapper; + +import java.sql.ResultSet; +import java.sql.SQLException; + +public class PurchaseOrderCTPRowMapper implements RowMapper { + public PurchaseOrderCTP mapRow(ResultSet rs, int rowNum) throws SQLException { + PurchaseOrderCTP PurchaseOrderCTP = new PurchaseOrderCTP(); + PurchaseOrderCTP.setId(rs.getLong("id")); + PurchaseOrderCTP.setPurchaseOrderCode(rs.getString("purchase_order_code")); + PurchaseOrderCTP.setPurchaseOrderQuantity(rs.getInt("purchase_order_quantity")); + PurchaseOrderCTP.setPurchaseOrderQuantityRequired(rs.getInt("purchase_order_quantity_required")); + PurchaseOrderCTP.setArticleName(rs.getString("article_name")); + if (rs.getTimestamp("created_at") != null) { + PurchaseOrderCTP.setCreatedAt(rs.getTimestamp("created_at").toLocalDateTime()); + } + PurchaseOrderCTP.setCreatedBy(rs.getString("created_by")); + PurchaseOrderCTP.setStatus(rs.getString("status")); + return PurchaseOrderCTP; + } +} diff --git a/src/main/java/com/utopiaindustries/model/ctp/InventoryArtifactType.java b/src/main/java/com/utopiaindustries/model/ctp/InventoryArtifactType.java index 45fb996..73d3640 100644 --- a/src/main/java/com/utopiaindustries/model/ctp/InventoryArtifactType.java +++ b/src/main/java/com/utopiaindustries/model/ctp/InventoryArtifactType.java @@ -4,6 +4,7 @@ public enum InventoryArtifactType { BUNDLE, STITCHING_OFFLINE, FINISHED_ITEM, - STITCH_BUNDLE + STITCH_BUNDLE, + PACKAGING } diff --git a/src/main/java/com/utopiaindustries/model/ctp/PackagingItems.java b/src/main/java/com/utopiaindustries/model/ctp/PackagingItems.java new file mode 100644 index 0000000..3423d1d --- /dev/null +++ b/src/main/java/com/utopiaindustries/model/ctp/PackagingItems.java @@ -0,0 +1,180 @@ +package com.utopiaindustries.model.ctp; + +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +public class PackagingItems implements InventoryArtifact { + private long id; + private long itemId; + private String sku; + private String barcode; + private long jobCardId; + @DateTimeFormat( pattern = "yyyy-MM-dd HH:mm:ss" ) + private LocalDateTime createdAt; + private String createdBy; + private boolean isQa; + private long finishedItemId; + private boolean isSegregated; + // wrapper + private JobCard jobCard; + private long accountId; + private String qaStatus; + private long bundleId; + private String accountTitle; + + public long getId() { + return id; + } + + @Override + public String getType() { + return "-"; + } + + public void setId(long id) { + this.id = id; + } + + public long getItemId() { + return itemId; + } + + public void setItemId(long itemId) { + this.itemId = itemId; + } + + public String getSku() { + return sku; + } + + public void setSku(String sku) { + this.sku = sku; + } + + public String getBarcode() { + return barcode; + } + + public void setBarcode(String barcode) { + this.barcode = barcode; + } + + public LocalDateTime getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(LocalDateTime createdAt) { + this.createdAt = createdAt; + } + + public String getCreatedBy() { + return createdBy; + } + + public void setCreatedBy(String createdBy) { + this.createdBy = createdBy; + } + + public long getJobCardId() { + return jobCardId; + } + + public void setJobCardId(long jobCardId) { + this.jobCardId = jobCardId; + } + + public boolean getIsQa() { + return isQa; + } + + public void setIsQa(boolean qa) { + isQa = qa; + } + + public long getFinishedItemId() { + return finishedItemId; + } + + public void setFinishedItemId(long finishedItemId) { + this.finishedItemId = finishedItemId; + } + + public JobCard getJobCard() { + return jobCard; + } + + public void setJobCard(JobCard jobCard) { + this.jobCard = jobCard; + } + + public boolean getIsSegregated() { + return isSegregated; + } + + public void setIsSegregated(boolean segregated) { + isSegregated = segregated; + } + + public long getAccountId() { + return accountId; + } + + public void setAccountId(long accountId) { + this.accountId = accountId; + } + + public String getQaStatus() { + return qaStatus; + } + + public void setQaStatus(String qaStatus) { + this.qaStatus = qaStatus; + } + + public BigDecimal getWrapQuantity(){ + return null; + } + + public long getMasterBundleId(){ + return 0; + } + + public long getBundleId(){ + return bundleId; + } + + public void setBundleId(long bundleId) { + this.bundleId = bundleId; + } + + public String getAccountTitle() { + return accountTitle; + } + + public void setAccountTitle(String accountTitle) { + this.accountTitle = accountTitle; + } + + @Override + public String toString() { + return "PackagingItems{" + + "id=" + id + + ", itemId=" + itemId + + ", sku='" + sku + '\'' + + ", barcode='" + barcode + '\'' + + ", jobCardId=" + jobCardId + + ", createdAt=" + createdAt + + ", createdBy='" + createdBy + '\'' + + ", isQa=" + isQa + + ", finishedItemId=" + finishedItemId + + ", isSegregated=" + isSegregated + + ", jobCard=" + jobCard + + ", accountId=" + accountId + + ", qaStatus='" + qaStatus + '\'' + + ", bundleId=" + bundleId + + ", accountTitle='" + accountTitle + '\'' + + '}'; + } +} diff --git a/src/main/java/com/utopiaindustries/model/ctp/PackagingItemsRowMapper.java b/src/main/java/com/utopiaindustries/model/ctp/PackagingItemsRowMapper.java new file mode 100644 index 0000000..aee75bc --- /dev/null +++ b/src/main/java/com/utopiaindustries/model/ctp/PackagingItemsRowMapper.java @@ -0,0 +1,28 @@ +package com.utopiaindustries.model.ctp; + +import org.springframework.jdbc.core.RowMapper; + +import java.sql.ResultSet; +import java.sql.SQLException; + +public class PackagingItemsRowMapper implements RowMapper { + @Override + public PackagingItems mapRow(ResultSet rs, int rowNum) throws SQLException { + PackagingItems item = new PackagingItems(); + item.setId(rs.getLong("id")); + item.setItemId(rs.getLong("item_id")); + item.setSku(rs.getString("sku")); + item.setBarcode(rs.getString("barcode")); + item.setJobCardId(rs.getLong("job_card_id")); + item.setCreatedAt(rs.getTimestamp("created_at") != null ? rs.getTimestamp("created_at").toLocalDateTime() : null); + item.setCreatedBy(rs.getString("created_by")); + item.setIsQa(rs.getBoolean("is_qa")); + item.setFinishedItemId(rs.getLong("finish_item_id")); + item.setIsSegregated(rs.getBoolean("is_segregated")); + item.setAccountId(rs.getLong("account_id")); + item.setQaStatus(rs.getString("qa_status")); + item.setBundleId(rs.getLong("bundle_id")); + item.setAccountTitle(rs.getString("account_title")); + return item; + } +} diff --git a/src/main/java/com/utopiaindustries/model/ctp/PurchaseOrderCTP.java b/src/main/java/com/utopiaindustries/model/ctp/PurchaseOrderCTP.java new file mode 100644 index 0000000..cbe772f --- /dev/null +++ b/src/main/java/com/utopiaindustries/model/ctp/PurchaseOrderCTP.java @@ -0,0 +1,84 @@ +package com.utopiaindustries.model.ctp; + +import java.time.LocalDateTime; + +public class PurchaseOrderCTP { + + public enum Status{ + DRAFT, + POSTED, + } + + private long id; + private String purchaseOrderCode; + private long purchaseOrderQuantity; + private long purchaseOrderQuantityRequired; + private String articleName; + private String createdBy; + private LocalDateTime createdAt; + private String status; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getPurchaseOrderCode() { + return purchaseOrderCode; + } + + public void setPurchaseOrderCode(String purchaseOrderCode) { + this.purchaseOrderCode = purchaseOrderCode; + } + + public long getPurchaseOrderQuantity() { + return purchaseOrderQuantity; + } + + public void setPurchaseOrderQuantity(long purchaseOrderQuantity) { + this.purchaseOrderQuantity = purchaseOrderQuantity; + } + + public long getPurchaseOrderQuantityRequired() { + return purchaseOrderQuantityRequired; + } + + public void setPurchaseOrderQuantityRequired(long purchaseOrderQuantityRequired) { + this.purchaseOrderQuantityRequired = purchaseOrderQuantityRequired; + } + + public String getArticleName() { + return articleName; + } + + public void setArticleName(String articleName) { + this.articleName = articleName; + } + + public String getCreatedBy() { + return createdBy; + } + + public void setCreatedBy(String createdBy) { + this.createdBy = createdBy; + } + + public LocalDateTime getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(LocalDateTime createdAt) { + this.createdAt = createdAt; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } +} diff --git a/src/main/java/com/utopiaindustries/querybuilder/ctp/PurchaseOrderCTPQueryBuilder.java b/src/main/java/com/utopiaindustries/querybuilder/ctp/PurchaseOrderCTPQueryBuilder.java new file mode 100644 index 0000000..fceb334 --- /dev/null +++ b/src/main/java/com/utopiaindustries/querybuilder/ctp/PurchaseOrderCTPQueryBuilder.java @@ -0,0 +1,46 @@ +package com.utopiaindustries.querybuilder.ctp; + +import com.utopiaindustries.querybuilder.QueryBuilder; +import com.utopiaindustries.util.CTPDateTimeFormat; +import com.utopiaindustries.util.StringUtils; + +import java.time.LocalDate; + +public class PurchaseOrderCTPQueryBuilder { + public static String buildQuery(String purchaseOrderCode, String articleName, String createdBy, String startDate, String endDate, Long count ){ + // format date + String formattedDate; + String formattedEndDate; + String startDate1 = ""; + String endDate1 = ""; + String purchaseOrderCode1 = purchaseOrderCode == null ? "" : purchaseOrderCode; + String articleName1 = articleName == null ? "" : articleName; + if ( ! StringUtils.isNullOrEmpty( startDate ) ) { + formattedDate = CTPDateTimeFormat.getMySQLFormattedDateString( startDate, CTPDateTimeFormat.HTML5_DATE_INPUT_FORMAT ); + formattedEndDate = CTPDateTimeFormat.getMySQLFormattedDateString( endDate, CTPDateTimeFormat.HTML5_DATE_INPUT_FORMAT ); + startDate1 = String.format( "'%s 00:00:01'", formattedDate ); + if ( ! StringUtils.isNullOrEmpty( endDate ) ) { + endDate1 = String.format("'%s 23:59:59'", formattedEndDate); + } + else { + endDate1 = String.format("'%s 23:59:59'", LocalDate.now() ); + } + } + + return (new QueryBuilder()) + .setTable("cut_to_pack.purchase_order") + .setColumns("*") + .where() + .columnEquals("created_by", createdBy) + .and() + .columnLike("purchase_order_code", "%" + purchaseOrderCode1 + "%") + .and() + .columnLike("article_name", articleName) + .and() + .columnEqualToOrGreaterThan("created_at", startDate1) + .and() + .columnEqualToOrLessThan("created_at", endDate1) + .limit(count.intValue()) + .build(); + } +} diff --git a/src/main/java/com/utopiaindustries/querybuilder/ctp/StichedOfflineItemQueryBuilder.java b/src/main/java/com/utopiaindustries/querybuilder/ctp/StichedOfflineItemQueryBuilder.java index b86c9d7..680887e 100644 --- a/src/main/java/com/utopiaindustries/querybuilder/ctp/StichedOfflineItemQueryBuilder.java +++ b/src/main/java/com/utopiaindustries/querybuilder/ctp/StichedOfflineItemQueryBuilder.java @@ -8,7 +8,7 @@ import java.time.LocalDate; public class StichedOfflineItemQueryBuilder { - public static String buildQuery(String id, String itemId, String sku, String createdStartDate, String createdEndDate, Long bundleId, Long count) { + public static String buildQuery(String id, String itemId, String sku, String QaStatus,String createdStartDate, String createdEndDate, Long bundleId, Long count) { // format date String formattedDate; String formattedEndDate; @@ -24,8 +24,7 @@ public class StichedOfflineItemQueryBuilder { endDate1 = String.format("'%s 23:59:59'", LocalDate.now()); } } - - return ( new QueryBuilder() ) + QueryBuilder qb = (new QueryBuilder()) .setTable("cut_to_pack.stitching_offline_item") .setColumns("*") .where() @@ -33,17 +32,20 @@ public class StichedOfflineItemQueryBuilder { .and() .columnEquals("sku", sku) .and() - .columnEquals("item_id", itemId ) + .columnEquals("item_id", itemId) .and() - .columnEquals("bundle_id", bundleId ) + .columnEquals("bundle_id", bundleId) .and() .columnEqualToOrGreaterThan("created_at", startDate1) .and() - .columnEqualToOrLessThan("created_at", endDate1 ) - .orderBy("id","DESC") - .limit(count) - .build(); + .columnEqualToOrLessThan("created_at", endDate1); + if (!StringUtils.isNullOrEmpty(QaStatus)) { + qb.and().columnEquals("qa_status", QaStatus); + } + qb.orderBy("id", "DESC") + .limit(count); + return qb.build(); } } diff --git a/src/main/java/com/utopiaindustries/restcontroller/FinishedItemRestController.java b/src/main/java/com/utopiaindustries/restcontroller/FinishedItemRestController.java index 045439e..94cb83e 100644 --- a/src/main/java/com/utopiaindustries/restcontroller/FinishedItemRestController.java +++ b/src/main/java/com/utopiaindustries/restcontroller/FinishedItemRestController.java @@ -24,4 +24,9 @@ public class FinishedItemRestController { @RequestParam( "is-segregated") boolean isSegregated ){ return finishedItemDAO.findByTerm( term, isSegregated ); } + @GetMapping( "/search-packaging" ) + public List searchFinishedItemsForPackaging(@RequestParam( "term") String term, + @RequestParam( "is-segregated") boolean isSegregated ){ + return finishedItemDAO.findByTerm( term, true ); + } } diff --git a/src/main/java/com/utopiaindustries/service/BarcodeService.java b/src/main/java/com/utopiaindustries/service/BarcodeService.java index 76a867e..cb4b4d2 100644 --- a/src/main/java/com/utopiaindustries/service/BarcodeService.java +++ b/src/main/java/com/utopiaindustries/service/BarcodeService.java @@ -415,7 +415,7 @@ public class BarcodeService { } document.close(); -// sendPdfToZebraPrinter(pdfPath.toFile()); + sendPdfToZebraPrinter(pdfPath.toFile()); } public void sendPdfToZebraPrinter(File pdfFile) throws Exception { diff --git a/src/main/java/com/utopiaindustries/service/BundleService.java b/src/main/java/com/utopiaindustries/service/BundleService.java index fcd1fdc..a401dff 100644 --- a/src/main/java/com/utopiaindustries/service/BundleService.java +++ b/src/main/java/com/utopiaindustries/service/BundleService.java @@ -125,13 +125,13 @@ public class BundleService { /* * find finished Items by params * */ - public List getStitchedOfflineItems(String id, String itemId, String sku, String createdStartDate, String createdEndDate, Long bundleId, Long count ){ + public List getStitchedOfflineItems(String id, String itemId, String sku,String status, String createdStartDate, String createdEndDate, Long bundleId, Long count ){ List stitchingOfflineItems = new ArrayList<>(); if( count == null ){ count = 100L; } if( StringUtils.isAnyNotNullOrEmpty(id, itemId, sku, createdStartDate, createdEndDate, String.valueOf(bundleId) ) ){ - String query = StichedOfflineItemQueryBuilder.buildQuery( id, itemId, sku, createdStartDate, createdEndDate, bundleId , count ); + String query = StichedOfflineItemQueryBuilder.buildQuery( id, itemId, sku, status,createdStartDate, createdEndDate, bundleId , count ); System.out.println( query ); stitchingOfflineItems = stitchingOfflineItemDAO.findByQuery( query ); } else { diff --git a/src/main/java/com/utopiaindustries/service/InventoryService.java b/src/main/java/com/utopiaindustries/service/InventoryService.java index b7b24c0..bdec62f 100644 --- a/src/main/java/com/utopiaindustries/service/InventoryService.java +++ b/src/main/java/com/utopiaindustries/service/InventoryService.java @@ -28,8 +28,9 @@ public class InventoryService { private final MasterBundleDAO masterBundleDAO; private final FinishedItemDAO finishedItemDAO; private final StitchingOfflineItemDAO stitchingOfflineItemDAO; + private final PackagingItemsDAO packagingItemsDAO; - public InventoryService( JobCardItemDAO jobCardItemDAO, CutPieceDAO cutPieceDAO, BundleDAO bundleDAO, InventoryTransactionLegDAO inventoryTransactionLegDAO, InventoryTransactionDAO inventoryTransactionDAO, JobCardDAO jobCardDAO, CryptographyService cryptographyService, MasterBundleDAO masterBundleDAO, FinishedItemDAO finishedItemDAO, StitchingOfflineItemDAO stitchingOfflineItemDAO) { + public InventoryService(JobCardItemDAO jobCardItemDAO, CutPieceDAO cutPieceDAO, BundleDAO bundleDAO, InventoryTransactionLegDAO inventoryTransactionLegDAO, InventoryTransactionDAO inventoryTransactionDAO, JobCardDAO jobCardDAO, CryptographyService cryptographyService, MasterBundleDAO masterBundleDAO, FinishedItemDAO finishedItemDAO, StitchingOfflineItemDAO stitchingOfflineItemDAO, PackagingItemsDAO packagingItemsDAO) { this.jobCardItemDAO = jobCardItemDAO; this.cutPieceDAO = cutPieceDAO; this.bundleDAO = bundleDAO; @@ -40,6 +41,7 @@ public class InventoryService { this.masterBundleDAO = masterBundleDAO; this.finishedItemDAO = finishedItemDAO; this.stitchingOfflineItemDAO = stitchingOfflineItemDAO; + this.packagingItemsDAO = packagingItemsDAO; } private void updateJobCardInventoryStatus( JobCard card ){ @@ -601,27 +603,93 @@ public class InventoryService { * item is approved and grade is selected then fI is move to grade account */ if ( finishedItem.getQaStatus( ).equalsIgnoreCase( "APPROVED") && finishedItem.getAccountId( ) != 0) { + finishedItem.setIsSegregated( true); + } + updatedItems.add( finishedItem); + } + // save finish items + finishedItemDAO.saveAll( updatedItems); + } + } + + /* + * Packaging items + * */ + @Transactional( rollbackFor = Exception.class, propagation = Propagation.NESTED ) + public void createPackagingItemAndTransaction( FinishedItemWrapper wrapper) { + if ( wrapper != null && wrapper.getItems( ) != null) { + + List items = wrapper.getItems( ); + List updatedItems = new ArrayList<>( ); + List packagingItems = new ArrayList<>( ); + // finished ids + List finishedItemIds = items.stream( ).map( FinishedItem::getId) + .collect( Collectors.toList( )); + // stitched ids + List stitchedItemIds = items.stream( ).map( FinishedItem::getStitchedItemId) + .collect( Collectors.toList( )); + + // find parent doc type last IN transaction map + Map lastFinishedItemIdInTransactionMap = inventoryTransactionLegDAO + .findLastTransactionByParentIdAndParentType( InventoryTransactionLeg.Type.IN.name( ), finishedItemIds, InventoryArtifactType.FINISHED_ITEM.name( )) + .stream( ) + .collect( Collectors.toMap( InventoryTransactionLeg::getParentDocumentId, Function.identity( ))); + + // create transaction + InventoryTransaction transaction = createInventoryTransaction( "Against Segregation of Finished Items"); + + + // create IN and OUT for all approved items + for ( FinishedItem finishedItem : items) { + InventoryTransactionLeg lastInvTransaction = lastFinishedItemIdInTransactionMap.getOrDefault( finishedItem.getId( ), null); + finishedItem.setIsQa( true); + + if ( finishedItem.getQaStatus( ).equalsIgnoreCase( "APPROVED") && finishedItem.getIsSegregated( )) { // create OUT and IN transactions for FI + PackagingItems packagingItems1 = (createPackagingItem(finishedItem)); + packagingItems1.setId(packagingItemsDAO.save(packagingItems1)); if ( lastInvTransaction != null) { // OUT long fromAccount = lastInvTransaction.getAccountId( ); createInventoryTransactionLeg( transaction, finishedItem, fromAccount, InventoryTransactionLeg.Type.OUT.name( ), InventoryArtifactType.FINISHED_ITEM.name( )); // IN - createInventoryTransactionLeg( transaction, finishedItem, finishedItem.getAccountId( ), InventoryTransactionLeg.Type.IN.name( ), InventoryArtifactType.FINISHED_ITEM.name( )); + createInventoryTransactionLeg( transaction, packagingItems1, 8, InventoryTransactionLeg.Type.IN.name( ), InventoryArtifactType.PACKAGING.name( )); } finishedItem.setIsSegregated( true); + packagingItems.add(packagingItems1); } updatedItems.add( finishedItem); } - finishedItemDAO.saveAll( updatedItems); // save finish items + finishedItemDAO.saveAll( updatedItems); + System.out.println(packagingItems); } } + + /* * find item summary by account * */ public List findItemSummaryByAccountId( long accountId) { return inventoryTransactionLegDAO.findSummaryByAccountId( accountId); } + + private PackagingItems createPackagingItem(FinishedItem finishedItem){ + Authentication authentication = SecurityContextHolder.getContext( ).getAuthentication( ); + PackagingItems packagingItems = new PackagingItems(); + packagingItems.setItemId(finishedItem.getItemId()); + packagingItems.setAccountId(finishedItem.getAccountId()); + packagingItems.setFinishedItemId(finishedItem.getId()); + packagingItems.setJobCardId(finishedItem.getJobCardId()); + packagingItems.setJobCard(finishedItem.getJobCard()); + packagingItems.setSku(finishedItem.getSku()); + packagingItems.setBarcode(finishedItem.getBarcode()); + packagingItems.setCreatedAt(LocalDateTime.now()); + packagingItems.setCreatedBy(authentication.getName( )); + packagingItems.setIsQa(finishedItem.getIsQa()); + packagingItems.setIsSegregated(finishedItem.getIsSegregated()); + packagingItems.setQaStatus(finishedItem.getQaStatus()); + return packagingItems; + } } diff --git a/src/main/java/com/utopiaindustries/service/PackagingService.java b/src/main/java/com/utopiaindustries/service/PackagingService.java new file mode 100644 index 0000000..f0b86b2 --- /dev/null +++ b/src/main/java/com/utopiaindustries/service/PackagingService.java @@ -0,0 +1,22 @@ +package com.utopiaindustries.service; + +import com.utopiaindustries.dao.ctp.PackagingItemsDAO; +import com.utopiaindustries.model.ctp.FinishedItemWrapper; +import org.springframework.stereotype.Service; + +@Service +public class PackagingService { + + private final InventoryService inventoryService; + private final PackagingItemsDAO packagingItemsDAO; + + public PackagingService(InventoryService inventoryService, PackagingItemsDAO packagingItemsDAO) { + this.inventoryService = inventoryService; + this.packagingItemsDAO = packagingItemsDAO; + } + + public void createPackagingItem(FinishedItemWrapper wrapper){ + inventoryService.createPackagingItemAndTransaction(wrapper); + + } +} diff --git a/src/main/java/com/utopiaindustries/service/PurchaseOrderCTPService.java b/src/main/java/com/utopiaindustries/service/PurchaseOrderCTPService.java new file mode 100644 index 0000000..306c795 --- /dev/null +++ b/src/main/java/com/utopiaindustries/service/PurchaseOrderCTPService.java @@ -0,0 +1,75 @@ +package com.utopiaindustries.service; + +import com.utopiaindustries.dao.ctp.PurchaseOrderCTPDao; +import com.utopiaindustries.model.ctp.*; +import com.utopiaindustries.querybuilder.ctp.JobCardQueryBuilder; +import com.utopiaindustries.querybuilder.ctp.PurchaseOrderCTPQueryBuilder; +import com.utopiaindustries.util.StringUtils; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +@Service +public class PurchaseOrderCTPService { + + private final PurchaseOrderCTPDao purchaseOrderCTPDao; + + public PurchaseOrderCTPService(PurchaseOrderCTPDao purchaseOrderCTPDao) { + this.purchaseOrderCTPDao = purchaseOrderCTPDao; + } + + /* + * search by id + * */ + public PurchaseOrderCTP searchPurchaseOrderById(long id){ + return purchaseOrderCTPDao.find(id); + } + + /* + * create new job card + * */ + public PurchaseOrderCTP createNewPurchaseOrderCTP() { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + PurchaseOrderCTP purchaseOrderCTP = new PurchaseOrderCTP(); + purchaseOrderCTP.setCreatedBy( authentication.getName() ); + purchaseOrderCTP.setCreatedAt( LocalDateTime.now() ); + return purchaseOrderCTP; + } + + /* + * save card + * */ + @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) { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + List list = new ArrayList<>(); + String createdBy = authentication.getName(); + if( limit == null ){ + limit = 100L; + } + if( !StringUtils.isAnyNotNullOrEmpty(purchaseOrderCode, articleName) ){ + for (GrantedAuthority role : authentication.getAuthorities()){ + if (role.toString().equals("ROLE_ADMIN")){ + createdBy = ""; + } + } + String query = PurchaseOrderCTPQueryBuilder.buildQuery(purchaseOrderCode, articleName, createdBy, StartDate, EndDate, limit ); + System.out.println( query ); + list = purchaseOrderCTPDao.findByQuery( query ); + }else { + list = purchaseOrderCTPDao.findByUserAndLimit( authentication.getName(), limit ); + } + return list; + } + +} diff --git a/src/main/resources/static/js/finishing/finished-item-segregation-form.js b/src/main/resources/static/js/finishing/finished-item-segregation-form.js index 32c39ec..56af686 100644 --- a/src/main/resources/static/js/finishing/finished-item-segregation-form.js +++ b/src/main/resources/static/js/finishing/finished-item-segregation-form.js @@ -90,7 +90,6 @@ }, methods : { onItemSelect: function (id, item) { - console.log("wdwawdwwadwwdwda",item.id) this.items.push(item); }, removeItem: function (index) { diff --git a/src/main/resources/static/js/packaging/packaging-item-form.js b/src/main/resources/static/js/packaging/packaging-item-form.js new file mode 100644 index 0000000..ad0c744 --- /dev/null +++ b/src/main/resources/static/js/packaging/packaging-item-form.js @@ -0,0 +1,92 @@ +( async function(){ + + Vue.prototype.$accounts = window.ctp.accounts; + + Vue.component('finish-item-table',{ + props : [ 'items' ], + methods: { + getFormattedDateTime: function (dateTime) { + if (!!dateTime) { + return dateTime.split('T')[0] + ' ' + dateTime.split('T')[1]; + } + return luxon.DateTime.now().toFormat('yyyy-MM-dd HH:mm:ss'); + }, + removeItem: function (index) { + this.$emit('remove-item', index) + } + }, + template : ` + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDItem IDSkuCreated ByCreated AtJob Card IDBarcodeStatusAction
+ + + + + + + + + + + + + {{item.id}} + {{item.itemId}} {{item.sku}} {{item.createdBy}} {{ getFormattedDateTime( item.createdAt) }} {{item.jobCardId}} {{item.barcode}} {{item.qaStatus}} + +
+ `, + + }) + + let app = new Vue({ + el : '#packagingApp', + data : { + items : [] + }, + methods : { + onItemSelect: function (id, item) { + this.items.push(item); + }, + removeItem: function (index) { + this.items.splice(index, 1); + }, + hasDuplicates: function () { + const ids = this.items.map(item => item.id); + const uniqueIds = new Set(ids); + return ids.length !== uniqueIds.size; + }, + }, + mounted : function () { + console.log( this.$accounts ) + } + }) + +})(jQuery) \ No newline at end of file diff --git a/src/main/resources/templates/_fragments.html b/src/main/resources/templates/_fragments.html index 8569108..833f851 100644 --- a/src/main/resources/templates/_fragments.html +++ b/src/main/resources/templates/_fragments.html @@ -31,6 +31,10 @@