KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > knowgate > hipergate > Order


1 /*
2   Copyright (C) 2003 Know Gate S.L. All rights reserved.
3                       C/Oņa, 107 1š2 28050 Madrid (Spain)
4
5   Redistribution and use in source and binary forms, with or without
6   modification, are permitted provided that the following conditions
7   are met:
8
9   1. Redistributions of source code must retain the above copyright
10      notice, this list of conditions and the following disclaimer.
11
12   2. The end-user documentation included with the redistribution,
13      if any, must include the following acknowledgment:
14      "This product includes software parts from hipergate
15      (http://www.hipergate.org/)."
16      Alternately, this acknowledgment may appear in the software itself,
17      if and wherever such third-party acknowledgments normally appear.
18
19   3. The name hipergate must not be used to endorse or promote products
20      derived from this software without prior written permission.
21      Products derived from this software may not be called hipergate,
22      nor may hipergate appear in their name, without prior written
23      permission.
24
25   This library is distributed in the hope that it will be useful,
26   but WITHOUT ANY WARRANTY; without even the implied warranty of
27   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
28
29   You should have received a copy of hipergate License with this code;
30   if not, visit http://www.hipergate.org or mail to info@hipergate.org
31 */

32
33 package com.knowgate.hipergate;
34
35 import java.math.BigDecimal JavaDoc;
36 import java.util.ListIterator JavaDoc;
37
38 import java.sql.SQLException JavaDoc;
39 import java.sql.Statement JavaDoc;
40 import java.sql.PreparedStatement JavaDoc;
41 import java.sql.ResultSet JavaDoc;
42 import java.sql.Timestamp JavaDoc;
43
44 import com.knowgate.debug.DebugFile;
45 import com.knowgate.jdc.JDCConnection;
46 import com.knowgate.dataobjs.DB;
47 import com.knowgate.dataobjs.DBBind;
48 import com.knowgate.dataobjs.DBPersist;
49 import com.knowgate.dataobjs.DBSubset;
50 import com.knowgate.misc.Gadgets;
51 import com.knowgate.dataobjs.DBColumn;
52
53 /**
54  * <p>Shopping Order.</p>
55  * @author Sergio Montoro Ten
56  * @version 3.0
57  */

