/** * Εισαγωγή τιμών για την κίνηση Activity Insert * @ejb.interface-method * @param ActivityMasterId Ο κωδικός μιας υπάρχουσας καταχώρησης * @param ActionTypeId Ο κωδικός της ενέργειας * @param purchase Το παραστατικό * @param username Το όνομα χρήστη * @param usage Η χρήση * @param panel Το φάτνωμα * @param nextPanel Προαιρετικό φάτνωμα (για διπλές κινήσεις) * @param date Η ημερομηνία της κίνησης * @param values @see #getSSCCActivityDetails(String, int) * @return int[] Τον κωδικό της κίνησης που ολοκληρώθηκε, και τον αύξων αριθμό της "λεπτομέρειας" */ public int[] PkgActivityInsert(int ActivityMasterId, String ActionTypeId,String purchase, String username, String usage, String panel,String nextPanel, Date date, List> values) throws CouldNotStoreDataException{ int ActivityDetailId = -1; Transaction tx = null; Session session = null; Connection DBConnect = null; boolean perform_double_move = false; ControlWmsLocal ControlEjb = null; int[] return_array = null; try { DBConnect = (new ContextResources()).getConnection(); session = ((new ContextResources()).getHibernateFactory()).openSession(DBConnect); session.setFlushMode(FlushMode.COMMIT); Query query = null; Iterator it = null; ControlEjb = ControlWMSUtil.getLocalHome().create(); ControlEjb.InitERP(usage, DBConnect); tx = session.beginTransaction(); /* Get WarehouseMovement Id and MovementSeries Id. */ HashMap results = ControlEjb.getWarehouseMovement(ActionTypeId, session); String WarehouseMovementId = (String)results.get("WM_ID"); String ms_series_id = (String)results.get("MS_ID"); //DEBUG **SHOW ME THE MONEEYYYYY** System.out.println("AM_ID: "+ActivityMasterId); System.out.println("WM_ID: "+WarehouseMovementId); System.out.println("MS_ID: "+ms_series_id); System.out.println("Panel: "+panel); System.out.println("PRODUCT: "+values.get(0).get("PRODUCT")); System.out.println("QTY: "+values.get(0).get("QTY")); //DEBUG /* Check for second movement. */ String SecondMovement = null; SecondMovement = ControlEjb.getWarehouseMovementSecondId(WarehouseMovementId, session); if(!"-1".equalsIgnoreCase(SecondMovement) && nextPanel != null) { perform_double_move = true; //Second movement found. } /* If no header entry (Activity Master) exists, add it. */ if (ActivityMasterId < 0){ ActivityMasterId = AddActivityMaster(DBConnect, WarehouseMovementId, ms_series_id); query = session.createQuery("from ActivityMaster as am " + "where am.Id = ? "); query.setParameter(0, new Integer(ActivityMasterId)); it = query.iterate(); ActivityMaster am = (ActivityMaster)it.next(); am.setAmUser(username); session.saveOrUpdate(am); } /* Get Panel ID based on its description or label. */ int pa_id = getPanelId(panel, DBConnect); /* *** Now, add detail entry(ies). *** */ //Activity Detail History Entries... List> add_adh_list = new ArrayList>(); //Activity Detail History Lot Entries... List> add_adhl_list = new ArrayList>(); DecimalFormat DF = ControlEjb.getQuantityFormatter(username); //Get the Decimal Formatter. /* Iterate and "prepare" quantities and weights. */ for(int i=0;i m = values.get(i); boolean add_adh = true; for(int j=0;j n = add_adh_list.get(j); /* If dups exist, add to existing values... */ if (m.get("PRODUCT").equalsIgnoreCase(n.get("PRODUCT")) && m.get("LU").equalsIgnoreCase(n.get("LU"))){ /* Add quantities if matches exist. */ n.put("QTY",DF.format((Double)DF.parse(m.get("QTY")).doubleValue() + (Double)DF.parse(n.get("QTY")).doubleValue())); /* If SSCC is used, add weights as well. */ if (!"".equalsIgnoreCase(m.get("SSCC"))){ n.put("GWEIGHT",DF.format((Double)DF.parse(m.get("GWEIGHT")).doubleValue() + (Double)DF.parse(n.get("GWEIGHT")).doubleValue())); n.put("NWEIGHT",DF.format((Double)DF.parse(m.get("NWEIGHT")).doubleValue() + (Double)DF.parse(n.get("NWEIGHT")).doubleValue())); } add_adh_list.remove(j); add_adh_list.add(j,n); add_adh = false; } } /* If no dups exist, create new list with values to be stored... */ if (add_adh){ add_adh_list.add(m); } /* Gather Lot information, only if product uses lot. */ if (UsesLOT(m.get("PRODUCT"), Integer.parseInt(usage))){ boolean add_adhl = true; for(int j=0;j n = add_adh_list.get(j); if (m.get("PRODUCT").equalsIgnoreCase(n.get("PRODUCT")) && m.get("LU").equalsIgnoreCase(n.get("LU")) && m.get("LOT").equalsIgnoreCase(n.get("LOT"))){ /* Add quantities if matches exist. */ n.put("QTY",DF.format((Double)DF.parse(m.get("QTY")).doubleValue() + (Double)DF.parse(n.get("QTY")).doubleValue())); /* If SSCC is used, add weights as well. */ if (!"".equalsIgnoreCase(m.get("SSCC"))){ n.put("GWEIGHT",DF.format((Double)DF.parse(m.get("GWEIGHT")).doubleValue() + (Double)DF.parse(n.get("GWEIGHT")).doubleValue())); n.put("NWEIGHT",DF.format((Double)DF.parse(m.get("NWEIGHT")).doubleValue() + (Double)DF.parse(n.get("NWEIGHT")).doubleValue())); } add_adhl_list.remove(j); add_adhl_list.add(j, n); add_adhl = false; } } if (add_adhl){ add_adhl_list.add(m); } } } /* Create the return array. */ return_array = new int[add_adh_list.size()+1]; return_array[0] = ActivityMasterId; //Initialize the first value. /* Now, store values. */ for (int i=0;i entry = add_adh_list.get(i); /* Quantities MUST exist. Else, end this function and throw an error message. */ if ((Double)DF.parse(entry.get("QTY")).doubleValue()<= 0){ throw new CouldNotStoreDataException("ORA-20000: Η ποσότητα καταχώρησης δεν μπορεί να είναι μικρότερη ή ίση με το μηδέν."); } /* If no SSCC exists, do not update weights. Otherwise, do. */ if ("".equalsIgnoreCase(entry.get("SSCC"))){ return_array[i+1] = AddActivityDetailHistory(DBConnect, ActivityMasterId, pa_id, entry.get("PRODUCT"), entry.get("LU"), Integer.parseInt(usage), (Double)DF.parse(entry.get("QTY")).doubleValue(), date, purchase); } else{ return_array[i+1] = AddActivityDetailHistory(DBConnect, ActivityMasterId, pa_id, entry.get("PRODUCT"), entry.get("LU"), Integer.parseInt(usage), (Double)DF.parse(entry.get("QTY")).doubleValue(), date, purchase, (Double)DF.parse(entry.get("GWEIGHT")).doubleValue(), (Double)DF.parse(entry.get("NWEIGHT")).doubleValue()); } /* If the Product, LU uses sscc, and such exists, update the required db table... */ if (UsesSSCC(entry.get("PRODUCT"), entry.get("LU"), Integer.parseInt(usage)) && !"".equalsIgnoreCase(entry.get("SSCC"))){ AddActivityDetailHistorySSCC(DBConnect, ActivityMasterId, return_array[i+1], entry.get("SSCC"), (Double)DF.parse(entry.get("QTY")).doubleValue(),(Double)DF.parse(entry.get("GWEIGHT")).doubleValue(), (Double)DF.parse(entry.get("NWEIGHT")).doubleValue()); } /* If Product uses LOT, and such exists, update the requried db table... */ if (UsesLOT(entry.get("PRODUCT"), Integer.parseInt(usage))){ for (int j=0;j n = add_adhl_list.get(j); if (entry.get("PRODUCT").equalsIgnoreCase(n.get("PRODUCT")) && entry.get("LU").equalsIgnoreCase(n.get("LU")) && entry.get("LOT").equalsIgnoreCase(n.get("LOT"))){ AddActivityDetailHistoryLOT(DBConnect, ActivityMasterId, return_array[i+1], n.get("LOT"), (Double)DF.parse(entry.get("QTY")).doubleValue(), (Double)DF.parse(entry.get("GWEIGHT")).doubleValue(), (Double)DF.parse(entry.get("NWEIGHT")).doubleValue()); /* ... and even more if sscc is used, link LOT & SSCC info. */ if (UsesSSCC(n.get("PRODUCT"), n.get("LU"), Integer.getInteger(usage))){ AddHistoryConnectLOTSSCC(DBConnect, ActivityMasterId, return_array[i+1], n.get("SSCC"), n.get("LOT")); } } } } } add_adh_list.clear(); add_adhl_list.clear(); /* Now perform a double move if required. */ if (perform_double_move){ query = session.createQuery("from ActivityMaster as am " + "where am.Id = :amid "); query.setInteger("amid",new Integer(ActivityMasterId)); List lst = query.list(); /* Is there another "second" movement already? */ if (lst.size() > 0 && lst.get(0).getAmLinkid() != null){ PkgActivityInsert(lst.get(0).getAmLinkid().getId().intValue(),SecondMovement,purchase, username,usage,nextPanel,null,date,values); } else{ int link_ID = (PkgActivityInsert(-1,SecondMovement,purchase,username,usage,nextPanel, null,date,values))[0]; query = session.createQuery("from ActivityMaster as am " + "where am.Id = :amid "); query.setInteger("amid",new Integer(link_ID)); ActivityMaster am_link = (ActivityMaster)(query.list()).get(0); ActivityMaster am_parent = lst.get(0); am_parent.setAmLinkid(am_link); session.saveOrUpdate(am_parent); } lst.clear(); } tx.commit(); session.flush(); values.clear(); } catch(Exception e) { e.printStackTrace(); try {tx.rollback();}catch(Exception e1) {/* Nothing Required */} // try {DBConnect.rollback();}catch(SQLException e1) {/* Nothing Required */} if(e.getMessage().indexOf("ORA-01401") == -1){ throw new CouldNotStoreDataException(); } else if (e.getMessage().indexOf("ORA-20000")>= 0){ throw new CouldNotStoreDataException("ΣΦΑΛΜΑ: "+e.getMessage()); } else{ throw new CouldNotStoreDataException("ΣΦΑΛΜΑ: Ένα ή περισσότερα πεδία περιείχαν τιμές μεγαλύτερες του επιτρεπτού"); } } finally{ try{ session.close(); DBConnect.close(); } catch(Exception e){/* Do Nothing */} } return(return_array); }