hg merge release-5.1 (merge release5.1 into default)
This commit is contained in:
commit
caf3ca2367
|
@ -0,0 +1,11 @@
|
|||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
-- Sep 18, 2017 12:37:19 PM GMT+08:00
|
||||
-- 1008477 List on Position field in Lead window is blank even if there are position options configured.
|
||||
UPDATE AD_Val_Rule SET Code='((C_Job.IsEmployee=(SELECT IsEmployee FROM C_BPartner WHERE C_BPartner_ID=@C_BPartner_ID:0@)) OR (C_Job.IsEmployee=''N'' AND @C_BPartner_ID:0@=0))',Updated=TO_DATE('2017-09-18 12:37:19','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Val_Rule_ID=243
|
||||
;
|
||||
|
||||
SELECT register_migration_script('201709181100_Ticket_1008477.sql') FROM dual
|
||||
;
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
-- IDEMPIERE-3388
|
||||
-- Dec 14, 2017 2:58:05 PM CET
|
||||
UPDATE C_AcctSchema SET CostingMethod='A',Updated=TO_DATE('2017-12-14 14:58:05','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE C_AcctSchema_ID=101
|
||||
;
|
||||
|
||||
-- Dec 14, 2017 2:58:14 PM CET
|
||||
UPDATE M_CostElement SET IsActive='N',Updated=TO_DATE('2017-12-14 14:58:14','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE M_CostElement_ID=104
|
||||
;
|
||||
|
||||
SELECT register_migration_script('201712141459_IDEMPIERE-3388.sql') FROM dual
|
||||
;
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
-- Fix help of form Merge Entities wrongly formatted breaking the wiki manual
|
||||
-- Dec 15, 2017 1:49:32 PM CET
|
||||
UPDATE AD_Form SET Help='<i>Dangerous - Please are aware of what you are doing!</i>
|
||||
All instances of the From entity (e.g. Customer A) are changed to the To entity (e.g. Customer B).
|
||||
The From entity (e.g. Customer A) is deleted.
|
||||
<p><b>There is NO undo nor trace ! Please do a backup first</b> Please be aware that you may be changing history records (e.g. invoices, etc.) ! </p>
|
||||
<p><b>Side effects:</b> Merging Products are likely to distort product costs; Merging Business Partners may result in incorrect open item balance. Check with support on remedies.</p>
|
||||
<p><b>Restrictions:</b> Accounting and Inventory conflicts are not resolved in this version.</p>',Updated=TO_DATE('2017-12-15 13:49:32','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Form_ID=112
|
||||
;
|
||||
|
||||
SELECT register_migration_script('201712151351_MinorHelpFix.sql') FROM dual
|
||||
;
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
-- IDEMPIERE-1721 Window Position, tab Remuneration, refers to a disabled window
|
||||
-- Dec 16, 2017 10:04:11 AM CET
|
||||
UPDATE AD_Window SET IsActive='Y', IsBetaFunctionality='N',Updated=TO_DATE('2017-12-16 10:04:11','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Window_ID=353
|
||||
;
|
||||
|
||||
-- Dec 16, 2017 10:04:11 AM CET
|
||||
UPDATE AD_Menu SET Name='Remuneration', Description='Maintain Remuneration', IsActive='Y',Updated=TO_DATE('2017-12-16 10:04:11','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Menu_ID=532
|
||||
;
|
||||
|
||||
SELECT register_migration_script('201712161006_IDEMPIERE-1721.sql') FROM dual
|
||||
;
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
-- IDEMPIERE-3358 Dictionary fixes
|
||||
-- Dec 16, 2017 10:22:29 AM CET
|
||||
UPDATE AD_Field SET IsReadOnly='N', AD_Reference_Value_ID=NULL, AD_Val_Rule_ID=NULL, IsToolbarButton=NULL,Updated=TO_DATE('2017-12-16 10:22:29','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=202750
|
||||
;
|
||||
|
||||
-- Dec 16, 2017 10:22:42 AM CET
|
||||
UPDATE AD_Field SET IsReadOnly='N', AD_Reference_Value_ID=NULL, AD_Val_Rule_ID=NULL, IsToolbarButton=NULL,Updated=TO_DATE('2017-12-16 10:22:42','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=202776
|
||||
;
|
||||
|
||||
SELECT register_migration_script('201712161023_IDEMPIERE-3358.sql') FROM dual
|
||||
;
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
-- Sep 18, 2017 12:37:19 PM GMT+08:00
|
||||
-- 1008477 List on Position field in Lead window is blank even if there are position options configured.
|
||||
UPDATE AD_Val_Rule SET Code='((C_Job.IsEmployee=(SELECT IsEmployee FROM C_BPartner WHERE C_BPartner_ID=@C_BPartner_ID:0@)) OR (C_Job.IsEmployee=''N'' AND @C_BPartner_ID:0@=0))',Updated=TO_TIMESTAMP('2017-09-18 12:37:19','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Val_Rule_ID=243
|
||||
;
|
||||
|
||||
SELECT register_migration_script('201709181100_Ticket_1008477.sql') FROM dual
|
||||
;
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
-- IDEMPIERE-3388
|
||||
-- Dec 14, 2017 2:58:05 PM CET
|
||||
UPDATE C_AcctSchema SET CostingMethod='A',Updated=TO_TIMESTAMP('2017-12-14 14:58:05','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE C_AcctSchema_ID=101
|
||||
;
|
||||
|
||||
-- Dec 14, 2017 2:58:14 PM CET
|
||||
UPDATE M_CostElement SET IsActive='N',Updated=TO_TIMESTAMP('2017-12-14 14:58:14','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE M_CostElement_ID=104
|
||||
;
|
||||
|
||||
SELECT register_migration_script('201712141459_IDEMPIERE-3388.sql') FROM dual
|
||||
;
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
-- Fix help of form Merge Entities wrongly formatted breaking the wiki manual
|
||||
-- Dec 15, 2017 1:49:32 PM CET
|
||||
UPDATE AD_Form SET Help='<i>Dangerous - Please are aware of what you are doing!</i>
|
||||
All instances of the From entity (e.g. Customer A) are changed to the To entity (e.g. Customer B).
|
||||
The From entity (e.g. Customer A) is deleted.
|
||||
<p><b>There is NO undo nor trace ! Please do a backup first</b> Please be aware that you may be changing history records (e.g. invoices, etc.) ! </p>
|
||||
<p><b>Side effects:</b> Merging Products are likely to distort product costs; Merging Business Partners may result in incorrect open item balance. Check with support on remedies.</p>
|
||||
<p><b>Restrictions:</b> Accounting and Inventory conflicts are not resolved in this version.</p>',Updated=TO_TIMESTAMP('2017-12-15 13:49:32','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Form_ID=112
|
||||
;
|
||||
|
||||
SELECT register_migration_script('201712151351_MinorHelpFix.sql') FROM dual
|
||||
;
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
-- IDEMPIERE-1721 Window Position, tab Remuneration, refers to a disabled window
|
||||
-- Dec 16, 2017 10:04:11 AM CET
|
||||
UPDATE AD_Window SET IsActive='Y', IsBetaFunctionality='N',Updated=TO_TIMESTAMP('2017-12-16 10:04:11','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Window_ID=353
|
||||
;
|
||||
|
||||
-- Dec 16, 2017 10:04:11 AM CET
|
||||
UPDATE AD_Menu SET Name='Remuneration', Description='Maintain Remuneration', IsActive='Y',Updated=TO_TIMESTAMP('2017-12-16 10:04:11','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Menu_ID=532
|
||||
;
|
||||
|
||||
SELECT register_migration_script('201712161006_IDEMPIERE-1721.sql') FROM dual
|
||||
;
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
-- IDEMPIERE-3358 Dictionary fixes
|
||||
-- Dec 16, 2017 10:22:29 AM CET
|
||||
UPDATE AD_Field SET IsReadOnly='N', AD_Reference_Value_ID=NULL, AD_Val_Rule_ID=NULL, IsToolbarButton=NULL,Updated=TO_TIMESTAMP('2017-12-16 10:22:29','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=202750
|
||||
;
|
||||
|
||||
-- Dec 16, 2017 10:22:42 AM CET
|
||||
UPDATE AD_Field SET IsReadOnly='N', AD_Reference_Value_ID=NULL, AD_Val_Rule_ID=NULL, IsToolbarButton=NULL,Updated=TO_TIMESTAMP('2017-12-16 10:22:42','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=202776
|
||||
;
|
||||
|
||||
SELECT register_migration_script('201712161023_IDEMPIERE-3358.sql') FROM dual
|
||||
;
|
||||
|
|
@ -20,6 +20,8 @@ package org.adempiere.model;
|
|||
import java.math.BigDecimal;
|
||||
import java.util.Properties;
|
||||
|
||||
import org.adempiere.base.Core;
|
||||
import org.adempiere.base.IProductPricing;
|
||||
import org.compiere.model.CalloutEngine;
|
||||
import org.compiere.model.GridField;
|
||||
import org.compiere.model.GridTab;
|
||||
|
@ -30,7 +32,6 @@ import org.compiere.model.MInvoice;
|
|||
import org.compiere.model.MInvoiceLine;
|
||||
import org.compiere.model.MOrder;
|
||||
import org.compiere.model.MOrderLine;
|
||||
import org.compiere.model.MProductPricing;
|
||||
import org.compiere.model.MRMA;
|
||||
import org.compiere.model.MRMALine;
|
||||
import org.compiere.model.Query;
|
||||
|
@ -146,7 +147,8 @@ public class CalloutRMA extends CalloutEngine {
|
|||
return "";
|
||||
|
||||
MRMA rma = new MRMA(ctx, M_RMA_ID, null);
|
||||
MProductPricing pp = new MProductPricing(M_Product_ID, rma.getC_BPartner_ID(), Env.ONE, rma.isSOTrx(), null);
|
||||
IProductPricing pp = Core.getProductPricing();
|
||||
pp.setInitialValues(M_Product_ID, rma.getC_BPartner_ID(), Env.ONE, rma.isSOTrx(), null);
|
||||
int taxId = 0;
|
||||
int precision = 0;
|
||||
|
||||
|
|
|
@ -24,6 +24,9 @@ import java.sql.Timestamp;
|
|||
import java.util.Properties;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import org.adempiere.base.Core;
|
||||
import org.adempiere.base.IProductPricing;
|
||||
import org.adempiere.model.GridTabWrapper;
|
||||
import org.compiere.util.CLogger;
|
||||
import org.compiere.util.DB;
|
||||
import org.compiere.util.DisplayType;
|
||||
|
@ -87,9 +90,9 @@ public class CalloutInvoice extends CalloutEngine
|
|||
Env.setContext(ctx, WindowNo, "DocBaseType", s);
|
||||
// AP Check & AR Credit Memo
|
||||
if (s.startsWith("AP"))
|
||||
mTab.setValue("PaymentRule", "S"); // Check
|
||||
mTab.setValue("PaymentRule", X_C_Invoice.PAYMENTRULE_Check);
|
||||
else if (s.endsWith("C"))
|
||||
mTab.setValue("PaymentRule", "P"); // OnCredit
|
||||
mTab.setValue("PaymentRule", X_C_Invoice.PAYMENTRULE_OnCredit);
|
||||
}
|
||||
}
|
||||
catch (SQLException e)
|
||||
|
@ -183,13 +186,9 @@ public class CalloutInvoice extends CalloutEngine
|
|||
// PaymentRule
|
||||
String s = rs.getString(IsSOTrx ? "PaymentRule" : "PaymentRulePO");
|
||||
if (s != null && s.length() != 0)
|
||||
{
|
||||
if (Env.getContext(ctx, WindowNo, "DocBaseType").endsWith("C")) // Credits are Payment Term
|
||||
s = "P";
|
||||
else if (IsSOTrx && (s.equals("S") || s.equals("U"))) // No Check/Transfer for SO_Trx
|
||||
s = "P"; // Payment Term
|
||||
mTab.setValue("PaymentRule", s);
|
||||
}
|
||||
if (Env.getContext(ctx, WindowNo, "DocBaseType").endsWith("C")) // Credits are Payment Term
|
||||
s = X_C_Invoice.PAYMENTRULE_OnCredit;
|
||||
// Payment Term
|
||||
ii = new Integer(rs.getInt(IsSOTrx ? "C_PaymentTerm_ID" : "PO_PaymentTerm_ID"));
|
||||
if (!rs.wasNull())
|
||||
|
@ -324,10 +323,9 @@ public class CalloutInvoice extends CalloutEngine
|
|||
mTab.setValue("M_AttributeSetInstance_ID", null);
|
||||
|
||||
/***** Price Calculation see also qty ****/
|
||||
boolean IsSOTrx = Env.getContext(ctx, WindowNo, "IsSOTrx").equals("Y");
|
||||
int C_BPartner_ID = Env.getContextAsInt(ctx, WindowNo, "C_BPartner_ID");
|
||||
BigDecimal Qty = (BigDecimal)mTab.getValue("QtyInvoiced");
|
||||
MProductPricing pp = new MProductPricing (M_Product_ID.intValue(), C_BPartner_ID, Qty, IsSOTrx, null);
|
||||
I_C_InvoiceLine invoiceLine = GridTabWrapper.create(mTab, I_C_InvoiceLine.class);
|
||||
IProductPricing pp = Core.getProductPricing();
|
||||
pp.setInvoiceLine(invoiceLine, null);
|
||||
//
|
||||
int M_PriceList_ID = Env.getContextAsInt(ctx, WindowNo, "M_PriceList_ID");
|
||||
pp.setM_PriceList_ID(M_PriceList_ID);
|
||||
|
@ -350,8 +348,6 @@ public class CalloutInvoice extends CalloutEngine
|
|||
}
|
||||
|
||||
pp.setM_PriceList_Version_ID(M_PriceList_Version_ID);
|
||||
Timestamp date = Env.getContextAsDate(ctx, WindowNo, "DateInvoiced");
|
||||
pp.setPriceDate(date);
|
||||
//
|
||||
mTab.setValue("PriceList", pp.getPriceList());
|
||||
mTab.setValue("PriceLimit", pp.getPriceLimit());
|
||||
|
@ -557,19 +553,18 @@ public class CalloutInvoice extends CalloutEngine
|
|||
|| mField.getColumnName().equals("M_Product_ID"))
|
||||
&& !"N".equals(Env.getContext(ctx, WindowNo, "DiscountSchema")))
|
||||
{
|
||||
int C_BPartner_ID = Env.getContextAsInt(ctx, WindowNo, "C_BPartner_ID");
|
||||
if (mField.getColumnName().equals("QtyEntered"))
|
||||
QtyInvoiced = MUOMConversion.convertProductFrom (ctx, M_Product_ID,
|
||||
C_UOM_To_ID, QtyEntered);
|
||||
if (QtyInvoiced == null)
|
||||
QtyInvoiced = QtyEntered;
|
||||
boolean IsSOTrx = Env.getContext(ctx, WindowNo, "IsSOTrx").equals("Y");
|
||||
MProductPricing pp = new MProductPricing (M_Product_ID, C_BPartner_ID, QtyInvoiced, IsSOTrx, null);
|
||||
I_C_InvoiceLine invoiceLine = GridTabWrapper.create(mTab, I_C_InvoiceLine.class);
|
||||
IProductPricing pp = Core.getProductPricing();
|
||||
pp.setInvoiceLine(invoiceLine, null);
|
||||
pp.setM_PriceList_ID(M_PriceList_ID);
|
||||
pp.setQty(QtyInvoiced);
|
||||
int M_PriceList_Version_ID = Env.getContextAsInt(ctx, WindowNo, "M_PriceList_Version_ID");
|
||||
pp.setM_PriceList_Version_ID(M_PriceList_Version_ID);
|
||||
Timestamp date = (Timestamp)mTab.getValue("DateInvoiced");
|
||||
pp.setPriceDate(date);
|
||||
//
|
||||
PriceEntered = MUOMConversion.convertProductFrom (ctx, M_Product_ID,
|
||||
C_UOM_To_ID, pp.getPriceStd());
|
||||
|
@ -842,10 +837,9 @@ public class CalloutInvoice extends CalloutEngine
|
|||
}
|
||||
|
||||
/***** Price Calculation see also qty ****/
|
||||
int C_BPartner_ID = Env.getContextAsInt(ctx, WindowNo, "C_BPartner_ID");
|
||||
BigDecimal Qty = (BigDecimal)mTab.getValue("QtyOrdered");
|
||||
boolean IsSOTrx = Env.getContext(ctx, WindowNo, "IsSOTrx").equals("Y");
|
||||
MProductPricing pp = new MProductPricing (M_Product_ID.intValue(), C_BPartner_ID, Qty, IsSOTrx, null);
|
||||
I_C_InvoiceLine invoiceLine = GridTabWrapper.create(mTab, I_C_InvoiceLine.class);
|
||||
IProductPricing pp = Core.getProductPricing();
|
||||
pp.setInvoiceLine(invoiceLine, null);
|
||||
//
|
||||
int M_PriceList_ID = Env.getContextAsInt(ctx, WindowNo, "M_PriceList_ID");
|
||||
pp.setM_PriceList_ID(M_PriceList_ID);
|
||||
|
@ -866,7 +860,6 @@ public class CalloutInvoice extends CalloutEngine
|
|||
Env.setContext(ctx, WindowNo, "M_PriceList_Version_ID", M_PriceList_Version_ID );
|
||||
}
|
||||
pp.setM_PriceList_Version_ID(M_PriceList_Version_ID);
|
||||
pp.setPriceDate(orderDate);
|
||||
//
|
||||
Env.setContext(ctx, WindowNo, "EnforcePriceLimit", pp.isEnforcePriceLimit() ? "Y" : "N");
|
||||
Env.setContext(ctx, WindowNo, "DiscountSchema", pp.isDiscountSchema() ? "Y" : "N");
|
||||
|
|
|
@ -105,13 +105,9 @@ public class CalloutInvoiceBatch extends CalloutEngine
|
|||
// PaymentRule
|
||||
String s = rs.getString(IsSOTrx ? "PaymentRule" : "PaymentRulePO");
|
||||
if (s != null && s.length() != 0)
|
||||
{
|
||||
if (Env.getContext(ctx, WindowNo, "DocBaseType").endsWith("C")) // Credits are Payment Term
|
||||
s = "P";
|
||||
else if (IsSOTrx && (s.equals("S") || s.equals("U"))) // No Check/Transfer for SO_Trx
|
||||
s = "P"; // Payment Term
|
||||
// mTab.setValue("PaymentRule", s);
|
||||
}
|
||||
mTab.setValue("PaymentRule", s);
|
||||
if (Env.getContext(ctx, WindowNo, "DocBaseType").endsWith("C")) // Credits are Payment Term
|
||||
s = X_C_Invoice.PAYMENTRULE_OnCredit;
|
||||
// Payment Term
|
||||
Integer ii = new Integer(rs.getInt(IsSOTrx ? "C_PaymentTerm_ID" : "PO_PaymentTerm_ID"));
|
||||
if (!rs.wasNull())
|
||||
|
|
|
@ -24,6 +24,9 @@ import java.sql.Timestamp;
|
|||
import java.util.Properties;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import org.adempiere.base.Core;
|
||||
import org.adempiere.base.IProductPricing;
|
||||
import org.adempiere.model.GridTabWrapper;
|
||||
import org.compiere.util.CLogger;
|
||||
import org.compiere.util.DB;
|
||||
import org.compiere.util.DisplayType;
|
||||
|
@ -181,13 +184,7 @@ public class CalloutOrder extends CalloutEngine
|
|||
// PaymentRule
|
||||
String s = rs.getString(IsSOTrx ? "PaymentRule" : "PaymentRulePO");
|
||||
if (s != null && s.length() != 0)
|
||||
{
|
||||
if (IsSOTrx && (s.equals("B") || s.equals("S") || s.equals("U"))) // No Cash/Check/Transfer for SO_Trx
|
||||
s = "P"; // Payment Term
|
||||
if (!IsSOTrx && (s.equals("B"))) // No Cash for PO_Trx
|
||||
s = "P"; // Payment Term
|
||||
mTab.setValue("PaymentRule", s);
|
||||
}
|
||||
// Payment Term
|
||||
Integer ii =new Integer(rs.getInt(IsSOTrx ? "C_PaymentTerm_ID" : "PO_PaymentTerm_ID"));
|
||||
if (!rs.wasNull())
|
||||
|
@ -401,13 +398,7 @@ public class CalloutOrder extends CalloutEngine
|
|||
// PaymentRule
|
||||
s = rs.getString(IsSOTrx ? "PaymentRule" : "PaymentRulePO");
|
||||
if (s != null && s.length() != 0)
|
||||
{
|
||||
if (s.equals("B")) // No Cache in Non POS
|
||||
s = "P";
|
||||
if (IsSOTrx && (s.equals("S") || s.equals("U"))) // No Check/Transfer for SO_Trx
|
||||
s = "P"; // Payment Term
|
||||
mTab.setValue("PaymentRule", s);
|
||||
}
|
||||
// Payment Term
|
||||
ii = new Integer(rs.getInt(IsSOTrx ? "C_PaymentTerm_ID" : "PO_PaymentTerm_ID"));
|
||||
if (!rs.wasNull())
|
||||
|
@ -589,13 +580,7 @@ public class CalloutOrder extends CalloutEngine
|
|||
// PaymentRule
|
||||
s = rs.getString(IsSOTrx ? "PaymentRule" : "PaymentRulePO");
|
||||
if (s != null && s.length() != 0)
|
||||
{
|
||||
if (s.equals("B")) // No Cache in Non POS
|
||||
s = "P";
|
||||
if (IsSOTrx && (s.equals("S") || s.equals("U"))) // No Check/Transfer for SO_Trx
|
||||
s = "P"; // Payment Term
|
||||
mTab.setValue("PaymentRule", s);
|
||||
}
|
||||
// Payment Term
|
||||
ii = new Integer(rs.getInt(IsSOTrx ? "C_PaymentTerm_ID" : "PO_PaymentTerm_ID"));
|
||||
if (!rs.wasNull())
|
||||
|
@ -797,10 +782,9 @@ public class CalloutOrder extends CalloutEngine
|
|||
mTab.setValue("M_AttributeSetInstance_ID", null);
|
||||
|
||||
/***** Price Calculation see also qty ****/
|
||||
int C_BPartner_ID = Env.getContextAsInt(ctx, WindowNo, "C_BPartner_ID");
|
||||
BigDecimal Qty = (BigDecimal)mTab.getValue("QtyOrdered");
|
||||
boolean IsSOTrx = Env.getContext(ctx, WindowNo, "IsSOTrx").equals("Y");
|
||||
MProductPricing pp = new MProductPricing (M_Product_ID.intValue(), C_BPartner_ID, Qty, IsSOTrx, null);
|
||||
I_C_OrderLine orderLine = GridTabWrapper.create(mTab, I_C_OrderLine.class);
|
||||
IProductPricing pp = Core.getProductPricing();
|
||||
pp.setOrderLine(orderLine, null);
|
||||
//
|
||||
int M_PriceList_ID = Env.getContextAsInt(ctx, WindowNo, "M_PriceList_ID");
|
||||
pp.setM_PriceList_ID(M_PriceList_ID);
|
||||
|
@ -821,7 +805,6 @@ public class CalloutOrder extends CalloutEngine
|
|||
Env.setContext(ctx, WindowNo, "M_PriceList_Version_ID", M_PriceList_Version_ID );
|
||||
}
|
||||
pp.setM_PriceList_Version_ID(M_PriceList_Version_ID);
|
||||
pp.setPriceDate(orderDate);
|
||||
//
|
||||
mTab.setValue("PriceList", pp.getPriceList());
|
||||
mTab.setValue("PriceLimit", pp.getPriceLimit());
|
||||
|
@ -1089,19 +1072,18 @@ public class CalloutOrder extends CalloutEngine
|
|||
|| mField.getColumnName().equals("M_Product_ID"))
|
||||
&& !"N".equals(Env.getContext(ctx, WindowNo, "DiscountSchema")))
|
||||
{
|
||||
int C_BPartner_ID = Env.getContextAsInt(ctx, WindowNo, "C_BPartner_ID");
|
||||
if (mField.getColumnName().equals("QtyEntered"))
|
||||
QtyOrdered = MUOMConversion.convertProductFrom (ctx, M_Product_ID,
|
||||
C_UOM_To_ID, QtyEntered);
|
||||
if (QtyOrdered == null)
|
||||
QtyOrdered = QtyEntered;
|
||||
boolean IsSOTrx = Env.getContext(ctx, WindowNo, "IsSOTrx").equals("Y");
|
||||
MProductPricing pp = new MProductPricing (M_Product_ID, C_BPartner_ID, QtyOrdered, IsSOTrx, null);
|
||||
I_C_OrderLine orderLine = GridTabWrapper.create(mTab, I_C_OrderLine.class);
|
||||
IProductPricing pp = Core.getProductPricing();
|
||||
pp.setOrderLine(orderLine, null);
|
||||
pp.setQty(QtyOrdered);
|
||||
pp.setM_PriceList_ID(M_PriceList_ID);
|
||||
int M_PriceList_Version_ID = Env.getContextAsInt(ctx, WindowNo, "M_PriceList_Version_ID");
|
||||
pp.setM_PriceList_Version_ID(M_PriceList_Version_ID);
|
||||
Timestamp date = (Timestamp)mTab.getValue("DateOrdered");
|
||||
pp.setPriceDate(date);
|
||||
//
|
||||
PriceEntered = MUOMConversion.convertProductFrom (ctx, M_Product_ID,
|
||||
C_UOM_To_ID, pp.getPriceStd());
|
||||
|
@ -1422,10 +1404,9 @@ public class CalloutOrder extends CalloutEngine
|
|||
}
|
||||
|
||||
/***** Price Calculation see also qty ****/
|
||||
int C_BPartner_ID = Env.getContextAsInt(ctx, WindowNo, "C_BPartner_ID");
|
||||
BigDecimal Qty = (BigDecimal)mTab.getValue("QtyOrdered");
|
||||
boolean IsSOTrx = Env.getContext(ctx, WindowNo, "IsSOTrx").equals("Y");
|
||||
MProductPricing pp = new MProductPricing (M_Product_ID.intValue(), C_BPartner_ID, Qty, IsSOTrx, null);
|
||||
I_C_OrderLine orderLine = GridTabWrapper.create(mTab, I_C_OrderLine.class);
|
||||
IProductPricing pp = Core.getProductPricing();
|
||||
pp.setOrderLine(orderLine, null);
|
||||
//
|
||||
int M_PriceList_ID = Env.getContextAsInt(ctx, WindowNo, "M_PriceList_ID");
|
||||
pp.setM_PriceList_ID(M_PriceList_ID);
|
||||
|
@ -1446,7 +1427,6 @@ public class CalloutOrder extends CalloutEngine
|
|||
Env.setContext(ctx, WindowNo, "M_PriceList_Version_ID", M_PriceList_Version_ID );
|
||||
}
|
||||
pp.setM_PriceList_Version_ID(M_PriceList_Version_ID);
|
||||
pp.setPriceDate(orderDate);
|
||||
//
|
||||
Env.setContext(ctx, WindowNo, "EnforcePriceLimit", pp.isEnforcePriceLimit() ? "Y" : "N");
|
||||
Env.setContext(ctx, WindowNo, "DiscountSchema", pp.isDiscountSchema() ? "Y" : "N");
|
||||
|
|
|
@ -21,12 +21,13 @@ import java.sql.Timestamp;
|
|||
import java.util.Properties;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import org.adempiere.base.Core;
|
||||
import org.adempiere.base.IProductPricing;
|
||||
import org.adempiere.model.GridTabWrapper;
|
||||
import org.compiere.util.Env;
|
||||
|
||||
/**
|
||||
* Requisition Callouts
|
||||
*
|
||||
* @author Jorg Janke
|
||||
* @version $Id: CalloutRequisition.java,v 1.3 2006/07/30 00:51:05 jjanke Exp $
|
||||
*/
|
||||
|
@ -47,7 +48,7 @@ public class CalloutRequisition extends CalloutEngine
|
|||
Integer M_Product_ID = (Integer)value;
|
||||
if (M_Product_ID == null || M_Product_ID.intValue() == 0)
|
||||
return "";
|
||||
final I_M_Requisition req = GridTabWrapper.create(mTab, I_M_Requisition.class);
|
||||
final I_M_Requisition req = GridTabWrapper.create(mTab.getParentTab(), I_M_Requisition.class);
|
||||
final I_M_RequisitionLine line = GridTabWrapper.create(mTab, I_M_RequisitionLine.class);
|
||||
setPrice(ctx, WindowNo, req, line);
|
||||
MProduct product = MProduct.get(ctx, M_Product_ID);
|
||||
|
@ -71,7 +72,7 @@ public class CalloutRequisition extends CalloutEngine
|
|||
if (isCalloutActive() || value == null)
|
||||
return "";
|
||||
|
||||
final I_M_Requisition req = GridTabWrapper.create(mTab, I_M_Requisition.class);
|
||||
final I_M_Requisition req = GridTabWrapper.create(mTab.getParentTab(), I_M_Requisition.class);
|
||||
final I_M_RequisitionLine line = GridTabWrapper.create(mTab, I_M_RequisitionLine.class);
|
||||
// Qty changed - recalc price
|
||||
if (mField.getColumnName().equals(I_M_RequisitionLine.COLUMNNAME_Qty)
|
||||
|
@ -100,7 +101,8 @@ public class CalloutRequisition extends CalloutEngine
|
|||
int C_BPartner_ID = line.getC_BPartner_ID();
|
||||
BigDecimal Qty = line.getQty();
|
||||
boolean isSOTrx = false;
|
||||
MProductPricing pp = new MProductPricing (line.getM_Product_ID(), C_BPartner_ID, Qty, isSOTrx, null);
|
||||
IProductPricing pp = Core.getProductPricing();
|
||||
pp.setInitialValues(line.getM_Product_ID(), C_BPartner_ID, Qty, isSOTrx, null);
|
||||
//
|
||||
int M_PriceList_ID = req.getM_PriceList_ID();
|
||||
pp.setM_PriceList_ID(M_PriceList_ID);
|
||||
|
|
|
@ -127,7 +127,7 @@ public class AcceptCtxHelpSuggestion extends SvrProcess {
|
|||
} else {
|
||||
StringBuilder insert = new StringBuilder("Insert Into AD_CtxHelpMsg_Trl (AD_Client_ID, AD_Org_ID, AD_CtxHelpMsg_ID, IsActive, IsTranslated, AD_Language, MsgText,");
|
||||
insert.append("Created, CreatedBy, Updated, UpdatedBy, AD_CtxHelpMsg_Trl_UU)")
|
||||
.append(" Values (?, ?, ?, 'Y', 'N', ?, ?, now(), ?, now(), ?, generate_uuid()) ");
|
||||
.append(" Values (?, ?, ?, 'Y', 'N', ?, ?, sysdate, ?, sysdate, ?, generate_uuid()) ");
|
||||
List<Object> params = new ArrayList<Object>();
|
||||
params.add(AD_Client_ID);
|
||||
params.add(0);
|
||||
|
|
|
@ -19,7 +19,8 @@ package org.compiere.process;
|
|||
|
||||
import java.util.logging.Level;
|
||||
|
||||
import org.compiere.model.MProductPricing;
|
||||
import org.adempiere.base.Core;
|
||||
import org.adempiere.base.IProductPricing;
|
||||
import org.compiere.model.MProject;
|
||||
import org.compiere.model.MProjectLine;
|
||||
import org.compiere.util.Msg;
|
||||
|
@ -71,8 +72,9 @@ public class ProjectLinePricing extends SvrProcess
|
|||
throw new IllegalArgumentException("No PriceList");
|
||||
//
|
||||
boolean isSOTrx = true;
|
||||
MProductPricing pp = new MProductPricing (projectLine.getM_Product_ID(),
|
||||
project.getC_BPartner_ID(), projectLine.getPlannedQty(), isSOTrx, get_TrxName());
|
||||
IProductPricing pp = Core.getProductPricing();
|
||||
pp.setInitialValues(projectLine.getM_Product_ID(), project.getC_BPartner_ID(),
|
||||
projectLine.getPlannedQty(), isSOTrx, get_TrxName());
|
||||
pp.setM_PriceList_ID(project.getM_PriceList_ID());
|
||||
pp.setPriceDate(project.getDateContract());
|
||||
//
|
||||
|
|
|
@ -101,7 +101,10 @@ Import-Package: com.sun.mail.smtp;version="1.5",
|
|||
org.osgi.framework,
|
||||
org.osgi.service.cm;version="1.3.0",
|
||||
org.osgi.service.component;version="1.1.0",
|
||||
org.osgi.service.component.runtime;version="1.3.0",
|
||||
org.osgi.service.component.runtime.dto;version="1.3.0",
|
||||
org.osgi.service.event;version="1.2.0",
|
||||
org.osgi.util.promise;version="1.0.0",
|
||||
org.osgi.util.tracker;version="1.5.0",
|
||||
org.restlet,
|
||||
org.restlet.data,
|
||||
|
@ -118,4 +121,5 @@ Require-Bundle: org.eclipse.equinox.app;bundle-version="0.0.0",
|
|||
com.itextpdf;bundle-version="0.0.0",
|
||||
net.sf.supercsv.super-csv;bundle-version="0.0.0",
|
||||
bcprov;bundle-version="1.54.0",
|
||||
groovy-all;bundle-version="[2.4.7,2.5.0)"
|
||||
groovy-all;bundle-version="[2.4.7,2.5.0)",
|
||||
org.krysalis.barcode4j;bundle-version="2.1.0"
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.adempiere.base.DefaultProductPricingFactory">
|
||||
<implementation class="org.adempiere.base.DefaultProductPricingFactory"/>
|
||||
<service>
|
||||
<provide interface="org.adempiere.base.IProductPricingFactory"/>
|
||||
</service>
|
||||
</scr:component>
|
|
@ -22,6 +22,7 @@ bin.includes = META-INF/,\
|
|||
OSGI-INF/defaultaddressvalidationfactory.xml,\
|
||||
OSGI-INF/defaulttaxproviderfactory.xml,\
|
||||
OSGI-INF/addressvalidationeventhandler.xml,\
|
||||
OSGI-INF/defaultproductpricingfactory.xml\
|
||||
schema/,\
|
||||
bsh-2.0b6.jar,\
|
||||
commons-validator-1.6.jar
|
||||
|
|
|
@ -0,0 +1,141 @@
|
|||
/******************************************************************************
|
||||
* Copyright (C) 2017 Diego Ruiz *
|
||||
* Copyright (C) 2017 Bx Service GmbH *
|
||||
* 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.adempiere.base;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.sql.Timestamp;
|
||||
|
||||
import org.compiere.model.I_C_InvoiceLine;
|
||||
import org.compiere.model.I_C_OrderLine;
|
||||
import org.compiere.model.I_C_ProjectLine;
|
||||
import org.compiere.model.I_M_RMALine;
|
||||
import org.compiere.model.I_M_RequisitionLine;
|
||||
import org.compiere.util.Env;
|
||||
|
||||
public abstract class AbstractProductPricing implements IProductPricing {
|
||||
|
||||
protected int m_M_Product_ID;
|
||||
protected int m_C_BPartner_ID;
|
||||
protected BigDecimal m_Qty = Env.ONE;
|
||||
protected boolean m_isSOTrx = true;
|
||||
protected String trxName = null;
|
||||
|
||||
protected int m_M_PriceList_Version_ID = 0;
|
||||
protected int m_M_PriceList_ID = 0;
|
||||
protected Timestamp m_PriceDate;
|
||||
|
||||
public AbstractProductPricing() {}
|
||||
|
||||
@Override
|
||||
public void setInitialValues(int M_Product_ID, int C_BPartner_ID, BigDecimal qty, boolean isSOTrx, String trxName) {
|
||||
this.trxName=trxName;
|
||||
m_M_Product_ID = M_Product_ID;
|
||||
m_C_BPartner_ID = C_BPartner_ID;
|
||||
|
||||
if (qty != null && Env.ZERO.compareTo(qty) != 0)
|
||||
m_Qty = qty;
|
||||
m_isSOTrx = isSOTrx;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getM_Product_ID() {
|
||||
return m_M_Product_ID;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getM_PriceList_ID() {
|
||||
return m_M_PriceList_ID;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setM_PriceList_ID(int M_PriceList_ID) {
|
||||
m_M_PriceList_ID = M_PriceList_ID;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setM_PriceList_Version_ID(int M_PriceList_Version_ID) {
|
||||
m_M_PriceList_Version_ID = M_PriceList_Version_ID;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setQty(BigDecimal qty) {
|
||||
m_Qty = qty;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Timestamp getPriceDate() {
|
||||
return m_PriceDate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPriceDate(Timestamp priceDate) {
|
||||
m_PriceDate = priceDate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setOrderLine(I_C_OrderLine orderLine, String trxName) {
|
||||
m_M_Product_ID = orderLine.getM_Product_ID();
|
||||
m_C_BPartner_ID = orderLine.getC_BPartner_ID();
|
||||
BigDecimal qty = orderLine.getQtyOrdered();
|
||||
if (qty != null && Env.ZERO.compareTo(qty) != 0)
|
||||
m_Qty = qty;
|
||||
m_isSOTrx = orderLine.getC_Order().isSOTrx();
|
||||
m_PriceDate = orderLine.getDateOrdered();
|
||||
this.trxName = trxName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setInvoiceLine(I_C_InvoiceLine invoiceLine, String trxName) {
|
||||
m_M_Product_ID = invoiceLine.getM_Product_ID();
|
||||
m_C_BPartner_ID = invoiceLine.getC_Invoice().getC_BPartner_ID();
|
||||
BigDecimal qty = invoiceLine.getQtyInvoiced() != null ?
|
||||
invoiceLine.getQtyInvoiced() : invoiceLine.getQtyEntered();
|
||||
if (qty != null && Env.ZERO.compareTo(qty) != 0)
|
||||
m_Qty = qty;
|
||||
m_isSOTrx = invoiceLine.getC_Invoice().isSOTrx();
|
||||
m_PriceDate = invoiceLine.getC_Invoice().getDateInvoiced();
|
||||
this.trxName = trxName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setProjectLine(I_C_ProjectLine projectLine, String trxName) {
|
||||
m_M_Product_ID = projectLine.getM_Product_ID();
|
||||
m_C_BPartner_ID = projectLine.getC_Project().getC_BPartner_ID();
|
||||
BigDecimal qty = projectLine.getPlannedQty();
|
||||
if (qty != null && Env.ZERO.compareTo(qty) != 0)
|
||||
m_Qty = qty;
|
||||
m_isSOTrx = true;
|
||||
this.trxName = trxName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRequisitionLine(I_M_RequisitionLine reqLine, String trxName) {
|
||||
m_M_Product_ID = reqLine.getM_Product_ID();
|
||||
m_C_BPartner_ID = reqLine.getC_BPartner_ID();
|
||||
BigDecimal qty = reqLine.getQty();
|
||||
if (qty != null && Env.ZERO.compareTo(qty) != 0)
|
||||
m_Qty = qty;
|
||||
m_isSOTrx = false;
|
||||
this.trxName = trxName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRMALine(I_M_RMALine rmaLine, String trxName) {
|
||||
m_M_Product_ID = rmaLine.getM_Product_ID();
|
||||
m_C_BPartner_ID = rmaLine.getM_RMA().getC_BPartner_ID();
|
||||
m_Qty = Env.ONE;
|
||||
m_isSOTrx = rmaLine.getM_RMA().isSOTrx();
|
||||
this.trxName = trxName;
|
||||
}
|
||||
}
|
|
@ -19,10 +19,9 @@ import java.io.FileNotFoundException;
|
|||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.felix.scr.Component;
|
||||
import org.apache.felix.scr.ScrService;
|
||||
import org.compiere.util.Ini;
|
||||
import org.compiere.util.Util;
|
||||
import org.osgi.framework.BundleContext;
|
||||
|
@ -30,6 +29,8 @@ import org.osgi.framework.ServiceEvent;
|
|||
import org.osgi.framework.ServiceListener;
|
||||
import org.osgi.framework.ServiceReference;
|
||||
import org.osgi.service.component.ComponentConstants;
|
||||
import org.osgi.service.component.runtime.ServiceComponentRuntime;
|
||||
import org.osgi.service.component.runtime.dto.ComponentDescriptionDTO;
|
||||
|
||||
/**
|
||||
* @author hengsin
|
||||
|
@ -37,11 +38,11 @@ import org.osgi.service.component.ComponentConstants;
|
|||
*/
|
||||
public class ComponentBlackListService implements ServiceListener {
|
||||
|
||||
private ScrService scrService = null;
|
||||
private ServiceComponentRuntime scrService = null;
|
||||
private List<String> blackListComponentNames = null;
|
||||
|
||||
protected ComponentBlackListService(BundleContext context) {
|
||||
ServiceReference<ScrService> ref = context.getServiceReference(ScrService.class);
|
||||
ServiceReference<ServiceComponentRuntime> ref = context.getServiceReference(ServiceComponentRuntime.class);
|
||||
scrService = context.getService(ref);
|
||||
blackListComponentNames = new ArrayList<String>();
|
||||
retrieveBlacklistCandidates();
|
||||
|
@ -89,20 +90,20 @@ public class ComponentBlackListService implements ServiceListener {
|
|||
|
||||
private void disableComponents()
|
||||
{
|
||||
Component[] comps = scrService.getComponents();
|
||||
for (Component comp : comps) {
|
||||
if (blackListComponentNames.contains(comp.getName())) {
|
||||
comp.disable();
|
||||
Collection<ComponentDescriptionDTO> comps = scrService.getComponentDescriptionDTOs();
|
||||
for (ComponentDescriptionDTO comp : comps) {
|
||||
if (blackListComponentNames.contains(comp.name)) {
|
||||
scrService.disableComponent(comp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void disableComponent(String componentName)
|
||||
{
|
||||
Component[] comps = scrService.getComponents();
|
||||
for (Component comp : comps) {
|
||||
if (comp.getName().equals(componentName)) {
|
||||
comp.disable();
|
||||
Collection<ComponentDescriptionDTO> comps = scrService.getComponentDescriptionDTOs();
|
||||
for (ComponentDescriptionDTO comp : comps) {
|
||||
if (comp.name.equals(componentName)) {
|
||||
scrService.disableComponent(comp);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -450,4 +450,26 @@ public class Core {
|
|||
|
||||
return myPaymentExporter;
|
||||
}
|
||||
|
||||
/**
|
||||
* get ProductPricing instance
|
||||
*
|
||||
* @return instance of the IProductPricing or null
|
||||
*/
|
||||
public static IProductPricing getProductPricing() {
|
||||
|
||||
List<IProductPricingFactory> factoryList =
|
||||
Service.locator().list(IProductPricingFactory.class).getServices();
|
||||
if (factoryList != null) {
|
||||
for(IProductPricingFactory factory : factoryList) {
|
||||
IProductPricing myProductPricing = factory.newProductPricingInstance();
|
||||
if (myProductPricing != null) {
|
||||
return myProductPricing;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
package org.adempiere.base;
|
||||
|
||||
import org.compiere.model.MProductPricing;
|
||||
|
||||
public class DefaultProductPricingFactory implements IProductPricingFactory {
|
||||
|
||||
/**
|
||||
* default constructor
|
||||
*/
|
||||
public DefaultProductPricingFactory() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public AbstractProductPricing newProductPricingInstance() {
|
||||
return new MProductPricing();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,159 @@
|
|||
/******************************************************************************
|
||||
* Copyright (C) 2017 Diego Ruiz *
|
||||
* Copyright (C) 2017 Bx Service GmbH *
|
||||
* 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.adempiere.base;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.sql.Timestamp;
|
||||
|
||||
import org.compiere.model.I_C_InvoiceLine;
|
||||
import org.compiere.model.I_C_OrderLine;
|
||||
import org.compiere.model.I_C_ProjectLine;
|
||||
import org.compiere.model.I_M_RMALine;
|
||||
import org.compiere.model.I_M_RequisitionLine;
|
||||
|
||||
/**
|
||||
* Product Price Calculations
|
||||
*/
|
||||
public interface IProductPricing {
|
||||
|
||||
/**
|
||||
* Set the initial values that the old MProductPricing uses
|
||||
* for backward compatibility
|
||||
* @param M_Product_ID
|
||||
* @param C_BPartner_ID
|
||||
* @param qty
|
||||
* @param isSOTrx
|
||||
* @param trxName
|
||||
*/
|
||||
void setInitialValues(int M_Product_ID, int C_BPartner_ID,
|
||||
BigDecimal qty, boolean isSOTrx, String trxName);
|
||||
|
||||
/**
|
||||
* Calculate Price
|
||||
* @return true if calculated
|
||||
*/
|
||||
boolean calculatePrice();
|
||||
|
||||
/**
|
||||
* Calculate Discount Percentage
|
||||
* @return Discount
|
||||
*/
|
||||
BigDecimal getDiscount();
|
||||
|
||||
int getM_Product_ID();
|
||||
|
||||
int getM_PriceList_ID();
|
||||
|
||||
void setM_PriceList_ID(int M_PriceList_ID);
|
||||
|
||||
void setM_PriceList_Version_ID(int M_PriceList_Version_ID);
|
||||
|
||||
void setQty(BigDecimal qty);
|
||||
|
||||
/**
|
||||
* Get Price Date
|
||||
* @return date
|
||||
*/
|
||||
Timestamp getPriceDate();
|
||||
|
||||
/**
|
||||
* Set Price Date
|
||||
* @param priceDate date
|
||||
*/
|
||||
void setPriceDate(Timestamp priceDate);
|
||||
|
||||
/**
|
||||
* Get C_UOM_ID
|
||||
* @return uom
|
||||
*/
|
||||
int getC_UOM_ID();
|
||||
|
||||
/**
|
||||
* Get Price List
|
||||
* @return list
|
||||
*/
|
||||
BigDecimal getPriceList();
|
||||
|
||||
/**
|
||||
* Get Price Std
|
||||
* @return std
|
||||
*/
|
||||
BigDecimal getPriceStd();
|
||||
|
||||
/**
|
||||
* Get Price Limit
|
||||
* @return limit
|
||||
*/
|
||||
BigDecimal getPriceLimit();
|
||||
|
||||
/**
|
||||
* Get Price List Currency
|
||||
* @return currency
|
||||
*/
|
||||
int getC_Currency_ID();
|
||||
|
||||
/**
|
||||
* Is Price List enforced?
|
||||
* @return enforce limit
|
||||
*/
|
||||
boolean isEnforcePriceLimit();
|
||||
|
||||
/**
|
||||
* Is a DiscountSchema active?
|
||||
* @return active Discount Schema
|
||||
*/
|
||||
boolean isDiscountSchema();
|
||||
|
||||
/**
|
||||
* Is the Price Calculated (i.e. found)?
|
||||
* @return calculated
|
||||
*/
|
||||
boolean isCalculated();
|
||||
|
||||
/**
|
||||
* Set order line and calculate the parameters from it
|
||||
* @param orderLine
|
||||
* @param trxName
|
||||
*/
|
||||
void setOrderLine(I_C_OrderLine orderLine, String trxName);
|
||||
|
||||
/**
|
||||
* Set invoice line and calculate the parameters from it
|
||||
* @param invoiceLine
|
||||
* @param trxName
|
||||
*/
|
||||
void setInvoiceLine(I_C_InvoiceLine invoiceLine, String trxName);
|
||||
|
||||
/**
|
||||
* Set project line and calculate the parameters from it
|
||||
* @param projectLine
|
||||
* @param trxName
|
||||
*/
|
||||
void setProjectLine(I_C_ProjectLine projectLine, String trxName);
|
||||
|
||||
/**
|
||||
* Set requisition line and calculate the parameters from it
|
||||
* @param reqLine
|
||||
* @param trxName
|
||||
*/
|
||||
void setRequisitionLine(I_M_RequisitionLine reqLine, String trxName);
|
||||
|
||||
/**
|
||||
* Set rma line and calculate the parameters from it
|
||||
* @param rmaLine
|
||||
* @param trxName
|
||||
*/
|
||||
void setRMALine(I_M_RMALine rmaLine, String trxName);
|
||||
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
/******************************************************************************
|
||||
* Copyright (C) 2017 Diego Ruiz *
|
||||
* Copyright (C) 2017 Bx Service GmbH *
|
||||
* 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.adempiere.base;
|
||||
|
||||
public interface IProductPricingFactory {
|
||||
|
||||
public AbstractProductPricing newProductPricingInstance();
|
||||
|
||||
}
|
|
@ -15,9 +15,9 @@ package org.adempiere.exceptions;
|
|||
|
||||
import java.text.DateFormat;
|
||||
|
||||
import org.adempiere.base.IProductPricing;
|
||||
import org.compiere.model.MPriceList;
|
||||
import org.compiere.model.MProduct;
|
||||
import org.compiere.model.MProductPricing;
|
||||
import org.compiere.util.DisplayType;
|
||||
import org.compiere.util.Env;
|
||||
|
||||
|
@ -36,12 +36,12 @@ public class ProductNotOnPriceListException extends AdempiereException
|
|||
|
||||
public static final String AD_Message = "ProductNotOnPriceList";
|
||||
|
||||
public ProductNotOnPriceListException(MProductPricing productPricing, int documentLineNo)
|
||||
public ProductNotOnPriceListException(IProductPricing productPricing, int documentLineNo)
|
||||
{
|
||||
super(buildMessage(productPricing, documentLineNo));
|
||||
}
|
||||
|
||||
private static final String buildMessage (MProductPricing pp, int documentLineNo)
|
||||
private static final String buildMessage (IProductPricing pp, int documentLineNo)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
if (documentLineNo > 0)
|
||||
|
|
|
@ -1463,8 +1463,6 @@ public class GridTabCSVImporter implements IGridTabImporter
|
|||
}
|
||||
|
||||
private int resolveForeign(String foreignTable, String foreignColumn, Object value,Trx trx) {
|
||||
int id = -1;
|
||||
|
||||
boolean systemAccess = false;
|
||||
if (!"AD_Client".equals(foreignTable)) {
|
||||
MTable ft = MTable.get(Env.getCtx(), foreignTable);
|
||||
|
|
|
@ -26,6 +26,7 @@ import java.util.Properties;
|
|||
import java.util.logging.Level;
|
||||
|
||||
import org.adempiere.base.Core;
|
||||
import org.adempiere.base.IProductPricing;
|
||||
import org.adempiere.exceptions.AdempiereException;
|
||||
import org.adempiere.model.ITaxProvider;
|
||||
import org.compiere.util.CLogger;
|
||||
|
@ -177,7 +178,7 @@ public class MInvoiceLine extends X_C_InvoiceLine
|
|||
/** Cached Precision */
|
||||
private Integer m_precision = null;
|
||||
/** Product Pricing */
|
||||
private MProductPricing m_productPricing = null;
|
||||
private IProductPricing m_productPricing = null;
|
||||
/** Parent */
|
||||
private MInvoice m_parent = null;
|
||||
|
||||
|
@ -378,10 +379,9 @@ public class MInvoiceLine extends X_C_InvoiceLine
|
|||
return;
|
||||
//
|
||||
if (log.isLoggable(Level.FINE)) log.fine("M_PriceList_ID=" + M_PriceList_ID);
|
||||
m_productPricing = new MProductPricing (getM_Product_ID(),
|
||||
C_BPartner_ID, getQtyInvoiced(), m_IsSOTrx, get_TrxName());
|
||||
m_productPricing = Core.getProductPricing();
|
||||
m_productPricing.setInvoiceLine(this, get_TrxName());
|
||||
m_productPricing.setM_PriceList_ID(M_PriceList_ID);
|
||||
m_productPricing.setPriceDate(m_DateInvoiced);
|
||||
//
|
||||
setPriceActual (m_productPricing.getPriceStd());
|
||||
setPriceList (m_productPricing.getPriceList());
|
||||
|
|
|
@ -23,6 +23,7 @@ import java.util.Properties;
|
|||
import java.util.logging.Level;
|
||||
|
||||
import org.adempiere.base.Core;
|
||||
import org.adempiere.base.IProductPricing;
|
||||
import org.adempiere.exceptions.AdempiereException;
|
||||
import org.adempiere.exceptions.ProductNotOnPriceListException;
|
||||
import org.adempiere.model.ITaxProvider;
|
||||
|
@ -196,7 +197,7 @@ public class MOrderLine extends X_C_OrderLine
|
|||
//
|
||||
protected boolean m_IsSOTrx = true;
|
||||
// Product Pricing
|
||||
protected MProductPricing m_productPrice = null;
|
||||
protected IProductPricing m_productPrice = null;
|
||||
|
||||
/** Tax */
|
||||
protected MTax m_tax = null;
|
||||
|
@ -321,12 +322,11 @@ public class MOrderLine extends X_C_OrderLine
|
|||
* @param M_PriceList_ID id
|
||||
* @return product pricing
|
||||
*/
|
||||
protected MProductPricing getProductPricing (int M_PriceList_ID)
|
||||
protected IProductPricing getProductPricing (int M_PriceList_ID)
|
||||
{
|
||||
m_productPrice = new MProductPricing (getM_Product_ID(),
|
||||
getC_BPartner_ID(), getQtyOrdered(), m_IsSOTrx, get_TrxName());
|
||||
m_productPrice = Core.getProductPricing();
|
||||
m_productPrice.setOrderLine(this, get_TrxName());
|
||||
m_productPrice.setM_PriceList_ID(M_PriceList_ID);
|
||||
m_productPrice.setPriceDate(getDateOrdered());
|
||||
//
|
||||
m_productPrice.calculatePrice();
|
||||
return m_productPrice;
|
||||
|
|
|
@ -22,6 +22,7 @@ import java.sql.ResultSet;
|
|||
import java.sql.Timestamp;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import org.adempiere.base.AbstractProductPricing;
|
||||
import org.compiere.util.CLogger;
|
||||
import org.compiere.util.DB;
|
||||
import org.compiere.util.Env;
|
||||
|
@ -33,13 +34,19 @@ import org.compiere.util.Trace;
|
|||
* @author Jorg Janke
|
||||
* @version $Id: MProductPricing.java,v 1.2 2006/07/30 00:51:02 jjanke Exp $
|
||||
*/
|
||||
public class MProductPricing
|
||||
public class MProductPricing extends AbstractProductPricing
|
||||
{
|
||||
|
||||
private String trxName=null;
|
||||
|
||||
/**
|
||||
* New constructor to be used with the ProductPriceFactories
|
||||
*/
|
||||
public MProductPricing() {}
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* Old Constructor to keep backward
|
||||
* compatibility
|
||||
* @param M_Product_ID product
|
||||
* @param C_BPartner_ID partner
|
||||
* @param Qty quantity
|
||||
|
@ -49,17 +56,7 @@ public class MProductPricing
|
|||
public MProductPricing (int M_Product_ID, int C_BPartner_ID,
|
||||
BigDecimal Qty, boolean isSOTrx, String trxName)
|
||||
{
|
||||
this.trxName=trxName;
|
||||
|
||||
m_M_Product_ID = M_Product_ID;
|
||||
m_C_BPartner_ID = C_BPartner_ID;
|
||||
if (Qty != null && Env.ZERO.compareTo(Qty) != 0)
|
||||
m_Qty = Qty;
|
||||
m_isSOTrx = isSOTrx;
|
||||
int thereAreVendorBreakRecords = DB.getSQLValue(trxName,
|
||||
"SELECT count(M_Product_ID) FROM M_ProductPriceVendorBreak WHERE M_Product_ID=? AND (C_BPartner_ID=? OR C_BPartner_ID is NULL)",
|
||||
m_M_Product_ID, m_C_BPartner_ID);
|
||||
m_useVendorBreak = thereAreVendorBreakRecords > 0;
|
||||
setInitialValues(M_Product_ID, C_BPartner_ID, Qty, isSOTrx, trxName);
|
||||
}
|
||||
|
||||
|
||||
|
@ -76,13 +73,20 @@ public class MProductPricing
|
|||
{
|
||||
this(M_Product_ID,C_BPartner_ID,Qty,isSOTrx,null);
|
||||
} // MProductPricing
|
||||
|
||||
@Override
|
||||
public void setInitialValues(int M_Product_ID, int C_BPartner_ID, BigDecimal qty, boolean isSOTrx, String trxName) {
|
||||
super.setInitialValues(M_Product_ID, C_BPartner_ID, qty, isSOTrx, trxName);
|
||||
checkVendorBreak();
|
||||
}
|
||||
|
||||
private void checkVendorBreak() {
|
||||
int thereAreVendorBreakRecords = DB.getSQLValue(trxName,
|
||||
"SELECT count(M_Product_ID) FROM M_ProductPriceVendorBreak WHERE M_Product_ID=? AND (C_BPartner_ID=? OR C_BPartner_ID is NULL)",
|
||||
m_M_Product_ID, m_C_BPartner_ID);
|
||||
m_useVendorBreak = thereAreVendorBreakRecords > 0;
|
||||
}
|
||||
|
||||
private int m_M_Product_ID;
|
||||
private int m_C_BPartner_ID;
|
||||
private BigDecimal m_Qty = Env.ONE;
|
||||
private boolean m_isSOTrx = true;
|
||||
//
|
||||
private int m_M_PriceList_ID = 0;
|
||||
private int m_M_PriceList_Version_ID = 0;
|
||||
private Timestamp m_PriceDate;
|
||||
/** Precision -1 = no rounding */
|
||||
|
@ -828,32 +832,13 @@ public class MProductPricing
|
|||
|
||||
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* Get Product ID
|
||||
* @return id
|
||||
*/
|
||||
public int getM_Product_ID()
|
||||
{
|
||||
return m_M_Product_ID;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get PriceList ID
|
||||
* @return pl
|
||||
*/
|
||||
public int getM_PriceList_ID()
|
||||
{
|
||||
return m_M_PriceList_ID;
|
||||
} // getM_PriceList_ID
|
||||
|
||||
/**
|
||||
* Set PriceList
|
||||
* @param M_PriceList_ID pl
|
||||
*/
|
||||
public void setM_PriceList_ID( int M_PriceList_ID)
|
||||
{
|
||||
m_M_PriceList_ID = M_PriceList_ID;
|
||||
super.setM_PriceList_ID(M_PriceList_ID);
|
||||
m_calculated = false;
|
||||
} // setM_PriceList_ID
|
||||
|
||||
|
@ -872,26 +857,17 @@ public class MProductPricing
|
|||
*/
|
||||
public void setM_PriceList_Version_ID (int M_PriceList_Version_ID)
|
||||
{
|
||||
m_M_PriceList_Version_ID = M_PriceList_Version_ID;
|
||||
super.setM_PriceList_Version_ID(M_PriceList_Version_ID);
|
||||
m_calculated = false;
|
||||
} // setM_PriceList_Version_ID
|
||||
|
||||
/**
|
||||
* Get Price Date
|
||||
* @return date
|
||||
*/
|
||||
public Timestamp getPriceDate()
|
||||
{
|
||||
return m_PriceDate;
|
||||
} // getPriceDate
|
||||
|
||||
/**
|
||||
* Set Price Date
|
||||
* @param priceDate date
|
||||
*/
|
||||
public void setPriceDate(Timestamp priceDate)
|
||||
{
|
||||
m_PriceDate = priceDate;
|
||||
super.setPriceDate(priceDate);
|
||||
m_calculated = false;
|
||||
} // setPriceDate
|
||||
|
||||
|
@ -1006,4 +982,34 @@ public class MProductPricing
|
|||
return m_calculated;
|
||||
} // isCalculated
|
||||
|
||||
@Override
|
||||
public void setOrderLine(I_C_OrderLine orderLine, String trxName) {
|
||||
super.setOrderLine(orderLine, trxName);
|
||||
checkVendorBreak();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setInvoiceLine(I_C_InvoiceLine invoiceLine, String trxName) {
|
||||
super.setInvoiceLine(invoiceLine, trxName);
|
||||
checkVendorBreak();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setProjectLine(I_C_ProjectLine projectLine, String trxName) {
|
||||
super.setProjectLine(projectLine, trxName);
|
||||
checkVendorBreak();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRequisitionLine(I_M_RequisitionLine reqLine, String trxName) {
|
||||
super.setRequisitionLine(reqLine, trxName);
|
||||
checkVendorBreak();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRMALine(I_M_RMALine rmaLine, String trxName) {
|
||||
super.setRMALine(rmaLine, trxName);
|
||||
checkVendorBreak();
|
||||
}
|
||||
|
||||
} // MProductPrice
|
||||
|
|
|
@ -21,6 +21,8 @@ import java.sql.ResultSet;
|
|||
import java.util.Properties;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import org.adempiere.base.Core;
|
||||
import org.adempiere.base.IProductPricing;
|
||||
import org.compiere.util.DB;
|
||||
import org.compiere.util.Env;
|
||||
|
||||
|
@ -146,9 +148,8 @@ public class MProjectLine extends X_C_ProjectLine
|
|||
return limitPrice;
|
||||
if (getProject() == null)
|
||||
return limitPrice;
|
||||
boolean isSOTrx = true;
|
||||
MProductPricing pp = new MProductPricing (getM_Product_ID(),
|
||||
m_parent.getC_BPartner_ID(), getPlannedQty(), isSOTrx, get_TrxName());
|
||||
IProductPricing pp = Core.getProductPricing();
|
||||
pp.setProjectLine(this, get_TrxName());
|
||||
pp.setM_PriceList_ID(m_parent.getM_PriceList_ID());
|
||||
if (pp.calculatePrice())
|
||||
limitPrice = pp.getPriceLimit();
|
||||
|
|
|
@ -22,6 +22,7 @@ import java.util.Properties;
|
|||
import java.util.logging.Level;
|
||||
|
||||
import org.adempiere.base.Core;
|
||||
import org.adempiere.base.IProductPricing;
|
||||
import org.adempiere.exceptions.AdempiereException;
|
||||
import org.adempiere.model.ITaxProvider;
|
||||
import org.compiere.util.DB;
|
||||
|
@ -147,7 +148,8 @@ public class MRMALine extends X_M_RMALine
|
|||
}
|
||||
else if (getM_Product_ID() != 0)
|
||||
{
|
||||
MProductPricing pp = new MProductPricing (getM_Product_ID(), getParent().getC_BPartner_ID(), Env.ONE, getParent().isSOTrx(), get_TrxName());
|
||||
IProductPricing pp = Core.getProductPricing();
|
||||
pp.setRMALine(this, get_TrxName());
|
||||
|
||||
MInvoice invoice = getParent().getOriginalInvoice();
|
||||
if (invoice != null)
|
||||
|
@ -351,7 +353,7 @@ public class MRMALine extends X_M_RMALine
|
|||
}
|
||||
|
||||
// Set default amount and qty for product
|
||||
if (this.getM_Product_ID() != 0 && this.getQty().doubleValue() <= 0)
|
||||
if (this.getM_Product_ID() != 0 && this.getQty().doubleValue() <= 0 && !MRMA.DOCACTION_Void.equals(getParent().getDocAction()))
|
||||
{
|
||||
if (getQty().signum() == 0)
|
||||
this.setQty(Env.ONE);
|
||||
|
@ -360,7 +362,7 @@ public class MRMALine extends X_M_RMALine
|
|||
}
|
||||
|
||||
// Set default amount and qty for charge
|
||||
if (this.getC_Charge_ID() != 0 && this.getQty().doubleValue() <= 0)
|
||||
if (this.getC_Charge_ID() != 0 && this.getQty().doubleValue() <= 0 && !MRMA.DOCACTION_Void.equals(getParent().getDocAction()))
|
||||
{
|
||||
if (getQty().signum() == 0)
|
||||
this.setQty(Env.ONE);
|
||||
|
@ -369,7 +371,7 @@ public class MRMALine extends X_M_RMALine
|
|||
}
|
||||
|
||||
// Set amount for products
|
||||
if (this.getM_InOutLine_ID() != 0)
|
||||
if (this.getM_InOutLine_ID() != 0 && !MRMA.DOCACTION_Void.equals(getParent().getDocAction()))
|
||||
{
|
||||
this.setM_Product_ID(m_ioLine.getM_Product_ID());
|
||||
this.setC_Charge_ID(m_ioLine.getC_Charge_ID());
|
||||
|
|
|
@ -23,6 +23,8 @@ import java.util.List;
|
|||
import java.util.Properties;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import org.adempiere.base.Core;
|
||||
import org.adempiere.base.IProductPricing;
|
||||
import org.adempiere.exceptions.AdempiereException;
|
||||
import org.compiere.util.DB;
|
||||
import org.compiere.util.Env;
|
||||
|
@ -232,9 +234,8 @@ public class MRequisitionLine extends X_M_RequisitionLine
|
|||
return;
|
||||
//
|
||||
if (log.isLoggable(Level.FINE)) log.fine("M_PriceList_ID=" + M_PriceList_ID);
|
||||
boolean isSOTrx = false;
|
||||
MProductPricing pp = new MProductPricing (getM_Product_ID(),
|
||||
getC_BPartner_ID(), getQty(), isSOTrx, get_TrxName());
|
||||
IProductPricing pp = Core.getProductPricing();
|
||||
pp.setRequisitionLine(this, get_TrxName());
|
||||
pp.setM_PriceList_ID(M_PriceList_ID);
|
||||
// pp.setPriceDate(getDateOrdered());
|
||||
//
|
||||
|
|
|
@ -621,7 +621,7 @@ public class ModelValidationEngine
|
|||
return;
|
||||
//
|
||||
String propertyName =
|
||||
m_globalValidators.contains(listener)
|
||||
(listener instanceof ModelValidator && m_globalValidators.contains((ModelValidator)listener))
|
||||
? tableName + "*"
|
||||
: tableName + listener.getAD_Client_ID();
|
||||
ArrayList<FactsValidator> list = m_factsValidateListeners.get(propertyName);
|
||||
|
@ -666,7 +666,7 @@ public class ModelValidationEngine
|
|||
if (tableName == null || listener == null)
|
||||
return;
|
||||
String propertyName =
|
||||
m_globalValidators.contains(listener)
|
||||
(listener instanceof ModelValidator && m_globalValidators.contains((ModelValidator)listener))
|
||||
? tableName + "*"
|
||||
: tableName + listener.getAD_Client_ID();
|
||||
ArrayList<FactsValidator> list = m_factsValidateListeners.get(propertyName);
|
||||
|
@ -733,7 +733,7 @@ public class ModelValidationEngine
|
|||
{
|
||||
validator = list.get(i);
|
||||
if (validator.getAD_Client_ID() == po.getAD_Client_ID()
|
||||
|| m_globalValidators.contains(validator))
|
||||
|| (validator instanceof ModelValidator && m_globalValidators.contains((ModelValidator)validator)))
|
||||
{
|
||||
String error = validator.factsValidate(schema, facts, po);
|
||||
if (error != null && error.length() > 0)
|
||||
|
|
|
@ -0,0 +1,298 @@
|
|||
/******************************************************************************
|
||||
* Product: Adempiere ERP & CRM Smart Business Solution *
|
||||
* Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. *
|
||||
* 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. *
|
||||
* For the text or an alternative of this public license, you may reach us *
|
||||
* ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA *
|
||||
* or via info@compiere.org or http://www.compiere.org/license.html *
|
||||
*****************************************************************************/
|
||||
package org.compiere.util;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* Amount in Words for Zh_CN (CNY in Simplified Chinese)
|
||||
* @author z5k1@qq.com
|
||||
* @version $Id: AmtInWords_ZH.java,v1.0 2017/09/21 00:54:35 $
|
||||
*
|
||||
* The class is based on the AmtInWords_EN.java written by jjanke
|
||||
* The algorithm is based on code named snhongtenzone@foxmail.com
|
||||
*
|
||||
* Rule:
|
||||
* 1. CNY is an currency of 10000-unit scale, dislike dollar with 1000-unit scale.
|
||||
* 2. CNY currency accuracy is 0.01. And it's under a strict decimal number system.
|
||||
* 3. Option of add an "zero" after "Yuan" is false. (Line 186)
|
||||
* Reference: [1997]393 People's Bank of China "the Measures for Payment and Settlement"
|
||||
* \u53c2\u8003: \u4e2d\u56fd\u4eba\u6c11\u94f6\u884c \u94f6\u53d1[1997]393\u53f7 \u300a\u652f\u4ed8\u7ed3\u7b97\u529e\u6cd5\u300b\u9644\u4ef6\u300a\u6b63\u786e\u586b\u5199\u7968\u636e\u548c\u7ed3\u7b97\u51ed\u8bc1\u7684\u57fa\u672c\u89c4\u5b9a\u300b
|
||||
*
|
||||
*
|
||||
* Results: (Rule 3 = true)
|
||||
*
|
||||
* 0.00 \u96f6\u5143\u6574 \uff08\u6d4b\u8bd5\uff1a\u91d1\u989d\u4e3a 0\uff09
|
||||
* 0.03 \u53c1\u5206 \uff08\u6d4b\u8bd5\uff1a\u89d20\u5206\u975e0\uff0c\u5916\u52a0 \u51430\uff09
|
||||
* 0.234 \u8d30\u89d2\u53c1\u5206 \uff08\u6d4b\u8bd5\uff1a\u89d2\u975e0\u5206\u975e0\uff0c\u820d4\uff09
|
||||
* 1.001 \u58f9\u5143\u6574 \uff08\u6d4b\u8bd5\uff1a\u89d20\u52060\uff0c\u52a0 \u201c \u6574 \u201d\uff0c\u820d1\uff09
|
||||
* 1.035 \u58f9\u5143\u96f6\u8086\u5206 \uff08\u89c4\u52194.4\uff1a\u89d20\u5206\u975e0\uff0c\u52a0\u96f6\uff0c\u51655\uff09
|
||||
* 1.205 \u58f9\u5143\u8d30\u89d2\u58f9\u5206 \uff08\u6d4b\u8bd5\uff1a\u89d2\u975e0\u52060\uff0c\u51655\u540e\uff0c\u89d2\u975e0\u5206\u975e0\uff09
|
||||
* 1.3345 \u58f9\u5143\u53c1\u89d2\u53c1\u5206 \uff08\u6d4b\u8bd5\uff1a\u5c0f\u6570\u70b94\u4f4d\uff09
|
||||
* 10.03 \u58f9\u62fe\u5143\u96f6\u53c1\u5206 \uff08\u89c4\u52194.4\uff1a\u89d20\u5206\u975e0\uff0c\u52a0\u96f6\uff09
|
||||
* 10.23 \u58f9\u62fe\u5143\u96f6\u8d30\u89d2\u53c1\u5206 \uff08\u89c4\u52194.3\uff1a\u51430\u89d2\u975e0\uff0c\u53ef\u9009\u52a0\u96f6\uff09
|
||||
* 23.00 \u8d30\u62fe\u53c1\u5143\u6574 \uff08\u89c4\u52192\uff1a\u52a0 \u201c \u6574 \u201d\uff09
|
||||
* 100.20 \u58f9\u4f70\u5143\u96f6\u8d30\u89d2 \uff08\u89c4\u52194.2 \u591a\u96f6\u5199\u4e00\u96f6\uff0c\u89d2\u975e0\u52060\uff09
|
||||
* 103.45 \u58f9\u4f70\u96f6\u53c1\u5143\u8086\u89d2\u4f0d\u5206 \uff08\u89c4\u52194.1\uff1a\u67090\u52a0 \u201c \u96f6 \u201d\uff0c\u89d2\u975e0\u5206\u975e0\uff09
|
||||
* 2,345 \u8d30\u4edf\u53c1\u4f70\u8086\u62fe\u4f0d\u5143\u6574 \uff08\u89c4\u52192\uff1a\u52a0 \u201c \u6574 \u201d\uff09
|
||||
* 1020.45 \u58f9\u4edf\u96f6\u8d30\u62fe\u5143\u96f6\u8086\u89d2\u4f0d\u5206 \uff08\u89c4\u52194.1+4.3\uff1a\u67090\u52a0 \u201c \u96f6 \u201d\uff1b\u51430\u89d2\u975e0\uff0c\u53ef\u9009\u52a0\u96f6\uff09
|
||||
* 1,234.56 \u58f9\u4edf\u8d30\u4f70\u53c1\u62fe\u8086\u5143\u4f0d\u89d2\u9646\u5206 \uff08\u6d4b\u8bd5\uff1a\u5343\u5206\u4f4d \u662f\u5426\u6b63\u786e\uff09
|
||||
* 12345.78 \u58f9\u4e07\u8d30\u4edf\u53c1\u4f70\u8086\u62fe\u4f0d\u5143\u67d2\u89d2\u634c\u5206 \uff08\u6d4b\u8bd5\uff1a\u5343\u5206\u4f4d \u662f\u5426\u6b63\u786e\uff09
|
||||
* 100457.89 \u58f9\u62fe\u4e07\u96f6\u8086\u4f70\u4f0d\u62fe\u67d2\u5143\u634c\u89d2\u7396\u5206 \uff08\u89c4\u52194.2\uff1a\u591a\u96f6\u5199\u4e00\u96f6\uff09
|
||||
* 103457.89 \u58f9\u62fe\u4e07\u96f6\u53c1\u4edf\u8086\u4f70\u4f0d\u62fe\u67d2\u5143\u634c\u89d2\u7396\u5206 \uff08\u89c4\u52194.3\uff1a\u4e070\u5343\u975e\u96f6\uff0c\u53ef\u9009\u52a0\u96f6\uff09
|
||||
* 107000.03 \u58f9\u62fe\u4e07\u96f6\u67d2\u4edf\u5143\u96f6\u53c1\u5206 \uff08\u89c4\u52194.3+4.4\uff1a\u4e070\u51430\u5343\u975e0\uff0c\u4e2d\u95f4\u591a0\uff0c\u89d20\uff0c\u53ef\u9009\u52a0\u96f6\uff09
|
||||
* 9,000,000.00 \u7396\u4f70\u4e07\u5143\u6574 \uff08\u89c4\u5219: 4\u4f4d\u8fdb\u5236\uff09
|
||||
* 10,000,000.00 \u58f9\u4edf\u4e07\u5143\u6574 \uff08\u6d4b\u8bd5\uff1a4\u4f4d\u8fdb\u5236\uff09
|
||||
* 10220134 \u58f9\u4edf\u96f6\u8d30\u62fe\u8d30\u4e07\u96f6\u58f9\u4f70\u53c1\u62fe\u8086\u5143\u6574 \uff08\u6d4b\u8bd5\uff1a\u65e0\u5343\u5206\u4f4d \u201c\u662f\u5426\u6b63\u786e\uff09
|
||||
* 100,234,578.90 \u58f9\u4ebf\u96f6\u8d30\u62fe\u53c1\u4e07\u8086\u4edf\u4f0d\u4f70\u67d2\u62fe\u634c\u5143\u7396\u89d2 \uff08\u6d4b\u8bd5\uff1a\u4ebf\uff09
|
||||
* 203010000.56 \u8d30\u4ebf\u96f6\u53c1\u4f70\u96f6\u58f9\u4e07\u5143\u96f6\u4f0d\u89d2\u9646\u5206 \uff08\u6d4b\u8bd5\uff1a\u4ebf\u96f6\uff0c\u4e07\u96f6\uff0c\u5143\uff09
|
||||
* 103,004,000.90 \u58f9\u4ebf\u96f6\u53c1\u4f70\u4e07\u96f6\u8086\u4edf\u5143\u96f6\u7396\u89d2 \uff08\u89c4\u52194.2+4.3\uff1a\u591a\u96f6\u5199\u4e00\u96f6\uff0c\u4e070\u5343\u975e\u96f6\uff0c\u4e2d\u95f4\u591a0\uff0c\u53ef\u9009\u52a0\u96f6\uff09
|
||||
* 1,201,034,578.90 \u58f9\u62fe\u8d30\u4ebf\u96f6\u58f9\u4f70\u96f6\u53c1\u4e07\u8086\u4edf\u4f0d\u4f70\u67d2\u62fe\u634c\u5143\u7396\u89d2 \uff08\u6d4b\u8bd5\uff1a\u5341\u4ebf\uff0c3\u4e2a\u5343\u5206\u4f4d \u662f\u5426\u6b63\u786e\uff09
|
||||
* 90,000,000,000 \u7396\u4f70\u4ebf\u5143\u6574 \uff08\u6d4b\u8bd5\uff1a4\u4f4d\u8fdb\u5236\uff09
|
||||
* 100,000,000,000 \u58f9\u4edf\u4ebf\u5143\u6574 \uff08\u6d4b\u8bd5\uff1a4\u4f4d\u8fdb\u5236\uff09
|
||||
* 1,932,110,345,780 \u58f9\u5146\u7396\u4edf\u53c1\u4f70\u8d30\u62fe\u58f9\u4ebf\u58f9\u4edf\u96f6\u53c1\u62fe\u8086\u4e07\u4f0d\u4edf\u67d2\u4f70\u634c\u62fe\u5143\u6574 \uff08\u6d4b\u8bd5\uff1a13\u4f4d\u6574\u6570\uff0c\u5146\uff0c4\u4e2a\u5343\u5206\u4f4d\uff09
|
||||
* 10,000,000,000,000 \u9519\u8bef \uff08\u6d4b\u8bd5\uff1a\u8d85\u8fc7\u6216\u7b49\u4e8e\u6700\u5927\u4f4d\u657010\u5146\uff0c\u6570\u5b57\u5fc5\u987b\u5c0f\u4e8e14\u4f4d\uff09
|
||||
* -1220.354 \u8d1f\u58f9\u4edf\u8d30\u4f70\u8d30\u62fe\u5143\u96f6\u53c1\u89d2\u4f0d\u5206 \uff08\u6d4b\u8bd5\uff1a\u8d1f\u6570\uff0c\u56db\u820d\u4e94\u5165\uff09
|
||||
* 1.222,33 \u9519\u8bef \uff08\u6d4b\u8bd5\uff1a\u975e\u6cd5\u5b57\u7b26\uff09
|
||||
*
|
||||
*/
|
||||
|
||||
public class AmtInWords_ZH implements AmtInWords
|
||||
{
|
||||
/**
|
||||
* AmtInWords_ZH
|
||||
*/
|
||||
public AmtInWords_ZH ()
|
||||
{
|
||||
super ();
|
||||
} // AmtInWords_ZH
|
||||
|
||||
/** Currency scales */
|
||||
private static final String[] scaleNames =
|
||||
{
|
||||
"\u5206", // 0 0.01
|
||||
"\u89d2", // 1 0.1
|
||||
"\u5143", // 2 1 \uff0810^0\uff09
|
||||
"\u62fe", // 3 10
|
||||
"\u4f70", // 4 100
|
||||
"\u4edf", // 5 1000
|
||||
"\u4e07", // 6 10000 \uff0810^4\uff09
|
||||
"\u62fe", // 7 10*10000
|
||||
"\u4f70", // 8 100*10000
|
||||
"\u4edf", // 9 1000*10000
|
||||
"\u4ebf", // 10 100000000 \uff0810^8\uff09 \u4e07\u4e07\u4e3a\u4ebf
|
||||
"\u62fe", // 11 10*100000000
|
||||
"\u4f70", // 12 100*100000000
|
||||
"\u4edf", // 13 1000*100000000
|
||||
"\u5146", // 14 1000000000000 \uff0810^12\uff09 \u4e07\u4ebf\u4e3a\u5146
|
||||
|
||||
};
|
||||
/** numbers 0 to 9 */
|
||||
private static final String[] numNames =
|
||||
{
|
||||
"\u96f6", // 0
|
||||
"\u58f9", // 1
|
||||
"\u8d30", // 2
|
||||
"\u53c1", // 3
|
||||
"\u8086", // 4
|
||||
"\u4f0d", // 5
|
||||
"\u9646", // 6
|
||||
"\u67d2", // 7
|
||||
"\u634c", // 8
|
||||
"\u7396" // 9
|
||||
};
|
||||
|
||||
private static final String CNY_NEGATIVE = "\u8d1f";
|
||||
private static final String CNY_FULL = "\u6574";
|
||||
private static final String CNY_ZEOR_FULL = "\u96f6\u5143\u6574";
|
||||
|
||||
/**
|
||||
* Convert
|
||||
* @description Convert BigDecimal number to String
|
||||
* @param number (-5432.135 with no period)
|
||||
* @return amt (amt in words of CNY)
|
||||
*/
|
||||
private String convert (BigDecimal number)
|
||||
{
|
||||
StringBuffer sb = new StringBuffer();
|
||||
int signum = number.signum(); // positive , 0 , negative
|
||||
int numUnit = 0; // each number character
|
||||
int numIndex = 0; // each number position
|
||||
int zeroSize = 0; // sizes of zero
|
||||
|
||||
// number = 0
|
||||
if (signum == 0){
|
||||
return CNY_ZEOR_FULL; // zero_full
|
||||
}
|
||||
|
||||
// round to 1/100, get long number ,eg -5432.135 = 543214
|
||||
long lnumber = number.movePointRight(2).setScale(0, BigDecimal.ROUND_HALF_UP).abs().longValue();
|
||||
|
||||
// number must less 10000000000000 (10^13)
|
||||
if (lnumber >= 1000000000000000L) {
|
||||
return "\u4eb2\uff0c\u91d1\u989d\u8f6c\u6362\u4e0a\u9650\u4e3a10\u5146\uff0810\u4e07\u4ebf\uff09";
|
||||
}
|
||||
|
||||
// get the last 2 number (decimal number) ,eg 543214 = 14
|
||||
long decamt = lnumber % 100;
|
||||
boolean getZero = false; // sign of zero
|
||||
|
||||
// decimal options\uff1a00 = 0, 01 = 1, 10, 11
|
||||
|
||||
// decimal = 00
|
||||
if (!(decamt > 0)) { // special decimal case 00
|
||||
numIndex = 2; // 2, begin from "Yuan"
|
||||
lnumber = lnumber / 100; // eg: 5432.00 = 543200 = 5432
|
||||
getZero = true;
|
||||
}
|
||||
|
||||
// decimal = 10
|
||||
if ((decamt > 0) && (!(decamt % 10 > 0))) { // special decimal case 10
|
||||
numIndex = 1; // 1, begin from "Jiao"
|
||||
lnumber = lnumber / 10; // eg: 5432.10 = 543210 = 54321
|
||||
getZero = true;
|
||||
}
|
||||
|
||||
// begin foreach for all cases
|
||||
while (true) {
|
||||
if (lnumber <= 0) { // each character done
|
||||
break;
|
||||
}
|
||||
// get the last number each
|
||||
numUnit = (int) (lnumber % 10);
|
||||
if (numUnit > 0) { // Character = 1-9 ,insert (number + scale)
|
||||
if ((numIndex == 9) && (zeroSize >= 3)) { // special 9 (8th), eg: 10,000,000
|
||||
sb.insert(0, scaleNames[6]); // add "WAN"
|
||||
}
|
||||
if ((numIndex == 13) && (zeroSize >= 3)) { // special 13 (11st), eg: 100,000,000,000
|
||||
sb.insert(0, scaleNames[10]); // add "YI"
|
||||
}
|
||||
sb.insert(0, scaleNames[numIndex]); // first insert scale to Chinese
|
||||
sb.insert(0, numNames[numUnit]); // then insert number to Chinese
|
||||
getZero = false;
|
||||
zeroSize = 0;
|
||||
} else { // Character = 0, insert (scale + 0 )
|
||||
++zeroSize;
|
||||
if (!(getZero) & numIndex != 2) { // separated zero and option of "YUAN" suffix
|
||||
sb.insert(0, numNames[numUnit]); // first insert 0 to Chinese
|
||||
} //
|
||||
if (numIndex == 2) { // option1: "YUAN"=0
|
||||
sb.insert(0, scaleNames[numIndex]); // then insert scale to Chinese
|
||||
} // option2: "WAN"|"YI"|"ZHAO" =0
|
||||
else if (((numIndex - 2) % 4 == 0) && (lnumber % 1000 > 0)) { // special 4th,8th, eg: 9,000,000 or 90,000,000,000
|
||||
sb.insert(0, scaleNames[numIndex]); // then insert scale to Chinese
|
||||
}
|
||||
getZero = true; // multi-zero nothing added
|
||||
}
|
||||
|
||||
lnumber = lnumber / 10; // cut the last number off each
|
||||
++numIndex; // ++ position of number
|
||||
}
|
||||
|
||||
// add suffix of "zheng" when decimal = 00
|
||||
if (!(decamt > 0)) {
|
||||
sb.append(CNY_FULL); // add suffix CNY_full
|
||||
}
|
||||
|
||||
// add prefix of "fu" when negative
|
||||
if (signum == -1) {
|
||||
sb.insert(0, CNY_NEGATIVE); // add prefix negative
|
||||
}
|
||||
|
||||
return sb.toString(); // return amt string completed
|
||||
} // convert
|
||||
|
||||
/**************************************************************************
|
||||
* Get Amount in Words
|
||||
* @param amount numeric amount (352.80)
|
||||
* @return amount in words
|
||||
* @throws Exception
|
||||
*/
|
||||
public String getAmtInWords (String amount) throws Exception
|
||||
{
|
||||
if (amount == null || amount.length() <= 0) // null string
|
||||
return amount;
|
||||
|
||||
//TODO: Check string illegal character
|
||||
|
||||
amount = amount.replaceAll (",", ""); // fire period ","
|
||||
//TODO: 1.234,56 as comma replace period
|
||||
|
||||
StringBuilder sb = new StringBuilder ();
|
||||
BigDecimal cny = new BigDecimal(amount); // convert String to BigDecimal
|
||||
sb.append (convert (cny)); // get result string from convert
|
||||
return sb.toString (); // return
|
||||
}
|
||||
|
||||
/**
|
||||
* Test Print
|
||||
* @param amt amount
|
||||
*/
|
||||
private void print (String amt)
|
||||
{
|
||||
try
|
||||
{
|
||||
System.out.println(amt + " = " + getAmtInWords(amt));
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
} // print
|
||||
|
||||
/**
|
||||
* Test
|
||||
* @param args ignored
|
||||
*/
|
||||
public static void main (String[] args)
|
||||
{
|
||||
AmtInWords_ZH aiw = new AmtInWords_ZH();
|
||||
aiw.print (null);
|
||||
aiw.print ("");
|
||||
aiw.print ("0.00");
|
||||
aiw.print ("0.03");
|
||||
aiw.print ("0.234");
|
||||
aiw.print ("1.001");
|
||||
aiw.print ("1.035");
|
||||
aiw.print ("1.205");
|
||||
aiw.print ("1.3345");
|
||||
aiw.print ("10.03");
|
||||
aiw.print ("10.23");
|
||||
aiw.print ("23.00");
|
||||
aiw.print ("100.20");
|
||||
aiw.print ("103.45");
|
||||
aiw.print ("2,345");
|
||||
aiw.print ("1020.45");
|
||||
aiw.print ("1,234.56");
|
||||
aiw.print ("12345.78");
|
||||
aiw.print ("100457.89");
|
||||
aiw.print ("103457.89");
|
||||
aiw.print ("107000.03");
|
||||
aiw.print ("9,000,000.00"); // Line 189
|
||||
aiw.print ("10,000,000.00"); // Line 171
|
||||
aiw.print ("10220134");
|
||||
aiw.print ("100,234,578.90");
|
||||
aiw.print ("203010000.56");
|
||||
aiw.print ("103,004,000.90");
|
||||
aiw.print ("1,201,034,578.90");
|
||||
aiw.print ("90,000,000,000"); // Line 189
|
||||
aiw.print ("100,000,000,000"); // Line 174
|
||||
aiw.print ("1,932,110,345,780");
|
||||
aiw.print ("10,000,000,000,000");
|
||||
aiw.print ("-1220.354");
|
||||
// aiw.print ("1.234,56"); ERROR
|
||||
} // main
|
||||
}
|
|
@ -61,6 +61,8 @@ public class ImportInventoryMove extends SvrProcess
|
|||
|
||||
private boolean m_IsImportOnlyNoErrors = true;
|
||||
|
||||
private boolean m_ErrorsFound = false;
|
||||
|
||||
private String m_docAction = MMovement.DOCACTION_Prepare;
|
||||
|
||||
private boolean isImported = false;
|
||||
|
@ -127,13 +129,18 @@ public class ImportInventoryMove extends SvrProcess
|
|||
|
||||
private void importRecords()
|
||||
{
|
||||
if (m_IsImportOnlyNoErrors && m_ErrorsFound)
|
||||
return; // not importing because error were found
|
||||
|
||||
isImported = false;
|
||||
|
||||
for(X_I_Movement imove : getRecords(false,m_IsImportOnlyNoErrors))
|
||||
|
||||
for(X_I_Movement imove : getRecords(false,true))
|
||||
{
|
||||
MMovement mov = importMInventoryMove(imove);
|
||||
if(mov!= null)
|
||||
{
|
||||
imove.setM_Movement_ID(mov.getM_Movement_ID());
|
||||
imove.saveEx();
|
||||
isImported = importMInventoryMoveLine(mov,imove);
|
||||
}
|
||||
else
|
||||
|
@ -143,7 +150,6 @@ public class ImportInventoryMove extends SvrProcess
|
|||
|
||||
if(isImported)
|
||||
{
|
||||
imove.setM_Movement_ID(mov.getM_Movement_ID());
|
||||
imove.setI_IsImported(true);
|
||||
imove.setProcessed(true);
|
||||
imove.saveEx();
|
||||
|
@ -156,7 +162,7 @@ public class ImportInventoryMove extends SvrProcess
|
|||
else
|
||||
{
|
||||
imove.setI_IsImported(false);
|
||||
imove.setProcessed(true);
|
||||
imove.setProcessed(false);
|
||||
imove.saveEx();
|
||||
notimported++;
|
||||
}
|
||||
|
@ -331,15 +337,20 @@ public class ImportInventoryMove extends SvrProcess
|
|||
*/
|
||||
private void fillIDValues()
|
||||
{
|
||||
for(X_I_Movement imove : getRecords(false, m_IsImportOnlyNoErrors))
|
||||
m_ErrorsFound = false;
|
||||
for(X_I_Movement imove : getRecords(false, false))
|
||||
{
|
||||
//if(imov.getAD_Org_ID()==0)
|
||||
imove.setAD_Org_ID(getID(MOrg.Table_Name,"Value = ?", new Object[]{imove.getOrgValue()}));
|
||||
if(imove.getAD_Org_ID()==0) {
|
||||
int orgId = getID(MOrg.Table_Name,"Value = ?", new Object[]{imove.getOrgValue()});
|
||||
if (orgId >= 0) {
|
||||
imove.setAD_Org_ID(orgId);
|
||||
}
|
||||
}
|
||||
if(imove.getM_Product_ID()==0)
|
||||
imove.setM_Product_ID(getID(MProduct.Table_Name,"Value = ?", new Object[]{imove.getProductValue()}));
|
||||
//if(imov.getM_Locator_ID()==0)
|
||||
if(imove.getM_Locator_ID()==0)
|
||||
imove.setM_Locator_ID(getID(MLocator.Table_Name,"Value = ?", new Object[]{imove.getLocatorValue()}));
|
||||
//if(imov.getM_LocatorTo_ID()==0)
|
||||
if(imove.getM_LocatorTo_ID()==0)
|
||||
imove.setM_LocatorTo_ID(getID(MLocator.Table_Name,"Value = ?", new Object[]{imove.getLocatorToValue()}));
|
||||
if(imove.getC_DocType_ID()==0)
|
||||
imove.setC_DocType_ID(getID(MDocType.Table_Name,"Name=?", new Object[]{imove.getDocTypeName()}));
|
||||
|
@ -353,10 +364,7 @@ public class ImportInventoryMove extends SvrProcess
|
|||
imove.setC_Campaign_ID(getID(MCampaign.Table_Name, "Value = ?", new Object[]{imove.getCampaignValue()}));
|
||||
if(imove.getAD_OrgTrx_ID()==0)
|
||||
imove.setAD_OrgTrx_ID(getID(MOrg.Table_Name, "Value = ?", new Object[]{imove.getOrgTrxValue()}));
|
||||
|
||||
|
||||
imove.saveEx();
|
||||
|
||||
|
||||
StringBuilder err = new StringBuilder("");
|
||||
if(imove.getAD_Org_ID() <=0)
|
||||
err.append(" @AD_Org_ID@ @NotFound@,");
|
||||
|
@ -373,12 +381,17 @@ public class ImportInventoryMove extends SvrProcess
|
|||
if(imove.getC_DocType_ID()<=0)
|
||||
err.append(" @C_DocType_ID@ @NotFound@,");
|
||||
|
||||
if(err.toString()!=null && err.toString().length()>0)
|
||||
{
|
||||
if (imove.getMovementQty().signum() == 0)
|
||||
err.append(" @MovementQty@ @NotFound@,");
|
||||
|
||||
if(err.toString()!=null && err.toString().length()>0) {
|
||||
notimported++;
|
||||
m_ErrorsFound = true;
|
||||
imove.setI_ErrorMsg(Msg.parseTranslation(getCtx(), err.toString()));
|
||||
imove.saveEx();
|
||||
}
|
||||
} else {
|
||||
imove.setI_ErrorMsg(null);
|
||||
}
|
||||
imove.saveEx();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -397,17 +410,17 @@ public class ImportInventoryMove extends SvrProcess
|
|||
|
||||
|
||||
/**
|
||||
* get all records in X_I_ProductPlanning table
|
||||
* get all records in X_I_Movement table
|
||||
* @param imported boolean
|
||||
* @param isWithError boolean
|
||||
* @return collection of X_I_ProductPlanning records
|
||||
* @param isWithoutError boolean
|
||||
* @return collection of X_I_Movement records
|
||||
*/
|
||||
private Collection<X_I_Movement> getRecords(boolean imported, boolean isWithError)
|
||||
private Collection<X_I_Movement> getRecords(boolean imported, boolean isWithoutError)
|
||||
{
|
||||
final StringBuffer whereClause = new StringBuffer(X_I_Movement.COLUMNNAME_I_IsImported)
|
||||
.append("=?");
|
||||
|
||||
if(isWithError)
|
||||
if(isWithoutError)
|
||||
{
|
||||
whereClause.append(" AND ").append(X_I_Movement.COLUMNNAME_I_ErrorMsg).append(" IS NULL");
|
||||
}
|
||||
|
|
|
@ -2,10 +2,12 @@ package org.adempiere.report.jasper;
|
|||
import java.awt.Graphics2D;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
|
||||
import net.sf.jasperreports.engine.JRAbstractSvgRenderer;
|
||||
import net.sf.jasperreports.engine.JRException;
|
||||
import net.sf.jasperreports.engine.JasperReportsContext;
|
||||
import net.sf.jasperreports.renderers.AbstractRenderToImageDataRenderer;
|
||||
import net.sourceforge.barbecue.Barcode;
|
||||
|
||||
public class Barbecue extends JRAbstractSvgRenderer
|
||||
public class Barbecue extends AbstractRenderToImageDataRenderer
|
||||
{
|
||||
|
||||
private static final long serialVersionUID = 5112469398754718739L;
|
||||
|
@ -29,7 +31,8 @@ public class Barbecue extends JRAbstractSvgRenderer
|
|||
m_barcode.setDrawingText(showDrawingText);
|
||||
}
|
||||
|
||||
public void render(Graphics2D grx, Rectangle2D rectangle)
|
||||
@Override
|
||||
public void render(JasperReportsContext jasperReportsContext, Graphics2D grx, Rectangle2D rectangle) throws JRException
|
||||
{
|
||||
try
|
||||
{
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
@Echo off
|
||||
|
||||
CALL utils\myEnvironment.bat Server
|
||||
|
||||
@if not "%JAVA_HOME%" == "" goto JAVA_HOME_OK
|
||||
@Set JAVA=java
|
||||
|
@ -17,8 +18,6 @@ goto START
|
|||
@Echo Starting iDempiere Server ...
|
||||
@Echo =======================================
|
||||
|
||||
CALL utils\myEnvironment.bat Server
|
||||
|
||||
FOR %%c in (plugins\org.eclipse.equinox.launcher_1.*.jar) DO set JARFILE=%%c
|
||||
|
||||
@Set VMOPTS=-Xbootclasspath/p:alpn-boot.jar
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
unset DISPLAY
|
||||
BASE=`dirname $( readlink -f $0 )`
|
||||
. $BASE/utils/myEnvironment.sh Server
|
||||
if [ $JAVA_HOME ]; then
|
||||
JAVA=$JAVA_HOME/bin/java
|
||||
else
|
||||
|
@ -17,9 +20,6 @@ echo ===================================
|
|||
echo Starting iDempiere Server
|
||||
echo ===================================
|
||||
|
||||
unset DISPLAY
|
||||
BASE=`dirname $( readlink -f $0 )`
|
||||
. $BASE/utils/myEnvironment.sh Server
|
||||
|
||||
VMOPTS="-Xbootclasspath/p:alpn-boot.jar
|
||||
-Dorg.osgi.framework.bootdelegation=sun.security.ssl,org.eclipse.jetty.alpn
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -465,6 +465,8 @@ public class EMailProcessor
|
|||
int c;
|
||||
while ((c = is.read()) != -1)
|
||||
sb.append((char)c);
|
||||
|
||||
is.close();
|
||||
deliveryMessage = sb.toString().trim();
|
||||
}
|
||||
else
|
||||
|
@ -674,6 +676,7 @@ public class EMailProcessor
|
|||
int c;
|
||||
while ((c = is.read()) != -1)
|
||||
System.out.write(c);
|
||||
is.close();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -680,7 +680,7 @@ public class ADSortTab extends Panel implements IADTabpanel
|
|||
.append(" SET ").append(m_ColumnSortName).append("=0");
|
||||
if (m_ColumnYesNoName != null)
|
||||
sql.append(",").append(m_ColumnYesNoName).append("='N'");
|
||||
sql.append(", Updated=Now(), UpdatedBy=").append(Env.getAD_User_ID(Env.getCtx()));
|
||||
sql.append(", Updated=sysdate, UpdatedBy=").append(Env.getAD_User_ID(Env.getCtx()));
|
||||
sql.append(" WHERE ").append(m_KeyColumnName).append("=").append(pp.getKey());
|
||||
if (DB.executeUpdate(sql.toString(), null) == 1) {
|
||||
pp.setSortNo(0);
|
||||
|
@ -710,7 +710,7 @@ public class ADSortTab extends Panel implements IADTabpanel
|
|||
.append(" SET ").append(m_ColumnSortName).append("=").append(index);
|
||||
if (m_ColumnYesNoName != null)
|
||||
sql.append(",").append(m_ColumnYesNoName).append("='Y'");
|
||||
sql.append(", Updated=Now(), UpdatedBy=").append(Env.getAD_User_ID(Env.getCtx()));
|
||||
sql.append(", Updated=sysdate, UpdatedBy=").append(Env.getAD_User_ID(Env.getCtx()));
|
||||
sql.append(" WHERE ").append(m_KeyColumnName).append("=").append(pp.getKey());
|
||||
if (DB.executeUpdate(sql.toString(), null) == 1) {
|
||||
pp.setSortNo(index);
|
||||
|
|
|
@ -587,7 +587,13 @@ public class ADWindowToolbar extends FToolbar implements EventListener<Event>
|
|||
{
|
||||
this.btnLock.setPressed(locked);
|
||||
|
||||
String imgURL = "images/"+ (this.btnLock.isPressed() ? "LockX" : "Lock") + "24.png";
|
||||
String size = Env.getContext(Env.getCtx(), "#ZK_Toolbar_Button_Size");
|
||||
String suffix = "24.png";
|
||||
if (!Util.isEmpty(size))
|
||||
{
|
||||
suffix = size + ".png";
|
||||
}
|
||||
String imgURL = "images/"+ (this.btnLock.isPressed() ? "LockX" : "Lock") + suffix;
|
||||
imgURL = ThemeManager.getThemeResource(imgURL);
|
||||
this.btnLock.setImage(imgURL);
|
||||
}
|
||||
|
|
|
@ -63,7 +63,7 @@ import org.zkoss.zul.Frozen;
|
|||
import org.zkoss.zul.Paging;
|
||||
import org.zkoss.zul.Row;
|
||||
import org.zkoss.zul.Tabpanel;
|
||||
import org.zkoss.zul.Vbox;
|
||||
import org.zkoss.zul.Vlayout;
|
||||
import org.zkoss.zul.event.ZulEvents;
|
||||
import org.zkoss.zul.impl.CustomGridDataLoader;
|
||||
|
||||
|
@ -72,8 +72,9 @@ import org.zkoss.zul.impl.CustomGridDataLoader;
|
|||
* @author Low Heng Sin
|
||||
*
|
||||
*/
|
||||
public class GridView extends Vbox implements EventListener<Event>, IdSpace, IFieldEditorContainer, StateChangeListener
|
||||
public class GridView extends Vlayout implements EventListener<Event>, IdSpace, IFieldEditorContainer, StateChangeListener
|
||||
{
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
|
@ -243,7 +244,10 @@ public class GridView extends Vbox implements EventListener<Event>, IdSpace, IFi
|
|||
|
||||
setupColumns();
|
||||
render();
|
||||
|
||||
if (listbox.getFrozen() != null){
|
||||
listbox.getFrozen().setWidgetOverride("syncScroll", "function (){syncScrollOVR(this);}");
|
||||
}
|
||||
|
||||
updateListIndex();
|
||||
|
||||
this.init = true;
|
||||
|
|
|
@ -394,7 +394,7 @@ public class WCreateFromShipmentUI extends CreateFromShipment implements EventLi
|
|||
C_BPartner_ID = ((Integer)e.getNewValue()).intValue();
|
||||
}
|
||||
|
||||
initBPOrderDetails (C_BPartner_ID, true);
|
||||
initBPOrderDetails (C_BPartner_ID, false);
|
||||
}
|
||||
window.tableChanged(null);
|
||||
} // vetoableChange
|
||||
|
@ -464,7 +464,7 @@ public class WCreateFromShipmentUI extends CreateFromShipment implements EventLi
|
|||
orderField.addActionListener(this);
|
||||
|
||||
initBPDetails(C_BPartner_ID);
|
||||
} // initBPartnerOIS
|
||||
} // initBPOrderDetails
|
||||
|
||||
public void initBPDetails(int C_BPartner_ID)
|
||||
{
|
||||
|
|
|
@ -46,7 +46,7 @@ public class WCtxHelpSuggestion extends Window implements EventListener<Event> {
|
|||
/**
|
||||
* generated serial id
|
||||
*/
|
||||
private static final long serialVersionUID = -8110247807841690907L;
|
||||
private static final long serialVersionUID = 2068729997836800852L;
|
||||
|
||||
private ConfirmPanel confirmPanel;
|
||||
|
||||
|
@ -239,7 +239,7 @@ public class WCtxHelpSuggestion extends Window implements EventListener<Event> {
|
|||
} else {
|
||||
StringBuilder insert = new StringBuilder("Insert Into AD_CtxHelpMsg_Trl (AD_Client_ID, AD_Org_ID, AD_CtxHelpMsg_ID, IsActive, IsTranslated, AD_Language, MsgText,");
|
||||
insert.append("Created, CreatedBy, Updated, UpdatedBy, AD_CtxHelpMsg_Trl_UU)")
|
||||
.append(" Values (?, ?, ?, 'Y', 'N', ?, ?, now(), ?, now(), ?, generate_uuid()) ");
|
||||
.append(" Values (?, ?, ?, 'Y', 'N', ?, ?, sysdate, ?, sysdate, ?, generate_uuid()) ");
|
||||
List<Object> params = new ArrayList<Object>();
|
||||
params.add(0);
|
||||
params.add(0);
|
||||
|
|
|
@ -250,8 +250,44 @@ Copyright (C) 2007 Ashley G Ramdass.
|
|||
}
|
||||
this.$onSize.apply(this, arguments);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// overload for recalculate width of scroll when has frozen control
|
||||
function syncScrollOVR (wgt){
|
||||
var parent = wgt.parent;
|
||||
|
||||
if (parent.eheadtbl && parent._nativebar) {
|
||||
var scroll = wgt.$n('scrollX');
|
||||
var cells = parent._getFirstRowCells(parent.eheadrows);
|
||||
var totalcols = cells.length;
|
||||
var columns = wgt._columns;
|
||||
var scrollScale = totalcols - columns - 1;
|
||||
var leftWidth = 0;
|
||||
|
||||
var headerWidth = 0;
|
||||
for (var i = 0; i < columns; i++)
|
||||
headerWidth += cells[i].offsetWidth;
|
||||
|
||||
var bodyWidth = parent.$n('body').offsetWidth;
|
||||
var extraWidth = parent.$n('body').offsetWidth - headerWidth;
|
||||
var extraColumnNum = 0;
|
||||
for (var i = totalcols - 1; i >= columns; i--){
|
||||
extraWidth -= cells[i].offsetWidth;
|
||||
if (cells[i].offsetWidth == 0)// when scroll to right, column at left has width = 0
|
||||
continue;
|
||||
if (extraWidth >= 0){
|
||||
extraColumnNum++;
|
||||
}else{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
scroll.firstChild.style.width = jq.px0(bodyWidth + 50 * (scrollScale - extraColumnNum));
|
||||
}
|
||||
|
||||
wgt.$syncScroll ()
|
||||
}
|
||||
]]>
|
||||
</script>
|
||||
<include src="${themePreference}"/>
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 826 B |
|
@ -30,6 +30,7 @@ import org.compiere.model.MInOutLine;
|
|||
import org.compiere.model.MInvoice;
|
||||
import org.compiere.model.MInvoiceLine;
|
||||
import org.compiere.model.MInvoicePaySchedule;
|
||||
import org.compiere.model.MMatchInv;
|
||||
import org.compiere.model.MOrder;
|
||||
import org.compiere.model.MOrderLine;
|
||||
import org.compiere.model.MOrderPaySchedule;
|
||||
|
@ -495,7 +496,12 @@ public abstract class CreateFromInvoice extends CreateFrom
|
|||
for (int j = 0; j < lines.length; j++)
|
||||
{
|
||||
MInOutLine line = lines[j];
|
||||
if (line.getQtyEntered().compareTo(QtyEntered) == 0)
|
||||
// qty matched
|
||||
BigDecimal qtyMatched = Env.ZERO;
|
||||
for (MMatchInv match : MMatchInv.getInOutLine(Env.getCtx(), line.getM_InOutLine_ID(), trxName)) {
|
||||
qtyMatched = qtyMatched.add(match.getQty());
|
||||
}
|
||||
if (line.getQtyEntered().subtract(qtyMatched).compareTo(QtyEntered) == 0)
|
||||
{
|
||||
inoutLine = line;
|
||||
M_InOutLine_ID = inoutLine.getM_InOutLine_ID();
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<project name="zklibrary" basedir="." default="copy">
|
||||
<target name="copy">
|
||||
<mkdir dir="lib" />
|
||||
<get src="${url.maven.zkoss.lib}/maven2/org/zkoss/zkforge/gmapsz/3.0.3/gmapsz-3.0.3.jar" dest="lib/gmapsz.jar" usetimestamp="true" verbose="true" retries="5" />
|
||||
<get src="${url.maven.zkoss.lib}/maven2/org/zkoss/zkforge/gmapsz/3.0.4/gmapsz-3.0.4.jar" dest="lib/gmapsz.jar" usetimestamp="true" verbose="true" retries="5" />
|
||||
<get src="${url.maven.zkoss.lib}/maven2/org/zkoss/zkforge/timelinez/2.3.1_50/timelinez-2.3.1_50.jar" dest="lib/timelinez.jar" usetimestamp="true" verbose="true" retries="5" />
|
||||
<get src="${url.maven.zkoss.lib}/maven2/org/zkoss/zkforge/timeplotz/1.1_50/timeplotz-1.1_50.jar" dest="lib/timeplotz.jar" usetimestamp="true" verbose="true" retries="5" />
|
||||
<get src="${url.maven.zkoss.lib}/maven2/org/zkoss/calendar/calendar/2.1.5/calendar-2.1.5.jar" dest="lib/calendar.jar" usetimestamp="true" verbose="true" retries="5" />
|
||||
|
|
Loading…
Reference in New Issue