Advertisement
aadddrr

GetAuthorizedTopSellingProductBalanceStockListForGoodsTransf

Mar 30th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package org.jleaf.erp.inv.bo.productbalancestock;
  2.  
  3. import java.util.List;
  4.  
  5. import javax.persistence.Query;
  6.  
  7. import org.jleaf.common.entity.UserRole;
  8. import org.jleaf.core.AbstractBusinessFunction;
  9. import org.jleaf.core.BusinessFunction;
  10. import org.jleaf.core.CoreException;
  11. import org.jleaf.core.CoreExceptionConstants;
  12. import org.jleaf.core.Dto;
  13. import org.jleaf.core.GeneralConstants;
  14. import org.jleaf.core.annotation.ErrorList;
  15. import org.jleaf.core.annotation.Info;
  16. import org.jleaf.core.annotation.InfoIn;
  17. import org.jleaf.core.annotation.InfoOut;
  18. import org.jleaf.core.dao.CriteriaHelper;
  19. import org.jleaf.core.dao.QueryBuilder;
  20. import org.jleaf.erp.inv.bo.InventoryCustomConstantsForXCom;
  21. import org.jleaf.erp.inv.dao.InventoryDao;
  22. import org.jleaf.erp.inv.entity.ProductBalance;
  23. import org.jleaf.erp.inv.entity.ProductBalanceStock;
  24. import org.jleaf.erp.master.entity.CommissionOu;
  25. import org.jleaf.erp.master.entity.CtgrProduct;
  26. import org.jleaf.erp.master.entity.PolicyProduct;
  27. import org.jleaf.erp.master.entity.PolicyWarehouse;
  28. import org.jleaf.erp.master.entity.Product;
  29. import org.jleaf.erp.master.entity.SubCtgrProduct;
  30. import org.jleaf.erp.master.entity.Uom;
  31. import org.jleaf.erp.master.entity.Warehouse;
  32. import org.jleaf.erp.master.entity.WarehouseOu;
  33. import org.jleaf.util.DtoUtil;
  34. import org.jleaf.util.ValidationUtil;
  35. import org.springframework.beans.factory.annotation.Autowired;
  36. import org.springframework.stereotype.Service;
  37.  
  38. /**
  39.  *
  40.  * @author Adrian
  41.  * Mar 30, 2017
  42.  */
  43.  
  44. @Service
  45. @InfoIn(value = {
  46.         @Info(name = "tenantId", description = "tenant id", type = Long.class),
  47.         @Info(name = "warehouseId", description = "warehouse from id", type = Long.class),
  48.         @Info(name = "subCtgrProductId", description = "sub ctgr product id", type = Long.class),
  49.         @Info(name = "productCodeName", description = "product code / name", type = String.class),
  50.         @Info(name = "serialNumber", description = "serial No", type = String.class),
  51.         @Info(name = "dateFrom", description = "date from", type = String.class),
  52.         @Info(name = "dateTo", description = "date to", type = String.class),
  53.         @Info(name = "warehouseToId", description = "warehouse to id", type = Long.class),
  54.         @Info(name = "active", description = "flag product active / tidak", type = String.class),
  55.         @Info(name = "userLoginId", description = "user login id", type = Long.class),
  56.         @Info(name = "roleLoginId", description = "role login id", type = Long.class),
  57.         @Info(name = "limit", description = "limit", type = Long.class),
  58.         @Info(name = "offset", description = "offset", type = Long.class)
  59. })
  60. @InfoOut(value = {
  61.         @Info(name = "productBalanceStockList", description = "list of product balance stock (id, warehouseId, warehouseCode, warehouseName, productId, productCode, productName, ctgrProductId, ctgrProductCode, ctgrProductName, subCtgrProductId, subCtgrProductCode, subCtgrProductName, productBalanceId, serialNumber, lotNumber, productExpiredDate, productYearMade, qty, baseUomId, baseUomCode, baseUomName, minQty, maxQty, productStatus)", type = List.class)
  62. })
  63. @ErrorList(errorKeys = {
  64.         CoreExceptionConstants.DTO_CANNOT_NULL
  65. })
  66. public class GetAuthorizedTopSellingProductBalanceStockListForGoodsTransferOut extends AbstractBusinessFunction implements BusinessFunction {
  67.    
  68.     @Autowired
  69.     InventoryDao inventoryDao;
  70.  
  71.     public String getDescription() {
  72.         return "get authorized product balance stock list for goods transfer";
  73.     }
  74.  
  75.     @SuppressWarnings("unchecked")
  76.     public Dto execute(Dto inputDto) throws Exception {
  77.         if (inputDto == null) {
  78.             throw new CoreException(CoreExceptionConstants.DTO_CANNOT_NULL);
  79.         }
  80.        
  81.         ValidationUtil.valDtoContainsKey(inputDto, "tenantId");
  82.         ValidationUtil.valDtoContainsKey(inputDto, "warehouseId");
  83.         ValidationUtil.valDtoContainsKey(inputDto, "subCtgrProductId");
  84.         ValidationUtil.valDtoContainsKey(inputDto, "productCodeName");
  85.         ValidationUtil.valDtoContainsKey(inputDto, "serialNumber");
  86.         ValidationUtil.valDtoContainsKey(inputDto, "dateFrom");
  87.         ValidationUtil.valDtoContainsKey(inputDto, "dateTo");
  88.         ValidationUtil.valDtoContainsKey(inputDto, "warehouseToId");
  89.         ValidationUtil.valDtoContainsKey(inputDto, "active");
  90.         ValidationUtil.valDtoContainsKey(inputDto, "userLoginId");
  91.         ValidationUtil.valDtoContainsKey(inputDto, "roleLoginId");
  92.         ValidationUtil.valDtoContainsKey(inputDto, "limit");
  93.         ValidationUtil.valDtoContainsKey(inputDto, "offset");
  94.        
  95.         ValidationUtil.valDate(inputDto, "dateFrom");
  96.         ValidationUtil.valDate(inputDto, "dateTo");
  97.  
  98.         List<Object[]> result = null;
  99.        
  100.         QueryBuilder builder = new QueryBuilder();
  101.         builder.add(" WITH ")
  102.                .add(InventoryCustomConstantsForXCom.TOP_SELLING_PRODUCT_TABLE_NAME)
  103.                .add(" AS ( ")
  104.                .add(" SELECT L.product_id, SUM(L.qty) AS selling_qty FROM ")
  105.                .add(InventoryCustomConstantsForXCom.I_TRX_POS_TABLE_NAME)
  106.                .add(" K INNER JOIN ")
  107.                .add(InventoryCustomConstantsForXCom.I_TRX_POS_ITEM_TABLE_NAME)
  108.                .add(" L ON K.trx_pos_id = L.trx_pos_id AND K.tenant_id = L.tenant_id AND K.process_no = L.process_no ")
  109.                .add(" INNER JOIN ")
  110.                .add(CommissionOu.TABLE_NAME)
  111.                .add(" M ON L.tenant_id = M.tenant_id AND L.group_product_ou_id = M.group_product_ou_id ")
  112.                .add(" INNER JOIN ")
  113.                .add(WarehouseOu.TABLE_NAME)
  114.                .add(" O ON K.ou_id = O.ou_id ")
  115.                .add(" WHERE K.tenant_id = :tenantId AND O.warehouse_id = :warehouseToId AND K.doc_date BETWEEN :dateFrom AND :dateTo AND K.doc_date BETWEEN M.date_from AND M.date_to AND M.flg_promo = :NO ")
  116.                .add(" AND NOT EXISTS( SELECT 1 FROM ")
  117.                .add(InventoryCustomConstantsForXCom.I_TRX_LOG_VOIDED_POS_TABLE_NAME)
  118.                .add(" N WHERE K.tenant_id = N.tenant_id AND K.doc_no = N.doc_no AND K.doc_date = N.doc_date AND K.ou_id = N.ou_id ) ")
  119.                .add(" GROUP BY L.product_id ) ")
  120.                .add("SELECT a.product_balance_stock_id, a.warehouse_id, b.warehouse_code, b.warehouse_name, a.product_id, c.product_code, c.product_name, c.ctgr_product_id, d.ctgr_product_code, d.ctgr_product_name, c.sub_ctgr_product_id, e.sub_ctgr_product_code, e.sub_ctgr_product_name, a.product_balance_id, f.serial_number, f.lot_number, f.product_expired_date, f.product_year_made, SUM(a.qty) AS qty, c.base_uom_id, g.uom_code, g.uom_name, c.min_qty, c.max_qty, a.product_status FROM ")
  121.                .add(ProductBalanceStock.TABLE_NAME)
  122.                .add(" a INNER JOIN ")
  123.                .add(Warehouse.TABLE_NAME)
  124.                .add(" b ON a.warehouse_id = b.warehouse_id ")
  125.                .add(" INNER JOIN ")
  126.                .add(Product.TABLE_NAME)
  127.                .add(" c ON a.product_id = c.product_id ")
  128.                .add(" INNER JOIN ")
  129.                .add(CtgrProduct.TABLE_NAME)
  130.                .add(" d ON c.ctgr_product_id = d.ctgr_product_id ")
  131.                .add(" INNER JOIN ")
  132.                .add(SubCtgrProduct.TABLE_NAME)
  133.                .add(" e ON c.sub_ctgr_product_id = e.sub_ctgr_product_id ")
  134.                .add(" INNER JOIN ")
  135.                .add(ProductBalance.TABLE_NAME)
  136.                .add(" f ON a.product_balance_id = f.product_balance_id ")
  137.                .add(" INNER JOIN ")
  138.                .add(Uom.TABLE_NAME)
  139.                .add(" g ON c.base_uom_id = g.uom_id ")
  140.                .add(" INNER JOIN ")
  141.                .add(UserRole.TABLE_NAME)
  142.                .add(" h ON h.user_id = :userLoginId AND h.role_id = :roleLoginId ")
  143.                .add(" INNER JOIN ")
  144.                .add(PolicyProduct.TABLE_NAME)
  145.                .add(" i ON i.sub_ctgr_product_id = c.sub_ctgr_product_id AND i.user_role_id = h.user_role_id ")
  146.                .add(" INNER JOIN ")
  147.                .add(PolicyWarehouse.TABLE_NAME)
  148.                .add(" j ON j.warehouse_id = a.warehouse_id AND j.user_role_id = h.user_role_id ")
  149.                .add(" INNER JOIN ")
  150.                .add(InventoryCustomConstantsForXCom.TOP_SELLING_PRODUCT_TABLE_NAME)
  151.                .add(" P ON P.product_id = A.product_id ")
  152.                .add(" WHERE a.tenant_id = :tenantId ")
  153.                .addIfNotEquals(inputDto.getLong("warehouseId"), GeneralConstants.NULL_REF_VALUE_LONG, " AND a.warehouse_id = " + inputDto.getLong("warehouseId") + " ")
  154.                .addIfNotEquals(inputDto.getLong("subCtgrProductId"), GeneralConstants.NULL_REF_VALUE_LONG, " AND c.sub_ctgr_product_id = " + inputDto.getLong("subCtgrProductId") + " ")
  155.                .addIfNotEmpty(inputDto.getString("productCodeName"), " AND (" + CriteriaHelper.likeExpressionIgnoreCase(inputDto.getString("productCodeName"), "c.product_code") + " OR " + CriteriaHelper.likeExpressionIgnoreCase(inputDto.getString("productCodeName"), "c.product_name") + ")")
  156.                .addIfNotEmpty(inputDto.getString("serialNumber"), " AND " + CriteriaHelper.likeExpressionIgnoreCase(inputDto.getString("serialNumber"), "f.serial_number"))
  157.                .addIfNotEmpty(inputDto.getString("active"), " AND c.active = '" + inputDto.getString("active") + "'")
  158.                .add(" GROUP BY a.product_balance_stock_id, a.warehouse_id, b.warehouse_code, b.warehouse_name, a.product_id, c.product_code, c.product_name, c.ctgr_product_id, d.ctgr_product_code, d.ctgr_product_name, c.sub_ctgr_product_id, e.sub_ctgr_product_code, e.sub_ctgr_product_name, a.product_balance_id, f.serial_number, f.lot_number, f.product_expired_date, f.product_year_made, c.base_uom_id, g.uom_code, g.uom_name, c.min_qty, c.max_qty, a.product_status, P.selling_qty ")
  159.                .add(" ORDER BY P.selling_qty ");
  160.    
  161.                
  162.         Query q = inventoryDao.createNativeQuery(builder.toString());
  163.         q.setParameter("tenantId", inputDto.getLong("tenantId"));
  164.         q.setParameter("userLoginId", inputDto.getLong("userLoginId"));
  165.         q.setParameter("roleLoginId", inputDto.getLong("roleLoginId"));
  166.         q.setParameter("dateFrom", inputDto.getString("dateFrom"));
  167.         q.setParameter("dateTo", inputDto.getString("dateTo"));
  168.         q.setParameter("NO", GeneralConstants.NO);
  169.         q.setParameter("warehouseToId", inputDto.getLong("warehouseToId"));
  170.  
  171.         Long limit = inputDto.getLong("limit");
  172.         Long offset = inputDto.getLong("offset");
  173.         if(limit!=null && offset!=null){
  174.             q.setMaxResults(limit.intValue());
  175.             q.setFirstResult(offset.intValue());
  176.         }
  177.        
  178.         result = q.getResultList();
  179.         return new Dto().putList("productBalanceStockList", DtoUtil.createDtoListFromArray(result,
  180.                 "id", "warehouseId", "warehouseCode", "warehouseName", "productId", "productCode", "productName", "ctgrProductId", "ctgrProductCode", "ctgrProductName", "subCtgrProductId", "subCtgrProductCode", "subCtgrProductName", "productBalanceId", "serialNumber", "lotNumber", "productExpiredDate", "productYearMade", "qty", "baseUomId", "baseUomCode", "baseUomName", "minQty", "maxQty", "productStatus"));
  181.     }
  182.  
  183. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement