Merged idempiere/idempiere into development

This commit is contained in:
Carlos Ruiz 2013-07-05 17:28:16 -05:00
commit 78be1998c8
117 changed files with 1313 additions and 524 deletions

View File

@ -65,15 +65,15 @@ Check the inventory level after the document
|@ExpectedInventoryLevelAfter@|@SQL=SELECT SUM(s.qtyonhand) FROM m_storage s, m_locator l, m_warehouse w WHERE s.m_product_id=133 AND s.m_locator_id = l.m_locator_id AND l.m_warehouse_id=w.m_warehouse_id AND w.m_warehouse_id=103| |@ExpectedInventoryLevelAfter@|@SQL=SELECT SUM(s.qtyonhand) FROM m_storage s, m_locator l, m_warehouse w WHERE s.m_product_id=133 AND s.m_locator_id = l.m_locator_id AND l.m_warehouse_id=w.m_warehouse_id AND w.m_warehouse_id=103|
Check the bp balance after the document Check the bp balance after the document (with the new cash payment is applied immediately so there must not be variance on the bp balance)
!|Assert Record| !|Assert Record|
|*Table* |C_bpartner | |*Table* |C_bpartner |
|*Where* |c_bpartner_id=120 | |*Where* |c_bpartner_id=120 |
|*Read* | | |*Read* | |
|actuallifetimevalue|@SQL=SELECT @C_bpartner.actuallifetimevalue@ + @c_order.grandtotal@ FROM DUAL| |actuallifetimevalue|@SQL=SELECT @C_bpartner.actuallifetimevalue@ + @c_order.grandtotal@ FROM DUAL|
|so_creditused |@SQL=SELECT @C_bpartner.so_creditused@ + @c_order.grandtotal@ FROM DUAL | |so_creditused |@SQL=SELECT @C_bpartner.so_creditused@ FROM DUAL |
|totalopenbalance |@SQL=SELECT @C_bpartner.totalopenbalance@ + @c_order.grandtotal@ FROM DUAL | |totalopenbalance |@SQL=SELECT @C_bpartner.totalopenbalance@ FROM DUAL |
Check existance of shipment Check existance of shipment
@ -123,17 +123,14 @@ Check existance of invoice
|qtyinvoiced | | |qtyinvoiced | |
|linenetamt | | |linenetamt | |
Check existance of cash journal line Check existance of cash payment (now on payment table)
!|Read Record| !|Read Record|
|*Table* |C_CashLine | |*Table* |C_Payment |
|C_Invoice_id|@C_Invoice.C_Invoice_id@| |C_Invoice_id|@C_Invoice.C_Invoice_id@|
|*Read* | | |*Read* | |
|line | | |documentno | |
|c_cash_id | |
|line | |
|description | | |description | |
|amount | | |amount | |
|isgenerated | |
|processed | | |processed | |

View File

@ -1,4 +1,4 @@
This test tries to create a reference in the database, intentionally the !-ValidationType-! is left to a wrong value (Y) to make it fail. This test tries to create a reference in the database, intentionally the !-ValidationType-! is set to a wrong value (Y) to make it fail.
!include TestLoginSystem !include TestLoginSystem
@ -7,4 +7,4 @@ This test tries to create a reference in the database, intentionally the !-Valid
|Name |Fitnesse Test| |Name |Fitnesse Test|
|ValidationType|Y | |ValidationType|Y |
|invalidcolumn|Y | |invalidcolumn|Y |
|*Save* | | |*Save*Error* |java.lang.Exception: Cannot set value of column|

View File

@ -2,19 +2,23 @@ This test creates a new tenant in the database.
!include TestLoginSystem !include TestLoginSystem
!|Run Process| !|Set Variable |
|*ProcessValue* |InitialClientSetup | |@random_string@|@random_string(,,6)|
|ClientName |Prueba |
|OrgName |Prueba |
|AdminUserName |PruebaAdmin | !|Run Process |
|NormalUserName |PruebaUser | |*ProcessValue* |InitialClientSetup |
|C_Currency_ID |230 | |ClientName |TestClient @random_string@ |
|C_Country_ID |156 | |OrgName |TestOrg @random_string@ |
|CityName |Bogotá | |AdminUserName |@random_string@Admin |
|IsUseBPDimension |Y | |NormalUserName |@random_string@User |
|IsUseProductDimension |Y | |C_Currency_ID |230 |
|IsUseProjectDimension |Y | |C_Country_ID |156 |
|IsUseCampaignDimension |N | |CityName |Bogotá |
|IsUseSalesRegionDimension|N | |IsUseBPDimension |Y |
|CoAFile |/home/carlos/hgAdempiere/adempiere361/data/import/AccountingUS.csv| |IsUseProductDimension |Y |
|*Run* | | |IsUseProjectDimension |Y |
|IsUseCampaignDimension |N |
|IsUseSalesRegionDimension|N |
|CoAFile |${fitnesse_home}/../org.adempiere.server-feature/data/import/AccountingUS.csv|
|*Run* | |

View File

@ -4,43 +4,49 @@ https://sourceforge.net/tracker/?func=detail&atid=879332&aid=2713724&group_id=17
!include -c TestLoginGardenAdmin !include -c TestLoginGardenAdmin
!|Set Variable |
|@InventoryLevelBefore@ |@SQL=select sum(qtyonhand) from m_storage where m_product_id=141 and m_locator_id=101|
|@ExpectedInventoryLevelAfter@|@SQL=SELECT @InventoryLevelBefore@-2 FROM dual |
Create the internal use document Create the internal use document
!|Create Record| !|Create Record |
|*Table*|M_Inventory | |*Table* |M_Inventory |
|ad_org_id |11 | |ad_org_id |11 |
|c_doctype_id |144 | |c_doctype_id |200000 |
|m_warehouse_id|103 | |m_warehouse_id|103 |
|movementdate |2009-03-26 00:00:00.0| |movementdate |2013-06-26 00:00:00.0|
|*Save*| | |*Save* | |
Create internal use line Create internal use line
!|Create Record| !|Create Record |
|*Table*|M_InventoryLine | |*Table* |M_InventoryLine |
|M_Inventory_ID|@M_Inventory.M_Inventory_ID@ | |M_Inventory_ID|@M_Inventory.M_Inventory_ID@|
|ad_org_id |@M_Inventory.AD_Org_ID@ | |ad_org_id |@M_Inventory.AD_Org_ID@ |
|m_locator_id |101 | |m_locator_id |101 |
|m_product_id |141 | |m_product_id |141 |
|c_charge_id |101 | |c_charge_id |101 |
|qtyinternaluse|@SQL=select sum(qtyonhand) from m_storage where m_product_id=141 and m_locator_id=101 and m_attributesetinstance_id=0| |qtyinternaluse|2 |
|qtybook|@SQL=select sum(qtyonhand) from m_storage where m_product_id=141 and m_locator_id=101 and m_attributesetinstance_id=0| |*Save* | |
|*Save*| |
Complete the internal use Complete the internal use
!|Run Process| !|Run Process |
|*ProcessValue*|M_Inventory Process | |*ProcessValue*|M_Inventory Process |
|*RecordID* |@M_Inventory.M_Inventory_ID@| |*RecordID* |@M_Inventory.M_Inventory_ID@|
|*DocAction* |CO | |*DocAction* |CO |
|*Run*| | |*Run* | |
!|Assert Variable |
|@ExpectedInventoryLevelAfter@|@SQL=select sum(qtyonhand) from m_storage where m_product_id=141 and m_locator_id=101|
Post Post
!|Set DocAction| !|Set DocAction |
|*Table* |M_Inventory| |*Table* |M_Inventory |
|M_Inventory_ID|@M_Inventory.M_Inventory_ID@ | |M_Inventory_ID|@M_Inventory.M_Inventory_ID@|
|docAction |PO | |docAction |PO |
|*Save*| | |*Save* | |
Check the postings Check the postings

View File

@ -1,3 +1,9 @@
|IdempiereSuite.TestInitialClientSetup||17:03:35 vie, jun 28, 2013|
|IdempiereSuite.TestPostInternalInventory||15:31:05 vie, jun 28, 2013|
|IdempiereSuite.TestCreateReference||14:44:52 vie, jun 28, 2013|
|IdempiereSuite.TestCashPosOrder||14:42:20 vie, jun 28, 2013|
|ZkSuite.ZkGardenAdminLogin||13:02:13 vie, jun 28, 2013|
|ZkSuite.ZkSystemAdminLogin||13:00:38 vie, jun 28, 2013|
|||12:04:00 jue, dic 20, 2012| |||12:04:00 jue, dic 20, 2012|
|FitLibraryWeb||01:41:13 Thu, Dec 13, 2012| |FitLibraryWeb||01:41:13 Thu, Dec 13, 2012|
|FitLibrary||01:40:51 Thu, Dec 13, 2012| |FitLibrary||01:40:51 Thu, Dec 13, 2012|
@ -9,13 +15,9 @@
|CommonTests.CreateProductPrice||01:29:57 mar, abr 03, 2012| |CommonTests.CreateProductPrice||01:29:57 mar, abr 03, 2012|
|AvgCostSuite.BasicTest||01:18:34 mar, abr 03, 2012| |AvgCostSuite.BasicTest||01:18:34 mar, abr 03, 2012|
|CommonTests.CreatePurchaseOrder||01:13:34 mar, abr 03, 2012| |CommonTests.CreatePurchaseOrder||01:13:34 mar, abr 03, 2012|
|IdempiereSuite.TestPostInternalInventory||24:21:25 mar, abr 03, 2012|
|IdempiereSuite.TestInitialClientSetup||24:20:45 mar, abr 03, 2012|
|IdempiereSuite.TestCreateReference||24:20:15 mar, abr 03, 2012|
|IdempiereSuite.TestLoginSystem||24:20:05 mar, abr 03, 2012| |IdempiereSuite.TestLoginSystem||24:20:05 mar, abr 03, 2012|
|IdempiereSuite.TestCreateBusinessPartner||24:19:40 mar, abr 03, 2012| |IdempiereSuite.TestCreateBusinessPartner||24:19:40 mar, abr 03, 2012|
|IdempiereSuite.TestCompletePayment||24:19:18 mar, abr 03, 2012| |IdempiereSuite.TestCompletePayment||24:19:18 mar, abr 03, 2012|
|IdempiereSuite.TestCashPosOrder||24:18:46 mar, abr 03, 2012|
|IdempiereSuite||24:17:17 mar, abr 03, 2012| |IdempiereSuite||24:17:17 mar, abr 03, 2012|
|IdempiereSuite.TestLoginGardenAdmin||24:17:07 mar, abr 03, 2012| |IdempiereSuite.TestLoginGardenAdmin||24:17:07 mar, abr 03, 2012|
|IdempiereSuite.QuickTest||24:16:36 mar, abr 03, 2012| |IdempiereSuite.QuickTest||24:16:36 mar, abr 03, 2012|

View File

@ -15,12 +15,12 @@
|''window''|${windowId}|''click toolbar''|!-BtnSave-!| |''window''|${windowId}|''click toolbar''|!-BtnSave-!|
|''wait response''| |''wait response''|
|''window message''|${windowId}|is|!-Record saved-!| |''window message''|${windowId}|is|!-Record saved-!|
|''window''|${windowId}|''click detail toolbar''|!-BtnNew-!| |''window''|${windowId}|''click detail toolbar''|!-BtnEdit-!|
|''wait response''| |''wait response''|
|''text of''|${windowId} $recordInfo|is|!-+*1/1-!| |''text of''|${windowId} $recordInfo|is|!-+*1/1-!|
|''window''|${windowId}|''click toolbar''|!-BtnParentRecord-!| |''window''|${windowId}|''click toolbar''|!-BtnParentRecord-!|
|''wait response''| |''wait response''|
|''window''|${windowId}|''click process button''|!-CreateFrom-!| |''click''|${windowId} $Production $CreateFrom|
|''wait response''| |''wait response''|
|''click''|${windowId} @window[title="Create Production"] $Ok| |''click''|${windowId} @window[title="Create Production"] $Ok|
|''wait response''| |''wait response''|

View File

@ -4,7 +4,7 @@
'''start firefox,chrome or phantomjs''' '''start firefox,chrome or phantomjs'''
|''start spider with''|firefox| |''start spider with''|firefox|
|''shutdown browser automatically''|false| |''shutdown browser automatically''|false|
|''get url''|http://localhost:8080/webui/index.zul| |''get url''|http://localhost:${ADEMPIERE_WEB_PORT}/webui/index.zul|
|''wait response''| |''wait response''|

View File

@ -3,7 +3,7 @@
'''start firefox,chrome or phantomjs''' '''start firefox,chrome or phantomjs'''
|''start spider with''|firefox| |''start spider with''|firefox|
|''shutdown browser automatically''|false| |''shutdown browser automatically''|false|
|''get url''|http://localhost:8080/webui/index.zul| |''get url''|http://localhost:${ADEMPIERE_WEB_PORT}/webui/index.zul|
|''wait response''| |''wait response''|

View File

@ -0,0 +1,12 @@
-- Jul 3, 2013 5:16:26 PM COT
-- IDEMPIERE-1123 Unnecessary showing user security fields
UPDATE AD_Field SET IsActive='N',Updated=TO_DATE('2013-07-03 17:16:26','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200473
;
-- Jul 3, 2013 5:16:32 PM COT
-- IDEMPIERE-1123 Unnecessary showing user security fields
UPDATE AD_Field SET IsActive='N',Updated=TO_DATE('2013-07-03 17:16:32','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200475
;
SELECT register_migration_script('20130603172740_IDEMPIERE-1123.sql') FROM dual
;

View File

@ -0,0 +1,13 @@
-- Jul 3, 2013 6:25:43 PM COT
-- IDEMPIERE-1121 Field Customization IsUpdateable mandatory on DB not in dict
ALTER TABLE AD_UserDef_Field MODIFY IsUpdateable CHAR(1) DEFAULT NULL
;
-- Jul 3, 2013 6:25:44 PM COT
-- IDEMPIERE-1121 Field Customization IsUpdateable mandatory on DB not in dict
ALTER TABLE AD_UserDef_Field MODIFY IsUpdateable NULL
;
SELECT register_migration_script('20130603182945_IDEMPIERE-1121.sql') FROM dual
;

View File

@ -0,0 +1,13 @@
-- 4/07/2013 06:07:52 PM COT
-- IDEMPIERE-1133 Customize grid not translated
INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,Created,AD_Org_ID,AD_Client_ID,EntityType) VALUES ('I','Save Column Width',200186,'e55bb769-5507-483c-bfd4-c938c5c5d93f','SaveColumnWidth','Y',TO_DATE('2013-07-04 18:07:52','YYYY-MM-DD HH24:MI:SS'),100,100,TO_DATE('2013-07-04 18:07:52','YYYY-MM-DD HH24:MI:SS'),0,0,'D')
;
-- 4/07/2013 06:07:52 PM COT
-- IDEMPIERE-1133 Customize grid not translated
INSERT INTO AD_Message_Trl (AD_Language,AD_Message_ID, MsgText,MsgTip, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Message_Trl_UU ) SELECT l.AD_Language,t.AD_Message_ID, t.MsgText,t.MsgTip, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Message t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Message_ID=200186 AND NOT EXISTS (SELECT * FROM AD_Message_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Message_ID=t.AD_Message_ID)
;
SELECT register_migration_script('201307041818_IDEMPIERE-1133.sql') FROM dual
;

View File

@ -0,0 +1,13 @@
-- Jul 3, 2013 5:16:26 PM COT
-- IDEMPIERE-1123 Unnecessary showing user security fields
UPDATE AD_Field SET IsActive='N',Updated=TO_TIMESTAMP('2013-07-03 17:16:26','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200473
;
-- Jul 3, 2013 5:16:32 PM COT
-- IDEMPIERE-1123 Unnecessary showing user security fields
UPDATE AD_Field SET IsActive='N',Updated=TO_TIMESTAMP('2013-07-03 17:16:32','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200475
;
SELECT register_migration_script('20130603172740_IDEMPIERE-1123.sql') FROM dual
;

View File

@ -0,0 +1,13 @@
-- Jul 3, 2013 6:25:43 PM COT
-- IDEMPIERE-1121 Field Customization IsUpdateable mandatory on DB not in dict
INSERT INTO t_alter_column values('ad_userdef_field','IsUpdateable','CHAR(1)',null,'NULL')
;
-- Jul 3, 2013 6:25:44 PM COT
-- IDEMPIERE-1121 Field Customization IsUpdateable mandatory on DB not in dict
INSERT INTO t_alter_column values('ad_userdef_field','IsUpdateable',null,'NULL',null)
;
SELECT register_migration_script('20130603182945_IDEMPIERE-1121.sql') FROM dual
;

View File

@ -0,0 +1,13 @@
-- 4/07/2013 06:07:52 PM COT
-- IDEMPIERE-1133 Customize grid not translated
INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,Created,AD_Org_ID,AD_Client_ID,EntityType) VALUES ('I','Save Column Width',200186,'e55bb769-5507-483c-bfd4-c938c5c5d93f','SaveColumnWidth','Y',TO_TIMESTAMP('2013-07-04 18:07:52','YYYY-MM-DD HH24:MI:SS'),100,100,TO_TIMESTAMP('2013-07-04 18:07:52','YYYY-MM-DD HH24:MI:SS'),0,0,'D')
;
-- 4/07/2013 06:07:52 PM COT
-- IDEMPIERE-1133 Customize grid not translated
INSERT INTO AD_Message_Trl (AD_Language,AD_Message_ID, MsgText,MsgTip, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Message_Trl_UU ) SELECT l.AD_Language,t.AD_Message_ID, t.MsgText,t.MsgTip, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Message t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Message_ID=200186 AND NOT EXISTS (SELECT * FROM AD_Message_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Message_ID=t.AD_Message_ID)
;
SELECT register_migration_script('201307041818_IDEMPIERE-1133.sql') FROM dual
;

View File

@ -1143,6 +1143,11 @@ public class DocLine
} // getReversalLine_ID } // getReversalLine_ID
//end AZ Goodwill //end AZ Goodwill
public PO getPO()
{
return p_po;
}
/** /**
* String representation * String representation
* @return String * @return String

View File

@ -21,6 +21,8 @@ import java.sql.ResultSet;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.logging.Level; import java.util.logging.Level;
import org.compiere.model.I_M_InOutLine;
import org.compiere.model.I_M_RMALine;
import org.compiere.model.MTax; import org.compiere.model.MTax;
import org.compiere.model.MCurrency; import org.compiere.model.MCurrency;
import org.compiere.model.MAccount; import org.compiere.model.MAccount;
@ -33,6 +35,7 @@ import org.compiere.model.MProduct;
import org.compiere.model.ProductCost; import org.compiere.model.ProductCost;
import org.compiere.util.DB; import org.compiere.util.DB;
import org.compiere.util.Env; import org.compiere.util.Env;
import org.compiere.util.Util;
/** /**
* Post Shipment/Receipt Documents. * Post Shipment/Receipt Documents.
@ -178,9 +181,19 @@ public class Doc_InOut extends Doc
MProduct product = line.getProduct(); MProduct product = line.getProduct();
if (product.isStocked()) if (product.isStocked())
{ {
p_Error = "No Costs for " + line.getProduct().getName(); //ok if we have purchased zero cost item from vendor before
log.log(Level.WARNING, p_Error); int count = DB.getSQLValue(null, "SELECT Count(*) FROM M_CostDetail WHERE M_Product_ID=? AND Processed='Y' AND Amt=0.00 AND Qty > 0 AND (C_OrderLine_ID > 0 OR C_InvoiceLine_ID > 0)",
return null; product.getM_Product_ID());
if (count > 0)
{
costs = BigDecimal.ZERO;
}
else
{
p_Error = "No Costs for " + line.getProduct().getName();
log.log(Level.WARNING, p_Error);
return null;
}
} }
else // ignore service else // ignore service
continue; continue;
@ -381,6 +394,7 @@ public class Doc_InOut extends Doc
DocLine line = p_lines[i]; DocLine line = p_lines[i];
BigDecimal costs = null; BigDecimal costs = null;
MProduct product = line.getProduct(); MProduct product = line.getProduct();
MOrderLine orderLine = null;
if (!isReversal(line)) if (!isReversal(line))
{ {
//get costing method for product //get costing method for product
@ -393,7 +407,7 @@ public class Doc_InOut extends Doc
// Low - check if c_orderline_id is valid // Low - check if c_orderline_id is valid
if (C_OrderLine_ID > 0) if (C_OrderLine_ID > 0)
{ {
MOrderLine orderLine = new MOrderLine (getCtx(), C_OrderLine_ID, getTrxName()); orderLine = new MOrderLine (getCtx(), C_OrderLine_ID, getTrxName());
// Elaine 2008/06/26 // Elaine 2008/06/26
C_Currency_ID = orderLine.getC_Currency_ID(); C_Currency_ID = orderLine.getC_Currency_ID();
// //
@ -418,8 +432,8 @@ public class Doc_InOut extends Doc
costs = costs.multiply(line.getQty()); costs = costs.multiply(line.getQty());
} }
else else
{ {
p_Error = "Resubmit - No Costs for " + product.getName(); p_Error = "Resubmit - No Costs for " + product.getName() + " (required order line)";
log.log(Level.WARNING, p_Error); log.log(Level.WARNING, p_Error);
return null; return null;
} }
@ -432,9 +446,17 @@ public class Doc_InOut extends Doc
if (costs == null || costs.signum() == 0) if (costs == null || costs.signum() == 0)
{ {
p_Error = "Resubmit - No Costs for " + product.getName(); //ok if purchase price is actually zero
log.log(Level.WARNING, p_Error); if (orderLine != null && orderLine.getPriceActual().signum() == 0)
return null; {
costs = BigDecimal.ZERO;
}
else
{
p_Error = "Resubmit - No Costs for " + product.getName();
log.log(Level.WARNING, p_Error);
return null;
}
} }
} }
else else
@ -525,7 +547,33 @@ public class Doc_InOut extends Doc
MProduct product = line.getProduct(); MProduct product = line.getProduct();
if (!isReversal(line)) if (!isReversal(line))
{ {
costs = line.getProductCosts(as, line.getAD_Org_ID(), false); // current costs MInOutLine ioLine = (MInOutLine) line.getPO();
I_M_RMALine rmaLine = ioLine.getM_RMALine();
costs = rmaLine != null ? rmaLine.getAmt() : BigDecimal.ZERO;
I_M_InOutLine originalInOutLine = rmaLine != null ? rmaLine.getM_InOutLine() : null;
if (originalInOutLine != null && originalInOutLine.getC_OrderLine_ID() > 0)
{
MOrderLine originalOrderLine = (MOrderLine) originalInOutLine.getC_OrderLine();
// Goodwill: Correct included Tax
int C_Tax_ID = originalOrderLine.getC_Tax_ID();
if (originalOrderLine.isTaxIncluded() && C_Tax_ID != 0)
{
MTax tax = MTax.get(getCtx(), C_Tax_ID);
if (!tax.isZeroTax())
{
int stdPrecision = MCurrency.getStdPrecision(getCtx(), originalOrderLine.getC_Currency_ID());
BigDecimal costTax = tax.calculateTax(costs, true, stdPrecision);
if (log.isLoggable(Level.FINE)) log.fine("Costs=" + costs + " - Tax=" + costTax);
costs = costs.subtract(costTax);
}
} // correct included Tax
costs = costs.multiply(line.getQty());
costs = costs.negate();
}
else
{
costs = line.getProductCosts(as, line.getAD_Org_ID(), false); // current costs
}
if (costs == null || costs.signum() == 0) if (costs == null || costs.signum() == 0)
{ {
p_Error = "Resubmit - No Costs for " + product.getName(); p_Error = "Resubmit - No Costs for " + product.getName();
@ -535,7 +583,8 @@ public class Doc_InOut extends Doc
} }
else else
{ {
costs = BigDecimal.ZERO; //update below
costs = Env.ONE;
} }
// NotInvoicedReceipt DR // NotInvoicedReceipt DR
// Elaine 2008/06/26 // Elaine 2008/06/26
@ -596,7 +645,15 @@ public class Doc_InOut extends Doc
return null; return null;
} }
} }
String costingError = createVendorRMACostDetail(as, line, costs);
if (!Util.isEmpty(costingError))
{
p_Error = costingError;
return null;
}
} }
} // Purchasing Return } // Purchasing Return
else else
{ {
@ -613,4 +670,20 @@ public class Doc_InOut extends Doc
return m_Reversal_ID !=0 && line.getReversalLine_ID() != 0; return m_Reversal_ID !=0 && line.getReversalLine_ID() != 0;
} }
private String createVendorRMACostDetail(MAcctSchema as, DocLine line, BigDecimal costs)
{
BigDecimal tQty = line.getQty();
BigDecimal tAmt = costs;
if (tAmt.signum() != tQty.signum())
{
tAmt = tAmt.negate();
}
if (!MCostDetail.createShipment(as, line.getAD_Org_ID(), line.getM_Product_ID(),
line.getM_AttributeSetInstance_ID(), line.get_ID(), 0, tAmt, tQty,
line.getDescription(), false, getTrxName()))
{
return "SaveError";
}
return "";
}
} // Doc_InOut } // Doc_InOut

View File

@ -205,27 +205,9 @@ public class Doc_MatchInv extends Doc
if (log.isLoggable(Level.FINE)) log.fine("Line Net Amt=0 - M_Product_ID=" + getM_Product_ID() if (log.isLoggable(Level.FINE)) log.fine("Line Net Amt=0 - M_Product_ID=" + getM_Product_ID()
+ ",Qty=" + getQty() + ",InOutQty=" + m_receiptLine.getMovementQty()); + ",Qty=" + getQty() + ",InOutQty=" + m_receiptLine.getMovementQty());
// Invoice Price Variance cr = fact.createLine (null, expense, as.getC_Currency_ID(), null, Env.ONE);
BigDecimal ipv = dr.getSourceBalance().negate(); cr.setAmtAcctCr(BigDecimal.ZERO);
if (ipv.signum() != 0) cr.setAmtSourceCr(BigDecimal.ZERO);
{
MInvoice m_invoice = m_invoiceLine.getParent();
int C_Currency_ID = m_invoice.getC_Currency_ID();
FactLine pv = fact.createLine(null,
m_pc.getAccount(ProductCost.ACCTTYPE_P_IPV, as),
C_Currency_ID, ipv);
pv.setC_Activity_ID(m_invoiceLine.getC_Activity_ID());
pv.setC_Campaign_ID(m_invoiceLine.getC_Campaign_ID());
pv.setC_Project_ID(m_invoiceLine.getC_Project_ID());
pv.setC_ProjectPhase_ID(m_invoiceLine.getC_ProjectPhase_ID());
pv.setC_ProjectTask_ID(m_invoiceLine.getC_ProjectTask_ID());
pv.setC_UOM_ID(m_invoiceLine.getC_UOM_ID());
pv.setUser1_ID(m_invoiceLine.getUser1_ID());
pv.setUser2_ID(m_invoiceLine.getUser2_ID());
}
if (log.isLoggable(Level.FINE)) log.fine("IPV=" + ipv + "; Balance=" + fact.getSourceBalance());
facts.add(fact);
return facts;
} }
cr.setQty(getQty().negate()); cr.setQty(getQty().negate());
temp = cr.getAcctBalance(); temp = cr.getAcctBalance();
@ -351,6 +333,8 @@ public class Doc_MatchInv extends Doc
if (m_invoiceLine != null && m_invoiceLine.get_ID() > 0 if (m_invoiceLine != null && m_invoiceLine.get_ID() > 0
&& m_receiptLine != null && m_receiptLine.get_ID() > 0) && m_receiptLine != null && m_receiptLine.get_ID() > 0)
{ {
MMatchInv matchInv = (MMatchInv)getPO();
BigDecimal LineNetAmt = m_invoiceLine.getLineNetAmt(); BigDecimal LineNetAmt = m_invoiceLine.getLineNetAmt();
BigDecimal multiplier = getQty() BigDecimal multiplier = getQty()
.divide(m_invoiceLine.getQtyInvoiced(), 12, BigDecimal.ROUND_HALF_UP) .divide(m_invoiceLine.getQtyInvoiced(), 12, BigDecimal.ROUND_HALF_UP)
@ -358,8 +342,6 @@ public class Doc_MatchInv extends Doc
if (multiplier.compareTo(Env.ONE) != 0) if (multiplier.compareTo(Env.ONE) != 0)
LineNetAmt = LineNetAmt.multiply(multiplier); LineNetAmt = LineNetAmt.multiply(multiplier);
// Source from Doc_MatchInv.createFacts(MAcctSchema)
// Cost Detail Record - data from Expense/IncClearing (CR) record
// MZ Goodwill // MZ Goodwill
// Create Cost Detail Matched Invoice using Total Amount and Total Qty based on InvoiceLine // Create Cost Detail Matched Invoice using Total Amount and Total Qty based on InvoiceLine
MMatchInv[] mInv = MMatchInv.getInvoiceLine(getCtx(), m_invoiceLine.getC_InvoiceLine_ID(), getTrxName()); MMatchInv[] mInv = MMatchInv.getInvoiceLine(getCtx(), m_invoiceLine.getC_InvoiceLine_ID(), getTrxName());
@ -367,7 +349,7 @@ public class Doc_MatchInv extends Doc
BigDecimal tAmt = Env.ZERO; BigDecimal tAmt = Env.ZERO;
for (int i = 0 ; i < mInv.length ; i++) for (int i = 0 ; i < mInv.length ; i++)
{ {
if (mInv[i].isPosted() && mInv[i].getM_MatchInv_ID() != get_ID()) if (mInv[i].isPosted() && mInv[i].getM_MatchInv_ID() != get_ID() && mInv[i].getM_AttributeSetInstance_ID() == matchInv.getM_AttributeSetInstance_ID())
{ {
tQty = tQty.add(mInv[i].getQty()); tQty = tQty.add(mInv[i].getQty());
multiplier = mInv[i].getQty() multiplier = mInv[i].getQty()
@ -397,8 +379,7 @@ public class Doc_MatchInv extends Doc
tQty = tQty.add(getQty().negate()); // Qty is set to negative value tQty = tQty.add(getQty().negate()); // Qty is set to negative value
else else
tQty = tQty.add(getQty()); tQty = tQty.add(getQty());
MMatchInv matchInv = (MMatchInv)getPO();
// Set Total Amount and Total Quantity from Matched Invoice // Set Total Amount and Total Quantity from Matched Invoice
if (!MCostDetail.createInvoice(as, getAD_Org_ID(), if (!MCostDetail.createInvoice(as, getAD_Org_ID(),
getM_Product_ID(), matchInv.getM_AttributeSetInstance_ID(), getM_Product_ID(), matchInv.getM_AttributeSetInstance_ID(),

View File

@ -34,7 +34,7 @@ public class MColor extends X_AD_Color
/** /**
* *
*/ */
private static final long serialVersionUID = 8672637038417465668L; private static final long serialVersionUID = 3054697070898921956L;
/** /**
* Color Model * Color Model
@ -48,6 +48,11 @@ public class MColor extends X_AD_Color
if (AD_Color_ID == 0) if (AD_Color_ID == 0)
setName("-/-"); setName("-/-");
} // MColor } // MColor
public MColor(Properties ctx, ResultSet rs, String trxName)
{
super (ctx, rs, trxName);
}
/** /**
* String Representation * String Representation

View File

@ -290,6 +290,8 @@ public class MCost extends X_M_Cost
if (retValue == null || retValue.signum() == 0) if (retValue == null || retValue.signum() == 0)
retValue = getLastPOPrice(product, M_ASI_ID, Org_ID, as.getC_Currency_ID()); retValue = getLastPOPrice(product, M_ASI_ID, Org_ID, as.getC_Currency_ID());
} }
else if (MCostElement.COSTINGMETHOD_StandardCosting.equals(costingMethod))
;
else if (MCostElement.COSTINGMETHOD_UserDefined.equals(costingMethod)) else if (MCostElement.COSTINGMETHOD_UserDefined.equals(costingMethod))
; ;
else else
@ -1480,9 +1482,9 @@ public class MCost extends X_M_Cost
public void setWeightedAverage (BigDecimal amt, BigDecimal qty) public void setWeightedAverage (BigDecimal amt, BigDecimal qty)
{ {
//amount must follow the sign of qty //amount must follow the sign of qty
if (amt.signum() != 0 && amt.signum() != qty.signum()) if (amt.signum() != 0 && qty.signum() != 0 && amt.signum() != qty.signum())
{ {
amt = amt.multiply(BigDecimal.valueOf(-1.00d)); amt = amt.negate();
} }
if (getCurrentQty().add(qty).signum() < 0) if (getCurrentQty().add(qty).signum() < 0)

View File

@ -23,6 +23,7 @@ import java.util.List;
import java.util.Properties; import java.util.Properties;
import java.util.logging.Level; import java.util.logging.Level;
import org.compiere.acct.Doc;
import org.compiere.model.X_M_CostHistory; import org.compiere.model.X_M_CostHistory;
import org.compiere.util.CLogger; import org.compiere.util.CLogger;
import org.compiere.util.DB; import org.compiere.util.DB;
@ -51,6 +52,12 @@ public class MCostDetail extends X_M_CostDetail
*/ */
private static final long serialVersionUID = -448632684360931078L; private static final long serialVersionUID = -448632684360931078L;
private static final String INOUTLINE_DOCBASETYPE_SQL =
"SELECT c.DocBaseType From M_InOut io " +
"INNER JOIN M_InOutLine iol ON io.M_InOut_ID=iol.M_InOut_ID " +
"INNER JOIN C_DocType c ON io.C_DocType_ID=c.C_DocType_ID " +
"WHERE iol.M_InOutLine_ID=?";
/** /**
* Create New Order Cost Detail for Purchase Orders. * Create New Order Cost Detail for Purchase Orders.
* Called from Doc_MatchPO * Called from Doc_MatchPO
@ -677,6 +684,20 @@ public class MCostDetail extends X_M_CostDetail
return isSOTrx() && getM_InOutLine_ID() != 0; return isSOTrx() && getM_InOutLine_ID() != 0;
} // isShipment } // isShipment
/**
* @return true if return to vendor
*/
public boolean isVendorRMA()
{
if (!isSOTrx() && getM_InOutLine_ID() > 0)
{
String docBaseType = DB.getSQLValueString((String)null,
INOUTLINE_DOCBASETYPE_SQL, getM_InOutLine_ID());
return Doc.DOCTYPE_MatShipment.equals(docBaseType);
}
return false;
}
/** /**
* Is this a Delta Record (previously processed)? * Is this a Delta Record (previously processed)?
* @return true if delta is not null * @return true if delta is not null
@ -1036,22 +1057,26 @@ public class MCostDetail extends X_M_CostDetail
|| getPP_Cost_Collector_ID() != 0) || getPP_Cost_Collector_ID() != 0)
{ {
boolean addition = qty.signum() > 0; boolean addition = qty.signum() > 0;
boolean isVendorRMA = isVendorRMA();
// //
if (ce.isAverageInvoice()) if (ce.isAverageInvoice())
{ {
if (addition) if (!isVendorRMA)
{ {
cost.setWeightedAverage(amt, qty); if (addition)
//shouldn't accumulate reversal of customer shipment qty and amt
if (isShipment())
{ {
cost.setCumulatedQty(history.getOldCQty()); cost.setWeightedAverage(amt, qty);
cost.setCumulatedAmt(history.getOldCAmt()); //shouldn't accumulate reversal of customer shipment qty and amt
if (isShipment())
{
cost.setCumulatedQty(history.getOldCQty());
cost.setCumulatedAmt(history.getOldCAmt());
}
} }
else
cost.setCurrentQty(cost.getCurrentQty().add(qty));
if (log.isLoggable(Level.FINER)) log.finer("QtyAdjust - AverageInv - " + cost);
} }
else
cost.setCurrentQty(cost.getCurrentQty().add(qty));
if (log.isLoggable(Level.FINER)) log.finer("QtyAdjust - AverageInv - " + cost);
} }
else if (ce.isAveragePO()) else if (ce.isAveragePO())
{ {
@ -1059,51 +1084,63 @@ public class MCostDetail extends X_M_CostDetail
{ {
cost.setWeightedAverage(amt, qty); cost.setWeightedAverage(amt, qty);
//shouldn't accumulate reversal of customer shipment qty and amt //shouldn't accumulate reversal of customer shipment qty and amt
if (isShipment()) if (isShipment() && !isVendorRMA())
{ {
cost.setCumulatedQty(history.getOldCQty()); cost.setCumulatedQty(history.getOldCQty());
cost.setCumulatedAmt(history.getOldCAmt()); cost.setCumulatedAmt(history.getOldCAmt());
} }
} }
else else
cost.setCurrentQty(cost.getCurrentQty().add(qty)); {
if (isVendorRMA)
{
cost.setWeightedAverage(amt, qty);
}
else
{
cost.setCurrentQty(cost.getCurrentQty().add(qty));
}
}
if (log.isLoggable(Level.FINER)) log.finer("QtyAdjust - AveragePO - " + cost); if (log.isLoggable(Level.FINER)) log.finer("QtyAdjust - AveragePO - " + cost);
} }
else if (ce.isFifo() || ce.isLifo()) else if (ce.isFifo() || ce.isLifo())
{ {
if (addition) if (!isVendorRMA)
{ {
// Real ASI - costing level Org if (addition)
MCostQueue cq = MCostQueue.get(product, getM_AttributeSetInstance_ID(), {
as, Org_ID, ce.getM_CostElement_ID(), get_TrxName()); // Real ASI - costing level Org
cq.setCosts(amt, qty, precision); MCostQueue cq = MCostQueue.get(product, getM_AttributeSetInstance_ID(),
cq.saveEx(); as, Org_ID, ce.getM_CostElement_ID(), get_TrxName());
cq.setCosts(amt, qty, precision);
cq.saveEx();
}
else
{
// Adjust Queue - costing level Org/ASI
MCostQueue.adjustQty(product, M_ASI_ID,
as, Org_ID, ce, qty.negate(), get_TrxName());
}
// Get Costs - costing level Org/ASI
MCostQueue[] cQueue = MCostQueue.getQueue(product, M_ASI_ID,
as, Org_ID, ce, get_TrxName());
if (cQueue != null && cQueue.length > 0)
cost.setCurrentCostPrice(cQueue[0].getCurrentCostPrice());
cost.setCurrentQty(cost.getCurrentQty().add(qty));
if (log.isLoggable(Level.FINER)) log.finer("QtyAdjust - FiFo/Lifo - " + cost);
} }
else
{
// Adjust Queue - costing level Org/ASI
MCostQueue.adjustQty(product, M_ASI_ID,
as, Org_ID, ce, qty.negate(), get_TrxName());
}
// Get Costs - costing level Org/ASI
MCostQueue[] cQueue = MCostQueue.getQueue(product, M_ASI_ID,
as, Org_ID, ce, get_TrxName());
if (cQueue != null && cQueue.length > 0)
cost.setCurrentCostPrice(cQueue[0].getCurrentCostPrice());
cost.setCurrentQty(cost.getCurrentQty().add(qty));
if (log.isLoggable(Level.FINER)) log.finer("QtyAdjust - FiFo/Lifo - " + cost);
} }
else if (ce.isLastInvoice()) else if (ce.isLastInvoice() && !isVendorRMA)
{ {
cost.setCurrentQty(cost.getCurrentQty().add(qty)); cost.setCurrentQty(cost.getCurrentQty().add(qty));
if (log.isLoggable(Level.FINER)) log.finer("QtyAdjust - LastInv - " + cost); if (log.isLoggable(Level.FINER)) log.finer("QtyAdjust - LastInv - " + cost);
} }
else if (ce.isLastPOPrice()) else if (ce.isLastPOPrice() && !isVendorRMA)
{ {
cost.setCurrentQty(cost.getCurrentQty().add(qty)); cost.setCurrentQty(cost.getCurrentQty().add(qty));
if (log.isLoggable(Level.FINER)) log.finer("QtyAdjust - LastPO - " + cost); if (log.isLoggable(Level.FINER)) log.finer("QtyAdjust - LastPO - " + cost);
} }
else if (ce.isStandardCosting()) else if (ce.isStandardCosting() && !isVendorRMA)
{ {
if (addition) if (addition)
{ {
@ -1123,7 +1160,7 @@ public class MCostDetail extends X_M_CostDetail
} }
if (log.isLoggable(Level.FINER)) log.finer("QtyAdjust - Standard - " + cost); if (log.isLoggable(Level.FINER)) log.finer("QtyAdjust - Standard - " + cost);
} }
else if (ce.isUserDefined()) else if (ce.isUserDefined() && !isVendorRMA)
{ {
// Interface // Interface
if (addition) if (addition)

View File

@ -39,7 +39,7 @@ public class MPaymentTransaction extends X_C_PaymentTransaction implements Proce
/** /**
* *
*/ */
private static final long serialVersionUID = 3136835982476528825L; private static final long serialVersionUID = 8722189788479132158L;
public MPaymentTransaction(Properties ctx, int C_PaymentTransaction_ID, String trxName) { public MPaymentTransaction(Properties ctx, int C_PaymentTransaction_ID, String trxName) {
super(ctx, C_PaymentTransaction_ID, trxName); super(ctx, C_PaymentTransaction_ID, trxName);
@ -656,4 +656,17 @@ public class MPaymentTransaction extends X_C_PaymentTransaction implements Proce
return MPaymentTransaction.getAllIDs(Table_Name, whereClause.toString(), trxName); return MPaymentTransaction.getAllIDs(Table_Name, whereClause.toString(), trxName);
} }
/**
* String Representation
* @return info
*/
public String toString ()
{
StringBuilder sb = new StringBuilder ("MPaymentTransaction[");
sb.append(get_ID()).append("-")
.append(",Receipt=").append(isReceipt())
.append(",PayAmt=").append(getPayAmt());
return sb.toString ();
} // toString
} }

