Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package org.jleaf.erp.inv.bo.doreceipt;
- import java.util.ArrayList;
- import java.util.List;
- import javax.persistence.Query;
- import org.jleaf.common.CommonExceptionConstants;
- import org.jleaf.core.BusinessFunction;
- import org.jleaf.core.BusinessTransaction;
- import org.jleaf.core.CoreException;
- import org.jleaf.core.DefaultBusinessTransaction;
- import org.jleaf.core.Dto;
- import org.jleaf.core.annotation.ErrorList;
- import org.jleaf.core.annotation.Info;
- import org.jleaf.core.annotation.InfoIn;
- import org.jleaf.core.annotation.InfoOut;
- import org.jleaf.core.dao.QueryBuilder;
- import org.jleaf.erp.inv.InventoryConstants;
- import org.jleaf.erp.inv.InventoryExceptionConstants;
- import org.jleaf.erp.inv.dao.BalanceDeliveryOrderItemDao;
- import org.jleaf.erp.inv.dao.DeliveryOrderReceiptDao;
- import org.jleaf.erp.inv.dao.DeliveryOrderReceiptItemDao;
- import org.jleaf.erp.inv.dao.DeliveryOrderReceiptProductDao;
- import org.jleaf.erp.inv.entity.BalanceDeliveryOrderItem;
- import org.jleaf.erp.inv.entity.DeliveryOrderReceiptItem;
- import org.jleaf.erp.inv.entity.DeliveryOrderReceiptProduct;
- import org.jleaf.util.Calc;
- import org.jleaf.util.GsonUtil;
- import org.jleaf.util.ValidationUtil;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Qualifier;
- import org.springframework.stereotype.Service;
- /**
- *
- * @see http://jleaf.org:8181/browse/INVSVC-22
- * @author Fredi, 26 Agustus 2014
- *
- * Process
- * - validate input
- * - val tenant login not admin
- * - find do receipt
- * - validate doc draft
- * - get balance do item from do reff
- * - per balance do item update status item to R
- * - perbalance do item update : restore qtyIntReturn and qtyReturn from do receipt item
- * - prepare remove do receipt
- * - remove do receipt
- * - remove do receipt item
- * - remove do receipt product
- *
- */
- //@formatter:off
- @Service
- @InfoIn(value = {
- @Info(name = "tenantLoginId", description = "Tenant login id", type = Long.class),
- @Info(name = "userLoginId", description = "User login id", type = Long.class),
- @Info(name = "roleLoginId", description = "User login id", type = Long.class),
- @Info(name = "datetime", description = "Datetime", type = String.class),
- @Info(name = "id", description = "do Id", type = Long.class)
- })
- @InfoOut(value = {
- })
- @ErrorList(errorKeys = {
- CommonExceptionConstants.TENANT_LOGIN_CANT_USED,
- CommonExceptionConstants.DATA_CANT_USE_DIFF_TENANT
- })
- //@formatter:on
- public class RemoveDeliveryOrderReceipt extends DefaultBusinessTransaction implements BusinessTransaction {
- @Autowired
- @Qualifier("valTenantLoginCanUse")
- BusinessFunction valTenantLoginCanUse;
- @Autowired
- @Qualifier("findDeliveryOrderReceiptById")
- BusinessFunction findDeliveryOrderReceiptById;
- @Autowired
- @Qualifier("getBalanceDeliveryOrderItemListByDeliveryOrder")
- BusinessFunction getBalanceDeliveryOrderItemListByDeliveryOrder;
- @Autowired
- @Qualifier("findDeliveryOrderReceiptItemByDeliveryOrderItem")
- BusinessFunction findDeliveryOrderReceiptItemByDeliveryOrderItem;
- @Autowired
- DeliveryOrderReceiptDao deliveryOrderReceiptDao;
- @Autowired
- DeliveryOrderReceiptItemDao deliveryOrderReceiptItemDao;
- @Autowired
- DeliveryOrderReceiptProductDao deliveryOrderReceiptProductDao;
- @Autowired
- BalanceDeliveryOrderItemDao balanceDeliveryOrderItemDao;
- @Override
- public String getDescription() {
- return "Remove delivery order receipt";
- }
- @SuppressWarnings("unchecked")
- @Override
- public Dto prepare(Dto inputDto, Dto originalDto) throws Exception {
- ValidationUtil.valDtoContainsKey(inputDto, "tenantLoginId");
- ValidationUtil.valDtoContainsKey(inputDto, "userLoginId");
- ValidationUtil.valDtoContainsKey(inputDto, "roleLoginId");
- ValidationUtil.valDtoContainsKey(inputDto, "datetime");
- Long tenantLoginId = inputDto.getLong("tenantLoginId");
- Long userLoginId = inputDto.getLong("userLoginId");
- Long roleLoginId = inputDto.getLong("roleLoginId");
- String datetime = inputDto.getString("datetime");
- // - validation: tenant login can use
- Dto inputDtoForValTenantLoginCanUse = new Dto();
- inputDtoForValTenantLoginCanUse.put("tenantLoginId", tenantLoginId);
- inputDtoForValTenantLoginCanUse.put("userLoginId", userLoginId);
- inputDtoForValTenantLoginCanUse.put("roleLoginId", roleLoginId);
- valTenantLoginCanUse.execute(inputDto);
- ValidationUtil.valDtoContainsKey(inputDto, "id");
- Long id = inputDto.getLong("id");
- Dto deliveryOrderReceiptDto = findDeliveryOrderReceiptById.execute(new Dto().put("id", id));
- if (!deliveryOrderReceiptDto.getLong("tenantId").equals(inputDto.getLong("tenantLoginId"))) {
- throw new CoreException(CommonExceptionConstants.DATA_CANT_CHANGE_CAUSE_TENANT, "Delivery Order Receipt");
- }
- if (!InventoryConstants.DRAFT_TRANSACTION.equals(deliveryOrderReceiptDto.getString("statusDoc"))) {
- throw new CoreException(InventoryExceptionConstants.DOC_ALREADY_SUBMITTED);
- }
- // prepare update balance
- List<Dto> updateBalanceDeliveryOrderItemList = new ArrayList<Dto>();
- // find balance do item
- Dto outputGetBalanceDeliveryOrderItemListByDeliveryOrder = getBalanceDeliveryOrderItemListByDeliveryOrder.execute(new Dto()
- .put("doId", deliveryOrderReceiptDto.get("refId")));
- List<Dto> balanceDeliveryOrderItemList = outputGetBalanceDeliveryOrderItemListByDeliveryOrder.getList("balanceDeliveryOrderItemList");
- for (Dto balanceDeliveryOrderItem : balanceDeliveryOrderItemList) {
- balanceDeliveryOrderItem.put("statusItem", InventoryConstants.RELEASED_TRANSACTION);
- this.prepareUpdateAudit(balanceDeliveryOrderItem, userLoginId, datetime);
- updateBalanceDeliveryOrderItemList.add(balanceDeliveryOrderItem);
- }
- // prepare remove
- inputDto.put("deliveryOrderReceiptDto", deliveryOrderReceiptDto);
- inputDto.put("updateBalanceDeliveryOrderItemList", updateBalanceDeliveryOrderItemList);
- inputDto.put("doId", deliveryOrderReceiptDto.getLong("refId"));
- return null;
- }
- @SuppressWarnings("unchecked")
- @Override
- public Dto process(Dto inputDto, Dto originalDto) throws Exception {
- Dto deliveryOrderReceiptDto = inputDto.getDto("deliveryOrderReceiptDto");
- // update balance do item
- List<Dto> updateBalanceDeliveryOrderItemList = inputDto.getList("updateBalanceDeliveryOrderItemList");
- for (Dto balanceDeliveryOrderItemDto : updateBalanceDeliveryOrderItemList) {
- BalanceDeliveryOrderItem balanceDeliveryOrderItem = GsonUtil.fromDto(balanceDeliveryOrderItemDto, BalanceDeliveryOrderItem.class);
- balanceDeliveryOrderItem = balanceDeliveryOrderItemDao.merge(balanceDeliveryOrderItem.getDeliveryOrderItemId(), balanceDeliveryOrderItem);
- }
- // update status sl_so, sl_so_balance_item, sl_so_balance_invoice
- QueryBuilder builder = new QueryBuilder();
- builder.add(" SELECT COALESCE(COUNT(1), 0) FROM sl_update_status_so_for_remove_do_receipt(:doId, :userId, :datetime)");
- Query q = deliveryOrderReceiptProductDao.createNativeQuery(builder.toString());
- q.setParameter("doId", inputDto.get("doId"));
- q.setParameter("userId", inputDto.get("userLoginId"));
- q.setParameter("datetime", inputDto.get("datetime"));
- Object obj = q.getSingleResult();
- // remove do receipt product
- Query queryDeleteDoReceiptProduct = deliveryOrderReceiptProductDao.createNativeQuery(new QueryBuilder()
- .add(" DELETE FROM "+DeliveryOrderReceiptProduct.TABLE_NAME+" ")
- .add(" WHERE EXISTS ( ")
- .add(" SELECT 1 ")
- .add(" FROM "+DeliveryOrderReceiptItem.TABLE_NAME+" ")
- .add(" WHERE "+DeliveryOrderReceiptItem.TABLE_NAME+".do_receipt_item_id = "+DeliveryOrderReceiptProduct.TABLE_NAME+".do_receipt_item_id ")
- .add(" AND "+DeliveryOrderReceiptItem.TABLE_NAME+".do_receipt_id = :doReceiptId ")
- .add(" ) ")
- .toString());
- queryDeleteDoReceiptProduct.setParameter("doReceiptId", deliveryOrderReceiptDto.getLong("id"));
- queryDeleteDoReceiptProduct.executeUpdate();
- // remove do receipt item
- Query queryDeleteDoReceiptItem = deliveryOrderReceiptProductDao.createNativeQuery(new QueryBuilder()
- .add(" DELETE FROM "+DeliveryOrderReceiptItem.TABLE_NAME+" ")
- .add(" WHERE do_receipt_id = :doReceiptId ")
- .toString());
- queryDeleteDoReceiptItem.setParameter("doReceiptId", deliveryOrderReceiptDto.getLong("id"));
- queryDeleteDoReceiptItem.executeUpdate();
- // remove do receipt
- deliveryOrderReceiptDao.remove(deliveryOrderReceiptDto.getLong("id"));
- return new Dto();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement