tko_pb

InoutActionHandler 25 september

Sep 25th, 2018
379
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.18 KB | None | 0 0
  1. package org.wirabumi.gen.oez.porting;
  2.  
  3. import java.math.BigDecimal;
  4. import java.math.BigInteger;
  5. import java.sql.SQLException;
  6. import java.util.List;
  7.  
  8. import org.openbravo.base.exception.OBException;
  9. import org.openbravo.base.model.Entity;
  10. import org.openbravo.base.secureApp.VariablesSecureApp;
  11. import org.openbravo.dal.service.OBDal;
  12. import org.openbravo.erpCommon.utility.OBError;
  13. import org.openbravo.model.ad.ui.Tab;
  14. import org.openbravo.model.common.order.Order;
  15. import org.openbravo.model.common.order.OrderLine;
  16. import org.openbravo.model.materialmgmt.transaction.ShipmentInOut;
  17. import org.openbravo.model.materialmgmt.transaction.ShipmentInOutLine;
  18. import org.wirabumi.gen.oez.event.DocumentRoutingHandlerAction;
  19.  
  20. public class InoutActionHandler extends DocumentRoutingHandlerAction {
  21.     private final String reactiveStatus="RE";
  22.     private final String completeStatus="CO";
  23.     private final String draftStatus="DR";
  24.     private final String closedStatus="CL";
  25.     private final String voidStatus="VO";
  26.     private final String inoutProcessID="109";
  27.  
  28.     @Override
  29.     public void doRouting(String adWindowId, String adTabId,
  30.             String doc_status_to, VariablesSecureApp vars, List<String> recordId) {
  31.         if (doc_status_to.equalsIgnoreCase(reactiveStatus))
  32.             throw new OBException("@ActionNotAllowedHere@"); //shipment inout tidak boleh di reactive
  33.  
  34.         for (String inoutID : recordId){
  35.             ShipmentInOut inout = OBDal.getInstance().get(ShipmentInOut.class, inoutID);
  36.             String docstatus=inout.getDocumentStatus();
  37.             String docaction=inout.getDocumentAction();
  38.  
  39.             if (doc_status_to.equalsIgnoreCase(completeStatus)){
  40.  
  41.                 for (ShipmentInOutLine inOutLineid : inout.getMaterialMgmtShipmentInOutLineList() ) {
  42.  
  43.                     if (inout.getSalesOrder() == null ) {
  44.                         continue;
  45.                     }
  46.  
  47.                     BigDecimal orderQuantityGR = inOutLineid.getMovementQuantity();
  48.                     OrderLine lineGoodReceipt =  inOutLineid.getSalesOrderLine();  
  49.  
  50.                     BigDecimal productOverDelivery = lineGoodReceipt.getProduct().getOezOverDelivery();
  51.                     if (productOverDelivery == null)
  52.                     {  
  53.                         productOverDelivery = new BigDecimal (0);
  54.                     }
  55.                     boolean productOverDeliveryNull = productOverDelivery.floatValue() == 0.0f;    
  56.                     BigDecimal orderQuantityPO = lineGoodReceipt.getOrderedQuantity();
  57.                     BigDecimal reservedQuantity = lineGoodReceipt.getReservedQuantity();
  58.  
  59.                     // jika product memiliki over delivery
  60.                     BigDecimal bagi100 = BigDecimal.valueOf(100);
  61.                     BigDecimal hasilPoPlusOver =  productOverDelivery.divide(bagi100).multiply(orderQuantityPO).add(orderQuantityPO);
  62.                     BigDecimal reserVerif = hasilPoPlusOver.add(reservedQuantity);
  63.  
  64.                     if (orderQuantityGR.intValue() > reserVerif.intValue())
  65.                     {
  66.                         throw new OBException("Value of order Good Reciept is higher than Purchase Order");  
  67.                     }
  68.                    
  69.                     if(productOverDelivery == null ){
  70.                         BigDecimal reserVerifWithoutOver = orderQuantityPO.add(reservedQuantity);  
  71.                             if(orderQuantityGR.floatValue() > reserVerifWithoutOver.floatValue()) {
  72.                                 throw new OBException("Quantity of Godd receipt is higher than Purcahse Order");
  73.                         }
  74.                     }
  75.                 }  
  76.  
  77.                 //cek apakah dari CL atau VO, jika ya, maka exception
  78.                 if (inout.getDocumentStatus().equalsIgnoreCase(closedStatus)||
  79.                         inout.getDocumentStatus().equalsIgnoreCase(voidStatus))
  80.                     throw new OBException("@ActionNotAllowedHere@");
  81.  
  82.                 //ubdah dulu docstatus menjadi DR, baru di complete
  83.                 inout.setDocumentStatus(draftStatus);
  84.                 inout.setDocumentAction(doc_status_to);
  85.                 OBDal.getInstance().save(inout);
  86.                 try {
  87.                     OBDal.getInstance().getConnection().commit();
  88.                 } catch (SQLException e) {
  89.                     e.printStackTrace();
  90.                     throw new OBException(e.getMessage());
  91.                 }
  92.  
  93.             } else if (doc_status_to.equalsIgnoreCase(voidStatus)||
  94.                     doc_status_to.equalsIgnoreCase(closedStatus)){
  95.                 //cek apakah doc status adalah CO, jika tidak maka exception
  96.                 if (!inout.getDocumentStatus().equalsIgnoreCase(completeStatus))
  97.                     throw new OBException("@ActionNotAllowedHere@");
  98.                 inout.setDocumentAction(doc_status_to);
  99.                 if (doc_status_to.equalsIgnoreCase(voidStatus))
  100.                     inout.setDocumentAction("RC"); //void dalam document routing adalah VO, tapi dalam invoice adalah RC
  101.                 OBDal.getInstance().save(inout);
  102.                 try {
  103.                     OBDal.getInstance().getConnection().commit();
  104.                 } catch (SQLException e) {
  105.                     e.printStackTrace();
  106.                     throw new OBException(e.getMessage());
  107.                 }
  108.  
  109.             }
  110.             try{
  111.                 OBError oberror = doExecuteProcedureCall(inoutID, inoutProcessID);
  112.                 if (oberror.getType().equals("Error"))
  113.                     throw new OBException(oberror.getMessage());
  114.             }
  115.             catch (OBException e){
  116.                 //exception happen, rollback doc status
  117.                 inout.setDocumentStatus(docstatus);
  118.                 inout.setDocumentAction(docaction);
  119.                 OBDal.getInstance().save(inout);
  120.                 try {
  121.                     OBDal.getInstance().getConnection().commit();
  122.                 } catch (SQLException e2) {
  123.                     e.printStackTrace();
  124.                     throw new OBException(e.getMessage());
  125.                 }
  126.  
  127.                 //throw chain exception
  128.                 e.printStackTrace();
  129.                 throw new OBException(e.getMessage());
  130.             }
  131.  
  132.             OBDal.getInstance().refresh(inout);
  133.             docstatus=inout.getDocumentStatus();
  134.             boolean processed = inout.isProcessed();
  135.             if (processed && !docstatus.equalsIgnoreCase(completeStatus) && doc_status_to.equalsIgnoreCase(completeStatus)){
  136.                 //terproses tapi doc status masih draft
  137.                 //maka ubah docstatus menjadi complete
  138.                 inout.setDocumentStatus(doc_status_to);
  139.                 OBDal.getInstance().save(inout);
  140.                 try {
  141.                     OBDal.getInstance().getConnection().commit();
  142.                 } catch (SQLException e) {
  143.                     e.printStackTrace();
  144.                     throw new OBException(e.getMessage());
  145.                 }
  146.             }
  147.  
  148.         }
  149.  
  150.     }
  151.  
  152.     @Override
  153.     public String getCoDocumentNo(String recordID, Tab tab) {
  154.         // TODO semengtara null dulu
  155.         return null;
  156.     }
  157.  
  158.     @Override
  159.     public Boolean updateDocumentStatus(Entity entity,  List<String> RecordId, String document_status_to,String column){
  160.         if (document_status_to.equalsIgnoreCase(completeStatus)||
  161.                 document_status_to.equalsIgnoreCase(closedStatus)||
  162.                 document_status_to.equalsIgnoreCase(voidStatus))
  163.             return true;
  164.         else
  165.             return super.updateDocumentStatus(entity, RecordId, document_status_to, column);
  166.  
  167.     }
  168.  
  169. }
Add Comment
Please, Sign In to add comment