View File

@ -1,5 +1,6 @@
package org.compiere.model; package org.compiere.model;
import java.sql.ResultSet;
import java.util.Properties; import java.util.Properties;
public class MQualityTestResult extends X_M_QualityTestResult { public class MQualityTestResult extends X_M_QualityTestResult {
@ -7,11 +8,16 @@ public class MQualityTestResult extends X_M_QualityTestResult {
/** /**
* *
*/ */
private static final long serialVersionUID = -4253026765149175778L; private static final long serialVersionUID = -5529865718027582930L;
public MQualityTestResult(Properties ctx, int M_QualityTestResult_ID, public MQualityTestResult(Properties ctx, int M_QualityTestResult_ID,
String trxName) { String trxName) {
super(ctx, M_QualityTestResult_ID, trxName); super(ctx, M_QualityTestResult_ID, trxName);
} }
public MQualityTestResult(Properties ctx, ResultSet rs,
String trxName) {
super (ctx, rs, trxName);
}
} }

View File

@ -16,6 +16,7 @@
*****************************************************************************/ *****************************************************************************/
package org.compiere.model; package org.compiere.model;
import java.sql.ResultSet;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.Properties; import java.util.Properties;
@ -30,7 +31,7 @@ public class MReplication extends X_AD_Replication
/** /**
* *
*/ */
private static final long serialVersionUID = -7363193371925559167L; private static final long serialVersionUID = -562186299848949607L;
/** /**
* Load Constructor * Load Constructor
@ -41,6 +42,11 @@ public class MReplication extends X_AD_Replication
{ {
super (ctx, AD_Replication_ID, trxName); super (ctx, AD_Replication_ID, trxName);
} // MReplication } // MReplication
public MReplication (Properties ctx, ResultSet rs, String trxName)
{
super (ctx, rs, trxName);
}
/** /**
* Public Access * Public Access

View File

@ -16,6 +16,7 @@
*****************************************************************************/ *****************************************************************************/
package org.compiere.model; package org.compiere.model;
import java.sql.ResultSet;
import java.util.Properties; import java.util.Properties;
/** /**
@ -30,7 +31,7 @@ public class MReplicationLog extends X_AD_Replication_Log
/** /**
* *
*/ */
private static final long serialVersionUID = -5188563816312329819L; private static final long serialVersionUID = -8815834636981996509L;
/** /**
* Create new Log * Create new Log
@ -47,5 +48,10 @@ public class MReplicationLog extends X_AD_Replication_Log
setIsReplicated(false); setIsReplicated(false);
setP_Msg(P_Msg); setP_Msg(P_Msg);
} // MReplicationLog } // MReplicationLog
public MReplicationLog(Properties ctx, ResultSet rs, String trxName)
{
super (ctx, rs, trxName);
}
} // MReplicationLog } // MReplicationLog

View File

@ -16,6 +16,7 @@
*****************************************************************************/ *****************************************************************************/
package org.compiere.model; package org.compiere.model;
import java.sql.ResultSet;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.Properties; import java.util.Properties;
@ -30,7 +31,7 @@ public class MReplicationRun extends X_AD_Replication_Run
/** /**
* *
*/ */
private static final long serialVersionUID = 2619966943083677072L; private static final long serialVersionUID = 7609847179225634980L;
/** /**
* Create new Run * Create new Run
@ -46,6 +47,11 @@ public class MReplicationRun extends X_AD_Replication_Run
super.setIsReplicated (false); super.setIsReplicated (false);
} // MReplicationRun } // MReplicationRun
public MReplicationRun (Properties ctx, ResultSet rs, String trxName)
{
super (ctx, rs, trxName);
}
/** /**
* Set Replication Flag * Set Replication Flag
* @param IsReplicated replicated * @param IsReplicated replicated

View File

@ -17,6 +17,7 @@
package org.compiere.model; package org.compiere.model;
import java.sql.ResultSet;
import java.util.List; import java.util.List;
import java.util.Properties; import java.util.Properties;
@ -34,10 +35,10 @@ import org.compiere.util.CLogger;
*/ */
public class MReplicationStrategy extends X_AD_ReplicationStrategy { public class MReplicationStrategy extends X_AD_ReplicationStrategy {
/** /**
* *
*/ */
private static final long serialVersionUID = -3017484140206284805L; private static final long serialVersionUID = 7231926756021012730L;
public static final int REPLICATION_TABLE =0; public static final int REPLICATION_TABLE =0;
public static final int REPLICATION_DOCUMENT =1; public static final int REPLICATION_DOCUMENT =1;
@ -56,7 +57,11 @@ public class MReplicationStrategy extends X_AD_ReplicationStrategy {
public MReplicationStrategy(Properties ctx, int AD_ReplicationStrategy_ID, String trxName) { public MReplicationStrategy(Properties ctx, int AD_ReplicationStrategy_ID, String trxName) {
super(ctx, AD_ReplicationStrategy_ID, trxName); super(ctx, AD_ReplicationStrategy_ID, trxName);
} }
public MReplicationStrategy(Properties ctx, ResultSet rs, String trxName) {
super (ctx, rs, trxName);
}
/** /**
* @return the list the X_AD_ReplicationTable * @return the list the X_AD_ReplicationTable
*/ */

View File

@ -47,7 +47,7 @@ public class MSearchDefinition extends X_AD_SearchDefinition {
/** /**
* *
*/ */
private static final long serialVersionUID = 2448668218372939766L; private static final long serialVersionUID = -5366274782950561962L;
/** Constant for the searchtype table */ /** Constant for the searchtype table */
public static final String SEARCHTYPE_TABLE = "T"; public static final String SEARCHTYPE_TABLE = "T";
/** Constant for the searchtype query */ /** Constant for the searchtype query */
@ -66,6 +66,10 @@ public class MSearchDefinition extends X_AD_SearchDefinition {
public MSearchDefinition(Properties ctx, int AD_SearchDefinition_ID, String trxName) { public MSearchDefinition(Properties ctx, int AD_SearchDefinition_ID, String trxName) {
super(ctx, AD_SearchDefinition_ID, trxName); super(ctx, AD_SearchDefinition_ID, trxName);
} }
public MSearchDefinition(Properties ctx, ResultSet rs, String trxName) {
super (ctx, rs, trxName);
}
/** /**
* Returns all SearchDefinition objects with the given transaction code * Returns all SearchDefinition objects with the given transaction code

View File

@ -18,6 +18,7 @@ package org.compiere.print;
import java.awt.Color; import java.awt.Color;
import java.awt.SystemColor; import java.awt.SystemColor;
import java.sql.ResultSet;
import java.util.Properties; import java.util.Properties;
import java.util.logging.Level; import java.util.logging.Level;
@ -36,11 +37,10 @@ import org.compiere.util.Util;
*/ */
public class MPrintColor extends X_AD_PrintColor public class MPrintColor extends X_AD_PrintColor
{ {
/** /**
* *
*/ */
private static final long serialVersionUID = 8352503254165120016L; private static final long serialVersionUID = -5611659311562283304L;
/************************************************************************** /**************************************************************************
* Create Color in Database and save * Create Color in Database and save
@ -138,6 +138,11 @@ public class MPrintColor extends X_AD_PrintColor
if (AD_PrintColor_ID == 0) if (AD_PrintColor_ID == 0)
setIsDefault(false); setIsDefault(false);
} // MPrintColor } // MPrintColor
public MPrintColor(Properties ctx, ResultSet rs, String trxName)
{
super (ctx, rs, trxName);
}
/** Color cached */ /** Color cached */
private Color m_cacheColor = null; private Color m_cacheColor = null;

View File

@ -18,6 +18,7 @@ package org.compiere.print;
import java.awt.Font; import java.awt.Font;
import java.awt.GraphicsEnvironment; import java.awt.GraphicsEnvironment;
import java.sql.ResultSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map; import java.util.Map;
import java.util.Properties; import java.util.Properties;
@ -39,7 +40,7 @@ public class MPrintFont extends X_AD_PrintFont
/** /**
* *
*/ */
private static final long serialVersionUID = -4721840631004326810L; private static final long serialVersionUID = -2986160498367260541L;
/** /**
* Constructor * Constructor
@ -53,6 +54,11 @@ public class MPrintFont extends X_AD_PrintFont
if (AD_PrintFont_ID == 0) if (AD_PrintFont_ID == 0)
setIsDefault(false); setIsDefault(false);
} // MPrintFont } // MPrintFont
public MPrintFont(Properties ctx, ResultSet rs, String trxName)
{
super (ctx, rs, trxName);
}
/** Font cached */ /** Font cached */
private Font m_cacheFont = null; private Font m_cacheFont = null;

View File

@ -48,6 +48,7 @@ import org.compiere.model.PO;
import org.compiere.util.CLogger; import org.compiere.util.CLogger;
import org.compiere.util.DB; import org.compiere.util.DB;
import org.compiere.util.Env; import org.compiere.util.Env;
import org.compiere.util.Util;
import org.eevolution.model.I_DD_Order; import org.eevolution.model.I_DD_Order;
import org.eevolution.model.I_HR_Process; import org.eevolution.model.I_HR_Process;
import org.eevolution.model.I_PP_Cost_Collector; import org.eevolution.model.I_PP_Cost_Collector;
@ -489,6 +490,12 @@ public class DocumentEngine implements DocAction
return false; return false;
String error = DocumentEngine.postImmediate(Env.getCtx(), m_document.getAD_Client_ID(), m_document.get_Table_ID(), m_document.get_ID(), true, m_document.get_TrxName()); String error = DocumentEngine.postImmediate(Env.getCtx(), m_document.getAD_Client_ID(), m_document.get_Table_ID(), m_document.get_ID(), true, m_document.get_TrxName());
if (ACTION_Post.equals(m_action)) {
// forced post via process - throw exception to inform the caller about the error
if (! Util.isEmpty(error)) {
throw new AdempiereException(error);
}
}
return (error == null); return (error == null);
} // postIt } // postIt

View File

@ -37,7 +37,7 @@ public class MReportColumnSet extends X_PA_ReportColumnSet
/** /**
* *
*/ */
private static final long serialVersionUID = 8636368829160472883L; private static final long serialVersionUID = -3496781398287709753L;
/** /**
* Constructor * Constructor
@ -54,6 +54,11 @@ public class MReportColumnSet extends X_PA_ReportColumnSet
else else
loadColumns(); loadColumns();
} // MReportColumnSet } // MReportColumnSet
public MReportColumnSet (Properties ctx, ResultSet rs, String trxName)
{
super (ctx, rs, trxName);
}
/** Contained Columns */ /** Contained Columns */
private MReportColumn[] m_columns = null; private MReportColumn[] m_columns = null;

View File

@ -37,7 +37,7 @@ public class MReportLineSet extends X_PA_ReportLineSet
/** /**
* *
*/ */
private static final long serialVersionUID = -2540937629148624046L; private static final long serialVersionUID = 6882950634644885097L;
/** /**
* Constructor * Constructor
@ -54,6 +54,11 @@ public class MReportLineSet extends X_PA_ReportLineSet
else else
loadLines(); loadLines();
} // MReportLineSet } // MReportLineSet
public MReportLineSet (Properties ctx, ResultSet rs, String trxName)
{
super (ctx, rs, trxName);
}
/** Contained Lines */ /** Contained Lines */
private MReportLine[] m_lines = null; private MReportLine[] m_lines = null;

View File

@ -22,10 +22,10 @@ import java.sql.Savepoint;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Date; import java.util.Date;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.logging.Level; import java.util.logging.Level;
@ -63,16 +63,11 @@ public class Trx
* @param createNew if false, null is returned if not found * @param createNew if false, null is returned if not found
* @return Transaction or null * @return Transaction or null
*/ */
public static synchronized Trx get (String trxName, boolean createNew) public static Trx get (String trxName, boolean createNew)
{ {
if (trxName == null || trxName.length() == 0) if (trxName == null || trxName.length() == 0)
throw new IllegalArgumentException ("No Transaction Name"); throw new IllegalArgumentException ("No Transaction Name");
if (s_cache == null)
{
s_cache = new HashMap<String,Trx>(10);
}
Trx retValue = (Trx)s_cache.get(trxName); Trx retValue = (Trx)s_cache.get(trxName);
if (retValue == null && createNew) if (retValue == null && createNew)
{ {
@ -83,9 +78,9 @@ public class Trx
} // get } // get
/** Transaction Cache */ /** Transaction Cache */
private static Map<String,Trx> s_cache = null; // create change listener private static final Map<String,Trx> s_cache = new ConcurrentHashMap<String, Trx>();
private static Trx.TrxMonitor s_monitor = new Trx.TrxMonitor(); private static final Trx.TrxMonitor s_monitor = new Trx.TrxMonitor();
private List<TrxEventListener> listeners = new ArrayList<TrxEventListener>(); private List<TrxEventListener> listeners = new ArrayList<TrxEventListener>();
@ -171,7 +166,7 @@ public class Trx
* @param createNew if true, create new connection if the trx does not have one created yet * @param createNew if true, create new connection if the trx does not have one created yet
* @return connection * @return connection
*/ */
public Connection getConnection(boolean createNew) public synchronized Connection getConnection(boolean createNew)
{ {
if (log.isLoggable(Level.ALL))log.log(Level.ALL, "Active=" + isActive() + ", Connection=" + m_connection); if (log.isLoggable(Level.ALL))log.log(Level.ALL, "Active=" + isActive() + ", Connection=" + m_connection);
@ -179,7 +174,7 @@ public class Trx
{ {
if (createNew) if (createNew)
{ {
if (s_cache == null || !s_cache.containsKey(m_trxName)) if (!s_cache.containsKey(m_trxName))
{ {
new Exception("Illegal to getConnection for Trx that is not register.").printStackTrace(); new Exception("Illegal to getConnection for Trx that is not register.").printStackTrace();
return null; return null;
@ -272,7 +267,7 @@ public class Trx
* @param throwException if true, re-throws exception * @param throwException if true, re-throws exception
* @return true if success, false if failed or transaction already rollback * @return true if success, false if failed or transaction already rollback
*/ */
public boolean rollback(boolean throwException) throws SQLException public synchronized boolean rollback(boolean throwException) throws SQLException
{ {
//local //local
try try
@ -351,7 +346,7 @@ public class Trx
* @param throwException if true, re-throws exception * @param throwException if true, re-throws exception
* @return true if success * @return true if success
**/ **/
public boolean commit(boolean throwException) throws SQLException public synchronized boolean commit(boolean throwException) throws SQLException
{ {
//local //local
try try
@ -410,8 +405,7 @@ public class Trx
*/ */
public synchronized boolean close() public synchronized boolean close()
{ {
if (s_cache != null) s_cache.remove(getTrxName());
s_cache.remove(getTrxName());
//local //local
if (m_connection == null) if (m_connection == null)
@ -459,7 +453,7 @@ public class Trx
* @return Savepoint * @return Savepoint
* @throws SQLException * @throws SQLException
*/ */
public Savepoint setSavepoint(String name) throws SQLException { public synchronized Savepoint setSavepoint(String name) throws SQLException {
if (m_connection == null) if (m_connection == null)
getConnection(); getConnection();
@ -479,7 +473,7 @@ public class Trx
* @throws SQLException * @throws SQLException
* @see {@link Connection#releaseSavepoint(Savepoint)} * @see {@link Connection#releaseSavepoint(Savepoint)}
*/ */
public void releaseSavepoint(Savepoint savepoint) throws SQLException public synchronized void releaseSavepoint(Savepoint savepoint) throws SQLException
{ {
if (DB.isOracle()) if (DB.isOracle())
{ {
@ -519,9 +513,6 @@ public class Trx
*/ */
public static Trx[] getActiveTransactions() public static Trx[] getActiveTransactions()
{ {
if (s_cache == null)
return new Trx[0];
Collection<Trx> collections = s_cache.values(); Collection<Trx> collections = s_cache.values();
Trx[] trxs = new Trx[collections.size()]; Trx[] trxs = new Trx[collections.size()];
collections.toArray(trxs); collections.toArray(trxs);
@ -626,11 +617,15 @@ public class Trx
* @param listener * @param listener
*/ */
public void addTrxEventListener(TrxEventListener listener) { public void addTrxEventListener(TrxEventListener listener) {
listeners.add(listener); synchronized (listeners) {
listeners.add(listener);
}
} }
public boolean removeTrxEventListener(TrxEventListener listener) { public boolean removeTrxEventListener(TrxEventListener listener) {
return listeners.remove(listener); synchronized (listeners) {
return listeners.remove(listener);
}
} }
static class TrxMonitor implements Runnable static class TrxMonitor implements Runnable
@ -638,7 +633,7 @@ public class Trx
public void run() public void run()
{ {
if (Trx.s_cache != null && !Trx.s_cache.isEmpty()) if (!Trx.s_cache.isEmpty())
{ {
Trx[] trxs = Trx.s_cache.values().toArray(new Trx[0]); Trx[] trxs = Trx.s_cache.values().toArray(new Trx[0]);
for(int i = 0; i < trxs.length; i++) for(int i = 0; i < trxs.length; i++)

View File

@ -56,7 +56,10 @@ public class AdElementHandler extends AbstractElementHandler {
M_Element mElement = findPO(ctx, element); M_Element mElement = findPO(ctx, element);
if (mElement == null) { if (mElement == null) {
int id = findIdByColumn(ctx, X_AD_Element.Table_Name, X_AD_Element.COLUMNNAME_ColumnName, ColumnName, /*ignorecase=*/true); int id = 0;
if (!hasUUIDKey(ctx, element)) {
id = findIdByColumn(ctx, X_AD_Element.Table_Name, X_AD_Element.COLUMNNAME_ColumnName, ColumnName, /*ignorecase=*/true);
}
mElement = new M_Element(ctx.ctx, id, getTrxName(ctx)); mElement = new M_Element(ctx.ctx, id, getTrxName(ctx));
} }
List<String> excludes = defaultExcludeList(X_AD_Element.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Element.Table_Name);

View File

@ -64,7 +64,10 @@ public class AttachmentElementHandler extends AbstractElementHandler {
return; return;
} }
int id = DB.getSQLValue(getTrxName(ctx), "SELECT AD_Attachment_ID FROM AD_Attachment WHERE Record_ID="+Record_ID+" AND AD_Table_ID="+AD_Table_ID); int id = 0;
if (!hasUUIDKey(ctx, element)) {
DB.getSQLValue(getTrxName(ctx), "SELECT AD_Attachment_ID FROM AD_Attachment WHERE Record_ID="+Record_ID+" AND AD_Table_ID="+AD_Table_ID);
}
mAttachment = new MAttachment(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx)); mAttachment = new MAttachment(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
if (mAttachment.is_new()) { if (mAttachment.is_new()) {
mAttachment.setAD_Table_ID(AD_Table_ID); mAttachment.setAD_Table_ID(AD_Table_ID);

View File

@ -73,7 +73,10 @@ public class ColumnElementHandler extends AbstractElementHandler {
filler.setTableReference("AD_Table_ID"); filler.setTableReference("AD_Table_ID");
tableid = mColumn.getAD_Table_ID(); tableid = mColumn.getAD_Table_ID();
} }
int AD_Column_ID = findIdByColumnAndParentId(ctx, "AD_Column", "ColumnName", columnName, "AD_Table", tableid, /*ignorecase=*/true); int AD_Column_ID = 0;
if (!hasUUIDKey(ctx, element)) {
AD_Column_ID = findIdByColumnAndParentId(ctx, "AD_Column", "ColumnName", columnName, "AD_Table", tableid, /*ignorecase=*/true);
}
mColumn = new MColumn(ctx.ctx, AD_Column_ID > 0 ? AD_Column_ID : 0, getTrxName(ctx)); mColumn = new MColumn(ctx.ctx, AD_Column_ID > 0 ? AD_Column_ID : 0, getTrxName(ctx));
if (mColumn.getAD_Column_ID() == 0 && isOfficialId(element, "AD_Column_ID")) { if (mColumn.getAD_Column_ID() == 0 && isOfficialId(element, "AD_Column_ID")) {
mColumn.setAD_Column_ID(getIntValue(element, "AD_Column_ID")); mColumn.setAD_Column_ID(getIntValue(element, "AD_Column_ID"));

View File

@ -48,7 +48,10 @@ public class DynValRuleElementHandler extends AbstractElementHandler {
X_AD_Val_Rule mValRule = findPO(ctx, element); X_AD_Val_Rule mValRule = findPO(ctx, element);
if (mValRule == null) if (mValRule == null)
{ {
int id = findIdByColumn(ctx, "AD_Val_Rule", "Name", name); int id = 0;
if (!hasUUIDKey(ctx, element)) {
id = findIdByColumn(ctx, "AD_Val_Rule", "Name", name);
}
mValRule = new X_AD_Val_Rule(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx)); mValRule = new X_AD_Val_Rule(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
} }
if (mValRule.getAD_Val_Rule_ID() == 0 && isOfficialId(element, "AD_Val_Rule_ID")) if (mValRule.getAD_Val_Rule_ID() == 0 && isOfficialId(element, "AD_Val_Rule_ID"))

View File

@ -61,7 +61,10 @@ public class EntityTypeElementHandler extends AbstractElementHandler{
X_AD_EntityType m_EntityType = findPO(ctx, element); X_AD_EntityType m_EntityType = findPO(ctx, element);
if (m_EntityType == null) { if (m_EntityType == null) {
int id = findIdByColumn(ctx, X_AD_EntityType.Table_Name, X_AD_EntityType.COLUMNNAME_Name, name, /*ignorecase=*/true); int id = 0;
if (!hasUUIDKey(ctx, element)) {
id = findIdByColumn(ctx, X_AD_EntityType.Table_Name, X_AD_EntityType.COLUMNNAME_Name, name, /*ignorecase=*/true);
}
m_EntityType = new X_AD_EntityType(ctx.ctx, id, getTrxName(ctx)); m_EntityType = new X_AD_EntityType(ctx.ctx, id, getTrxName(ctx));
} }

View File

@ -100,11 +100,14 @@ public class FieldElementHandler extends AbstractElementHandler {
MField mField = findPO(ctx, element); MField mField = findPO(ctx, element);
if (mField == null) if (mField == null)
{ {
StringBuffer sqlB = new StringBuffer( int id = 0;
"select AD_Field_ID from AD_Field where AD_Column_ID = ") if (!hasUUIDKey(ctx, element)) {
.append(AD_Column_ID) StringBuffer sqlB = new StringBuffer(
.append(" and AD_Tab_ID = ?"); "select AD_Field_ID from AD_Field where AD_Column_ID = ")
int id = DB.getSQLValue(getTrxName(ctx), sqlB.toString(), tabid); .append(AD_Column_ID)
.append(" and AD_Tab_ID = ?");
id = DB.getSQLValue(getTrxName(ctx), sqlB.toString(), tabid);
}
mField = new MField(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx)); mField = new MField(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
if (mField.is_new()) { if (mField.is_new()) {
mField.setAD_Column_ID(AD_Column_ID); mField.setAD_Column_ID(AD_Column_ID);

View File

@ -58,7 +58,10 @@ public class FieldGroupElementHandler extends AbstractElementHandler {
X_AD_FieldGroup fieldGroup = findPO(ctx, element); X_AD_FieldGroup fieldGroup = findPO(ctx, element);
if (fieldGroup == null) if (fieldGroup == null)
{ {
int id = findIdByColumn(ctx, X_AD_FieldGroup.Table_Name, X_AD_FieldGroup.COLUMNNAME_Name, name); int id = 0;
if (!hasUUIDKey(ctx, element)) {
id = findIdByColumn(ctx, X_AD_FieldGroup.Table_Name, X_AD_FieldGroup.COLUMNNAME_Name, name);
}
fieldGroup = new X_AD_FieldGroup(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx)); fieldGroup = new X_AD_FieldGroup(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
} }
PoFiller pf = new PoFiller(ctx, fieldGroup, element, this); PoFiller pf = new PoFiller(ctx, fieldGroup, element, this);

View File

@ -66,10 +66,12 @@ public class FormAccessElementHandler extends AbstractElementHandler {
return; return;
} }
Query query = new Query(ctx.ctx, "AD_Form_Access", "AD_Form_ID = ? AND AD_Role_ID = ?", getTrxName(ctx)); if (!hasUUIDKey(ctx, element)) {
po = query.setParameters(new Object[]{AD_Form_ID, AD_Role_ID}) Query query = new Query(ctx.ctx, "AD_Form_Access", "AD_Form_ID = ? AND AD_Role_ID = ?", getTrxName(ctx));
.setClient_ID() po = query.setParameters(new Object[]{AD_Form_ID, AD_Role_ID})
.<MFormAccess>first(); .setClient_ID()
.<MFormAccess>first();
}
if (po == null) if (po == null)
{ {
po = new MFormAccess(ctx.ctx, 0, getTrxName(ctx)); po = new MFormAccess(ctx.ctx, 0, getTrxName(ctx));

View File

@ -50,7 +50,10 @@ public class FormElementHandler extends AbstractElementHandler {
MForm mForm = findPO(ctx, element); MForm mForm = findPO(ctx, element);
if (mForm == null) { if (mForm == null) {
String name = getStringValue(element, "Name"); String name = getStringValue(element, "Name");
int id = findIdByName(ctx, "AD_Form", name); int id = 0;
if (!hasUUIDKey(ctx, element)) {
id = findIdByName(ctx, "AD_Form", name);
}
mForm = new MForm(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx)); mForm = new MForm(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
} }
PoFiller filler = new PoFiller(ctx, mForm, element, this); PoFiller filler = new PoFiller(ctx, mForm, element, this);

View File

@ -56,7 +56,10 @@ public class ImpFormatElementHandler extends AbstractElementHandler {
X_AD_ImpFormat mImpFormat = findPO(ctx, element); X_AD_ImpFormat mImpFormat = findPO(ctx, element);
if (mImpFormat == null) { if (mImpFormat == null) {
int id = findIdByName(ctx, "AD_ImpFormat", name); int id = 0;
if (!hasUUIDKey(ctx, element)) {
id = findIdByName(ctx, "AD_ImpFormat", name);
}
mImpFormat = new X_AD_ImpFormat(ctx.ctx, id > 0 ? id : 0, mImpFormat = new X_AD_ImpFormat(ctx.ctx, id > 0 ? id : 0,
getTrxName(ctx)); getTrxName(ctx));
} }

View File

@ -102,8 +102,11 @@ public class ImpFormatRowElementHandler extends AbstractElementHandler {
} }
} }
StringBuilder sqlB = new StringBuilder ("SELECT AD_ImpFormat_Row_ID FROM AD_ImpFormat_Row WHERE AD_Column_ID=? AND AD_ImpFormat_ID=?"); int id = 0;
int id = DB.getSQLValue(getTrxName(ctx),sqlB.toString(),columnId,impFormatId); if (!hasUUIDKey(ctx, element)) {
StringBuilder sqlB = new StringBuilder ("SELECT AD_ImpFormat_Row_ID FROM AD_ImpFormat_Row WHERE AD_Column_ID=? AND AD_ImpFormat_ID=?");
id = DB.getSQLValue(getTrxName(ctx),sqlB.toString(),columnId,impFormatId);
}
mImpFormatRow = new X_AD_ImpFormat_Row(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx)); mImpFormatRow = new X_AD_ImpFormat_Row(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
mImpFormatRow.setAD_Column_ID(columnId); mImpFormatRow.setAD_Column_ID(columnId);

View File

@ -59,8 +59,11 @@ public class MenuElementHandler extends AbstractElementHandler {
X_AD_Menu mMenu = findPO(ctx, element); X_AD_Menu mMenu = findPO(ctx, element);
if (mMenu == null) { if (mMenu == null) {
String menuName = getStringValue(element, "Name"); int menuId = 0;
int menuId = findIdByColumn(ctx, "AD_Menu", "Name", menuName); if (!hasUUIDKey(ctx, element)) {
String menuName = getStringValue(element, "Name");
menuId = findIdByColumn(ctx, "AD_Menu", "Name", menuName);
}
mMenu = new X_AD_Menu(ctx.ctx, menuId > 0 ? menuId : 0, getTrxName(ctx)); mMenu = new X_AD_Menu(ctx.ctx, menuId > 0 ? menuId : 0, getTrxName(ctx));
} }
PoFiller filler = new PoFiller(ctx, mMenu, element, this); PoFiller filler = new PoFiller(ctx, mMenu, element, this);

View File

@ -46,9 +46,11 @@ public class MessageElementHandler extends AbstractElementHandler {
if (isProcessElement(ctx.ctx, entitytype)) { if (isProcessElement(ctx.ctx, entitytype)) {
MMessage mMessage = findPO(ctx, element); MMessage mMessage = findPO(ctx, element);
if (mMessage == null) { if (mMessage == null) {
String value = getStringValue(element, "Value"); int id = 0;
int id = findIdByColumn(ctx, "AD_Message", "value", value); if (!hasUUIDKey(ctx, element)) {
String value = getStringValue(element, "Value");
id = findIdByColumn(ctx, "AD_Message", "value", value);
}
mMessage = new MMessage(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx)); mMessage = new MMessage(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
} }
PoFiller filler = new PoFiller(ctx, mMessage, element, this); PoFiller filler = new PoFiller(ctx, mMessage, element, this);

View File

@ -37,7 +37,10 @@ public class ModelValidatorElementHandler extends AbstractElementHandler{
X_AD_ModelValidator validator = findPO(ctx, element); X_AD_ModelValidator validator = findPO(ctx, element);
if (validator == null) { if (validator == null) {
int id = findIdByColumn(ctx, X_AD_ModelValidator.Table_Name, X_AD_ModelValidator.COLUMNNAME_Name, name, /*ignorecase=*/true); int id = 0;
if (!hasUUIDKey(ctx, element)) {
id = findIdByColumn(ctx, X_AD_ModelValidator.Table_Name, X_AD_ModelValidator.COLUMNNAME_Name, name, /*ignorecase=*/true);
}
validator = new X_AD_ModelValidator(ctx.ctx, id, getTrxName(ctx)); validator = new X_AD_ModelValidator(ctx.ctx, id, getTrxName(ctx));
} }
List<String> excludes = defaultExcludeList(X_AD_ModelValidator.Table_Name); List<String> excludes = defaultExcludeList(X_AD_ModelValidator.Table_Name);

View File

@ -52,7 +52,10 @@ public class ModificationElementHandler extends AbstractElementHandler{
X_AD_Modification modification = findPO(ctx, element); X_AD_Modification modification = findPO(ctx, element);
if (modification == null) { if (modification == null) {
int id = findIdByColumn(ctx, X_AD_Modification.Table_Name, X_AD_Modification.COLUMNNAME_Name, name, /*ignorecase=*/true); int id = 0;
if (!hasUUIDKey(ctx, element)) {
id = findIdByColumn(ctx, X_AD_Modification.Table_Name, X_AD_Modification.COLUMNNAME_Name, name, /*ignorecase=*/true);
}
modification = new X_AD_Modification(ctx.ctx, id, getTrxName(ctx)); modification = new X_AD_Modification(ctx.ctx, id, getTrxName(ctx));
} }
List<String> excludes = defaultExcludeList(X_AD_Modification.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Modification.Table_Name);

View File

@ -60,10 +60,12 @@ public class OrgRoleElementHandler extends AbstractElementHandler {
Element orgElement = element.properties.get("AD_Org_ID"); Element orgElement = element.properties.get("AD_Org_ID");
int orgId = ReferenceUtils.resolveReference(ctx.ctx, orgElement, getTrxName(ctx)); int orgId = ReferenceUtils.resolveReference(ctx.ctx, orgElement, getTrxName(ctx));
Query query = new Query(ctx.ctx, "AD_Role_OrgAccess", "AD_Role_ID=? and AD_Org_ID=?", getTrxName(ctx)); if (!hasUUIDKey(ctx, element)) {
po = query.setParameters(new Object[]{roleId, orgId}) Query query = new Query(ctx.ctx, "AD_Role_OrgAccess", "AD_Role_ID=? and AD_Org_ID=?", getTrxName(ctx));
.setClient_ID() po = query.setParameters(new Object[]{roleId, orgId})
.<X_AD_Role_OrgAccess>first(); .setClient_ID()
.<X_AD_Role_OrgAccess>first();
}
if (po == null) { if (po == null) {
po = new X_AD_Role_OrgAccess(ctx.ctx, 0, getTrxName(ctx)); po = new X_AD_Role_OrgAccess(ctx.ctx, 0, getTrxName(ctx));

View File

@ -55,8 +55,11 @@ public class PrintFormatElementHandler extends AbstractElementHandler {
X_AD_PrintFormat mPrintFormat = findPO(ctx, element); X_AD_PrintFormat mPrintFormat = findPO(ctx, element);
if (mPrintFormat == null) { if (mPrintFormat == null) {
String name = getStringValue(element, "Name"); int id = 0;
int id = findIdByColumn(ctx, "AD_PrintFormat", "Name", name); if (!hasUUIDKey(ctx, element)) {
String name = getStringValue(element, "Name");
id = findIdByColumn(ctx, "AD_PrintFormat", "Name", name);
}
mPrintFormat = new X_AD_PrintFormat(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx)); mPrintFormat = new X_AD_PrintFormat(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
} }
PoFiller filler = new PoFiller(ctx, mPrintFormat, element, this); PoFiller filler = new PoFiller(ctx, mPrintFormat, element, this);

View File

@ -64,8 +64,11 @@ public class PrintFormatItemElementHandler extends AbstractElementHandler {
return; return;
} }
String name = getStringValue(element, "Name"); int id = 0;
int id = findIdByNameAndParentId(ctx, "AD_PrintFormatItem", name, "AD_PrintFormat", parentId); if (!hasUUIDKey(ctx, element)) {
String name = getStringValue(element, "Name");
id = findIdByNameAndParentId(ctx, "AD_PrintFormatItem", name, "AD_PrintFormat", parentId);
}
mPrintFormatItem = new X_AD_PrintFormatItem(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx)); mPrintFormatItem = new X_AD_PrintFormatItem(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
mPrintFormatItem.setAD_PrintFormat_ID(parentId); mPrintFormatItem.setAD_PrintFormat_ID(parentId);
excludes.add(I_AD_PrintFormatItem.COLUMNNAME_AD_PrintFormat_ID); excludes.add(I_AD_PrintFormatItem.COLUMNNAME_AD_PrintFormat_ID);

View File

@ -46,9 +46,12 @@ public class PrintPaperElementHandler extends AbstractElementHandler {
if (printPaper == null) { if (printPaper == null) {
String printPaperName = getStringValue(element, "Name", excludes); String printPaperName = getStringValue(element, "Name", excludes);
int id = findIdByName(ctx, "AD_PrintPaper", printPaperName); int id = 0;
if (!hasUUIDKey(ctx, element)) {
id = findIdByName(ctx, "AD_PrintPaper", printPaperName);
}
printPaper = new X_AD_PrintPaper(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx)); printPaper = new X_AD_PrintPaper(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
printPaper.setName(printPaperName);
} }
PoFiller filler = new PoFiller(ctx, printPaper, element, this); PoFiller filler = new PoFiller(ctx, printPaper, element, this);

View File

@ -66,9 +66,11 @@ public class ProcessAccessElementHandler extends AbstractElementHandler {
element.unresolved = "AD_Process_ID " + (processElement.contents != null ? processElement.contents.toString() : ""); element.unresolved = "AD_Process_ID " + (processElement.contents != null ? processElement.contents.toString() : "");
return; return;
} }
Query query = new Query(ctx.ctx, "AD_Process_Access", "AD_Role_ID=? and AD_Process_ID=?", getTrxName(ctx)); if (!hasUUIDKey(ctx, element)) {
po = query.setParameters(new Object[]{roleid, processid}).first(); Query query = new Query(ctx.ctx, "AD_Process_Access", "AD_Role_ID=? and AD_Process_ID=?", getTrxName(ctx));
po = query.setParameters(new Object[]{roleid, processid}).first();
}
if (po == null) if (po == null)
{ {
po = new X_AD_Process_Access(ctx.ctx, 0, getTrxName(ctx)); po = new X_AD_Process_Access(ctx.ctx, 0, getTrxName(ctx));

View File

@ -62,7 +62,10 @@ public class ProcessElementHandler extends AbstractElementHandler {
String value = getStringValue(element, "Value"); String value = getStringValue(element, "Value");
// Get New process. // Get New process.
int id = findIdByColumn(ctx, "AD_Process", "Value", value); int id = 0;
if (!hasUUIDKey(ctx, element)) {
id = findIdByColumn(ctx, "AD_Process", "Value", value);
}
mProcess = new X_AD_Process(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx)); mProcess = new X_AD_Process(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
} }

View File

@ -69,7 +69,9 @@ public class ProcessParaElementHandler extends AbstractElementHandler {
return; return;
} }
id = findIdByColumnAndParentId(ctx, "AD_Process_Para", "ColumnName", name, "AD_Process", masterId); if (!hasUUIDKey(ctx, element)) {
id = findIdByColumnAndParentId(ctx, "AD_Process_Para", "ColumnName", name, "AD_Process", masterId);
}
mProcessPara = new X_AD_Process_Para(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx)); mProcessPara = new X_AD_Process_Para(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
mProcessPara.setAD_Process_ID(masterId); mProcessPara.setAD_Process_ID(masterId);
excludes.add(I_AD_Process_Para.COLUMNNAME_AD_Process_ID); excludes.add(I_AD_Process_Para.COLUMNNAME_AD_Process_ID);

View File

@ -60,7 +60,10 @@ public class ReferenceElementHandler extends AbstractElementHandler {
X_AD_Reference mReference = findPO(ctx, element); X_AD_Reference mReference = findPO(ctx, element);
if (mReference == null) { if (mReference == null) {
int id = findIdByName(ctx, "AD_Reference", name); int id = 0;
if (!hasUUIDKey(ctx, element)) {
id = findIdByName(ctx, "AD_Reference", name);
}
mReference = new X_AD_Reference(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx)); mReference = new X_AD_Reference(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
} }
List<String> excludes = defaultExcludeList(X_AD_Reference.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Reference.Table_Name);

View File

@ -59,7 +59,10 @@ public class ReferenceListElementHandler extends AbstractElementHandler {
AD_Reference_ID = ReferenceUtils.resolveReference(ctx.ctx, referenceElement, getTrxName(ctx)); AD_Reference_ID = ReferenceUtils.resolveReference(ctx.ctx, referenceElement, getTrxName(ctx));
} }
int AD_Ref_List_ID = findIdByColumnAndParentId(ctx, "AD_Ref_List", "Value", value, "AD_Reference", AD_Reference_ID); int AD_Ref_List_ID = 0;
if (!hasUUIDKey(ctx, element)) {
AD_Ref_List_ID = findIdByColumnAndParentId(ctx, "AD_Ref_List", "Value", value, "AD_Reference", AD_Reference_ID);
}
mRefList = new X_AD_Ref_List(ctx.ctx, AD_Ref_List_ID, getTrxName(ctx)); mRefList = new X_AD_Ref_List(ctx.ctx, AD_Ref_List_ID, getTrxName(ctx));
} }

View File

@ -67,22 +67,26 @@ public class ReferenceTableElementHandler extends AbstractElementHandler {
if (AD_Reference_ID <= 0 && isOfficialId(element, "AD_Reference_ID")) if (AD_Reference_ID <= 0 && isOfficialId(element, "AD_Reference_ID"))
AD_Reference_ID = getIntValue(element, "AD_Reference_ID"); AD_Reference_ID = getIntValue(element, "AD_Reference_ID");
String sql = "SELECT * FROM AD_Ref_Table WHERE AD_Reference_ID = ?"; if (!hasUUIDKey(ctx, element)) {
PreparedStatement pstmt = null; String sql = "SELECT * FROM AD_Ref_Table WHERE AD_Reference_ID = ?";
ResultSet rs = null; PreparedStatement pstmt = null;
try { ResultSet rs = null;
pstmt = DB.prepareStatement(sql, getTrxName(ctx)); try {
pstmt.setInt(1, AD_Reference_ID); pstmt = DB.prepareStatement(sql, getTrxName(ctx));
rs = pstmt.executeQuery(); pstmt.setInt(1, AD_Reference_ID);
if (rs.next()) { rs = pstmt.executeQuery();
refTable = new X_AD_Ref_Table(ctx.ctx, rs, getTrxName(ctx)); if (rs.next()) {
} else { refTable = new X_AD_Ref_Table(ctx.ctx, rs, getTrxName(ctx));
refTable = new X_AD_Ref_Table(ctx.ctx, 0, getTrxName(ctx)); } else {
refTable = new X_AD_Ref_Table(ctx.ctx, 0, getTrxName(ctx));
}
} catch (Exception e) {
throw new DatabaseAccessException(e.getLocalizedMessage(), e);
} finally {
DB.close(rs, pstmt);
} }
} catch (Exception e) { } else {
throw new DatabaseAccessException(e.getLocalizedMessage(), e); refTable = new X_AD_Ref_Table(ctx.ctx, 0, getTrxName(ctx));
} finally {
DB.close(rs, pstmt);
} }
} }
String action = refTable.is_new() ? "New" : "Update"; String action = refTable.is_new() ? "New" : "Update";

View File

@ -90,7 +90,10 @@ public class ReportViewColElementHandler extends AbstractElementHandler {
sql.append(" AND FunctionColumn = ?"); sql.append(" AND FunctionColumn = ?");
sql.append(" AND AD_ReportView_ID = ?"); sql.append(" AND AD_ReportView_ID = ?");
int id = DB.getSQLValue(getTrxName(ctx), sql.toString(), functionColumn, AD_ReportView_ID); int id = 0;
if (!hasUUIDKey(ctx, element)) {
id = DB.getSQLValue(getTrxName(ctx), sql.toString(), functionColumn, AD_ReportView_ID);
}
mReportviewCol = new X_AD_ReportView_Col(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx)); mReportviewCol = new X_AD_ReportView_Col(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
mReportviewCol.setAD_ReportView_ID(AD_ReportView_ID); mReportviewCol.setAD_ReportView_ID(AD_ReportView_ID);
if (AD_Column_ID > 0) { if (AD_Column_ID > 0) {

View File

@ -57,8 +57,11 @@ public class ReportViewElementHandler extends AbstractElementHandler {
X_AD_ReportView mReportview = findPO(ctx, element); X_AD_ReportView mReportview = findPO(ctx, element);
if (mReportview == null) { if (mReportview == null) {
String name = getStringValue(element, "Name"); int id = 0;
int id = findIdByName(ctx, "AD_ReportView", name); if (!hasUUIDKey(ctx, element)) {
String name = getStringValue(element, "Name");
id = findIdByName(ctx, "AD_ReportView", name);
}
mReportview = new X_AD_ReportView(ctx.ctx, id, getTrxName(ctx)); mReportview = new X_AD_ReportView(ctx.ctx, id, getTrxName(ctx));
} }
PoFiller filler = new PoFiller(ctx, mReportview, element, this); PoFiller filler = new PoFiller(ctx, mReportview, element, this);

View File

@ -69,7 +69,10 @@ public class RoleElementHandler extends AbstractElementHandler {
MRole mRole = findPO(ctx, element); MRole mRole = findPO(ctx, element);
if (mRole == null) { if (mRole == null) {
String name = getStringValue(element, "Name", excludes); String name = getStringValue(element, "Name", excludes);
int id = findIdByName(ctx, "AD_Role", name); int id = 0;
if (!hasUUIDKey(ctx, element)) {
id = findIdByName(ctx, "AD_Role", name);
}
mRole = new MRole(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx)); mRole = new MRole(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
mRole.setName(name); mRole.setName(name);
} }

View File

@ -85,11 +85,14 @@ public class TabElementHandler extends AbstractElementHandler {
return; return;
} }
String sql = "SELECT AD_Tab_ID FROM AD_Tab where AD_Window_ID = ? " int id = 0;
+ " AND Name = ?" if (!hasUUIDKey(ctx, element)) {
+ " AND AD_Table_ID = ?"; String sql = "SELECT AD_Tab_ID FROM AD_Tab where AD_Window_ID = ? "
+ " AND Name = ?"
int id = DB.getSQLValue(getTrxName(ctx), sql, windowId, name, tableId); + " AND AD_Table_ID = ?";
id = DB.getSQLValue(getTrxName(ctx), sql, windowId, name, tableId);
}
mTab = new MTab(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx)); mTab = new MTab(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
mTab.setAD_Table_ID(tableId); mTab.setAD_Table_ID(tableId);
mTab.setName(name); mTab.setName(name);

View File

@ -58,16 +58,18 @@ public class TableElementHandler extends AbstractElementHandler {
MTable mTable = findPO(ctx, element); MTable mTable = findPO(ctx, element);
if (mTable == null) { if (mTable == null) {
int id = 0;
String tableName = getStringValue(element, "TableName", excludes); String tableName = getStringValue(element, "TableName", excludes);
if (!hasUUIDKey(ctx, element)) {
int id = packIn.getTableId(tableName); id = packIn.getTableId(tableName);
if (id <= 0) { if (id <= 0) {
id = findIdByColumn(ctx, "AD_Table", "TableName", tableName); id = findIdByColumn(ctx, "AD_Table", "TableName", tableName);
if (id > 0) if (id > 0)
packIn.addTable(tableName, id); packIn.addTable(tableName, id);
} }
if (id > 0 && isTableProcess(ctx, id)) { if (id > 0 && isTableProcess(ctx, id)) {
return; return;
}
} }
mTable = new MTable(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx)); mTable = new MTable(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));

View File

@ -67,8 +67,10 @@ public class TaskAccessElementHandler extends AbstractElementHandler {
return; return;
} }
Query query = new Query(ctx.ctx, "AD_Task_Access", "AD_Role_ID=? and AD_Task_ID=?", getTrxName(ctx)); if (!hasUUIDKey(ctx, element)) {
po = query.setParameters(new Object[]{roleid, taskid}).first(); Query query = new Query(ctx.ctx, "AD_Task_Access", "AD_Role_ID=? and AD_Task_ID=?", getTrxName(ctx));
po = query.setParameters(new Object[]{roleid, taskid}).first();
}
if (po == null){ if (po == null){
po = new X_AD_Task_Access(ctx.ctx, 0, getTrxName(ctx)); po = new X_AD_Task_Access(ctx.ctx, 0, getTrxName(ctx));
po.setAD_Role_ID(roleid); po.setAD_Role_ID(roleid);

View File

@ -50,8 +50,11 @@ public class TaskElementHandler extends AbstractElementHandler {
MTask mTask = findPO(ctx, element); MTask mTask = findPO(ctx, element);
if (mTask == null) { if (mTask == null) {
String name = getStringValue(element, "Name"); int id = 0;
int id = findIdByName(ctx, "AD_Task", name); if (!hasUUIDKey(ctx, element)) {
String name = getStringValue(element, "Name");
id = findIdByName(ctx, "AD_Task", name);
}
mTask = new MTask(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx)); mTask = new MTask(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
} }

View File

@ -73,8 +73,10 @@ public class UserRoleElementHandler extends AbstractElementHandler {
Element orgElement = element.properties.get(I_AD_User_Roles.COLUMNNAME_AD_Org_ID); Element orgElement = element.properties.get(I_AD_User_Roles.COLUMNNAME_AD_Org_ID);
orgid = ReferenceUtils.resolveReference(ctx.ctx, orgElement, getTrxName(ctx)); orgid = ReferenceUtils.resolveReference(ctx.ctx, orgElement, getTrxName(ctx));
Query query = new Query(ctx.ctx, "AD_User_Roles", "AD_User_ID = ? AND AD_Role_ID = ? AND AD_Org_ID = ?", getTrxName(ctx)); if (!hasUUIDKey(ctx, element)) {
po = query.setParameters(new Object[]{userid, roleid, orgid}).first(); Query query = new Query(ctx.ctx, "AD_User_Roles", "AD_User_ID = ? AND AD_Role_ID = ? AND AD_Org_ID = ?", getTrxName(ctx));
po = query.setParameters(new Object[]{userid, roleid, orgid}).first();
}
if (po == null) { if (po == null) {
po = new X_AD_User_Roles(ctx.ctx, 0, getTrxName(ctx)); po = new X_AD_User_Roles(ctx.ctx, 0, getTrxName(ctx));
po.setAD_Org_ID(orgid); po.setAD_Org_ID(orgid);

View File

@ -66,8 +66,10 @@ public class WindowAccessElementHandler extends AbstractElementHandler {
return; return;
} }
Query query = new Query(ctx.ctx, "AD_Window_Access", "AD_Role_ID=? and AD_Window_ID=?", getTrxName(ctx)); if (!hasUUIDKey(ctx, element)) {
po = query.setParameters(new Object[]{roleid, windowid}).first(); Query query = new Query(ctx.ctx, "AD_Window_Access", "AD_Role_ID=? and AD_Window_ID=?", getTrxName(ctx));
po = query.setParameters(new Object[]{roleid, windowid}).first();
}
if (po == null) { if (po == null) {
po = new X_AD_Window_Access(ctx.ctx, 0, getTrxName(ctx)); po = new X_AD_Window_Access(ctx.ctx, 0, getTrxName(ctx));
po.setAD_Role_ID(roleid); po.setAD_Role_ID(roleid);

View File

@ -63,12 +63,14 @@ public class WindowElementHandler extends AbstractElementHandler {
if (isProcessElement(ctx.ctx, entitytype)) { if (isProcessElement(ctx.ctx, entitytype)) {
MWindow mWindow = findPO(ctx, element); MWindow mWindow = findPO(ctx, element);
if (mWindow == null) { if (mWindow == null) {
int id = 0;
String name = getStringValue(element, "Name", excludes); String name = getStringValue(element, "Name", excludes);
int id = findIdByName(ctx, "AD_Window", name); if (!hasUUIDKey(ctx, element)) {
if (id > 0 && windows.contains(id)) { id = findIdByName(ctx, "AD_Window", name);
return; if (id > 0 && windows.contains(id)) {
return;
}
} }
mWindow = new MWindow(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx)); mWindow = new MWindow(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
mWindow.setName(name); mWindow.setName(name);
} else { } else {

View File

@ -67,8 +67,10 @@ public class WorkflowAccessElementHandler extends AbstractElementHandler {
element.unresolved = "AD_Workflow_ID"; element.unresolved = "AD_Workflow_ID";
} }
Query query = new Query(ctx.ctx, "AD_Workflow_Access", "AD_Role_ID=? and AD_Workflow_ID=?", getTrxName(ctx)); if (!hasUUIDKey(ctx, element)) {
po = query.setParameters(new Object[]{roleid, workflowid}).first(); Query query = new Query(ctx.ctx, "AD_Workflow_Access", "AD_Role_ID=? and AD_Workflow_ID=?", getTrxName(ctx));
po = query.setParameters(new Object[]{roleid, workflowid}).first();
}
if (po == null) { if (po == null) {
po = new MWorkflowAccess(ctx.ctx, 0, getTrxName(ctx)); po = new MWorkflowAccess(ctx.ctx, 0, getTrxName(ctx));
po.setAD_Role_ID(roleid); po.setAD_Role_ID(roleid);

View File

@ -63,11 +63,14 @@ public class WorkflowElementHandler extends AbstractElementHandler {
MWorkflow mWorkflow = findPO(ctx, element); MWorkflow mWorkflow = findPO(ctx, element);
if (mWorkflow == null) { if (mWorkflow == null) {
int id = 0;
String workflowValue = getStringValue(element, "Value", excludes); String workflowValue = getStringValue(element, "Value", excludes);
int id = findIdByColumn(ctx, "AD_Workflow", "Value", workflowValue); if (!hasUUIDKey(ctx, element)) {
if (id > 0 && workflows.contains(id)) { id = findIdByColumn(ctx, "AD_Workflow", "Value", workflowValue);
element.skip = true; if (id > 0 && workflows.contains(id)) {
return; element.skip = true;
return;
}
} }
mWorkflow = new MWorkflow(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx)); mWorkflow = new MWorkflow(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));

View File

@ -74,10 +74,12 @@ public class WorkflowNodeElementHandler extends AbstractElementHandler {
} }
String workflowNodeValue = getStringValue(element, "Value", excludes); String workflowNodeValue = getStringValue(element, "Value", excludes);
StringBuilder sqlB = new StringBuilder( int id = 0;
if (!hasUUIDKey(ctx, element)) {
StringBuilder sqlB = new StringBuilder(
"SELECT AD_WF_Node_ID FROM AD_WF_Node WHERE AD_Workflow_ID=? and Value =?"); "SELECT AD_WF_Node_ID FROM AD_WF_Node WHERE AD_Workflow_ID=? and Value =?");
id = DB.getSQLValue(getTrxName(ctx), sqlB.toString(), workflowId, workflowNodeValue);
int id = DB.getSQLValue(getTrxName(ctx), sqlB.toString(), workflowId, workflowNodeValue); }
mWFNode = new MWFNode(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx)); mWFNode = new MWFNode(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
mWFNode.setValue(workflowNodeValue); mWFNode.setValue(workflowNodeValue);
mWFNode.setAD_Workflow_ID(workflowId); mWFNode.setAD_Workflow_ID(workflowId);

View File

@ -78,9 +78,12 @@ public class WorkflowNodeNextConditionElementHandler extends
return; return;
} }
int seqNo = getIntValue(element, "SeqNo"); int id = 0;
String sql = "SELECT AD_WF_NextCondition_ID FROM AD_WF_NextCondition WHERE AD_WF_NodeNext_ID =? AND SeqNo=?"; if (!hasUUIDKey(ctx, element)) {
int id = DB.getSQLValue(getTrxName(ctx), sql, new Object[] {wfNodeNextId, seqNo}); int seqNo = getIntValue(element, "SeqNo");
String sql = "SELECT AD_WF_NextCondition_ID FROM AD_WF_NextCondition WHERE AD_WF_NodeNext_ID =? AND SeqNo=?";
id = DB.getSQLValue(getTrxName(ctx), sql, new Object[] {wfNodeNextId, seqNo});
}
mWFNodeNextCondition = new MWFNextCondition(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx)); mWFNodeNextCondition = new MWFNextCondition(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
mWFNodeNextCondition.setAD_WF_NodeNext_ID(wfNodeNextId); mWFNodeNextCondition.setAD_WF_NodeNext_ID(wfNodeNextId);

View File

@ -94,7 +94,10 @@ public class WorkflowNodeNextElementHandler extends AbstractElementHandler {
return; return;
} }
int AD_WF_NodeNext_ID = DB.getSQLValue(getTrxName(ctx), "SELECT AD_WF_NodeNext_ID FROM AD_WF_NodeNext WHERE AD_WF_Node_ID=? and AD_WF_NEXT_ID =?", wfNodeId, AD_WF_Next_ID); int AD_WF_NodeNext_ID = 0;
if (!hasUUIDKey(ctx, element)) {
AD_WF_NodeNext_ID = DB.getSQLValue(getTrxName(ctx), "SELECT AD_WF_NodeNext_ID FROM AD_WF_NodeNext WHERE AD_WF_Node_ID=? and AD_WF_NEXT_ID =?", wfNodeId, AD_WF_Next_ID);
}
mWFNodeNext = new MWFNodeNext(ctx.ctx, AD_WF_NodeNext_ID, getTrxName(ctx)); mWFNodeNext = new MWFNodeNext(ctx.ctx, AD_WF_NodeNext_ID, getTrxName(ctx));
mWFNodeNext.setAD_WF_Node_ID(wfNodeId); mWFNodeNext.setAD_WF_Node_ID(wfNodeId);

View File

@ -574,7 +574,25 @@ public abstract class AbstractElementHandler implements ElementHandler {
} }
return po; return po;
} }
protected boolean hasUUIDKey(PIPOContext ctx, Element element) {
String tableName = element.getElementValue();
String uuidColumn = PO.getUUIDColumnName(tableName);
String uuid = element.properties.get(uuidColumn).contents.toString();
return (uuid != null && uuid.trim().length() == 36);
}
protected String getUUIDKey(PIPOContext ctx, Element element) {
String tableName = element.getElementValue();
String uuidColumn = PO.getUUIDColumnName(tableName);
if (element.properties.containsKey(uuidColumn)) {
String uuid = element.properties.get(uuidColumn).contents.toString();
if (uuid != null && uuid.trim().length() == 36)
return uuid.trim();
}
return null;
}
/** /**
* *
* @param atts * @param atts

View File

@ -81,7 +81,7 @@ public class AdempiereActivator implements BundleActivator, ServiceTrackerCustom
String where = "Name=? AND PK_Version LIKE ?"; String where = "Name=? AND PK_Version LIKE ?";
Query q = new Query(Env.getCtx(), X_AD_Package_Imp.Table_Name, Query q = new Query(Env.getCtx(), X_AD_Package_Imp.Table_Name,
where.toString(), trxName); where.toString(), null);
q.setParameters(new Object[] { getName(), version + "%" }); q.setParameters(new Object[] { getName(), version + "%" });
X_AD_Package_Imp pkg = q.first(); X_AD_Package_Imp pkg = q.first();
if (pkg == null) { if (pkg == null) {

View File

@ -9,14 +9,13 @@ import java.util.Properties;
import org.adempiere.server.IServerFactory; import org.adempiere.server.IServerFactory;
import org.compiere.model.MIMPProcessor; import org.compiere.model.MIMPProcessor;
import org.compiere.server.AdempiereServer;
import org.compiere.server.ReplicationProcessor; import org.compiere.server.ReplicationProcessor;
/** /**
* @author hengsin * @author hengsin
* *
*/ */
public class ReplicationServerFactory implements IServerFactory { public class ReplicationServerFactory implements IServerFactory<ReplicationProcessor, MIMPProcessor> {
/** /**
* default constructor * default constructor
@ -28,17 +27,21 @@ public class ReplicationServerFactory implements IServerFactory {
* @see org.adempiere.server.IServerFactory#create() * @see org.adempiere.server.IServerFactory#create()
*/ */
@Override @Override
public AdempiereServer[] create(Properties ctx) { public ReplicationProcessor[] create(Properties ctx) {
List<AdempiereServer> list = new ArrayList<AdempiereServer>(); List<ReplicationProcessor> list = new ArrayList<ReplicationProcessor>();
MIMPProcessor[] importModels = MIMPProcessor.getActive(ctx); MIMPProcessor[] importModels = MIMPProcessor.getActive(ctx);
for (int i = 0; i < importModels.length; i++) for (MIMPProcessor lp : importModels)
{ {
MIMPProcessor lp = importModels[i]; ReplicationProcessor server = new ReplicationProcessor(lp);
AdempiereServer server = new ReplicationProcessor(lp);
list.add(server); list.add(server);
} }
AdempiereServer[] servers = list.toArray(new AdempiereServer[0]); ReplicationProcessor[] servers = list.toArray(new ReplicationProcessor[0]);
return servers; return servers;
} }
@Override
public Class<MIMPProcessor> getProcessorClass() {
return MIMPProcessor.class;
}
} }

View File

@ -48,18 +48,17 @@ import org.compiere.model.MIMPProcessorLog;
public class ReplicationProcessor extends AdempiereServer { public class ReplicationProcessor extends AdempiereServer {
/** Last Summary */ /** Last Summary */
private StringBuffer m_summary = new StringBuffer(); protected StringBuffer m_summary = new StringBuffer();
/** Client info */ /** Client info */
@SuppressWarnings("unused") protected MClient m_client = null;
private MClient m_client = null;
private MIMPProcessor mImportProcessor = null; protected MIMPProcessor mImportProcessor = null;
/** /**
* flag showing if process is working! * flag showing if process is working!
*/ */
private boolean isProcessRunning = false; protected boolean isProcessRunning = false;
/*protected ReplicationProcessor(MIMPProcessor model, int initialNap) { /*protected ReplicationProcessor(MIMPProcessor model, int initialNap) {
@ -75,10 +74,10 @@ public class ReplicationProcessor extends AdempiereServer {
}*/ }*/
public ReplicationProcessor(AdempiereProcessor model, int initialNap) { public ReplicationProcessor(AdempiereProcessor model, int initialNap) {
super (model, initialNap); super (model, initialNap);
mImportProcessor = (MIMPProcessor)model; mImportProcessor = (MIMPProcessor)model;
m_client = MClient.get(mImportProcessor.getCtx(), mImportProcessor.getAD_Client_ID()); m_client = MClient.get(mImportProcessor.getCtx(), mImportProcessor.getAD_Client_ID());
} }
public ReplicationProcessor(AdempiereProcessor model) { public ReplicationProcessor(AdempiereProcessor model) {
super (model, 30); super (model, 30);
mImportProcessor =(MIMPProcessor)model; mImportProcessor =(MIMPProcessor)model;

View File

@ -20,6 +20,11 @@
<arguments> <arguments>
</arguments> </arguments>
</buildCommand> </buildCommand>
<buildCommand>
<name>org.eclipse.pde.ds.core.builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec> </buildSpec>
<natures> <natures>
<nature>org.eclipse.jdt.core.javanature</nature> <nature>org.eclipse.jdt.core.javanature</nature>

View File

@ -32,4 +32,8 @@ Import-Package: javax.jms;version="1.1.0",
org.restlet.service, org.restlet.service,
org.restlet.util org.restlet.util
Export-Package: org.adempiere.server, Export-Package: org.adempiere.server,
org.compiere.server org.compiere.ldap,
org.compiere.server,
org.idempiere.server.factory
Bundle-ActivationPolicy: lazy
Service-Component: OSGI-INF/acctprocessorfactory.xml, OSGI-INF/alertprocessorfactory.xml, OSGI-INF/ldapprocessorfactory.xml, OSGI-INF/requestprocessorfactory.xml, OSGI-INF/schedulerfactory.xml, OSGI-INF/workflowprocessorfactory.xml

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.idempiere.server.factory.defaultacctprocessor">
<implementation class="org.idempiere.server.factory.DefaultAcctProcessorFactory"/>
<property name="service.ranking" type="Integer" value="0"/>
<service>
<provide interface="org.adempiere.server.IServerFactory"/>
</service>
</scr:component>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.idempiere.server.factory.defaultalertprocessor">
<implementation class="org.idempiere.server.factory.DefaultAlertProcessorFactory"/>
<property name="service.ranking" type="Integer" value="0"/>
<service>
<provide interface="org.adempiere.server.IServerFactory"/>
</service>
</scr:component>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.idempiere.server.factory.defaultldapprocessor">
<implementation class="org.idempiere.server.factory.DefaultLDAPProcessorFactory"/>
<property name="service.ranking" type="Integer" value="0"/>
<service>
<provide interface="org.adempiere.server.IServerFactory"/>
</service>
</scr:component>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.idempiere.server.factory.defaultrequestprocessor">
<implementation class="org.idempiere.server.factory.DefaultRequestProcessorFactory"/>
<property name="service.ranking" type="Integer" value="0"/>
<service>
<provide interface="org.adempiere.server.IServerFactory"/>
</service>
</scr:component>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.idempiere.server.factory.defaultscheduler">
<implementation class="org.idempiere.server.factory.DefaultSchedulerFactory"/>
<property name="service.ranking" type="Integer" value="0"/>
<service>
<provide interface="org.adempiere.server.IServerFactory"/>
</service>
</scr:component>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.idempiere.server.factory.defaultworkflowprocessor">
<implementation class="org.idempiere.server.factory.DefaultWorkflowProcessorFactory"/>
<property name="service.ranking" type="Integer" value="0"/>
<service>
<provide interface="org.adempiere.server.IServerFactory"/>
</service>
</scr:component>

View File

@ -20,12 +20,19 @@ bin.includes = META-INF/,\
standard.css,\ standard.css,\
webstart.jpg,\ webstart.jpg,\
zip.gif,\ zip.gif,\
plugin.xml plugin.xml,\
bin.excludes = src/**,\ OSGI-INF/acctprocessorfactory.xml,\
.settings/**,\ OSGI-INF/alertprocessorfactory.xml,\
.classpath,\ OSGI-INF/ldapprocessorfactory.xml,\
.project,\ OSGI-INF/requestprocessorfactory.xml,\
build.properties OSGI-INF/schedulerfactory.xml,\
OSGI-INF/workflowprocessorfactory.xml,\
OSGI-INF/
output.. = build/classes/
source.. = src/main/server/,\ source.. = src/main/server/,\
src/main/servlet/ src/main/servlet/
output.. = build/classes/ bin.excludes = src/**,\
.settings/**,\
.classpath,\
.project,\
build.properties

View File

@ -15,6 +15,7 @@ package org.adempiere.server;
import java.util.Properties; import java.util.Properties;
import org.compiere.model.AdempiereProcessor;
import org.compiere.server.AdempiereServer; import org.compiere.server.AdempiereServer;
/** /**
@ -22,8 +23,18 @@ import org.compiere.server.AdempiereServer;
* @author hengsin * @author hengsin
* *
*/ */
public interface IServerFactory { public interface IServerFactory<S extends AdempiereServer, M extends AdempiereProcessor> {
// Class implementing this method must take into account if the server can be ran on this IP /**
public AdempiereServer[] create (Properties ctx); * @param ctx
* @return list of AdempiereServer
*/
public S[] create (Properties ctx);
/**
* The Adempiere Server Manager will used this to avoid running duplicate server for the same
* AdempiereProcessor model.
* @return Fully qualified AdempiereProcessor model class name
*/
public Class<M> getProcessorClass();
} }

View File

@ -46,13 +46,13 @@ public class LdapProcessor extends AdempiereServer
} // LdapProcessor } // LdapProcessor
/** The Concrete Model */ /** The Concrete Model */
private MLdapProcessor m_model = null; protected MLdapProcessor m_model = null;
/** Last Summary */ /** Last Summary */
private StringBuffer m_summary = new StringBuffer(); protected StringBuffer m_summary = new StringBuffer();
/** Server Socket */ /** Server Socket */
private ServerSocket m_serverSocket = null; protected ServerSocket m_serverSocket = null;
/** Counter */ /** Counter */
private int m_counter = 0; protected int m_counter = 0;
/** /**

View File

@ -56,13 +56,13 @@ public class AcctProcessor extends AdempiereServer
} // AcctProcessor } // AcctProcessor
/** The Concrete Model */ /** The Concrete Model */
private MAcctProcessor m_model = null; protected MAcctProcessor m_model = null;
/** Last Summary */ /** Last Summary */
private StringBuffer m_summary = new StringBuffer(); protected StringBuffer m_summary = new StringBuffer();
/** Client onfo */ /** Client onfo */
private MClient m_client = null; protected MClient m_client = null;
/** Accounting Schemata */ /** Accounting Schemata */
private MAcctSchema[] m_ass = null; protected MAcctSchema[] m_ass = null;
/** /**
* Work * Work

View File

@ -20,22 +20,15 @@ import java.sql.Timestamp;
import java.util.Properties; import java.util.Properties;
import java.util.logging.Level; import java.util.logging.Level;
import org.compiere.ldap.LdapProcessor;
import org.compiere.model.AdempiereProcessor; import org.compiere.model.AdempiereProcessor;
import org.compiere.model.AdempiereProcessor2; import org.compiere.model.AdempiereProcessor2;
import org.compiere.model.AdempiereProcessorLog; import org.compiere.model.AdempiereProcessorLog;
import org.compiere.model.MAcctProcessor;
import org.compiere.model.MAlertProcessor;
import org.compiere.model.MClient; import org.compiere.model.MClient;
import org.compiere.model.MLdapProcessor;
import org.compiere.model.MRequestProcessor;
import org.compiere.model.MSchedule; import org.compiere.model.MSchedule;
import org.compiere.model.MScheduler;
import org.compiere.model.MSystem; import org.compiere.model.MSystem;
import org.compiere.util.CLogger; import org.compiere.util.CLogger;
import org.compiere.util.Env; import org.compiere.util.Env;
import org.compiere.util.TimeUtil; import org.compiere.util.TimeUtil;
import org.compiere.wf.MWorkflowProcessor;
/** /**
* Adempiere Server Base * Adempiere Server Base
@ -45,31 +38,6 @@ import org.compiere.wf.MWorkflowProcessor;
*/ */
public abstract class AdempiereServer implements Runnable public abstract class AdempiereServer implements Runnable
{ {
/**
* Create New Server Thead
* @param model model
* @return server tread or null
*/
public static AdempiereServer create (AdempiereProcessor model)
{
if (! isOKtoRunOnIP(model))
return null;
if (model instanceof MRequestProcessor)
return new RequestProcessor ((MRequestProcessor)model);
if (model instanceof MWorkflowProcessor)
return new WorkflowProcessor ((MWorkflowProcessor)model);
if (model instanceof MAcctProcessor)
return new AcctProcessor ((MAcctProcessor)model);
if (model instanceof MAlertProcessor)
return new AlertProcessor ((MAlertProcessor)model);
if (model instanceof MScheduler)
return new Scheduler ((MScheduler)model);
if (model instanceof MLdapProcessor)
return new LdapProcessor((MLdapProcessor)model);
//
throw new IllegalArgumentException("Unknown Processor");
} // create
/************************************************************************** /**************************************************************************
* Server Base Class * Server Base Class

View File

@ -27,15 +27,10 @@ import java.util.logging.Level;
import org.adempiere.base.Service; import org.adempiere.base.Service;
import org.adempiere.server.IServerFactory; import org.adempiere.server.IServerFactory;
import org.compiere.Adempiere; import org.compiere.Adempiere;
import org.compiere.model.MAcctProcessor; import org.compiere.model.AdempiereProcessor;
import org.compiere.model.MAlertProcessor;
import org.compiere.model.MLdapProcessor;
import org.compiere.model.MRequestProcessor;
import org.compiere.model.MScheduler;
import org.compiere.model.MSession; import org.compiere.model.MSession;
import org.compiere.util.CLogger; import org.compiere.util.CLogger;
import org.compiere.util.Env; import org.compiere.util.Env;
import org.compiere.wf.MWorkflowProcessor;
/** /**
* Adempiere Server Manager * Adempiere Server Manager
@ -105,100 +100,36 @@ public class AdempiereServerMgr
* Start Environment * Start Environment
* @return true if started * @return true if started
*/ */
@SuppressWarnings("rawtypes")
public boolean startServers() public boolean startServers()
{ {
log.info(""); log.info("");
int noServers = 0; int noServers = 0;
m_servers=new ArrayList<ServerWrapper>(); m_servers=new ArrayList<ServerWrapper>();
// Accounting
MAcctProcessor[] acctModels = MAcctProcessor.getActive(m_ctx);
for (int i = 0; i < acctModels.length; i++)
{
MAcctProcessor pModel = acctModels[i];
AdempiereServer server = AdempiereServer.create(pModel);
if (server != null) {
// server.start();
// server.setPriority(Thread.NORM_PRIORITY-2);
m_servers.add(new ServerWrapper(server));
}
}
// Request
MRequestProcessor[] requestModels = MRequestProcessor.getActive(m_ctx);
for (int i = 0; i < requestModels.length; i++)
{
MRequestProcessor pModel = requestModels[i];
AdempiereServer server = AdempiereServer.create(pModel);
if (server != null) {
// server.start();
// server.setPriority(Thread.NORM_PRIORITY-2);
m_servers.add(new ServerWrapper(server));
}
}
// Workflow
MWorkflowProcessor[] workflowModels = MWorkflowProcessor.getActive(m_ctx);
for (int i = 0; i < workflowModels.length; i++)
{
MWorkflowProcessor pModel = workflowModels[i];
AdempiereServer server = AdempiereServer.create(pModel);
if (server != null) {
// server.start();
// server.setPriority(Thread.NORM_PRIORITY-2);
m_servers.add(new ServerWrapper(server));
}
}
// Alert
MAlertProcessor[] alertModels = MAlertProcessor.getActive(m_ctx);
for (int i = 0; i < alertModels.length; i++)
{
MAlertProcessor pModel = alertModels[i];
AdempiereServer server = AdempiereServer.create(pModel);
if (server != null) {
// server.start();
// server.setPriority(Thread.NORM_PRIORITY-2);
m_servers.add(new ServerWrapper(server));
}
}
// Scheduler
MScheduler[] schedulerModels = MScheduler.getActive(m_ctx);
for (int i = 0; i < schedulerModels.length; i++)
{
MScheduler pModel = schedulerModels[i];
AdempiereServer server = AdempiereServer.create(pModel);
if (server != null) {
// server.start();
// server.setPriority(Thread.NORM_PRIORITY-2);
m_servers.add(new ServerWrapper(server));
}
}
// LDAP
MLdapProcessor[] ldapModels = MLdapProcessor.getActive(m_ctx);
for (int i = 0; i < ldapModels.length; i++)
{
MLdapProcessor lp = ldapModels[i];
AdempiereServer server = AdempiereServer.create(lp);
if (server != null) {
// server.start();
// server.setPriority(Thread.NORM_PRIORITY-1);
m_servers.add(new ServerWrapper(server));
}
}
//osgi server //osgi server
List<IServerFactory> serverFactoryList = Service.locator().list(IServerFactory.class).getServices(); List<IServerFactory> serverFactoryList = Service.locator().list(IServerFactory.class).getServices();
if (serverFactoryList != null && !serverFactoryList.isEmpty()) if (serverFactoryList != null && !serverFactoryList.isEmpty())
{ {
List<String> processed = new ArrayList<String>();
for(IServerFactory factory : serverFactoryList ) for(IServerFactory factory : serverFactoryList )
{ {
AdempiereServer[] servers = factory.create(m_ctx); String name = factory.getProcessorClass().getName();
if (servers != null && servers.length > 0) if (!processed.contains(name))
{ {
for (AdempiereServer server : servers) processed.add(name);
AdempiereServer[] servers = factory.create(m_ctx);
if (servers != null && servers.length > 0)
{ {
// server.start(); for (AdempiereServer server : servers)
// server.setPriority(Thread.NORM_PRIORITY-1); {
m_servers.add(new ServerWrapper(server)); AdempiereProcessor model = server.getModel();
} if (AdempiereServer.isOKtoRunOnIP(model)) {
} m_servers.add(new ServerWrapper(server));
}
}
}
}
} }
} }

View File

@ -72,13 +72,13 @@ public class AlertProcessor extends AdempiereServer
} // AlertProcessor } // AlertProcessor
/** The Concrete Model */ /** The Concrete Model */
private MAlertProcessor m_model = null; protected MAlertProcessor m_model = null;
/** Last Summary */ /** Last Summary */
private StringBuffer m_summary = new StringBuffer(); protected StringBuffer m_summary = new StringBuffer();
/** Last Error Msg */ /** Last Error Msg */
private StringBuffer m_errors = new StringBuffer(); protected StringBuffer m_errors = new StringBuffer();
/** Client info */ /** Client info */
private MClient m_client = null; protected MClient m_client = null;
/** /**
* Work * Work
@ -119,7 +119,7 @@ public class AlertProcessor extends AdempiereServer
* @param alert alert * @param alert alert
* @return true if processed * @return true if processed
*/ */
private boolean processAlert (MAlert alert) protected boolean processAlert (MAlert alert)
{ {
if (!alert.isValid()) if (!alert.isValid())
return false; return false;
@ -240,7 +240,7 @@ public class AlertProcessor extends AdempiereServer
* @param attachments * @param attachments
* @return how many email were sent * @return how many email were sent
*/ */
private int notifyUsers(Collection<Integer> users, String subject, String message, Collection<File> attachments) protected int notifyUsers(Collection<Integer> users, String subject, String message, Collection<File> attachments)
{ {
int countMail = 0; int countMail = 0;
for (int user_id : users) { for (int user_id : users) {
@ -289,7 +289,7 @@ public class AlertProcessor extends AdempiereServer
* @return data * @return data
* @throws Exception * @throws Exception
*/ */
private ArrayList<ArrayList<Object>> getData (String sql, String trxName) throws Exception protected ArrayList<ArrayList<Object>> getData (String sql, String trxName) throws Exception
{ {
ArrayList<ArrayList<Object>> data = new ArrayList<ArrayList<Object>>(); ArrayList<ArrayList<Object>> data = new ArrayList<ArrayList<Object>>();
PreparedStatement pstmt = null; PreparedStatement pstmt = null;
@ -351,7 +351,7 @@ public class AlertProcessor extends AdempiereServer
* @return list of rows & values * @return list of rows & values
* @throws Exception * @throws Exception
*/ */
private String getPlainTextReport(MAlertRule rule, String sql, String trxName, Collection<File> attachments) protected String getPlainTextReport(MAlertRule rule, String sql, String trxName, Collection<File> attachments)
throws Exception throws Exception
{ {
StringBuilder result = new StringBuilder(); StringBuilder result = new StringBuilder();
@ -407,7 +407,7 @@ public class AlertProcessor extends AdempiereServer
* @return summary message to be added into mail content * @return summary message to be added into mail content
* @throws Exception * @throws Exception
*/ */
private String getExcelReport(MAlertRule rule, String sql, String trxName, Collection<File> attachments) protected String getExcelReport(MAlertRule rule, String sql, String trxName, Collection<File> attachments)
throws Exception throws Exception
{ {
ArrayList<ArrayList<Object>> data = getData(sql, trxName); ArrayList<ArrayList<Object>> data = getData(sql, trxName);

View File

@ -69,30 +69,30 @@ public class EMailProcessor
} // EMail } // EMail
/** EMail Host Parameter */ /** EMail Host Parameter */
private String m_host = null; protected String m_host = null;
/** EMail User Parameter */ /** EMail User Parameter */
private String m_user = null; protected String m_user = null;
/** Password Parameter */ /** Password Parameter */
private String m_pass = null; protected String m_pass = null;
/** Session */ /** Session */
private Session m_session = null; protected Session m_session = null;
/** Store */ /** Store */
private Store m_store = null; protected Store m_store = null;
/** Logger */ /** Logger */
protected CLogger log = CLogger.getCLogger(getClass()); protected CLogger log = CLogger.getCLogger(getClass());
/** Process Error */ /** Process Error */
private static final int ERROR = 0; protected static final int ERROR = 0;
/** Process Request */ /** Process Request */
private static final int REQUEST = 1; protected static final int REQUEST = 1;
/** Process Workflow */ /** Process Workflow */
private static final int WORKFLOW = 2; protected static final int WORKFLOW = 2;
/** Process Delivery Confirm */ /** Process Delivery Confirm */
private static final int DELIVERY = 9; protected static final int DELIVERY = 9;
/** /**
* Process Messages in InBox * Process Messages in InBox
@ -130,7 +130,7 @@ public class EMailProcessor
* @return Session * @return Session
* @throws Exception * @throws Exception
*/ */
private Session getSession() throws Exception protected Session getSession() throws Exception
{ {
if (m_session != null) if (m_session != null)
return m_session; return m_session;
@ -155,7 +155,7 @@ public class EMailProcessor
* @return Store * @return Store
* @throws Exception * @throws Exception
*/ */
private Store getStore() throws Exception protected Store getStore() throws Exception
{ {
if (m_store != null) if (m_store != null)
return m_store; return m_store;
@ -177,7 +177,7 @@ public class EMailProcessor
* @return number of processed * @return number of processed
* @throws Exception * @throws Exception
*/ */
private int processInBox() throws Exception protected int processInBox() throws Exception
{ {
// Folder // Folder
Folder folder; Folder folder;
@ -276,7 +276,7 @@ public class EMailProcessor
* @return Type of Message * @return Type of Message
* @throws Exception * @throws Exception
*/ */
private int processMessage (Message msg) throws Exception protected int processMessage (Message msg) throws Exception
{ {
dumpEnvelope (msg); dumpEnvelope (msg);
dumpBody (msg); dumpBody (msg);
@ -301,7 +301,7 @@ public class EMailProcessor
* @param msg message * @param msg message
* @return subject or "" * @return subject or ""
*/ */
private String getSubject (Message msg) protected String getSubject (Message msg)
{ {
try try
{ {
@ -321,7 +321,7 @@ public class EMailProcessor
* @param msg Message * @param msg Message
* @return message or "" * @return message or ""
*/ */
private String getMessage (Part msg) protected String getMessage (Part msg)
{ {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
try try
@ -406,7 +406,7 @@ public class EMailProcessor
* @param msg message * @param msg message
* @return delivery info or null * @return delivery info or null
*/ */
private String getDeliveryReport (Part msg) protected String getDeliveryReport (Part msg)
{ {
try try
{ {
@ -451,7 +451,7 @@ public class EMailProcessor
* @return info or null * @return info or null
* @throws Exception * @throws Exception
*/ */
private String getDeliveredReportDetail (Part part) throws Exception protected String getDeliveredReportDetail (Part part) throws Exception
{ {
Object content = part.getContent(); Object content = part.getContent();
if (content == null) if (content == null)
@ -504,7 +504,7 @@ public class EMailProcessor
* @param m message * @param m message
* @throws Exception * @throws Exception
*/ */
private void dumpEnvelope(Message m) throws Exception protected void dumpEnvelope(Message m) throws Exception
{ {
printOut("-----------------------------------------------------------------"); printOut("-----------------------------------------------------------------");
Address[] a; Address[] a;
@ -613,7 +613,7 @@ public class EMailProcessor
* @param p * @param p
* @throws Exception * @throws Exception
*/ */
private void dumpBody (Part p) throws Exception protected void dumpBody (Part p) throws Exception
{ {
// http://www.iana.org/assignments/media-types/ // http://www.iana.org/assignments/media-types/
printOut("================================================================="); printOut("=================================================================");
@ -688,7 +688,7 @@ public class EMailProcessor
* Print * Print
* @param s string * @param s string
*/ */
private static void printOut(String s) protected static void printOut(String s)
{ {
// System.out.print(indentStr.substring(0, level * 2)); // System.out.print(indentStr.substring(0, level * 2));
System.out.println(s); System.out.println(s);

View File

@ -57,11 +57,11 @@ public class RequestProcessor extends AdempiereServer
} // RequestProcessor } // RequestProcessor
/** The Concrete Model */ /** The Concrete Model */
private MRequestProcessor m_model = null; protected MRequestProcessor m_model = null;
/** Last Summary */ /** Last Summary */
private StringBuffer m_summary = new StringBuffer(); protected StringBuffer m_summary = new StringBuffer();
/** Client onfo */ /** Client onfo */
private MClient m_client = null; protected MClient m_client = null;
/************************************************************************** /**************************************************************************
* Do the actual Work * Do the actual Work
@ -90,7 +90,7 @@ public class RequestProcessor extends AdempiereServer
* Process requests. * Process requests.
* Scheduled - are they due? * Scheduled - are they due?
*/ */
private void processRequests () protected void processRequests ()
{ {
/** /**
* Due Requests * Due Requests
@ -368,7 +368,7 @@ public class RequestProcessor extends AdempiereServer
* @param AD_Message message * @param AD_Message message
* @return true if sent * @return true if sent
*/ */
private boolean sendEmail (MRequest request, String AD_Message) protected boolean sendEmail (MRequest request, String AD_Message)
{ {
// Alert: Request {0} overdue // Alert: Request {0} overdue
String subject = Msg.getMsg(m_client.getAD_Language(), AD_Message, String subject = Msg.getMsg(m_client.getAD_Language(), AD_Message,
@ -382,7 +382,7 @@ public class RequestProcessor extends AdempiereServer
* @param request request * @param request request
* @return true if saved * @return true if saved
*/ */
private boolean escalate (MRequest request) protected boolean escalate (MRequest request)
{ {
// Get Supervisor // Get Supervisor
MUser supervisor = request.getSalesRep(); // self MUser supervisor = request.getSalesRep(); // self
@ -424,7 +424,7 @@ public class RequestProcessor extends AdempiereServer
/************************************************************************** /**************************************************************************
* Process Request Status * Process Request Status
*/ */
private void processStatus() protected void processStatus()
{ {
int count = 0; int count = 0;
// Requests with status with after timeout // Requests with status with after timeout
@ -482,7 +482,7 @@ public class RequestProcessor extends AdempiereServer
/** /**
* Create ECR * Create ECR
*/ */
private void processECR() protected void processECR()
{ {
// Get Requests with Request Type-AutoChangeRequest and Group with info // Get Requests with Request Type-AutoChangeRequest and Group with info
String sql = "SELECT * FROM R_Request r " String sql = "SELECT * FROM R_Request r "
@ -543,7 +543,7 @@ public class RequestProcessor extends AdempiereServer
/************************************************************************** /**************************************************************************
* Create Reauest / Updates from EMail * Create Reauest / Updates from EMail
*/ */
private void processEMail () protected void processEMail ()
{ {
// m_summary.append("Mail #").append(count) // m_summary.append("Mail #").append(count)
// .append(" - "); // .append(" - ");
@ -553,7 +553,7 @@ public class RequestProcessor extends AdempiereServer
/************************************************************************** /**************************************************************************
* Allocate Sales Rep * Allocate Sales Rep
*/ */
private void findSalesRep () protected void findSalesRep ()
{ {
int changed = 0; int changed = 0;
int notFound = 0; int notFound = 0;
@ -614,7 +614,7 @@ public class RequestProcessor extends AdempiereServer
* @param request request * @param request request
* @return SalesRep_ID user * @return SalesRep_ID user
*/ */
private int findSalesRep (MRequest request) protected int findSalesRep (MRequest request)
{ {
String QText = request.getSummary(); String QText = request.getSummary();
if (QText == null) if (QText == null)

View File

@ -69,14 +69,14 @@ public class Scheduler extends AdempiereServer
} // Scheduler } // Scheduler
/** The Concrete Model */ /** The Concrete Model */
private MScheduler m_model = null; protected MScheduler m_model = null;
/** Last Summary */ /** Last Summary */
private StringBuffer m_summary = new StringBuffer(); protected StringBuffer m_summary = new StringBuffer();
/** Transaction */ /** Transaction */
private Trx m_trx = null; protected Trx m_trx = null;
// ctx for the report/process // ctx for the report/process
Properties m_schedulerctx = new Properties(); protected Properties m_schedulerctx = new Properties();
/** /**
* Work * Work
@ -148,7 +148,7 @@ public class Scheduler extends AdempiereServer
* @return summary * @return summary
* @throws Exception * @throws Exception
*/ */
private String runProcess(MProcess process) throws Exception protected String runProcess(MProcess process) throws Exception
{ {
if (log.isLoggable(Level.INFO)) log.info(process.toString()); if (log.isLoggable(Level.INFO)) log.info(process.toString());
@ -278,7 +278,7 @@ public class Scheduler extends AdempiereServer
return pi.getSummary(); return pi.getSummary();
} // runProcess } // runProcess
private int getAD_User_ID() { protected int getAD_User_ID() {
int AD_User_ID; int AD_User_ID;
if (m_model.getSupervisor_ID() > 0) if (m_model.getSupervisor_ID() > 0)
AD_User_ID = m_model.getSupervisor_ID(); AD_User_ID = m_model.getSupervisor_ID();
@ -295,7 +295,7 @@ public class Scheduler extends AdempiereServer
* Fill Parameter * Fill Parameter
* @param pInstance process instance * @param pInstance process instance
*/ */
private void fillParameter(MPInstance pInstance) protected void fillParameter(MPInstance pInstance)
{ {
MSchedulerPara[] sParams = m_model.getParameters (false); MSchedulerPara[] sParams = m_model.getParameters (false);
MPInstancePara[] iParams = pInstance.getParameters(); MPInstancePara[] iParams = pInstance.getParameters();

View File

@ -61,11 +61,11 @@ public class WorkflowProcessor extends AdempiereServer
} // WorkflowProcessor } // WorkflowProcessor
/** The Concrete Model */ /** The Concrete Model */
private MWorkflowProcessor m_model = null; protected MWorkflowProcessor m_model = null;
/** Last Summary */ /** Last Summary */
private StringBuffer m_summary = new StringBuffer(); protected StringBuffer m_summary = new StringBuffer();
/** Client onfo */ /** Client onfo */
private MClient m_client = null; protected MClient m_client = null;
/** /**
* Work * Work
@ -90,7 +90,7 @@ public class WorkflowProcessor extends AdempiereServer
/** /**
* Continue Workflow After Sleep * Continue Workflow After Sleep
*/ */
private void wakeup() protected void wakeup()
{ {
String sql = "SELECT * " String sql = "SELECT * "
+ "FROM AD_WF_Activity a " + "FROM AD_WF_Activity a "
@ -135,7 +135,7 @@ public class WorkflowProcessor extends AdempiereServer
/** /**
* Set/Increase Priority dynamically * Set/Increase Priority dynamically
*/ */
private void dynamicPriority() protected void dynamicPriority()
{ {
// suspened activities with dynamic priority node // suspened activities with dynamic priority node
String sql = "SELECT * " String sql = "SELECT * "
@ -184,7 +184,7 @@ public class WorkflowProcessor extends AdempiereServer
/** /**
* Send Alerts * Send Alerts
*/ */
private void sendAlerts() protected void sendAlerts()
{ {
// Alert over Priority // Alert over Priority
if (m_model.getAlertOverPriority() > 0) if (m_model.getAlertOverPriority() > 0)
@ -350,7 +350,7 @@ public class WorkflowProcessor extends AdempiereServer
* @param toSupervisor true if to Supervisor * @param toSupervisor true if to Supervisor
* @return number of mails sent * @return number of mails sent
*/ */
private int sendEmail (MWFActivity activity, String AD_Message, protected int sendEmail (MWFActivity activity, String AD_Message,
boolean toProcess, boolean toSupervisor) boolean toProcess, boolean toSupervisor)
{ {
if (m_client == null || m_client.getAD_Client_ID() != activity.getAD_Client_ID()) if (m_client == null || m_client.getAD_Client_ID() != activity.getAD_Client_ID())
@ -429,7 +429,7 @@ public class WorkflowProcessor extends AdempiereServer
* @param pdf optional pdf * @param pdf optional pdf
* @return number of mail sent * @return number of mail sent
*/ */
private int sendAlertToResponsible (MWFResponsible responsible, protected int sendAlertToResponsible (MWFResponsible responsible,
ArrayList<Integer> list, MWFProcess process, ArrayList<Integer> list, MWFProcess process,
String subject, String message, File pdf) String subject, String message, File pdf)
{ {

View File

@ -0,0 +1,56 @@
/******************************************************************************
* Copyright (C) 2013 Heng Sin Low *
* Copyright (C) 2013 Trek Global *
* This program is free software; you can redistribute it and/or modify it *
* under the terms version 2 of the GNU General Public License as published *
* by the Free Software Foundation. This program is distributed in the hope *
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU General Public License for more details. *
* You should have received a copy of the GNU General Public License along *
* with this program; if not, write to the Free Software Foundation, Inc., *
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
*****************************************************************************/
package org.idempiere.server.factory;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import org.adempiere.server.IServerFactory;
import org.compiere.model.MAcctProcessor;
import org.compiere.server.AcctProcessor;
/**
* @author hengsin
*
*/
public class DefaultAcctProcessorFactory implements IServerFactory<AcctProcessor, MAcctProcessor> {
/**
* default constructor
*/
public DefaultAcctProcessorFactory() {
}
/* (non-Javadoc)
* @see org.adempiere.server.IServerFactory#create(java.util.Properties)
*/
@Override
public AcctProcessor[] create(Properties ctx) {
MAcctProcessor[] acctModels = MAcctProcessor.getActive(ctx);
List<AcctProcessor> list = new ArrayList<AcctProcessor>();
for (MAcctProcessor pModel : acctModels)
{
AcctProcessor processor = new AcctProcessor(pModel);
list.add(processor);
}
return list.toArray(new AcctProcessor[0]);
}
@Override
public Class<MAcctProcessor> getProcessorClass() {
return MAcctProcessor.class;
}
}

View File

@ -0,0 +1,53 @@
/******************************************************************************
* Copyright (C) 2013 Heng Sin Low *
* Copyright (C) 2013 Trek Global *
* This program is free software; you can redistribute it and/or modify it *
* under the terms version 2 of the GNU General Public License as published *
* by the Free Software Foundation. This program is distributed in the hope *
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU General Public License for more details. *
* You should have received a copy of the GNU General Public License along *
* with this program; if not, write to the Free Software Foundation, Inc., *
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
*****************************************************************************/
package org.idempiere.server.factory;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import org.adempiere.server.IServerFactory;
import org.compiere.model.MAlertProcessor;
import org.compiere.server.AlertProcessor;
/**
* @author hengsin
*
*/
public class DefaultAlertProcessorFactory implements IServerFactory<AlertProcessor, MAlertProcessor> {
/**
*
*/
public DefaultAlertProcessorFactory() {
}
@Override
public AlertProcessor[] create(Properties ctx) {
MAlertProcessor[] alertModels = MAlertProcessor.getActive(ctx);
List<AlertProcessor> list = new ArrayList<AlertProcessor>();
for (MAlertProcessor pModel : alertModels)
{
AlertProcessor server = new AlertProcessor(pModel);
list.add(server);
}
return list.toArray(new AlertProcessor[0]);
}
@Override
public Class<MAlertProcessor> getProcessorClass() {
return MAlertProcessor.class;
}
}

View File

@ -0,0 +1,52 @@
/******************************************************************************
* Copyright (C) 2013 Heng Sin Low *
* Copyright (C) 2013 Trek Global *
* This program is free software; you can redistribute it and/or modify it *
* under the terms version 2 of the GNU General Public License as published *
* by the Free Software Foundation. This program is distributed in the hope *
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU General Public License for more details. *
* You should have received a copy of the GNU General Public License along *
* with this program; if not, write to the Free Software Foundation, Inc., *
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
*****************************************************************************/
package org.idempiere.server.factory;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import org.adempiere.server.IServerFactory;
import org.compiere.ldap.LdapProcessor;
import org.compiere.model.MLdapProcessor;
/**
* @author hengsin
*
*/
public class DefaultLDAPProcessorFactory implements IServerFactory<LdapProcessor, MLdapProcessor> {
/**
* default constructor
*/
public DefaultLDAPProcessorFactory() {
}
@Override
public LdapProcessor[] create(Properties ctx) {
MLdapProcessor[] ldapModels = MLdapProcessor.getActive(ctx);
List<LdapProcessor> list = new ArrayList<LdapProcessor>();
for (MLdapProcessor lp : ldapModels)
{
LdapProcessor server = new LdapProcessor(lp);
list.add(server);
}
return list.toArray(new LdapProcessor[0]);
}
@Override
public Class<MLdapProcessor> getProcessorClass() {
return MLdapProcessor.class;
}
}

View File

@ -0,0 +1,55 @@
/******************************************************************************
* Copyright (C) 2013 Heng Sin Low *
* Copyright (C) 2013 Trek Global *
* This program is free software; you can redistribute it and/or modify it *
* under the terms version 2 of the GNU General Public License as published *
* by the Free Software Foundation. This program is distributed in the hope *
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU General Public License for more details. *
* You should have received a copy of the GNU General Public License along *
* with this program; if not, write to the Free Software Foundation, Inc., *
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
*****************************************************************************/
package org.idempiere.server.factory;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import org.adempiere.server.IServerFactory;
import org.compiere.model.MRequestProcessor;
import org.compiere.server.RequestProcessor;
/**
* @author hengsin
*
*/
public class DefaultRequestProcessorFactory implements IServerFactory<RequestProcessor, MRequestProcessor> {
/**
*
*/
public DefaultRequestProcessorFactory() {
}
/* (non-Javadoc)
* @see org.adempiere.server.IServerFactory#create(java.util.Properties)
*/
@Override
public RequestProcessor[] create(Properties ctx) {
MRequestProcessor[] requestModels = MRequestProcessor.getActive(ctx);
List<RequestProcessor> list = new ArrayList<RequestProcessor>();
for (MRequestProcessor pModel : requestModels)
{
RequestProcessor processor = new RequestProcessor(pModel);
list.add(processor);
}
return list.toArray(new RequestProcessor[0]);
}
@Override
public Class<MRequestProcessor> getProcessorClass() {
return MRequestProcessor.class;
}
}

Some files were not shown because too many files have changed in this diff Show More