1 32 33 package com.knowgate.hipergate; 34 35 import java.sql.SQLException ; 36 import java.sql.Types ; 37 import java.sql.PreparedStatement ; 38 import java.sql.ResultSet ; 39 40 import com.knowgate.dataobjs.DB; 41 import com.knowgate.jdc.JDCConnection; 42 import com.knowgate.dataobjs.DBSubset; 43 import com.knowgate.debug.DebugFile; 44 import com.knowgate.misc.Gadgets; 45 import com.knowgate.dataobjs.DBBind; 46 import java.sql.Statement ; 47 48 53 public class DespatchAdvice extends AbstractOrder { 54 55 private DBSubset oOrders; 56 private Address oShipAddr; 57 private Address oBillAddr; 58 59 61 public DespatchAdvice() { 62 super(DB.k_despatch_advices,DB.k_despatch_lines,DB.gu_despatch,"DespatchAdvice"); 63 oBillAddr=oShipAddr=null; 64 } 65 66 68 public DespatchAdvice(String sDespacthAdviceId) { 69 super(DB.k_despatch_advices,DB.k_despatch_lines,DB.gu_despatch,"DespatchAdvice"); 70 put(DB.gu_despatch, sDespacthAdviceId); 71 oBillAddr=oShipAddr=null; 72 } 73 74 76 82 public DBSubset getLines(JDCConnection oConn) throws SQLException { 83 84 oLines = new DBSubset(DB.k_despatch_lines, 85 DB.gu_despatch+","+DB.pg_line+","+DB.pr_sale+","+ 86 DB.nu_quantity+","+DB.id_unit+","+DB.pr_total+","+ 87 DB.pct_tax_rate+","+DB.is_tax_included+","+ 88 DB.nm_product+","+ DB.gu_product+","+ 89 DB.gu_item+","+DB.tx_promotion+","+DB.tx_options, 90 DB.gu_despatch + "=? ORDER BY 2", 10); 91 92 oLines.load(oConn, new Object []{getString(DB.gu_despatch)}); 93 94 return oLines; 95 } 97 99 105 public String [] getOrders() { 106 if (oOrders==null) 107 return null; 108 else { 109 String [] aRetVal = new String [oOrders.getRowCount()]; 110 for (int o=0; o<oOrders.getRowCount(); o++) 111 aRetVal[o] = oOrders.getString(0,o); 112 return aRetVal; 113 } 114 } 115 117 124 public boolean load(JDCConnection oConn, Object [] PKVals) throws SQLException { 125 boolean bRetVal = super.load(oConn, PKVals); 126 if (bRetVal) { 127 oOrders = new DBSubset (DB.k_x_orders_despatch, DB.gu_order, DB.gu_despatch+"=?", 1); 128 oOrders.load(oConn, PKVals); 129 if (!isNull(DB.gu_ship_addr)) 130 oShipAddr = new Address(oConn, getString(DB.gu_ship_addr)); 131 if (!isNull(DB.gu_bill_addr)) 132 oShipAddr = new Address(oConn, getString(DB.gu_bill_addr)); 133 else 134 oShipAddr = null; 135 if (!isNull(DB.gu_bill_addr)) 136 oBillAddr = new Address(oConn, getString(DB.gu_bill_addr)); 137 if (!isNull(DB.gu_ship_addr)) 138 oShipAddr = new Address(oConn, getString(DB.gu_ship_addr)); 139 else 140 oBillAddr = null; 141 } 142 return bRetVal; 143 } 145 147 156 public boolean store(JDCConnection oConn) throws SQLException { 157 java.sql.Timestamp dtNow = new java.sql.Timestamp (DBBind.getTime()); 158 159 if (DebugFile.trace) { 160 DebugFile.writeln("Begin DespatchAdvice.store([JDCConnection])"); 161 DebugFile.incIdent(); 162 } 163 164 if (!AllVals.containsKey(DB.gu_despatch)) 165 AllVals.put(DB.gu_despatch,Gadgets.generateUUID()); 166 else 167 replace(DB.dt_modified, dtNow); 168 169 if (!AllVals.containsKey(DB.pg_despatch) && AllVals.containsKey(DB.gu_workarea)) { 170 AllVals.put(DB.pg_despatch, new Integer (nextVal(oConn, (String ) AllVals.get(DB.gu_workarea)))); 171 } 173 boolean bRetVal = super.store(oConn); 174 175 if (DebugFile.trace) { 176 DebugFile.decIdent(); 177 DebugFile.writeln("End DespatchAdvice.store() : " + String.valueOf(bRetVal)); 178 } 179 return bRetVal; 180 } 182 184 189 public boolean delete (JDCConnection oConn) throws SQLException { 190 boolean bRetVal; 191 Statement oStmt; 192 193 if (DebugFile.trace) { 194 DebugFile.writeln("Begin DespatchAdvice.delete([Connection])"); 195 DebugFile.incIdent(); 196 } 197 198 oStmt = oConn.createStatement(); 199 oStmt.executeUpdate("DELETE FROM " + DB.k_despatch_lines + " WHERE " + DB.gu_despatch + "='" + getString(DB.gu_despatch) + "'"); 200 oStmt.executeUpdate("DELETE FROM " + DB.k_x_orders_despatch + " WHERE " + DB.gu_despatch + "='" + getString(DB.gu_despatch) + "'"); 201 oStmt.close(); 202 203 bRetVal = super.delete(oConn); 204 205 if (DebugFile.trace) { 206 DebugFile.decIdent(); 207 DebugFile.writeln("End DespatchAdvice.delete() : " + String.valueOf(bRetVal)); 208 } 209 210 return bRetVal; 211 } 213 215 222 223 public String toXML() throws IllegalStateException { 224 JDCConnection oConn = null; 225 return toXML (oConn, null); 226 } 227 228 230 237 238 public String toXML(String sIdent, String sDelim) throws IllegalStateException { 239 JDCConnection oConn = null; 240 return toXML (oConn, null); 241 } 242 243 245 252 253 public String toXML(String sIdent) throws IllegalStateException { 254 JDCConnection oConn = null; 255 return toXML (oConn, null); 256 } 257 258 260 357 public String toXML(JDCConnection oConn, String sLocale) throws IllegalStateException { 358 359 if (oLines==null) throw new IllegalStateException ("DespacthAdvice.toXML() Invoice lines not loaded"); 360 if (oBuyer==null) throw new IllegalStateException ("DespacthAdvice.toXML() Buyer party not set"); 361 if (oSeller==null) throw new IllegalStateException ("DespacthAdvice.toXML() Seller party not set"); 362 363 if (DebugFile.trace) { 364 DebugFile.writeln("Begin DespatchAdvice.toXML()"); 365 DebugFile.incIdent(); 366 } 367 368 final int iLineCount = oLines.getRowCount(); 369 StringBuffer oBfr = new StringBuffer (); 370 371 oBfr.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); 372 oBfr.append("<DespatchAdvice 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"); 373 oBfr.append(" <ID>"+String.valueOf(getInt(DB.pg_despatch))+"</ID>\n"); 375 oBfr.append(" <GUID>"+getString(DB.gu_despatch)+"</GUID>\n"); 376 if (isNull(DB.dt_delivered)) 377 oBfr.append(" <cbc:IssueDate/>\n"); 378 else 379 oBfr.append(" <cbc:IssueDate>"+getDateShort(DB.dt_delivered)+"</cbc:IssueDate>\n"); 380 oBfr.append(" <DocumentStatusCode>"+getStringNull(DB.id_status,"")+"</DocumentStatusCode>\n"); 381 oBfr.append(" <cbc:Note><![CDATA["+getStringNull(DB.tx_ship_notes,"")+"]]></cbc:Note>\n"); 382 oBfr.append(" <LineItemCountNumeric>"+String.valueOf(iLineCount)+"</LineItemCountNumeric>\n"); 383 384 oBfr.append(" <cac:OrderReference>\n"); 385 oBfr.append(" <cac:BuyersID><![CDATA["+getStringNull(DB.id_legal,oBuyer.getStringNull(DB.id_legal,oBuyer.getStringNull(DB.sn_passport,"")))+"]]></cac:BuyersID>\n"); 386 oBfr.append(" <cac:SellerID><![CDATA["+oSeller.getStringNull(DB.id_legal,oSeller.getStringNull(DB.sn_passport,""))+"]]></cac:SellerID>\n"); 387 String [] aOrders = getOrders(); 388 Order oOrdr; 389 if (aOrders!=null) { 390 try { 391 oOrdr = new Order(oConn, aOrders[0]); 392 if (oOrdr.isNull(DB.dt_invoiced)) 393 oBfr.append(" <cbc:IssueDate/>\n"); 394 else 395 oBfr.append(" <cbc:IssueDate>"+oOrdr.getDateShort(DB.dt_invoiced)+"</cbc:IssueDate>\n"); 396 oBfr.append(" <GUID>"+oOrdr.getString(DB.gu_order)+"</GUID>\n"); 397 } catch (Exception ignore) {} 398 } oBfr.append(" </cac:OrderReference>\n"); 400 if (DebugFile.trace) DebugFile.writeln("Writting BuyerParty..."); 401 oBfr.append(" <cac:BuyerParty>\n"); 402 oBfr.append(" <cac:Party>\n"); 403 if (oBuyer.isNull(DB.gu_contact)) 404 oBfr.append(" <cac:PartyName><cbc:Name><![CDATA["+oBuyer.getString(DB.nm_legal)+"]]></cbc:Name></cac:PartyName>\n"); 405 else 406 oBfr.append(" <cac:PartyName><cbc:Name><![CDATA["+oBuyer.getStringNull(DB.tx_name,"")+" "+oBuyer.getStringNull(DB.tx_surname,"")+"]]></cbc:Name></cac:PartyName>\n"); 407 oBfr.append(" <cac:Address>\n"); 408 if (oBillAddr==null) { 409 oBfr.append(" <ID/>\n"); 410 oBfr.append(" <cbc:PostBox/>\n"); 411 oBfr.append(" <cbc:StreetName/>\n"); 412 oBfr.append(" <cbc:AdditionalStreetName/>\n"); 413 oBfr.append(" <cbc:BuildingName/>\n"); 414 oBfr.append(" <cbc:BuildingNumber/>\n"); 415 oBfr.append(" <cbc:CityName/>\n"); 416 oBfr.append(" <cbc:PostalZone/>\n"); 417 oBfr.append(" <cbc:CountrySubentity/>\n"); 418 oBfr.append(" <cbc:CountrySubentityCode/>\n"); 419 oBfr.append(" <cbc:AddressLine/>\n"); 420 oBfr.append(" <Country/>\n"); 421 } else { 422 oBfr.append(" <ID>"+oBillAddr.getString(DB.gu_address)+"</ID>\n"); 423 oBfr.append(" <cbc:PostBox>"+oBillAddr.getStringNull(DB.po_box,"")+"</cbc:PostBox>\n"); 424 oBfr.append(" <cbc:StreetName><![CDATA["+oBillAddr.getStringNull(DB.nm_street,"")+"]]></cbc:StreetName>\n"); 425 oBfr.append(" <cbc:AdditionalStreetName><![CDATA["+oBillAddr.getStringNull(DB.tp_street,"")+"]]></cbc:AdditionalStreetName>\n"); 426 oBfr.append(" <cbc:BuildingName><![CDATA["+oBillAddr.getStringNull(DB.tx_addr2,"")+"]]></cbc:BuildingName>\n"); 427 oBfr.append(" <cbc:BuildingNumber><![CDATA["+oBillAddr.getStringNull(DB.nu_street,"")+"]]></cbc:BuildingNumber>\n"); 428 oBfr.append(" <cbc:CityName><![CDATA["+oBillAddr.getStringNull(DB.mn_city,"")+"]]></cbc:CityName>\n"); 429 oBfr.append(" <cbc:PostalZone>"+oBillAddr.getStringNull(DB.zipcode,"")+"</cbc:PostalZone>\n"); 430 oBfr.append(" <cbc:CountrySubentity><![CDATA["+oBillAddr.getStringNull(DB.nm_state,"")+"]]></cbc:CountrySubentity>\n"); 431 oBfr.append(" <cbc:CountrySubentityCode>"+oBillAddr.getStringNull(DB.id_state,"")+"</cbc:CountrySubentityCode>\n"); 432 oBfr.append(" <cbc:AddressLine><![CDATA["+oBillAddr.getStringNull(DB.tx_addr1,"")+"]]></cbc:AddressLine>\n"); 433 oBfr.append(" <Country><![CDATA["+oBillAddr.getStringNull(DB.nm_country,"").trim()+"]]></Country>\n"); 434 } 435 oBfr.append(" </cac:Address>\n"); 436 oBfr.append(" </cac:Party>\n"); 437 oBfr.append(" <cac:AccountsContact>\n"); 438 if (oBillAddr==null) { 439 oBfr.append(" <cbc:Name/>\n"); 440 oBfr.append(" <cbc:Telephone/>\n"); 441 } else { 442 oBfr.append(" <cbc:Name><![CDATA["+oBuyer.getStringNull(DB.contact_person,"")+"]]></cbc:Name>\n"); 443 oBfr.append(" <cbc:Telephone><![CDATA["+oBuyer.getStringNull(DB.direct_phone,oBuyer.getStringNull(DB.work_phone,""))+"]]></cbc:Telephone>\n"); 444 } 445 oBfr.append(" </cac:AccountsContact>\n"); 446 oBfr.append(" </cac:BuyerParty>\n"); 447 if (DebugFile.trace) DebugFile.writeln("Writting SellerParty..."); 448 oBfr.append(" <cac:SellerParty>\n"); 449 oBfr.append(" <cac:Party>\n"); 450 oBfr.append(" <cac:PartyName><cbc:Name><![CDATA["+oSeller.getStringNull(DB.nm_company,oSeller.getStringNull(DB.nm_shop,""))+"]]></cbc:Name></cac:PartyName>\n"); 451 oBfr.append(" <cac:Address>\n"); 452 if (oBillAddr==null) { 453 oBfr.append(" <ID/>\n"); 454 oBfr.append(" <cbc:PostBox/>\n"); 455 oBfr.append(" <cbc:StreetName/>\n"); 456 oBfr.append(" <cbc:AdditionalStreetName/>\n"); 457 oBfr.append(" <cbc:BuildingName/>\n"); 458 oBfr.append(" <cbc:BuildingNumber/>\n"); 459 oBfr.append(" <cbc:CityName/>\n"); 460 oBfr.append(" <cbc:PostalZone/>\n"); 461 oBfr.append(" <cbc:CountrySubentity/>\n"); 462 oBfr.append(" <cbc:CountrySubentityCode/>\n"); 463 oBfr.append(" <cbc:AddressLine/>\n"); 464 oBfr.append(" <Country/>\n"); 465 } else { 466 oBfr.append(" <ID>"+oSeller.getStringNull(DB.gu_shop, oSeller.getStringNull(DB.gu_address, ""))+"</ID>\n"); 467 oBfr.append(" <cbc:StreetName><![CDATA["+oSeller.getStringNull(DB.nm_street,"")+"]]></cbc:StreetName>\n"); 468 oBfr.append(" <cbc:AdditionalStreetName><![CDATA["+oSeller.getStringNull(DB.tp_street,"")+"]]></cbc:AdditionalStreetName>\n"); 469 oBfr.append(" <cbc:BuildingName><![CDATA["+oSeller.getStringNull(DB.tx_addr2,"")+"]]></cbc:BuildingName>\n"); 470 oBfr.append(" <cbc:BuildingNumber><![CDATA["+oSeller.getStringNull(DB.nu_street,"")+"]]></cbc:BuildingNumber>\n"); 471 oBfr.append(" <cbc:CityName><![CDATA["+oSeller.getStringNull(DB.mn_city,"")+"]]></cbc:CityName>\n"); 472 oBfr.append(" <cbc:PostalZone>"+oSeller.getStringNull(DB.zipcode,"")+"</cbc:PostalZone>\n"); 473 oBfr.append(" <cbc:CountrySubentity><![CDATA["+oSeller.getStringNull(DB.nm_state,"")+"]]></cbc:CountrySubentity>\n"); 474 oBfr.append(" <cbc:CountrySubentityCode>"+oSeller.getStringNull(DB.id_state,"")+"</cbc:CountrySubentityCode>\n"); 475 oBfr.append(" <cbc:AddressLine><![CDATA["+oSeller.getStringNull(DB.tx_addr1,"")+"]]></cbc:AddressLine>\n"); 476 oBfr.append(" <Country><![CDATA["+oSeller.getStringNull(DB.nm_country,"").trim()+"]]></Country>\n"); 477 } 478 oBfr.append(" </cac:Address>\n"); 479 oBfr.append(" </cac:Party>\n"); 480 oBfr.append(" <cac:AccountsContact>\n"); 481 oBfr.append(" <cbc:Name><![CDATA["+oSeller.getStringNull(DB.contact_person,"")+"]]></cbc:Name>\n"); 482 oBfr.append(" <cbc:Telephone><![CDATA["+oSeller.getStringNull(DB.direct_phone,oSeller.getStringNull(DB.work_phone,""))+"]]></cbc:Telephone>\n"); 483 oBfr.append(" </cac:AccountsContact>\n"); 484 oBfr.append(" </cac:SellerParty>\n"); 485 if (DebugFile.trace) DebugFile.writeln("Writting Delivery..."); 486 oBfr.append(" <cac:Delivey>\n"); 487 if (!isNull(DB.dt_promised)) 488 oBfr.append(" <cbc:RequestedDeliveyDateTime>"+getDateShort(DB.dt_promised)+"T"+getTime(DB.dt_promised)+"</cbc:RequestedDeliveyDateTime>\n"); 489 if (oShipAddr!=null) { 490 oBfr.append(" <cac:DeliveryAddress>\n"); 491 oBfr.append(" <ID>"+oShipAddr.getString(DB.gu_address)+"</ID>\n"); 492 oBfr.append(" <cbc:StreetName><![CDATA["+oShipAddr.getStringNull(DB.nm_street,"")+"]]></cbc:StreetName>\n"); 493 oBfr.append(" <cbc:AdditionalStreetName><![CDATA["+oShipAddr.getStringNull(DB.tp_street,"")+"]]></cbc:AdditionalStreetName>\n"); 494 oBfr.append(" <cbc:BuildingName><![CDATA["+oShipAddr.getStringNull(DB.tx_addr2,"")+"]]></cbc:BuildingName>\n"); 495 oBfr.append(" <cbc:BuildingNumber><![CDATA["+oShipAddr.getStringNull(DB.nu_street,"")+"]]></cbc:BuildingNumber>\n"); 496 oBfr.append(" <cbc:CityName><![CDATA["+oShipAddr.getStringNull(DB.mn_city,"")+"]]></cbc:CityName>\n"); 497 oBfr.append(" <cbc:PostalZone>"+oShipAddr.getStringNull(DB.zipcode,"")+"</cbc:PostalZone>\n"); 498 oBfr.append(" <cbc:CountrySubentity><![CDATA["+oShipAddr.getStringNull(DB.nm_state,"")+"]]></cbc:CountrySubentity>\n"); 499 oBfr.append(" <cbc:CountrySubentityCode>"+oShipAddr.getStringNull(DB.id_state,"")+"</cbc:CountrySubentityCode>\n"); 500 oBfr.append(" <cbc:AddressLine><![CDATA["+oShipAddr.getStringNull(DB.tx_addr1,"")+"]]></cbc:AddressLine>\n"); 501 oBfr.append(" <Country><![CDATA["+oShipAddr.getStringNull(DB.id_country,"").trim()+"]]></Country>\n"); 502 oBfr.append(" </cac:DeliveryAddress>\n"); 503 } 504 oBfr.append(" </cac:Delivey>\n"); 505 for (int l=0; l<iLineCount; l++) { 506 if (DebugFile.trace) DebugFile.writeln("Writting DespatchLine "+String.valueOf(l+1)+"..."); 507 oBfr.append(" <cac:DespatchLine>\n"); 508 oBfr.append(" <ID>"+String.valueOf(l+1)+"</ID>\n"); 509 float fQuantity = oLines.getFloat(DB.nu_quantity,l); 510 if (fQuantity == (long) fQuantity) 511 oBfr.append(" <cbc:DeliveredQuantity>"+String.valueOf((long)fQuantity)+"</cbc:DeliveredQuantity>\n"); 512 else 513 oBfr.append(" <cbc:DeliveredQuantity>"+String.valueOf(fQuantity)+"</cbc:DeliveredQuantity>\n"); 514 oBfr.append(" <cac:Item>\n"); 515 oBfr.append(" <cbc:Description><![CDATA["+oLines.getString(DB.nm_product,l)+"]]></cbc:Description>\n"); 516 oBfr.append(" </cac:Item>\n"); 517 oBfr.append(" </cac:DespatchLine>\n"); 518 } 519 oBfr.append(" </DespatchAdvice>\n"); 520 521 if (DebugFile.trace) { 522 DebugFile.decIdent(); 523 DebugFile.writeln("End DespatchAdvice.toXML()"); 524 } 525 526 return oBfr.toString(); 527 } 529 531 538 public static int nextVal(JDCConnection oConn, String sGuWorkArea) 539 throws SQLException { 540 boolean bNext; 541 int iNextDispatch = 1; 542 String sSQL = ""; 543 PreparedStatement oSnxt = null; 544 ResultSet oRnxt = null; 545 546 sSQL = "SELECT "+DB.pg_despatch+" FROM "+DB.k_despatch_next+ " WHERE "+DB.gu_workarea+"=? "; 547 if (oConn.getDataBaseProduct()==JDCConnection.DBMS_POSTGRESQL) { 548 sSQL += "FOR UPDATE OF "+DB.k_despatch_next; 549 } if (oConn.getDataBaseProduct()==JDCConnection.DBMS_ORACLE) { 550 sSQL += "FOR UPDATE OF "+DB.pg_despatch; 551 } 552 553 try { 554 if (DebugFile.trace) DebugFile.writeln("Connection.prepareStatement("+sSQL+",ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE)"); 555 oSnxt = oConn.prepareStatement(sSQL,ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); 556 oSnxt.setObject(1, sGuWorkArea, Types.CHAR); 557 oRnxt = oSnxt.executeQuery(); 558 bNext = oRnxt.next(); 559 if (bNext) { 560 iNextDispatch = oRnxt.getInt(1); 561 oRnxt.updateInt(DB.pg_despatch, ++iNextDispatch); 562 oRnxt.updateRow(); 563 } 564 oRnxt.close(); 565 oRnxt=null; 566 oSnxt.close(); 567 oSnxt=null; 568 if (!bNext) { 569 if (DebugFile.trace) DebugFile.writeln("Connection.prepareStatement("+sSQL+",ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE)"); 570 sSQL = "INSERT INTO "+DB.k_despatch_next+" ("+DB.gu_workarea+","+DB.pg_despatch+") VALUES (?,?)"; 571 oSnxt = oConn.prepareStatement(sSQL); 572 oSnxt.setObject(1, sGuWorkArea, Types.CHAR); 573 oSnxt.setInt(2, iNextDispatch); 574 oSnxt.executeUpdate(); 575 oSnxt.close(); 576 } 577 } catch (SQLException sqle) { 578 if (oRnxt!=null) oRnxt.close(); 579 if (oSnxt!=null) oSnxt.close(); 580 throw new SQLException (sqle.getMessage()+" "+sSQL,sqle.getSQLState(),sqle.getErrorCode()); 581 } 582 return iNextDispatch; 583 } 585 588 public static final short ClassId = 42; 589 590 } 591 | Popular Tags |