1 19 package org.openbravo.erpCommon.utility; 20 21 import org.openbravo.database.ConnectionProvider; 22 import java.util.Vector ; 23 import javax.servlet.*; 24 import org.apache.log4j.Logger ; 25 26 27 public class ReferencedTables { 28 static Logger log4j = Logger.getLogger(ReferencedTables.class); 29 private ConnectionProvider conn; 30 private String adTableId; 31 private String keyName; 32 private String keyId; 33 private boolean hassotrx=false; 34 private boolean sotrx=true; 35 36 public ReferencedTables(ConnectionProvider _conn, String _adTableId, String _keyName, String _keyId) throws ServletException { 37 if (_adTableId==null || _adTableId.equals("") || _keyName==null || _keyName.equals("")) { 38 throw new ServletException("ReferenceTables() - Missing arguments"); 39 } 40 adTableId = _adTableId; 41 keyName = _keyName; 42 keyId = _keyId; 43 conn = _conn; 44 process(); 45 } 46 47 private void process() throws ServletException { 48 String tableName = ReferencedTablesData.selectTableName(conn, adTableId); 49 if (keyId!=null && !keyId.equals("")) { 50 if (adTableId.equals("800018")) { if (log4j.isDebugEnabled()) log4j.debug("DP"); 52 String invoiceId = ReferencedTablesData.selectKeyId(conn, "C_INVOICE_ID", tableName, keyName, keyId); 53 if (!invoiceId.equals("")) { 54 if (log4j.isDebugEnabled()) log4j.debug("InvoiceId: "+invoiceId); 55 String newAdTableId = ReferencedTablesData.selectTableId(conn, "C_Invoice"); 56 ReferencedTables ref = new ReferencedTables(conn, newAdTableId, "C_Invoice_ID", invoiceId); 57 hassotrx = ref.hasSOTrx(); 58 sotrx = ref.isSOTrx(); 59 ref = null; 60 } else { 61 String orderId = ReferencedTablesData.selectKeyId(conn, "C_ORDER_ID", tableName, keyName, keyId); 62 if (!orderId.equals("")) { 63 if (log4j.isDebugEnabled()) log4j.debug("OrderId: "+orderId); 64 String newAdTableId = ReferencedTablesData.selectTableId(conn, "C_Order"); 65 ReferencedTables ref = new ReferencedTables(conn, newAdTableId, "C_Order_ID", orderId); 66 hassotrx = ref.hasSOTrx(); 67 sotrx = ref.isSOTrx(); 68 ref = null; 69 } else { 70 if (log4j.isDebugEnabled()) log4j.debug("Settlement"); 71 checkParent(tableName, "C_Settlement_Generate_ID"); 72 } 73 } 74 } else if (adTableId.equals("800019")) { hassotrx = true; 76 sotrx = ReferencedTablesData.selectNotManual(conn, keyId); 77 } else if (ReferencedTablesData.hasIsSOTrx(conn, adTableId)) { 78 hassotrx = true; 79 if (keyName.equalsIgnoreCase("C_DocTypeTarget_ID")) keyName = "C_DocType_ID"; 80 else if (keyName.equalsIgnoreCase("PO_Window_ID")) keyName = "AD_Window_ID"; 81 else if (keyName.equalsIgnoreCase("BillTo_ID")) keyName = "C_BPartner_Location_ID"; 82 sotrx = ReferencedTablesData.selectSOTrx(conn, tableName, keyName, keyId); 83 } else checkParent(tableName, ""); 84 } 85 } 86 87 private void checkParent(String tableName, String filterField) throws ServletException { 88 ReferencedTablesData[] data = ReferencedTablesData.select(conn, filterField, adTableId); 89 if (keyName.equalsIgnoreCase("C_DocTypeTarget_ID")) keyName = "C_DocType_ID"; 90 else if (keyName.equalsIgnoreCase("PO_Window_ID")) keyName = "AD_Window_ID"; 91 else if (keyName.equalsIgnoreCase("BillTo_ID")) keyName = "C_BPartner_Location_ID"; 92 else if ((keyName.equalsIgnoreCase("SO_Bankaccount_ID")) || (keyName.equalsIgnoreCase("PO_Bankaccount_ID"))) keyName="C_BankAccount_ID"; 93 if (data!=null && data.length>0) { 94 for (int i=0;i<data.length;i++) { 95 Vector <Object > vecReference = getTableNameReferenced(data[i].columnname, data[i].adReferenceId, data[i].adReferenceValueId); 96 String newKeyId = ReferencedTablesData.selectKeyId(conn, data[i].columnname, tableName, keyName, keyId); 97 if (vecReference!=null && vecReference.size()>0) { 98 String newAdTableId = ReferencedTablesData.selectTableId(conn, ((String )vecReference.elementAt(0))); 99 try { 100 ReferencedTables ref = new ReferencedTables(conn, newAdTableId, ((String )vecReference.elementAt(1)), newKeyId); 101 if (ref.hasSOTrx()) { 102 hassotrx = ref.hasSOTrx(); 103 sotrx = ref.isSOTrx(); 104 break; 105 } 106 ref = null; 107 } catch (ServletException ex) { 108 ex.printStackTrace(); 109 } 110 } 111 } 112 } 113 } 114 115 private Vector <Object > getTableNameReferenced(String columnname, String adReferenceId, String adReferenceValueId) throws ServletException { 116 String tableDirName = "", columnName=""; 117 tableDirName = columnname.substring(0,columnname.length()-3); 118 columnName = columnname; 119 if (columnname.startsWith("C_Settlement")) { 120 tableDirName = "C_Settlement"; 121 columnName = "C_Settlement_ID"; 122 } 123 Vector <Object > vec = new Vector <Object >(); 124 switch (Integer.valueOf(adReferenceId).intValue()) { 125 case 13: 126 case 19: 127 case 35: 128 case 30: 129 vec.addElement(tableDirName); 130 vec.addElement(columnName); 131 break; 132 case 21: 133 vec.addElement("C_Location"); 134 vec.addElement("C_Location_ID"); 135 break; 136 case 25: 137 vec.addElement("C_ValidCombination"); 138 vec.addElement("C_ValidCombination_ID"); 139 break; 140 case 31: 141 vec.addElement("M_Locator"); 142 vec.addElement("M_Locator_ID"); 143 break; 144 case 800011: 145 vec.addElement("M_Product"); 146 vec.addElement("M_Product_ID"); 147 break; 148 case 800013: 149 vec.addElement("M_Locator"); 150 vec.addElement("M_Locator_ID"); 151 break; 152 case 18: 153 ReferencedTablesData[] data = ReferencedTablesData.selectRefTable(conn, adReferenceValueId); 154 if (data!=null && data.length>0) { 155 vec.addElement(data[0].tablename); 156 vec.addElement(data[0].columnname); 157 } 158 break; 159 }; 160 return vec; 161 } 162 163 public boolean isSOTrx() { 164 return sotrx; 165 } 166 167 public boolean hasSOTrx() { 168 return hassotrx; 169 } 170 } 171 | Popular Tags |