details: /erp/devel/pi/rev/07a95c580a62
changeset: 7433:07a95c580a62
user: Harikrishnan Raja <harikrishnan.raja <at> openbravo.com>
date: Fri May 28 11:19:37 2010 +0530
summary: Fixes issue 12587: wrong price in process \"copy lines\" of invoice
diffstat:
src-db/database/sourcedata/AD_TEXTINTERFACES.xml | 11 +
src/org/openbravo/erpCommon/ad_actionButton/CopyFromInvoice.html | 9 +-
src/org/openbravo/erpCommon/ad_actionButton/CopyFromInvoice.java | 81
+++++++++-
src/org/openbravo/erpCommon/ad_actionButton/CopyFromInvoice_data.xsql | 76
++++++++-
4 files changed, 166 insertions(+), 11 deletions(-)
diffs (280 lines):
diff -r e16b5418ddad -r 07a95c580a62
src-db/database/sourcedata/AD_TEXTINTERFACES.xml
--- a/src-db/database/sourcedata/AD_TEXTINTERFACES.xml Thu May 27 09:43:16
2010 +0200
+++ b/src-db/database/sourcedata/AD_TEXTINTERFACES.xml Fri May 28 11:19:37
2010 +0530
@@ -20949,6 +20949,17 @@
<!--8774D7A6B6394D45BCDBF20FE4B98832-->
<AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
<!--8774D7A6B6394D45BCDBF20FE4B98832--></AD_TEXTINTERFACES>
+<!--87A0893C88CE717CE040007F0101216D--><AD_TEXTINTERFACES>
+<!--87A0893C88CE717CE040007F0101216D-->
<AD_TEXTINTERFACES_ID><![CDATA[87A0893C88CE717CE040007F0101216D]]></AD_TEXTINTERFACES_ID>
+<!--87A0893C88CE717CE040007F0101216D-->
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--87A0893C88CE717CE040007F0101216D--> <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--87A0893C88CE717CE040007F0101216D--> <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--87A0893C88CE717CE040007F0101216D--> <TEXT><![CDATA[Select Price from
Price List]]></TEXT>
+<!--87A0893C88CE717CE040007F0101216D-->
<FILENAME><![CDATA[/org/openbravo/erpCommon/ad_actionButton/CopyFromInvoice.html]]></FILENAME>
+<!--87A0893C88CE717CE040007F0101216D--> <ISUSED><![CDATA[Y]]></ISUSED>
+<!--87A0893C88CE717CE040007F0101216D-->
<AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
+<!--87A0893C88CE717CE040007F0101216D--></AD_TEXTINTERFACES>
+
<!--87A92A55A82A41EA9439A2A15B2E5B8C--><AD_TEXTINTERFACES>
<!--87A92A55A82A41EA9439A2A15B2E5B8C-->
<AD_TEXTINTERFACES_ID><![CDATA[87A92A55A82A41EA9439A2A15B2E5B8C]]></AD_TEXTINTERFACES_ID>
<!--87A92A55A82A41EA9439A2A15B2E5B8C-->
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
diff -r e16b5418ddad -r 07a95c580a62
src/org/openbravo/erpCommon/ad_actionButton/CopyFromInvoice.html
--- a/src/org/openbravo/erpCommon/ad_actionButton/CopyFromInvoice.html Thu May
27 09:43:16 2010 +0200
+++ b/src/org/openbravo/erpCommon/ad_actionButton/CopyFromInvoice.html Fri May
28 11:19:37 2010 +0530
@@ -171,7 +171,14 @@
<td></td>
<td></td>
</tr>
-
+ <tr>
+ <td class="TitleCell">
+ <span class="LabelText">Select Price from Price
List</span>
+ </td>
+ <td class="Radio_Check_ContentCell"><span
class="Checkbox_container_NOT_Focused"><input type="checkbox"
onfocus="putFocusCheckbox(this); return true;"
onblur="removeFocusCheckbox(this); return true;" class="Checkbox_NOT_Focused"
name="inpPriceList" value="Y" id="paramPriceList"></input></span></td>
+ <td></td>
+ <td></td>
+ </tr>
<tr><td height="20px"></td></tr>
<tr>
diff -r e16b5418ddad -r 07a95c580a62
src/org/openbravo/erpCommon/ad_actionButton/CopyFromInvoice.java
--- a/src/org/openbravo/erpCommon/ad_actionButton/CopyFromInvoice.java Thu May
27 09:43:16 2010 +0200
+++ b/src/org/openbravo/erpCommon/ad_actionButton/CopyFromInvoice.java Fri May
28 11:19:37 2010 +0530
@@ -20,6 +20,7 @@
import java.io.IOException;
import java.io.PrintWriter;
+import java.math.BigDecimal;
import java.sql.Connection;
import javax.servlet.ServletConfig;
@@ -30,6 +31,7 @@
import org.openbravo.base.secureApp.HttpSecureAppServlet;
import org.openbravo.base.secureApp.VariablesSecureApp;
import org.openbravo.erpCommon.businessUtility.Tax;
+import org.openbravo.erpCommon.utility.DateTimeData;
import org.openbravo.erpCommon.utility.OBError;
import org.openbravo.erpCommon.utility.SequenceIdData;
import org.openbravo.erpCommon.utility.Utility;
@@ -58,12 +60,12 @@
String strInvoice = vars.getStringParameter("inpNewcInvoiceId");
String strWindow = vars.getStringParameter("inpwindowId");
String strTab = vars.getStringParameter("inpTabId");
-
+ String strPriceListCheck = vars.getStringParameter("inpPriceList");
String strWindowPath = Utility.getTabURL(this, strTab, "R");
if (strWindowPath.equals(""))
strWindowPath = strDefaultServlet;
- OBError myError = processButton(vars, strKey, strInvoice, strWindow);
+ OBError myError = processButton(vars, strKey, strInvoice,
strWindow,strPriceListCheck);
vars.setMessage(strTab, myError);
printPageClosePopUp(response, vars, strWindowPath);
} else
@@ -71,7 +73,7 @@
}
private OBError processButton(VariablesSecureApp vars, String strKey, String
strInvoice,
- String windowId) {
+ String windowId, String strPriceListCheck) {
int i = 0;
OBError myError = null;
Connection conn = null;
@@ -85,6 +87,22 @@
for (i = 0; i < data.length; i++) {
String strSequence = SequenceIdData.getUUID();
try {
+ String strDateInvoiced = "";
+ String strInvPriceList = "";
+ String strBPartnerId = "";
+ String strPricePrecision = "0";
+ String strmProductId = "";
+ String strQty = "";
+ String priceactual = "";
+ String pricestd = "";
+ String pricelist = "";
+ String pricelimit = "";
+ String linenetamt = "";
+ strDateInvoiced = dataInvoice[0].dateinvoiced;
+ strInvPriceList = dataInvoice[0].mPricelistId;
+ strBPartnerId = dataInvoice[0].mPricelistId;
+ strmProductId = data[i].productId;
+ strQty = data[i].qtyinvoiced;
String strWindowId = vars.getStringParameter("inpwindowId");
String strWharehouse = Utility.getContext(this, vars,
"#M_Warehouse_ID", strWindowId);
String strIsSOTrx = Utility.getContext(this, vars, "isSOTrx",
strWindowId);
@@ -94,8 +112,63 @@
dataInvoice[0].cBpartnerLocationId, dataInvoice[0].cProjectId,
strIsSOTrx
.equals("Y"));
+ if("Y".equals(strPriceListCheck)){
+
+ CopyFromInvoiceData[] invoicelineprice =
CopyFromInvoiceData.selectPriceForProduct(this,
+ strmProductId,
strInvPriceList);
+ for (int j = 0; invoicelineprice != null && j <
invoicelineprice.length; j++) {
+ if (invoicelineprice[j].validfrom == null
+ || invoicelineprice[j].validfrom.equals("")
+ || !DateTimeData.compare(this,
DateTimeData.today(this),
+ invoicelineprice[j].validfrom).equals("-1"))
+ {
+ pricestd = invoicelineprice[j].pricestd;
+ pricelist =
invoicelineprice[j].pricelist;
+ pricelimit =
invoicelineprice[j].pricelimit;
+ CopyFromInvoiceData[] invoicePriceList
= CopyFromInvoiceData.selectInvoicePricelist(
+ this, strKey);
+ if (invoicePriceList != null &&
invoicePriceList.length > 0) {
+ strPricePrecision =
invoicePriceList[0].priceprecision.equals("") ? "0"
+ :
invoicePriceList[0].priceprecision;
+ }
+ int PricePrecision =
Integer.valueOf(strPricePrecision).intValue();
+
+ BigDecimal priceStd, priceActual,
qtyInvoiced, lineNetAmt;
+
+ priceStd = (pricestd.equals("") ?
BigDecimal.ZERO : (new BigDecimal(pricestd))).setScale(
+ PricePrecision,
BigDecimal.ROUND_HALF_UP);
+ qtyInvoiced =
(data[i].qtyinvoiced.equals("") ? BigDecimal.ZERO : new BigDecimal(
+ data[i].qtyinvoiced));
+ // Calculate price adjustments (offers)
+ priceActual = new
BigDecimal(CopyFromInvoiceData.getOffersStdPrice(this, strBPartnerId,
+ pricestd, strmProductId,
strDateInvoiced, strQty, strInvPriceList, strKey));
+ if (priceActual.scale() >
PricePrecision)
+ priceActual =
priceActual.setScale(PricePrecision, BigDecimal.ROUND_HALF_UP);
+ // Calculate line net amount
+ lineNetAmt =
qtyInvoiced.multiply(priceActual);
+ if (lineNetAmt.scale() > PricePrecision)
+ lineNetAmt =
lineNetAmt.setScale(PricePrecision, BigDecimal.ROUND_HALF_UP);
+ pricestd = priceStd.toString();
+ priceactual = priceActual.toString();
+ linenetamt = lineNetAmt.toString();
+ }
+ }
+ if (pricestd.equals(""))
+ pricestd = "0";
+ if (pricelist.equals(""))
+ pricelist = "0";
+ if (pricelimit.equals(""))
+ pricelimit = "0";
+ if (priceactual.equals(""))
+ priceactual = "0";
+ } else {
+ pricelist = data[i].pricelist;
+ pricelimit = data[i].pricelimit;
+ priceactual = data[i].priceactual;
+ linenetamt = data[i].linenetamt;
+ }
CopyFromInvoiceData.insert(conn, this, strSequence, strKey,
dataInvoice[0].adClientId,
- dataInvoice[0].adOrgId, vars.getUser(),
data[i].cInvoicelineId, strCTaxID);
+ dataInvoice[0].adOrgId, vars.getUser(),
data[i].cInvoicelineId,pricelist ,priceactual ,pricelimit
,linenetamt,strCTaxID);
// Copy accounting dimensions
CopyFromInvoiceData.insertAcctDimension(conn, this,
dataInvoice[0].adClientId, dataInvoice[0].adOrgId, vars.getUser(), strSequence,
data[i].cInvoicelineId);
diff -r e16b5418ddad -r 07a95c580a62
src/org/openbravo/erpCommon/ad_actionButton/CopyFromInvoice_data.xsql
--- a/src/org/openbravo/erpCommon/ad_actionButton/CopyFromInvoice_data.xsql
Thu May 27 09:43:16 2010 +0200
+++ b/src/org/openbravo/erpCommon/ad_actionButton/CopyFromInvoice_data.xsql
Fri May 28 11:19:37 2010 +0530
@@ -27,8 +27,13 @@
<SqlMethodComment></SqlMethodComment>
<Sql>
<![CDATA[
- SELECT C_InvoiceLine_ID, '' AS AD_ORG_ID, '' AS AD_CLIENT_ID, '' AS
C_BPartner_Location_ID,
- '' AS DateInvoiced, '' AS C_Project_ID, M_PRODUCT_ID AS PRODUCT_ID
FROM C_InvoiceLine
+ SELECT C_UOM_ID, QTYINVOICED, C_InvoiceLine_ID,PRICELIST, PRICELIMIT,
PRICEACTUAL, LINENETAMT, '' AS AD_ORG_ID, '' AS AD_CLIENT_ID, '' AS
C_BPartner_Location_ID,
+ '' AS DateInvoiced, '' AS C_Project_ID, M_PRODUCT_ID AS PRODUCT_ID,
+ '' AS C_BPARTNER_ID, '' AS C_CURRENCY_ID,
+ '' AS M_PRICELIST_ID, '' AS LINE,
+ '' AS ISSOTRX, '' AS TAXDATE,
+ '' AS PRICESTD, '' AS VALIDFROM,
+ '' AS StdPrecision, '' AS PricePrecision, '' AS EnforcePriceLimit FROM
C_InvoiceLine
WHERE C_Invoice_ID = ?
AND AD_CLIENT_ID IN ('1')
AND AD_ORG_ID IN ('1')
@@ -50,7 +55,7 @@
PRICESTD)
SELECT ?, ?, ?, ?, 'Y', now(), ?, now(), ?,
(SELECT COALESCE(MAX(LINE),0)+10 FROM C_InvoiceLine WHERE
C_InvoiceLine_ID = ?), DESCRIPTION, M_PRODUCT_ID,
- QTYINVOICED, PRICELIST, PRICEACTUAL, PRICELIMIT, LINENETAMT,
C_CHARGE_ID, CHARGEAMT, C_UOM_ID, ?,
+ QTYINVOICED, ?, ?, ?, ?, C_CHARGE_ID, CHARGEAMT, C_UOM_ID, ?,
S_RESOURCEASSIGNMENT_ID, TAXAMT, M_ATTRIBUTESETINSTANCE_ID,
ISDESCRIPTION, QUANTITYORDER, M_PRODUCT_UOM_ID,
PRICESTD
FROM C_INVOICELINE
@@ -64,6 +69,10 @@
<Parameter name="adUserId"/>
<Parameter name="adUserId"/>
<Parameter name="cInvoicelineId"/>
+ <Parameter name="priceList"/>
+ <Parameter name="priceActual"/>
+ <Parameter name="priceLimit"/>
+ <Parameter name="lineNetAmount"/>
<Parameter name="cTaxId"/>
<Parameter name="cInvoicelineId"/>
</SqlMethod>
@@ -89,11 +98,66 @@
<SqlMethodComment></SqlMethodComment>
<Sql>
<![CDATA[
- SELECT
AD_ORG_ID,AD_CLIENT_ID,C_BPartner_Location_ID,DateInvoiced,C_Project_ID FROM
C_Invoice
- WHERE C_Invoice_ID = ?
- AND ISACTIVE = 'Y'
+ SELECT
I.AD_ORG_ID,I.AD_CLIENT_ID,I.C_BPartner_Location_ID,I.DateInvoiced,I.C_Project_ID,
+
I.C_Bpartner_ID,I.C_Currency_ID,I.M_Pricelist_ID,COALESCE(MAX(IL.Line),0) AS
LINE,I.IsSOTrx AS ISSOTRX, I.TaxDate,
+ IL.PRICELIST, IL.PRICEACTUAL, IL.PRICELIMIT, IL.LINENETAMT
+ FROM C_Invoice I LEFT JOIN C_INVOICELINE IL ON I.C_INVOICE_ID =
IL.C_INVOICE_ID
+ WHERE I.C_Invoice_ID = ?
+ AND I.ISACTIVE = 'Y'
+ GROUP BY
I.AD_ORG_ID,I.AD_CLIENT_ID,I.C_BPartner_Location_ID,I.DateInvoiced,I.C_Project_ID,
+ I.C_Bpartner_ID,I.C_Currency_ID,I.M_Pricelist_ID,I.IsSOTrx,
I.TaxDate,IL.PRICELIST, IL.PRICEACTUAL, IL.PRICELIMIT, IL.LINENETAMT
]]>
</Sql>
<Parameter name="cInvoiceId"/>
</SqlMethod>
+ <SqlMethod name="selectPriceForProduct" type="preparedStatement"
return="multiple">
+ <SqlMethodComment></SqlMethodComment>
+ <Sql>
+ <![CDATA[
+ SELECT M_BOM_PriceStd(p.M_Product_ID,pv.M_PriceList_Version_ID) AS
PriceStd,
+ M_BOM_PriceList(p.M_Product_ID,pv.M_PriceList_Version_ID) AS PriceList,
+ M_BOM_PriceLimit(p.M_Product_ID,pv.M_PriceList_Version_ID) AS
PriceLimit,
+ p.C_UOM_ID,pv.ValidFrom,pl.C_Currency_ID
+ FROM M_Product p, M_ProductPrice pp, M_Pricelist pl,
M_PriceList_Version pv
+ WHERE p.M_Product_ID=pp.M_Product_ID
+ AND pp.M_PriceList_Version_ID=pv.M_PriceList_Version_ID
+ AND pv.M_PriceList_ID=pl.M_PriceList_ID
+ AND pv.IsActive='Y'
+ AND p.M_Product_ID = ?
+ AND pl.M_PriceList_ID = ?
+ ORDER BY pv.ValidFrom DESC
+ ]]>
+ </Sql>
+ <Parameter name="MProductID"/>
+ <Parameter name="MPriceListID"/>
+ </SqlMethod>
+ <SqlMethod name="selectInvoicePricelist" type="preparedStatement"
return="multiple">
+ <SqlMethodComment></SqlMethodComment>
+ <Sql>
+ SELECT C_Currency.StdPrecision, C_Currency.PricePrecision,
M_PriceList.EnforcePriceLimit, M_PriceList.M_PriceList_ID
+ FROM C_Invoice, M_PriceList, C_Currency
+ WHERE C_Invoice.M_PriceList_ID = M_PriceList.M_PriceList_ID
+ AND M_PriceList.C_Currency_ID = C_Currency.C_Currency_ID
+ AND C_Invoice.C_Invoice_ID = ?
+ </Sql>
+ <Parameter name="cInvoiceId"/>
+ </SqlMethod>
+ <SqlMethod name="getOffersStdPrice" type="preparedStatement" return="String"
default="0">
+ <SqlMethodComment></SqlMethodComment>
+ <Sql>
+ SELECT ROUND(M_GET_OFFERS_STD_PRICE(?,TO_NUMBER(?),?,TO_DATE(?),
TO_NUMBER(?), ?),
+ (SELECT PRICEPRECISION
+ FROM C_CURRENCY C,
+ C_INVOICE I
+ WHERE C.C_CURRENCY_ID = I.C_CURRENCY_ID
+ AND I.C_INVOICE_ID = ?)) as TOTAL FROM DUAL
+ </Sql>
+ <Parameter name="cBpartnerId"/>
+ <Parameter name="pricestd"/>
+ <Parameter name="mProductId"/>
+ <Parameter name="dateinvoiced"/>
+ <Parameter name="qty"/>
+ <Parameter name="pricelist"/>
+ <Parameter name="invoiceid"/>
+ </SqlMethod>
</SqlClass>
------------------------------------------------------------------------------
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits