rendered paste body /**
* Εισαγωγή τιμών για την κίνηση 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<HashMap<String, String>> 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<HashMap<String, String>> add_adh_list = new ArrayList<HashMap<String,String>>();
//Activity Detail History Lot Entries...
List<HashMap<String, String>> add_adhl_list = new ArrayList<HashMap<String,String>>();
DecimalFormat DF = ControlEjb.getQuantityFormatter(username); //Get the Decimal Formatter.
/* Iterate and "prepare" quantities and weights. */
for(int i=0;i<values.size();i++){
HashMap<String, String> m = values.get(i);
boolean add_adh = true;
for(int j=0;j<add_adh_list.size();j++){
HashMap<String, String> 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<add_adhl_list.size();j++){
HashMap<String, String> 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<add_adh_list.size();i++){
HashMap<String, String> 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<add_adhl_list.size();j++){
HashMap<String, String> 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<ActivityMaster> 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);
}