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

Reply via email to