/** * Returns the last order placed by the customer, by first authenticating him. * * @param C_UNAME name of the customer * @param S_PASSWD password supplied by the customer * @return the BigOrderModel object, if successfully authenticated; null otherwise */ public BigOrderModel getLastOrder(String C_UNAME, String C_PASSWD) { BigOrderModel bigOrder = null; CustomerModel custModel = null; try { // find Collection of customers with this C_UNAME // it should be actually one or none of them Collection coll = custHome.findByC_UNAME(C_UNAME); if (coll.isEmpty()) return null; // fail, if no such customers // get the CustomerModel object Customer customer = (Customer) coll.iterator().next(); custModel = customer.getCustomer(); // check the password if (!custModel.getC_PASSWD().equals(C_PASSWD)) return null; // fail if passwds do not match } catch (Exception e) { throw new EJBException(e); } // find the latest order Integer O_ID = null; Connection con = null; PreparedStatement prepStmt = null; ResultSet rs = null; try { con = datasource.getConnection(); String s = "SELECT max(o_id) FROM orders WHERE o_c_id = ?"; prepStmt = con.prepareStatement(s); prepStmt.setInt(1, custModel.getC_ID().intValue()); rs = prepStmt.executeQuery(); boolean exist = rs.next(); if (exist) { int i = rs.getInt(1); if (rs.wasNull()) { O_ID = null; } else { O_ID = new Integer(i); } } } catch (Exception ex) { throw new EJBException(ex); } finally { try { rs.close(); } catch (Exception e) { } try { prepStmt.close(); } catch (Exception e) { } try { con.close(); } catch (Exception e) { } } if (O_ID == null) { // no orders from this customer // return empty model object, which means that authentication was successfull, but no orders // ware found return new BigOrderModel(); } OrderModel orderModel = null; try { orderModel = orderHome.findByPrimaryKey(O_ID).getOrder(); } catch (Exception e) { throw new EJBException(e); } // create BigOrderModel object and fill it with right order related info bigOrder = new BigOrderModel( O_ID, orderModel.getO_C_ID(), orderModel.getO_DATE(), orderModel.getO_SUB_TOTAL(), orderModel.getO_TAX(), orderModel.getO_TOTAL(), orderModel.getO_SHIP_TYPE(), orderModel.getO_SHIP_DATE(), orderModel.getO_STATUS()); // set customer information fields bigOrder.setC_FNAME(custModel.getC_FNAME()); bigOrder.setC_LNAME(custModel.getC_LNAME()); bigOrder.setC_PHONE(custModel.getC_PHONE()); bigOrder.setC_EMAIL(custModel.getC_EMAIL()); try { // set billing address related info Integer B_O_ID = orderModel.getO_BILL_ADDR_ID(); AddressModel billAddr = addressHome.findByPrimaryKey(B_O_ID).getAddress(); bigOrder.setBILL_ADDR(billAddr); bigOrder.setBILL_CO_NAME( countryHome.findByPrimaryKey(billAddr.getADDR_CO_ID()).getCountry().getCO_NAME()); // set shipping address related info Integer S_O_ID = orderModel.getO_SHIP_ADDR_ID(); AddressModel shipAddr = addressHome.findByPrimaryKey(S_O_ID).getAddress(); bigOrder.setSHIP_ADDR(shipAddr); bigOrder.setSHIP_CO_NAME( countryHome.findByPrimaryKey(shipAddr.getADDR_CO_ID()).getCountry().getCO_NAME()); // set credit card transaction related info Cc_xactModel xact = xactHome.findByPrimaryKey(O_ID).getCc_xact(); bigOrder.setCX_TYPE(xact.getCX_TYPE()); bigOrder.setCX_AUTH_ID(xact.getCX_AUTH_ID()); // set lineItems related info Iterator iter = orderLineHome.findByOrderId(O_ID).iterator(); ArrayList list = new ArrayList(); while (iter.hasNext()) { OrderLineModel olm = ((OrderLine) iter.next()).getOrderLine(); BigOrderLineModel bigOrderLine = new BigOrderLineModel( olm.getOL_ID(), olm.getOL_O_ID(), olm.getOL_I_ID(), olm.getOL_QTY(), olm.getOL_DISCOUNT(), olm.getOL_COMMENTS()); ItemModel item = itemHome.findByPrimaryKey(olm.getOL_I_ID()).getItem(); bigOrderLine.setI_TITLE(item.getI_TITLE()); bigOrderLine.setI_PUBLISHER(item.getI_PUBLISHER()); bigOrderLine.setI_COST(item.getI_COST()); list.add(bigOrderLine); } bigOrder.setLineItems(list); } catch (Exception e) { throw new EJBException(e); } return bigOrder; }
/** Creates order in the database. */ public Integer createOrder( Integer C_ID, Iterator lineItems, int SC_SUB_TOTAL, int SC_TAX, int SC_SHIP_COST, int SC_TOTAL, int SC_C_DISCOUNT, String CC_TYPE, String CC_NUMBER, String CC_NAME, Date CC_EXPIRY, String SHIPPING, String STREET_1, String STREET_2, String CITY, String STATE, String ZIP, Integer CO_ID) { Integer O_ID = null; try { // get customer record Customer cust = custHome.findByPrimaryKey(C_ID); Integer C_ADDR_ID = cust.getC_ADDR_ID(); // get shipping address_id Integer SHIP_ADDR_ID = null; if (STREET_1 == null || STREET_1.equals("")) { // there is no separate shipping address SHIP_ADDR_ID = C_ADDR_ID; } else { // there is a separate shipping address // don't try to match to an existing address, but create a new one Address address = addressHome.create(STREET_1, STREET_2, CITY, STATE, ZIP, CO_ID); SHIP_ADDR_ID = address.getADDR_ID(); } // generate missing fields for the order record Date O_SHIP_DATE = new Date(System.currentTimeMillis() + Util.getRandomInt(rand, 1, 7) * 3600000 * 24); // create order record Order order = orderHome.create( C_ID, new Date(), new Double(((double) SC_SUB_TOTAL) / 100.0), new Double(((double) SC_TAX) / 100.0), new Double(((double) SC_TOTAL) / 100.0), SHIPPING, O_SHIP_DATE, C_ADDR_ID, SHIP_ADDR_ID, "PENDING"); O_ID = order.getO_ID(); // create oderLine records int i = 1; while (lineItems.hasNext()) { CartItem item = (CartItem) lineItems.next(); orderLineHome.create( new Integer(i), O_ID, item.getSCL_I_ID(), new Integer(item.getSCL_QTY()), new Double(((double) SC_C_DISCOUNT) / 100.0), Util.getRandomAString(rand, 20, 100)); i++; } // create CC_XACTS record // Note that we don't send info to PGE (clause 2.7.3.3) // but rather create a record right away xactHome.create( O_ID, CC_TYPE, CC_NUMBER, CC_NAME, CC_EXPIRY, Util.getRandomAString(rand, 15), new Double(((double) SC_TOTAL) / 100.0), new Date(), SHIP_ADDR_ID); } catch (Exception re) { throw new EJBException(re); } return O_ID; }