All pastes #46588 Raw Edit

Stuff

public text v1 · immutable
#46588 ·published 2006-03-22 12:24 UTC
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: &#919; &#960;&#959;&#963;&#972;&#964;&#951;&#964;&#945; &#954;&#945;&#964;&#945;&#967;&#974;&#961;&#951;&#963;&#951;&#962; &#948;&#949;&#957; &#956;&#960;&#959;&#961;&#949;&#943; &#957;&#945; &#949;&#943;&#957;&#945;&#953; &#956;&#953;&#954;&#961;&#972;&#964;&#949;&#961;&#951; &#942; &#943;&#963;&#951; &#956;&#949; &#964;&#959; &#956;&#951;&#948;&#941;&#957;.");
				}
				/* 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("&#931;&#934;&#913;&#923;&#924;&#913;: "+e.getMessage());
			}
			else{
				throw new CouldNotStoreDataException("&#931;&#934;&#913;&#923;&#924;&#913;: &#904;&#957;&#945; &#942; &#960;&#949;&#961;&#953;&#963;&#963;&#972;&#964;&#949;&#961;&#945; &#960;&#949;&#948;&#943;&#945; &#960;&#949;&#961;&#953;&#949;&#943;&#967;&#945;&#957; &#964;&#953;&#956;&#941;&#962; &#956;&#949;&#947;&#945;&#955;&#973;&#964;&#949;&#961;&#949;&#962; &#964;&#959;&#965; &#949;&#960;&#953;&#964;&#961;&#949;&#960;&#964;&#959;&#973;");
			}
		}
		finally{
			try{
				session.close();
				DBConnect.close();
			}
			catch(Exception e){/* Do Nothing */}
		}
		return(return_array);
	}