58
59 public class Order extends AbstractOrder {
60
61   private Address oShipAddr;
62   private Address oBillAddr;
63
64   //----------------------------------------------------------------------------
65

66   /**
67    * Create empty Order
68    */

69   public Order() {
70     super(DB.k_orders, DB.k_order_lines, DB.gu_order, "Order");
71     oBillAddr=oShipAddr=null;
72   }
73
74   /**
75    * Create Order and set its GUID
76    */

77   public Order(String JavaDoc sOrderId) {
78     super(DB.k_orders, DB.k_order_lines, DB.gu_order, "Order");
79     put(DB.gu_order, sOrderId);
80     oBillAddr=oShipAddr=null;
81   }
82
83   /**
84    * <p>Load Order from database including all its lines</p>
85    * @param oConn Database Connection
86    * @param sOrderId Order GUID
87    * @throws SQLException
88    */

89   public Order(JDCConnection oConn, String JavaDoc sOrderId) throws SQLException JavaDoc {
90     super(DB.k_orders, DB.k_order_lines, DB.gu_order, "Order");
91     load(oConn, new Object JavaDoc[]{sOrderId});
92   }
93
94   // ---------------------------------------------------------------------------
95

96   /**
97    * Load Order with its associated Addresses
98    * @param oConn JDCConnection
99    * @param PKVals Array with a single element Object[1]{(String)gu_order}
100    * @return boolean <b>true</b> is Order was found, <b>false</b> otherwise
101    * @throws SQLException
102    */

103   public boolean load(JDCConnection oConn, Object JavaDoc[] PKVals) throws SQLException JavaDoc {
104     boolean bRetVal = super.load(oConn, PKVals);
105     if (bRetVal) {
106       if (!isNull(DB.gu_ship_addr))
107         oShipAddr = new Address(oConn, getString(DB.gu_ship_addr));
108       if (!isNull(DB.gu_bill_addr))
109         oShipAddr = new Address(oConn, getString(DB.gu_bill_addr));
110       else
111         oShipAddr = null;
112       if (!isNull(DB.gu_bill_addr))
113         oBillAddr = new Address(oConn, getString(DB.gu_bill_addr));
114       if (!isNull(DB.gu_ship_addr))
115         oShipAddr = new Address(oConn, getString(DB.gu_ship_addr));
116       else
117         oBillAddr = null;
118     }
119     return bRetVal;
120   } // load
121

122   //----------------------------------------------------------------------------
123

124   /**
125    * Store Order
126    * @param oConn Database Connection
127    * If gu_order is null then a new GUID is automatically assigned.<br>
128    * If pg_order is null then next value for sequence seq_k_orders is automatically assigned.<br>
129    * If id_legal is <b>null</b> and sn_passport or id_legal is provided for customer then that one is automatically set.<br>
130    * dt_modified field is set to current date.<br>
131    * @throws SQLException
132    */

133    public boolean store(JDCConnection oConn) throws SQLException JavaDoc {
134      java.sql.Timestamp JavaDoc dtNow = new java.sql.Timestamp JavaDoc(DBBind.getTime());
135
136      if (!AllVals.containsKey(DB.gu_order))
137        put(DB.gu_order, Gadgets.generateUUID());
138      else
139        replace(DB.dt_modified, dtNow);
140
141      if (!AllVals.containsKey(DB.pg_order))
142        put(DB.pg_order, DBBind.nextVal(oConn, "seq_" + DB.k_orders));
143
144      if (!AllVals.containsKey(DB.id_legal)) {
145        PreparedStatement JavaDoc oStmt;
146        ResultSet JavaDoc oRSet;
147        String JavaDoc sLegalId = null;
148        if (AllVals.containsKey(DB.gu_contact)) {
149          oStmt = oConn.prepareStatement("SELECT "+DB.sn_passport+" FROM "+DB.k_contacts+ " WHERE "+DB.gu_contact+"=?",
150                                         ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
151          oStmt.setString(1, getString(DB.gu_contact));
152          oRSet = oStmt.executeQuery();
153          if (oRSet.next())
154            sLegalId = oRSet.getString(1);
155          oRSet.close();
156          oStmt.close();
157        } // fi (gu_contact!=null)
158
if ((sLegalId==null) && AllVals.containsKey(DB.gu_company)) {
159          oStmt = oConn.prepareStatement("SELECT "+DB.id_legal+" FROM "+DB.k_companies+ " WHERE "+DB.gu_company+"=?",
160                                         ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
161          oStmt.setString(1, getString(DB.gu_company));
162          oRSet = oStmt.executeQuery();
163          if (oRSet.next())
164            sLegalId = oRSet.getString(1);
165          oRSet.close();
166          oStmt.close();
167        }
168        if (sLegalId!=null) put(DB.id_legal, sLegalId);
169      } // fi
170

171      return super.store(oConn);
172    } // store
173

174    //----------------------------------------------------------------------------
175

176    /**
177     * <p>Delete Order</p>
178     * @param oConn
179     * @return
180     * @throws SQLException
181     */

182    public boolean delete (JDCConnection oConn) throws SQLException JavaDoc {
183      boolean bRetVal;
184      Statement JavaDoc oStmt;
185
186      if (DebugFile.trace) {
187        DebugFile.writeln("Begin Order.delete([Connection])");
188        DebugFile.incIdent();
189      }
190
191      oStmt = oConn.createStatement();
192
193      oStmt.executeUpdate("DELETE FROM " + DB.k_x_orders_invoices + " WHERE " + DB.gu_order + "='" + getString(DB.gu_order) + "'");
194
195      oStmt.executeUpdate("DELETE FROM " + DB.k_x_orders_despatch + " WHERE " + DB.gu_order + "='" + getString(DB.gu_order) + "'");
196
197      if (DebugFile.trace)
198        DebugFile.writeln("Statement.executeUpdate(DELETE FROM " + DB.k_order_lines + " WHERE " + DB.gu_order + "='" + getStringNull(DB.gu_order,"") + "')");
199
200      oStmt.executeUpdate("DELETE FROM " + DB.k_order_lines + " WHERE " + DB.gu_order + "='" + getString(DB.gu_order) + "'");
201
202      oStmt.close();
203
204      bRetVal = super.delete(oConn);
205
206      if (DebugFile.trace) {
207        DebugFile.decIdent();
208        DebugFile.writeln("End Order.delete() : " + String.valueOf(bRetVal));
209      }
210
211      return bRetVal;
212    } // delete
213

214    // ---------------------------------------------------------------------------
215

216    /**
217     * Get order line by number
218     * @param oConn JDCConnection
219     * @param iPgLine int Line number [1..n] as as at k_order_lines.pg_line
220     * @return OrderLine or <b>null</b> if no line with such number was found
221     * @throws SQLException
222     */

223    public OrderLine getLine(JDCConnection oConn, int iPgLine) throws SQLException JavaDoc {
224      OrderLine oRetVal = new OrderLine();
225      if (oRetVal.load(oConn, new Object JavaDoc[]{getStringNull(DB.gu_order,null),new Integer JavaDoc(iPgLine)}))
226        return oRetVal;
227      else
228        return null;
229    } // getLine()
230

231    //----------------------------------------------------------------------------
232

233    /**
234     * Get Order Lines as a DBSubset
235     * @param oConn Database Connection
236     * @return A DBSubset with the following columns:<br>
237     * <table border=1 cellpadding=4>
238     * <tr><td><b>gu_order</b></td><td><b>pg_line</b></td><td><b>gu_product</b></td><td><b>nm_product</b></td><td><b>pr_sale</b></td><td><b>nu_quantity</b></td><td><b>id_unit</b></td><td><b>pr_total</b></td><td><b>pct_tax_rate</b></td><td><b>is_tax_included</b></td><td><b>tx_promotion</b></td><td><b>tx_options</b></td><td><b>gu_item</b></td></tr>
239     * <tr><td>Order GUID</td><td>Line Number</td><td>Product GUID</td><td>Product Name</td><td>Sale Price</td><td>Quantity Ordered</td><td>Unit for quantity</td><td>Total Price</td><td>% of Tax Rate</td><td>1 if tax included</td><td>Promotion Text</td><td>Additional Options</td><td>GUID of ordered item</td></tr>
240     * </table>
241     * @throws SQLException
242     */

243    public DBSubset getLines(JDCConnection oConn) throws SQLException JavaDoc {
244      oLines = new DBSubset(DB.k_order_lines,
245                            DB.gu_order + "," + DB.pg_line + "," +
246                            DB.gu_product + "," + DB.nm_product + "," +
247                            DB.pr_sale + "," + DB.nu_quantity + "," +
248                            DB.id_unit + "," + DB.pr_total + "," +
249                            DB.pct_tax_rate + "," + DB.is_tax_included + "," +
250                            DB.tx_promotion + "," + DB.tx_options + "," + DB.gu_item,
251                            DB.gu_order + "=? ORDER BY 2", 10);
252
253      oLines.load(oConn, new Object JavaDoc[]{getString(DB.gu_order)});
254      return oLines;
255    } // getLines()
256

257   //----------------------------------------------------------------------------
258

259   /**
260    * <p>Create a Dispatch Note for this Order</p>
261    * The new Dispatch Note is given the same GUID as the current order
262    * @param oConn JDCConnection
263    * @param bIncludePrices boolean whether or not to save prices at the new Dispatch Order
264    * @return Invoice
265    * @throws SQLException
266    */

267   public DespatchAdvice createDespatchAdvice(JDCConnection oConn,
268                                          boolean bIncludePrices) throws SQLException JavaDoc {
269     DespatchAdvice oDispatch = new DespatchAdvice();
270     ListIterator JavaDoc oIter = oDispatch.getTable(oConn).getColumns().listIterator();
271     if (bIncludePrices) {
272       while (oIter.hasNext()) {
273         String JavaDoc sKey = ((DBColumn) oIter.next()).getName();
274         if (!isNull(sKey)) oDispatch.put(sKey, get(sKey));
275       } // wend
276
} else {
277       while (oIter.hasNext()) {
278         String JavaDoc sKey = (String JavaDoc) oIter.next();
279         if (!sKey.equalsIgnoreCase(DB.im_subtotal) && !sKey.equalsIgnoreCase(DB.im_taxes) &&
280             !sKey.equalsIgnoreCase(DB.im_shipping) && !sKey.equalsIgnoreCase(DB.im_total) &&
281             !sKey.equalsIgnoreCase(DB.im_discount)) {
282           if (!isNull(sKey)) oDispatch.put(sKey, get(sKey));
283         }
284       } // wend
285
} // fi (bIncludePrices)
286
oDispatch.replace(DB.de_despatch, getString(DB.de_order));
287     oDispatch.replace(DB.gu_despatch, getString(DB.gu_order));
288     oDispatch.store(oConn);
289     Statement JavaDoc oStmt = oConn.createStatement();
290     if (bIncludePrices) {
291       oStmt.executeUpdate("INSERT INTO "+DB.k_despatch_lines+" ("+DB.gu_despatch+ ","+
292                           DB.pg_line+","+DB.gu_product+","+DB.nm_product+","+
293                           DB.pr_sale+","+DB.nu_quantity+","+DB.id_unit+","+
294                           DB.pr_total+ ","+DB.pct_tax_rate+","+DB.is_tax_included+","+
295                           DB.tx_promotion+","+DB.tx_options+","+DB.gu_item+") SELECT "+
296                           DB.gu_order+ ","+ DB.pg_line+","+DB.gu_product+","+
297                           DB.nm_product+","+ DB.pr_sale+","+DB.nu_quantity+","+
298                           DB.id_unit+","+DB.pr_total+ ","+DB.pct_tax_rate+","+
299                           DB.is_tax_included+","+ DB.tx_promotion+","+DB.tx_options+","+
300                           DB.gu_item+" FROM "+DB.k_order_lines+
301                           " WHERE "+DB.gu_order+"='"+getString(DB.gu_order)+"'");
302     } else {
303       oStmt.executeUpdate("INSERT INTO "+DB.k_despatch_lines+" ("+DB.gu_despatch+","+
304                           DB.pg_line+","+DB.nu_quantity+","+DB.id_unit+","+
305                           DB.nm_product+","+DB.gu_product+","+DB.gu_item+","+
306                           DB.tx_promotion+","+DB.tx_options+") SELECT "+DB.gu_order+","+
307                           DB.pg_line+","+DB.nu_quantity+","+DB.id_unit+","+
308                           DB.nm_product+","+DB.gu_product+","+DB.gu_item+","+
309                           DB.tx_promotion+","+DB.tx_options+" FROM "+DB.k_order_lines+
310                           " WHERE "+DB.gu_order+"='"+getString(DB.gu_order)+"'");
311     } // fi (bIncludePrices)
312
oStmt.close();
313     return oDispatch;
314   } // createDespatchAdvice
315

316   //----------------------------------------------------------------------------
317

318   /**
319    * <p>Create an Invoice for this Order</p>
320    * The new Invoice is given the same GUID as the current order
321    * @param oConn JDCConnection
322    * @return Invoice
323    * @throws SQLException
324    */

325   public Invoice createInvoice(JDCConnection oConn) throws SQLException JavaDoc {
326     if (DebugFile.trace) {
327       DebugFile.writeln("Begin Order.createInvoice([Connection])");
328       DebugFile.incIdent();
329     }
330     String JavaDoc sSQL;
331     Invoice oInvoice = new Invoice();
332     ListIterator JavaDoc oIter = oInvoice.getTable(oConn).getColumns().listIterator();
333     while (oIter.hasNext()) {
334       String JavaDoc sKey = ((DBColumn) oIter.next()).getName();
335       if (!isNull(sKey)) {
336         if (DebugFile.trace) DebugFile.writeln("Invoice.put("+sKey+","+get(sKey)+")");
337         oInvoice.put(sKey, get(sKey));
338       }
339     } // wend
340
oInvoice.replace(DB.gu_invoice, getString(DB.gu_order));
341     oInvoice.store(oConn);
342     Statement JavaDoc oStmt = oConn.createStatement();
343     sSQL = "INSERT INTO "+DB.k_invoice_lines+" ("+DB.gu_invoice+ ","+
344                           DB.pg_line+","+DB.gu_product+","+DB.nm_product+","+
345                           DB.pr_sale+","+DB.nu_quantity+","+DB.id_unit+","+
346                           DB.pr_total+ ","+DB.pct_tax_rate+","+DB.is_tax_included+","+
347                           DB.tx_promotion+","+DB.tx_options+","+DB.gu_item+") SELECT "+
348                           DB.gu_order+ ","+ DB.pg_line+","+DB.gu_product+","+
349                           DB.nm_product+","+ DB.pr_sale+","+DB.nu_quantity+","+
350                           DB.id_unit+","+DB.pr_total+ ","+DB.pct_tax_rate+","+
351                           DB.is_tax_included+","+ DB.tx_promotion+","+DB.tx_options+","+
352                           DB.gu_item+" FROM "+DB.k_order_lines+
353                           " WHERE "+DB.gu_order+"='"+getString(DB.gu_order)+"'";
354     if (DebugFile.trace) DebugFile.writeln("PreparedStatement.executeUpdate("+sSQL+")");
355     oStmt.executeUpdate(sSQL);
356     oStmt.close();
357     if (DebugFile.trace) {
358       DebugFile.decIdent();
359       DebugFile.writeln("End Order.createInvoice() : "+oInvoice.getString(DB.gu_invoice));
360     }
361     return oInvoice;
362   } // createInvoice
363

364   //----------------------------------------------------------------------------
365

366   /**
367    * <p>Activate an Order</p>
368    * For a given WorkArea only one order can be active at a time.
369    * @param oConn Database Connection
370    * @param sOrderId GUID of Order to Activate
371    * @throws SQLException
372    */

373   public void activate(JDCConnection oConn, String JavaDoc sOrderId) throws SQLException JavaDoc {
374     PreparedStatement JavaDoc oUpdt;
375
376     if (DebugFile.trace) {
377       DebugFile.writeln("Begin Order.activate([Connection], " + sOrderId + ")");
378       DebugFile.incIdent();
379     }
380
381     if (DebugFile.trace)
382       DebugFile.writeln("Connection.prepareStatement(UPDATE " + DB.k_orders + " SET " + DB.bo_active + "=0 WHERE " + DB.gu_workarea + "='" + getStringNull(DB.gu_workarea,"null") + "'");
383
384     oUpdt = oConn.prepareStatement("UPDATE " + DB.k_orders + " SET " + DB.bo_active + "=0 WHERE " + DB.gu_workarea + "=?");
385     oUpdt.setString(1, getString(DB.gu_workarea));
386     oUpdt.executeUpdate();
387     oUpdt.close();
388
389     if (DebugFile.trace)
390       DebugFile.writeln("Connection.prepareStatement(UPDATE " + DB.k_orders + " SET " + DB.bo_active + "=1 WHERE " + DB.gu_order + "='" + getStringNull(DB.gu_order,"null") + "'");
391
392     oUpdt = oConn.prepareStatement("UPDATE " + DB.k_orders + " SET " + DB.bo_active + "=1 WHERE " + DB.gu_order + "=?");
393     oUpdt.setString(1, getString(DB.gu_order));
394     oUpdt.executeUpdate();
395     oUpdt.close();
396
397     if (DebugFile.trace) {
398       DebugFile.decIdent();
399       DebugFile.writeln("End Order.activate()");
400     }
401   } // activate
402

403   // ---------------------------------------------------------------------------
404

405   /**
406    * <p>Get order as an XML document</p>
407    * Character encoding is set to UTF-8
408    * @return An XML String formatted according to OASIS Universal Universal Business Language Specification
409    * @throws IllegalStateException if order lines are not loaded or buyer is not set or seller is not set
410    * @see <a HREF="http://docs.oasis-open.org/ubl/cd-UBL-1.0/">OASIS Universal Business Language 1.0</a>
411    */

412
413   public String JavaDoc toXML() throws IllegalStateException JavaDoc {
414     JDCConnection oConn = null;
415     return toXML (oConn, null);
416   }
417
418   // ---------------------------------------------------------------------------
419

420   /**
421    * <p>Get order as an XML document</p>
422    * Character encoding is set to UTF-8
423    * @return An XML String formatted according to OASIS Universal Universal Business Language Specification
424    * @throws IllegalStateException if order lines are not loaded or buyer is not set or seller is not set
425    * @see <a HREF="http://docs.oasis-open.org/ubl/cd-UBL-1.0/">OASIS Universal Business Language 1.0</a>
426    */

427
428   public String JavaDoc toXML(String JavaDoc sIdent, String JavaDoc sDelim) throws IllegalStateException JavaDoc {
429     JDCConnection oConn = null;
430     return toXML (oConn, null);
431   }
432
433   // ---------------------------------------------------------------------------
434

435   /**
436    * <p>Get order as an XML document</p>
437    * Character encoding is set to UTF-8
438    * @return An XML String formatted according to OASIS Universal Universal Business Language Specification
439    * @throws IllegalStateException if order lines are not loaded or buyer is not set or seller is not set
440    * @see <a HREF="http://docs.oasis-open.org/ubl/cd-UBL-1.0/">OASIS Universal Business Language 1.0</a>
441    */

442
443   public String JavaDoc toXML(String JavaDoc sIdent) throws IllegalStateException JavaDoc {
444     JDCConnection oConn = null;
445     return toXML (oConn, null);
446   }
447
448   // ---------------------------------------------------------------------------
449

450   /**
451    * <p>Get despatch advice as an XML document</p>
452    * Character encoding is set to UTF-8
453    * @param oConn JDCConnection Openend JDBC database connection
454    * @param sLocale String Locale for output formatting
455    * @return An XML String formatted according to OASIS Universal Universal Business Language Specification<br>
456    * <b>Sample output</b>
457    * &lt;?xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"?&gt;<br>
458    * &lt;Order&nbsp;xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-1.0"&nbsp;xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-1.0"&nbsp;xmlns:cur="urn:oasis:names:specification:ubl:schema:xsd:CurrencyCode-1.0"&nbsp;xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;<br>
459    * &nbsp;&nbsp;&nbsp;&nbsp;&lt;cac:BuyersID&gt;&lt;![CDATA[8574922]]&gt;&lt;/cac:BuyersID&gt;<br>
460    * &nbsp;&nbsp;&nbsp;&nbsp;&lt;cac:SellerID&gt;&lt;![CDATA[B82568718]]&gt;&lt;/cac:SellerID&gt;<br>
461    * &nbsp;&nbsp;&lt;ID&gt;1000000000&lt;/ID&gt;<br>
462    * &nbsp;&nbsp;&lt;GUID&gt;7f000001106a7371a7d10000095a8c5e&lt;/GUID&gt;<br>
463    * &nbsp;&nbsp;&lt;cbc:IssueDate/&gt;<br>
464    * &nbsp;&nbsp;&lt;cbc:Note&gt;&lt;![CDATA[]]&gt;&lt;/cbc:Note&gt;<br>
465    * &nbsp;&nbsp;&lt;TransactionCurrencyCode&gt;840&lt;/TransactionCurrencyCode&gt;<br>
466    * &nbsp;&nbsp;&lt;cbc:TotalTaxAmount&nbsp;amountCurrencyCodeListVersionID="0.3"&nbsp;amountCurrencyID="840"&gt;&lt;/cbc:TotalTaxAmount&gt;<br>
467    * &nbsp;&nbsp;&lt;cbc:LineExtensionTotalAmount&nbsp;amountCurrencyCodeListVersionID="0.3"&nbsp;amountCurrencyID="840"&gt;&lt;/cbc:LineExtensionTotalAmount&gt;<br>
468    * &nbsp;&nbsp;&lt;LineItemCountNumeric&gt;2&lt;/LineItemCountNumeric&gt;<br>
469    * &nbsp;&nbsp;&lt;DocumentStatusCode&gt;RECEIVED&lt;/DocumentStatusCode&gt;<br>
470    * &nbsp;&nbsp;&lt;LineItemCountNumeric&gt;2&lt;/LineItemCountNumeric&gt;<br>
471    * &nbsp;&nbsp;&lt;cac:BuyerParty&gt;<br>
472    * &nbsp;&nbsp;&nbsp;&nbsp;&lt;cac:Party&gt;<br>
473    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cac:PartyName&gt;&lt;cbc:Name&gt;&lt;![CDATA[Paul&nbsp;Klein]]&gt;&lt;/cbc:Name&gt;&lt;/cac:PartyName&gt;<br>
474    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cac:Address&gt;<br>
475    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ID&gt;7f000001106709e1bda10000ec419d26&lt;/ID&gt;<br>
476    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:PostBox&gt;&lt;/cbc:PostBox&gt;<br>
477    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:StreetName&gt;&lt;![CDATA[Bulbury]]&gt;&lt;/cbc:StreetName&gt;<br>
478    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:AdditionalStreetName&gt;&lt;![CDATA[ST]]&gt;&lt;/cbc:AdditionalStreetName&gt;<br>
479    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:BuildingName&gt;&lt;![CDATA[]]&gt;&lt;/cbc:BuildingName&gt;<br>
480    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:BuildingNumber&gt;&lt;![CDATA[80]]&gt;&lt;/cbc:BuildingNumber&gt;<br>
481    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:CityName&gt;&lt;![CDATA[]]&gt;&lt;/cbc:CityName&gt;<br>
482    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:PostalZone&gt;&lt;/cbc:PostalZone&gt;<br>
483    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:CountrySubentity&gt;&lt;![CDATA[]]&gt;&lt;/cbc:CountrySubentity&gt;<br>
484    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:CountrySubentityCode&gt;&lt;/cbc:CountrySubentityCode&gt;<br>
485    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:AddressLine&gt;&lt;![CDATA[]]&gt;&lt;/cbc:AddressLine&gt;<br>
486    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Country&gt;&lt;![CDATA[]]&gt;&lt;/Country&gt;<br>
487    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/cac:Address&gt;<br>
488    * &nbsp;&nbsp;&nbsp;&nbsp;&lt;/cac:Party&gt;<br>
489    * &nbsp;&nbsp;&nbsp;&nbsp;&lt;cac:AccountsContact&gt;<br>
490    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:Name&gt;&lt;![CDATA[]]&gt;&lt;/cbc:Name&gt;<br>
491    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:Telephone&gt;&lt;![CDATA[]]&gt;&lt;/cbc:Telephone&gt;<br>
492    * &nbsp;&nbsp;&nbsp;&nbsp;&lt;/cac:AccountsContact&gt;<br>
493    * &nbsp;&nbsp;&lt;/cac:BuyerParty&gt;<br>
494    * &nbsp;&nbsp;&lt;cac:SellerParty&gt;<br>
495    * &nbsp;&nbsp;&nbsp;&nbsp;&lt;cac:Party&gt;<br>
496    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cac:PartyName&gt;&lt;cbc:Name&gt;&lt;![CDATA[Know&nbsp;Gate&nbsp;Ltd.]]&gt;&lt;/cbc:Name&gt;&lt;/cac:PartyName&gt;<br>
497    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cac:Address&gt;<br>
498    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ID&gt;7f0000011067057c4ef100008c688128&lt;/ID&gt;<br>
499    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:StreetName&gt;&lt;![CDATA[Wesleyan]]&gt;&lt;/cbc:StreetName&gt;<br>
500    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:AdditionalStreetName&gt;&lt;![CDATA[ST]]&gt;&lt;/cbc:AdditionalStreetName&gt;<br>
501    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:BuildingName&gt;&lt;![CDATA[]]&gt;&lt;/cbc:BuildingName&gt;<br>
502    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:BuildingNumber&gt;&lt;![CDATA[107]]&gt;&lt;/cbc:BuildingNumber&gt;<br>
503    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:CityName&gt;&lt;![CDATA[Boston]]&gt;&lt;/cbc:CityName&gt;<br>
504    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:PostalZone&gt;&lt;/cbc:PostalZone&gt;<br>
505    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:CountrySubentity&gt;&lt;![CDATA[MA]]&gt;&lt;/cbc:CountrySubentity&gt;<br>
506    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:CountrySubentityCode&gt;&lt;/cbc:CountrySubentityCode&gt;<br>
507    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:AddressLine&gt;&lt;![CDATA[]]&gt;&lt;/cbc:AddressLine&gt;<br>
508    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Country&gt;&lt;![CDATA[United&nbsp;States]]&gt;&lt;/Country&gt;<br>
509    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/cac:Address&gt;<br>
510    * &nbsp;&nbsp;&nbsp;&nbsp;&lt;/cac:Party&gt;<br>
511    * &nbsp;&nbsp;&nbsp;&nbsp;&lt;cac:AccountsContact&gt;<br>
512    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:Name&gt;&lt;![CDATA[]]&gt;&lt;/cbc:Name&gt;<br>
513    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:Telephone&gt;&lt;![CDATA[]]&gt;&lt;/cbc:Telephone&gt;<br>
514    * &nbsp;&nbsp;&nbsp;&nbsp;&lt;/cac:AccountsContact&gt;<br>
515    * &nbsp;&nbsp;&lt;/cac:SellerParty&gt;<br>
516    * &nbsp;&nbsp;&lt;cac:Delivey&gt;<br>
517    * &nbsp;&nbsp;&nbsp;&nbsp;&lt;cac:DeliveyAddress&gt;<br>
518    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ID&gt;7f00000110670211e12100002a4874df&lt;/ID&gt;<br>
519    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:StreetName&gt;&lt;![CDATA[Yokohama]]&gt;&lt;/cbc:StreetName&gt;<br>
520    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:AdditionalStreetName&gt;&lt;![CDATA[ST]]&gt;&lt;/cbc:AdditionalStreetName&gt;<br>
521    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:BuildingName&gt;&lt;![CDATA[]]&gt;&lt;/cbc:BuildingName&gt;<br>
522    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:BuildingNumber&gt;&lt;![CDATA[1310]]&gt;&lt;/cbc:BuildingNumber&gt;<br>
523    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:CityName&gt;&lt;![CDATA[]]&gt;&lt;/cbc:CityName&gt;<br>
524    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:PostalZone&gt;&lt;/cbc:PostalZone&gt;<br>
525    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:CountrySubentity&gt;&lt;![CDATA[]]&gt;&lt;/cbc:CountrySubentity&gt;<br>
526    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:CountrySubentityCode&gt;&lt;/cbc:CountrySubentityCode&gt;<br>
527    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:AddressLine&gt;&lt;![CDATA[]]&gt;&lt;/cbc:AddressLine&gt;<br>
528    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Country&gt;&lt;![CDATA[us]]&gt;&lt;/Country&gt;<br>
529    * &nbsp;&nbsp;&nbsp;&nbsp;&lt;/cac:DeliveyAddress&gt;<br>
530    * &nbsp;&nbsp;&lt;/cac:Delivey&gt;<br>
531    * &nbsp;&nbsp;&nbsp;&nbsp;&lt;DestinationCountry&gt;us&lt;/DestinationCountry&gt;<br>
532    * &nbsp;&nbsp;&lt;cac:OrderLine&gt;<br>
533    * &nbsp;&nbsp;&nbsp;&nbsp;&lt;ID&gt;1&lt;/ID&gt;<br>
534    * &nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:DeliveredQuantity&gt;1&lt;/cbc:DeliveredQuantity&gt;<br>
535    * &nbsp;&nbsp;&nbsp;&nbsp;&lt;cac:Item&gt;<br>
536    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:Description&gt;&lt;![CDATA[Tux&nbsp;Earrings]]&gt;&lt;/cbc:Description&gt;<br>
537    * &nbsp;&nbsp;&nbsp;&nbsp;&lt;/cac:Item&gt;<br>
538    * &nbsp;&nbsp;&lt;/cac:OrderLine&gt;<br>
539    * &nbsp;&nbsp;&lt;cac:OrderLine&gt;<br>
540    * &nbsp;&nbsp;&nbsp;&nbsp;&lt;ID&gt;2&lt;/ID&gt;<br>
541    * &nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:DeliveredQuantity&gt;1&lt;/cbc:DeliveredQuantity&gt;<br>
542    * &nbsp;&nbsp;&nbsp;&nbsp;&lt;cac:Item&gt;<br>
543    * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:Description&gt;&lt;![CDATA[Tux&nbsp;Pendant]]&gt;&lt;/cbc:Description&gt;<br>
544    * &nbsp;&nbsp;&nbsp;&nbsp;&lt;/cac:Item&gt;<br>
545    * &nbsp;&nbsp;&lt;/cac:OrderLine&gt;<br>
546    * &nbsp;&nbsp;&lt;cac:PaymentMeans&gt;<br>
547    * &nbsp;&nbsp;&nbsp;&nbsp;&lt;PaymentMeansCode&gt;T&lt;/PaymentMeansCode&gt;<br>
548    * &nbsp;&nbsp;&nbsp;&nbsp;&lt;cbc:DuePaymentDate&gt;2005-09-30&lt;/cbc:DuePaymentDate&gt;<br>
549    * &nbsp;&nbsp;&nbsp;&nbsp;&lt;CardAccount&gt;&lt;/CardAccount&gt;<br>
550    * &nbsp;&nbsp;&nbsp;&nbsp;&lt;PayerFinancialAccount&gt;00101234990123456789&lt;/PayerFinancialAccount&gt;<br>
551    * &nbsp;&nbsp;&lt;/cac:PaymentMeans&gt;<br>
552    * &lt;/Order&gt;
553    * @throws IllegalStateException if invoice lines are not loaded or buyer is not set or seller is not set
554    * @see <a HREF="http://docs.oasis-open.org/ubl/cd-UBL-1.0/">OASIS Universal Business Language 1.0</a>
555    */

556   public String JavaDoc toXML(JDCConnection oConn, String JavaDoc sLocale) throws IllegalStateException JavaDoc {
557
558     if (oLines==null) throw new IllegalStateException JavaDoc("Order.toXML() Invoice lines not loaded");
559     if (oBuyer==null) throw new IllegalStateException JavaDoc("Order.toXML() Buyer party not set");
560     if (oSeller==null) throw new IllegalStateException JavaDoc("Order.toXML() Seller party not set");
561
562     if (DebugFile.trace) {
563       DebugFile.writeln("Begin Order.toXML([Connection]"+sLocale+")");
564       DebugFile.incIdent();
565     }
566
567     final int iLineCount = oLines.getRowCount();
568     StringBuffer JavaDoc oBfr = new StringBuffer JavaDoc();
569
570     oBfr.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
571     oBfr.append("<Order xmlns:cbc=\"urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-1.0\" xmlns:cac=\"urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-1.0\" xmlns:cur=\"urn:oasis:names:specification:ubl:schema:xsd:CurrencyCode-1.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n");
572     // xmlns=\"urn:oasis:names:specification:ubl:schema:xsd:Invoice-1.0\" xsi:schemaLocation=\"urn:oasis:names:specification:ubl:schema:xsd:Invoice-1.0 http://docs.oasis-open.org/ubl/cd-UBL-1.0/xsd/maindoc/UBL-Invoice-1.0.xsd\"
573
oBfr.append(" <cac:BuyersID><![CDATA["+getStringNull(DB.id_legal,oBuyer.getStringNull(DB.id_legal,oBuyer.getStringNull(DB.sn_passport,"")))+"]]></cac:BuyersID>\n");
574     oBfr.append(" <cac:SellerID><![CDATA["+oSeller.getStringNull(DB.id_legal,oSeller.getStringNull(DB.sn_passport,""))+"]]></cac:SellerID>\n");
575     oBfr.append(" <ID>"+String.valueOf(getInt(DB.pg_order))+"</ID>\n");
576     oBfr.append(" <GUID>"+getString(DB.gu_order)+"</GUID>\n");
577     if (isNull(DB.dt_invoiced))
578       oBfr.append(" <cbc:IssueDate/>\n");
579     else
580       oBfr.append(" <cbc:IssueDate>"+getDateShort(DB.dt_invoiced)+"</cbc:IssueDate>\n");
581     oBfr.append(" <cbc:Note><![CDATA["+getStringNull(DB.tx_ship_notes,"")+"]]></cbc:Note>\n");
582     oBfr.append(" <TransactionCurrencyCode>"+getString(DB.id_currency)+"</TransactionCurrencyCode>\n");
583     oBfr.append(" <cbc:TotalTaxAmount amountCurrencyCodeListVersionID=\"0.3\" amountCurrencyID=\""+getString(DB.id_currency)+"\">"+getDecimalFormated(DB.im_taxes)+"</cbc:TotalTaxAmount>\n");
584     oBfr.append(" <cbc:LineExtensionTotalAmount amountCurrencyCodeListVersionID=\"0.3\" amountCurrencyID=\""+getString(DB.id_currency)+"\">"+getDecimalFormated(DB.im_subtotal)+"</cbc:LineExtensionTotalAmount>\n");
585     oBfr.append(" <LineItemCountNumeric>"+String.valueOf(iLineCount)+"</LineItemCountNumeric>\n");
586
587     oBfr.append(" <DocumentStatusCode>"+getStringNull(DB.id_status,"")+"</DocumentStatusCode>\n");
588     oBfr.append(" <LineItemCountNumeric>"+String.valueOf(iLineCount)+"</LineItemCountNumeric>\n");
589
590     if (DebugFile.trace) DebugFile.writeln("Writting BuyerParty...");
591     oBfr.append(" <cac:BuyerParty>\n");
592     oBfr.append(" <cac:Party>\n");
593     if (oBuyer.isNull(DB.gu_contact))
594       oBfr.append(" <cac:PartyName><cbc:Name><![CDATA["+oBuyer.getString(DB.nm_legal)+"]]></cbc:Name></cac:PartyName>\n");
595     else
596       oBfr.append(" <cac:PartyName><cbc:Name><![CDATA["+oBuyer.getStringNull(DB.tx_name,"")+" "+oBuyer.getStringNull(DB.tx_surname,"")+"]]></cbc:Name></cac:PartyName>\n");
597     oBfr.append(" <cac:Address>\n");
598     if (oBillAddr==null) {
599       oBfr.append(" <ID/>\n");
600       oBfr.append(" <cbc:PostBox/>\n");
601       oBfr.append(" <cbc:StreetName/>\n");
602       oBfr.append(" <cbc:AdditionalStreetName/>\n");
603       oBfr.append(" <cbc:BuildingName/>\n");
604       oBfr.append(" <cbc:BuildingNumber/>\n");
605       oBfr.append(" <cbc:CityName/>\n");
606       oBfr.append(" <cbc:PostalZone/>\n");
607       oBfr.append(" <cbc:CountrySubentity/>\n");
608       oBfr.append(" <cbc:CountrySubentityCode/>\n");
609       oBfr.append(" <cbc:AddressLine/>\n");
610       oBfr.append(" <Country/>\n");
611     } else {
612       oBfr.append(" <ID>"+oBillAddr.getString(DB.gu_address)+"</ID>\n");
613       oBfr.append(" <cbc:PostBox>"+oBillAddr.getStringNull(DB.po_box,"")+"</cbc:PostBox>\n");
614       oBfr.append(" <cbc:StreetName><![CDATA["+oBillAddr.getStringNull(DB.nm_street,"")+"]]></cbc:StreetName>\n");
615       oBfr.append(" <cbc:AdditionalStreetName><![CDATA["+oBillAddr.getStringNull(DB.tp_street,"")+"]]></cbc:AdditionalStreetName>\n");
616       oBfr.append(" <cbc:BuildingName><![CDATA["+oBillAddr.getStringNull(DB.tx_addr2,"")+"]]></cbc:BuildingName>\n");
617       oBfr.append(" <cbc:BuildingNumber><![CDATA["+oBillAddr.getStringNull(DB.nu_street,"")+"]]></cbc:BuildingNumber>\n");
618       oBfr.append(" <cbc:CityName><![CDATA["+oBillAddr.getStringNull(DB.mn_city,"")+"]]></cbc:CityName>\n");
619       oBfr.append(" <cbc:PostalZone>"+oBillAddr.getStringNull(DB.zipcode,"")+"</cbc:PostalZone>\n");
620       oBfr.append(" <cbc:CountrySubentity><![CDATA["+oBillAddr.getStringNull(DB.nm_state,"")+"]]></cbc:CountrySubentity>\n");
621       oBfr.append(" <cbc:CountrySubentityCode>"+oBillAddr.getStringNull(DB.id_state,"")+"</cbc:CountrySubentityCode>\n");
622       oBfr.append(" <cbc:AddressLine><![CDATA["+oBillAddr.getStringNull(DB.tx_addr1,"")+"]]></cbc:AddressLine>\n");
623       oBfr.append(" <Country><![CDATA["+oBillAddr.getStringNull(DB.nm_country,"").trim()+"]]></Country>\n");
624     }
625     oBfr.append(" </cac:Address>\n");
626     oBfr.append(" </cac:Party>\n");
627     oBfr.append(" <cac:AccountsContact>\n");
628     if (oBillAddr==null) {
629       oBfr.append(" <cbc:Name/>\n");
630       oBfr.append(" <cbc:Telephone/>\n");
631     } else {
632       oBfr.append(" <cbc:Name><![CDATA["+oBuyer.getStringNull(DB.contact_person,"")+"]]></cbc:Name>\n");
633       oBfr.append(" <cbc:Telephone><![CDATA["+oBuyer.getStringNull(DB.direct_phone,oBuyer.getStringNull(DB.work_phone,""))+"]]></cbc:Telephone>\n");
634     }
635     oBfr.append(" </cac:AccountsContact>\n");
636     oBfr.append(" </cac:BuyerParty>\n");
637     if (DebugFile.trace) DebugFile.writeln("Writting SellerParty...");
638     oBfr.append(" <cac:SellerParty>\n");
639     oBfr.append(" <cac:Party>\n");
640     oBfr.append(" <cac:PartyName><cbc:Name><![CDATA["+oSeller.getStringNull(DB.nm_company,oSeller.getStringNull(DB.nm_shop,""))+"]]></cbc:Name></cac:PartyName>\n");
641     oBfr.append(" <cac:Address>\n");
642     if (oBillAddr==null) {
643       oBfr.append(" <ID/>\n");
644       oBfr.append(" <cbc:PostBox/>\n");
645       oBfr.append(" <cbc:StreetName/>\n");
646       oBfr.append(" <cbc:AdditionalStreetName/>\n");
647       oBfr.append(" <cbc:BuildingName/>\n");
648       oBfr.append(" <cbc:BuildingNumber/>\n");
649       oBfr.append(" <cbc:CityName/>\n");
650       oBfr.append(" <cbc:PostalZone/>\n");
651       oBfr.append(" <cbc:CountrySubentity/>\n");
652       oBfr.append(" <cbc:CountrySubentityCode/>\n");
653       oBfr.append(" <cbc:AddressLine/>\n");
654       oBfr.append(" <Country/>\n");
655     } else {
656       oBfr.append(" <ID>"+oSeller.getStringNull(DB.gu_shop, oSeller.getStringNull(DB.gu_address, ""))+"</ID>\n");
657       oBfr.append(" <cbc:StreetName><![CDATA["+oSeller.getStringNull(DB.nm_street,"")+"]]></cbc:StreetName>\n");
658       oBfr.append(" <cbc:AdditionalStreetName><![CDATA["+oSeller.getStringNull(DB.tp_street,"")+"]]></cbc:AdditionalStreetName>\n");
659       oBfr.append(" <cbc:BuildingName><![CDATA["+oSeller.getStringNull(DB.tx_addr2,"")+"]]></cbc:BuildingName>\n");
660       oBfr.append(" <cbc:BuildingNumber><![CDATA["+oSeller.getStringNull(DB.nu_street,"")+"]]></cbc:BuildingNumber>\n");
661       oBfr.append(" <cbc:CityName><![CDATA["+oSeller.getStringNull(DB.mn_city,"")+"]]></cbc:CityName>\n");
662       oBfr.append(" <cbc:PostalZone>"+oSeller.getStringNull(DB.zipcode,"")+"</cbc:PostalZone>\n");
663       oBfr.append(" <cbc:CountrySubentity><![CDATA["+oSeller.getStringNull(DB.nm_state,"")+"]]></cbc:CountrySubentity>\n");
664       oBfr.append(" <cbc:CountrySubentityCode>"+oSeller.getStringNull(DB.id_state,"")+"</cbc:CountrySubentityCode>\n");
665       oBfr.append(" <cbc:AddressLine><![CDATA["+oSeller.getStringNull(DB.tx_addr1,"")+"]]></cbc:AddressLine>\n");
666       oBfr.append(" <Country><![CDATA["+oSeller.getStringNull(DB.nm_country,"").trim()+"]]></Country>\n");
667     }
668     oBfr.append(" </cac:Address>\n");
669     oBfr.append(" </cac:Party>\n");
670     oBfr.append(" <cac:AccountsContact>\n");
671     oBfr.append(" <cbc:Name><![CDATA["+oSeller.getStringNull(DB.contact_person,"")+"]]></cbc:Name>\n");
672     oBfr.append(" <cbc:Telephone><![CDATA["+oSeller.getStringNull(DB.direct_phone,oSeller.getStringNull(DB.work_phone,""))+"]]></cbc:Telephone>\n");
673     oBfr.append(" </cac:AccountsContact>\n");
674     oBfr.append(" </cac:SellerParty>\n");
675     if (DebugFile.trace) DebugFile.writeln("Writting Delivery...");
676     oBfr.append(" <cac:Delivey>\n");
677     if (!isNull(DB.dt_promised))
678       oBfr.append(" <cbc:RequestedDeliveyDateTime>"+getDateShort(DB.dt_promised)+"T"+getTime(DB.dt_promised)+"</cbc:RequestedDeliveyDateTime>\n");
679     if (oShipAddr!=null) {
680       oBfr.append(" <cac:DeliveyAddress>\n");
681       oBfr.append(" <ID>"+oShipAddr.getString(DB.gu_address)+"</ID>\n");
682       oBfr.append(" <cbc:StreetName><![CDATA["+oShipAddr.getStringNull(DB.nm_street,"")+"]]></cbc:StreetName>\n");
683       oBfr.append(" <cbc:AdditionalStreetName><![CDATA["+oShipAddr.getStringNull(DB.tp_street,"")+"]]></cbc:AdditionalStreetName>\n");
684       oBfr.append(" <cbc:BuildingName><![CDATA["+oShipAddr.getStringNull(DB.tx_addr2,"")+"]]></cbc:BuildingName>\n");
685       oBfr.append(" <cbc:BuildingNumber><![CDATA["+oShipAddr.getStringNull(DB.nu_street,"")+"]]></cbc:BuildingNumber>\n");
686       oBfr.append(" <cbc:CityName><![CDATA["+oShipAddr.getStringNull(DB.mn_city,"")+"]]></cbc:CityName>\n");
687       oBfr.append(" <cbc:PostalZone>"+oShipAddr.getStringNull(DB.zipcode,"")+"</cbc:PostalZone>\n");
688       oBfr.append(" <cbc:CountrySubentity><![CDATA["+oShipAddr.getStringNull(DB.nm_state,"")+"]]></cbc:CountrySubentity>\n");
689       oBfr.append(" <cbc:CountrySubentityCode>"+oShipAddr.getStringNull(DB.id_state,"")+"</cbc:CountrySubentityCode>\n");
690       oBfr.append(" <cbc:AddressLine><![CDATA["+oShipAddr.getStringNull(DB.tx_addr1,"")+"]]></cbc:AddressLine>\n");
691       oBfr.append(" <Country><![CDATA["+oShipAddr.getStringNull(DB.id_country,"").trim()+"]]></Country>\n");
692       oBfr.append(" </cac:DeliveyAddress>\n");
693     }
694     oBfr.append(" </cac:Delivey>\n");
695     if (oShipAddr!=null) {
696       oBfr.append(" <DestinationCountry>"+oShipAddr.getStringNull(DB.id_country,"").trim()+"</DestinationCountry>\n");
697     }
698     for (int l=0; l<iLineCount; l++) {
699       if (DebugFile.trace) DebugFile.writeln("Writting OrderLine "+String.valueOf(l+1)+"...");
700       oBfr.append(" <cac:OrderLine>\n");
701       oBfr.append(" <ID>"+String.valueOf(l+1)+"</ID>\n");
702       float fQuantity = oLines.getFloat(DB.nu_quantity,l);
703       if (fQuantity == (long) fQuantity)
704         oBfr.append(" <cbc:DeliveredQuantity>"+String.valueOf((long)fQuantity)+"</cbc:DeliveredQuantity>\n");
705       else
706         oBfr.append(" <cbc:DeliveredQuantity>"+String.valueOf(fQuantity)+"</cbc:DeliveredQuantity>\n");
707       oBfr.append(" <cac:Item>\n");
708       oBfr.append(" <cbc:Description><![CDATA["+oLines.getString(DB.nm_product,l)+"]]></cbc:Description>\n");
709       oBfr.append(" </cac:Item>\n");
710       oBfr.append(" </cac:OrderLine>\n");
711     }
712     oBfr.append(" <cac:PaymentMeans>\n");
713     oBfr.append(" <PaymentMeansCode>"+getStringNull(DB.tp_billing,"")+"</PaymentMeansCode>\n");
714     if (isNull(DB.dt_payment))
715       oBfr.append(" <cbc:DuePaymentDate/>\n");
716     else
717       oBfr.append(" <cbc:DuePaymentDate>"+getDateShort(DB.dt_payment)+"</cbc:DuePaymentDate>\n");
718     oBfr.append(" <CardAccount>"+getStringNull(DB.nu_card,"")+"</CardAccount>\n");
719     oBfr.append(" <PayerFinancialAccount>"+getStringNull(DB.nu_bank,"")+"</PayerFinancialAccount>\n");
720
721     oBfr.append(" </cac:PaymentMeans>\n");
722     oBfr.append(" </Order>\n");
723
724     if (DebugFile.trace) {
725       DebugFile.decIdent();
726       DebugFile.writeln("End Order.toXML()");
727     }
728
729     return oBfr.toString();
730   } // toXML()
731

732
733   // **********************************************************
734
// Static methods
735

736   /**
737    * Delete order
738    * @param oConn JDCConnection
739    * @param sOrderId String Order GUID
740    * @return boolean
741    * @throws SQLException
742    */

743   public static boolean delete (JDCConnection oConn, String JavaDoc sOrderId) throws SQLException JavaDoc {
744     return new Order(sOrderId).delete(oConn);
745   }
746
747   //----------------------------------------------------------------------------
748

749   /**
750    * Get active order for a WorkArea
751    * @param oConn JDCConnection
752    * @param sWorkAreaId String WorkArea GUID
753    * @return Order
754    * @throws SQLException
755    */

756   public static Order getActiveOrder(JDCConnection oConn, String JavaDoc sWorkAreaId) throws SQLException JavaDoc {
757     Order oRetObj;
758     PreparedStatement JavaDoc oSeek;
759     ResultSet JavaDoc oRSet;
760     String JavaDoc sOrderId;
761
762     if (DebugFile.trace) {
763       DebugFile.writeln("Begin Order.getActiveOrder([Connection], " + sWorkAreaId + ")");
764       DebugFile.incIdent();
765     }
766
767     if (DebugFile.trace)
768       DebugFile.writeln("Connection.prepareStatement(SELECT " + DB.gu_order + " FROM " + DB.k_orders + " WHERE " + DB.gu_workarea + "=? AND " + DB.bo_active + "=1");
769
770     oSeek = oConn.prepareStatement("SELECT " + DB.gu_order + " FROM " + DB.k_orders + " WHERE " + DB.gu_workarea + "=? AND " + DB.bo_active + "=1", ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
771     oSeek.setString(1, sWorkAreaId);
772     oRSet = oSeek.executeQuery();
773     if ( oRSet.next())
774       sOrderId = oRSet.getString(1);
775     else
776       sOrderId = null;
777     oRSet.close();
778     oSeek.close();
779
780     if (null==sOrderId) {
781       oRetObj = new Order();
782       oRetObj.put(DB.gu_workarea, sWorkAreaId);
783       oRetObj.put(DB.bo_active, (short)1);
784       oRetObj.put(DB.id_currency, "999");
785       oRetObj.store(oConn);
786     }
787     else
788       oRetObj = new Order(oConn, sOrderId);
789
790     if (DebugFile.trace) {
791       DebugFile.decIdent();
792       DebugFile.writeln("End Order.getActiveOrder() " + String.valueOf(oRetObj.getInt(DB.pg_order)));
793     }
794
795     return oRetObj;
796   } // getActiveOrder
797

798   // **********************************************************
799
// Public Constants
800

801   public static final short ClassId = 41;
802 }
803
Popular Tags