Revert "Issue #24224:normalize margin calculations" revert-1714-24224
authorSteve Hackbarth <stephenhackbarth@gmail.com>
Fri, 1 Aug 2014 15:29:20 +0000 (11:29 -0400)
committerSteve Hackbarth <stephenhackbarth@gmail.com>
Fri, 1 Aug 2014 15:29:20 +0000 (11:29 -0400)
foundation-database/public/functions/calcinvoiceamt.sql
foundation-database/public/functions/calcsalesorderamt.sql
foundation-database/public/tables/metasql/bookings-detail.mql
foundation-database/public/tables/metasql/briefSalesHistory-detail.mql
foundation-database/public/tables/metasql/invoices-detail.mql
foundation-database/public/tables/metasql/opensalesorders-detail.mql
foundation-database/public/tables/metasql/salesHistory-detail.mql
foundation-database/public/views/saleshistory.sql

index a60452d..fb79c3f 100644 (file)
@@ -37,7 +37,7 @@ BEGIN
   WHERE (invcitem_invchead_id=pInvcheadid);
 
   IF (pType IN ('T', 'X')) THEN
-    SELECT COALESCE(SUM(tax), 0.0) INTO _tax
+    SELECT SUM(tax) INTO _tax
     FROM (SELECT COALESCE(ROUND(SUM(taxdetail_tax), 2), 0.0) AS tax
           FROM tax
                JOIN calculateTaxDetailSummary('I', pInvcheadid, 'T')ON (taxdetail_tax_id=tax_id)
index cf11cab..0f4def9 100644 (file)
@@ -41,7 +41,7 @@ BEGIN
     AND (coitem_status != 'X');
 
   IF (pType IN ('T', 'B', 'X')) THEN
-    SELECT COALESCE(SUM(tax), 0.0) INTO _tax
+    SELECT SUM(tax) INTO _tax
     FROM (SELECT COALESCE(ROUND(SUM(taxdetail_tax), 2), 0.0) AS tax
           FROM tax
                JOIN calculateTaxDetailSummary('S', pCoheadid, 'T')ON (taxdetail_tax_id=tax_id)
index 28a6f08..6214403 100644 (file)
@@ -29,21 +29,6 @@ SELECT   coitem_id AS id, coitem_cohead_id AS altId,
                      (coitem_price / coitem_price_invuomratio), 2) AS extpricebalance,
          round((noNeg(coitem_qtyord - coitem_qtyshipped + coitem_qtyreturned) * coitem_qty_invuomratio) *
                      (currtobase(cohead_curr_id, coitem_price, cohead_orderdate) / coitem_price_invuomratio), 2) AS baseextpricebalance,
-         round((coitem_qtyord * coitem_qty_invuomratio) *
-                     (coitem_unitcost / coitem_price_invuomratio), 2) AS extcost,
-         (round((coitem_qtyord * coitem_qty_invuomratio) *
-                     (currtobase(cohead_curr_id, coitem_price, cohead_orderdate) / coitem_price_invuomratio), 2) -
-          round((coitem_qtyord * coitem_qty_invuomratio) *
-                     (coitem_unitcost / coitem_price_invuomratio), 2)) AS margin,
-         CASE WHEN (coitem_price > 0.0) THEN
-           (round((coitem_qtyord * coitem_qty_invuomratio) *
-                       (currtobase(cohead_curr_id, coitem_price, cohead_orderdate) / coitem_price_invuomratio), 2) -
-            round((coitem_qtyord * coitem_qty_invuomratio) *
-                       (coitem_unitcost / coitem_price_invuomratio), 2)) /
-            round((coitem_qtyord * coitem_qty_invuomratio) *
-                       (currtobase(cohead_curr_id, coitem_price, cohead_orderdate) / coitem_price_invuomratio), 2)
-              ELSE 0.0
-         END AS marginpercent,
          curr_abbr AS currAbbr,
 -- TODO - not needed, remove? (very slow)
 --         CASE WHEN (qtyAvailable(itemsite_id, coitem_scheddate) < 0.0) THEN 'error'
@@ -58,11 +43,7 @@ SELECT   coitem_id AS id, coitem_cohead_id AS altId,
        'qty' AS qtyavailable_xtnumericrole,
        'salesprice' AS coitem_price_xtnumericrole,
        'salesprice' AS baseunitprice_xtnumericrole,
-       'cost' AS coitem_unitcost_xtnumericrole,
        'curr' AS extprice_xtnumericrole,
-       'curr' AS extcost_xtnumericrole,
-       'curr' AS margin_xtnumericrole,
-       'percent' AS marginpercent_xtnumericrole,
        'curr' AS baseextprice_xtnumericrole,
        'curr' AS extpricebalance_xtnumericrole,
        'curr' AS baseextpricebalance_xtnumericrole,
index b79e353..8dc7a25 100644 (file)
@@ -7,28 +7,15 @@
 SELECT
        COALESCE(cohead_id,-1) AS cohead_id, cust_id, cohist_ponumber,
        cust_custtype_id, custtype_code,
-       cohist_cust_id, cohist_ordernumber,
-       cust_number, cust_name, currAbbr,
-       CASE WHEN (cohist_invcnumber='-1') THEN  <? value("credit") ?>
-            ELSE cohist_invcnumber
-       END AS invoicenumber,
-       cohist_orderdate, cohist_invcdate,
-       SUM(extprice) AS extprice,
-       SUM(baseextprice) AS baseextprice,
-       SUM(extcost) AS extcost,
-       SUM(margin) AS margin,
-       CASE WHEN (SUM(baseextprice) > 0.0) THEN
-            ROUND(SUM(margin) / SUM(baseextprice), 4)
-            ELSE 0.0
-       END AS marginpercent,
-       'curr' AS extprice_xtnumericrole,
-       'curr' AS baseextprice_xtnumericrole,
+       cohist_cust_id, SUM(extcost) AS extcost,
        'curr' AS extcost_xtnumericrole,
-       'curr' AS margin_xtnumericrole,
-       'percent' AS marginpercent_xtnumericrole,
-       0 AS baseextprice_xttotalrole,
        0 AS extcost_xttotalrole,
-       0 AS margin_xttotalrole
+       cohist_ordernumber,
+       cust_number, cust_name, invoicenumber,
+       cohist_orderdate, cohist_invcdate,
+       SUM(baseextprice) AS extended,
+       'curr' AS extended_xtnumericrole,
+       0 AS extended_xttotalrole
 FROM saleshistory
   LEFT OUTER JOIN cohead ON (cohead_number=cohist_ordernumber)
 WHERE ((cohist_invcdate BETWEEN <? value("startDate") ?> AND  <? value("endDate") ?>)
@@ -73,8 +60,7 @@ WHERE ((cohist_invcdate BETWEEN <? value("startDate") ?> AND  <? value("endDate"
    AND (cohist_salesrep_id=<? value("salesrep_id") ?>)
 <? endif ?>
       )
-GROUP BY cohead_id, cust_id, cust_number, cust_custtype_id,
-         cohist_cust_id, custtype_code, currAbbr,
-         cust_name, cohist_ordernumber, cohist_ponumber,
-         cohist_invcnumber, cohist_orderdate, cohist_invcdate
+GROUP BY cohead_id, cust_id,cust_number,cust_custtype_id,cohist_cust_id,custtype_code,
+         cust_name,cohist_ordernumber, cohist_ponumber,
+         invoicenumber,cohist_orderdate, cohist_invcdate
 ORDER BY cohist_invcdate, cohist_orderdate;
index 20b3648..67ee698 100644 (file)
@@ -29,16 +29,11 @@ SELECT invchead_id, cust_id,
          invchead_invcnumber AS docnumber,
          findCustomerForm(cust_id, 'I') AS reportname,
        <? endif ?>
-       CASE WHEN (calcInvoiceAmt(invchead_id,'S') != 0.0)
-              THEN calcInvoiceAmt(invchead_id,'M')
-            ELSE 0.0
-       END AS margin,
        CASE WHEN (calcInvoiceAmt(invchead_id,'S') != 0.0)
               THEN (calcInvoiceAmt(invchead_id,'M') / calcInvoiceAmt(invchead_id,'S'))
             ELSE 1.0
        END AS marginpercent,
        'percent' AS marginpercent_xtnumericrole,
-       'curr' AS margin_xtnumericrole,
        'curr' AS extprice_xtnumericrole,
        'curr' AS balance_xtnumericrole,
        CASE WHEN (aropen_id IS NULL) THEN 'Unposted' END AS balance_qtdisplayrole
index bb58084..81385aa 100644 (file)
@@ -20,17 +20,12 @@ SELECT DISTINCT
 <? endforeach ?>
        firstline(cohead_ordercomments) AS notes,
        calcSalesOrderAmt(cohead_id) AS ordertotal,
-       CASE WHEN (calcSalesOrderAmt(cohead_id,'S') != 0.0)
-              THEN calcSalesOrderAmt(cohead_id,'M')
-            ELSE 0.0
-       END AS ordermargin,
        CASE WHEN (calcSalesOrderAmt(cohead_id,'S') != 0.0)
               THEN (calcSalesOrderAmt(cohead_id,'M') / calcSalesOrderAmt(cohead_id,'S'))
             ELSE 1.0
        END AS ordermarginpercent,
        'percent' AS ordermarginpercent_xtnumericrole,
-       'extprice' AS ordertotal_xtnumericrole,
-       'extprice' AS ordermargin_xtnumericrole
+       'extprice' AS ordertotal_xtnumericrole
 FROM cohead 
      JOIN custinfo ON (cohead_cust_id=cust_id) 
      JOIN custtype ON (cust_custtype_id=custtype_id)
index c427dea..50da06f 100644 (file)
@@ -4,29 +4,58 @@
 --        Copyright (c) 1999-2014 by OpenMFG LLC, d/b/a xTuple.
 --        See www.xtuple.com/CPAL for the full text of the software license.
 
-SELECT *,
+SELECT cohist.*,
        CASE WHEN (cohist_invcnumber='-1') THEN  <? value("credit") ?>
             ELSE cohist_invcnumber
        END AS invoicenumber,
+       cust_number, cust_name, salesrep_name,
+       saletype_code, shipzone_name,
+       item_id, COALESCE(item_number, cohist_misc_descrip) AS item_number,
+       item_descrip1, (item_descrip1 || ' ' || item_descrip2) AS itemdescription,
+       warehous_code,
+       currtobase(cohist_curr_id, cohist_unitprice, cohist_invcdate) AS baseunitprice,
+       round((cohist_qtyshipped * cohist_unitprice), 2) AS extprice,
+       round((cohist_qtyshipped * currtobase(cohist_curr_id, cohist_unitprice, cohist_invcdate)), 2) AS baseextprice,
+       round((cohist_qtyshipped * cohist_unitcost), 4) AS extcost,
+       currtobase(cohist_curr_id, cohist_commission, cohist_invcdate) AS basecommission,
 <? if exists("isReport") ?>
        formatDate(cohist_invcdate) AS f_invcdate,
        formatQty(cohist_qtyshipped) AS f_qtyshipped,
        formatBoolYN(cohist_commissionpaid) AS f_commissionpaid,
-       formatSalesPrice(baseunitprice) AS f_baseunitprice,
-       formatMoney(extprice) AS f_extprice,
-       formatMoney(baseextprice) AS f_baseextprice,
-       formatMoney(extcost) AS f_extcost,
-       formatMoney(margin) AS f_margin,
-       formatPercent(marginpercent) AS f_marginpercent,
-       formatMoney(basecommission) AS f_basecommission,
+       formatSalesPrice(currtobase(cohist_curr_id, cohist_unitprice, cohist_invcdate)) AS f_baseunitprice,
+       formatMoney(round((cohist_qtyshipped * cohist_unitprice), 2)) AS f_extprice,
+       formatMoney(round((cohist_qtyshipped * currtobase(cohist_curr_id, cohist_unitprice, cohist_invcdate)), 2)) AS f_baseextprice,
+       formatMoney(round((cohist_qtyshipped * cohist_unitcost), 4)) AS f_extcost,
+       formatMoney(currtobase(cohist_curr_id, cohist_commission, cohist_invcdate)) AS f_basecommission,
 <? endif ?>
+       currConcat(cohist_curr_id) AS currAbbr,
        <? value("return") ?> AS cohist_invcdate_xtnullrole,
+       'qty' AS cohist_qtyshipped_xtnumericrole,
+       'salesprice' AS cohist_unitprice_xtnumericrole,
+       'salesprice' AS baseunitprice_xtnumericrole,
+       'curr' AS extprice_xtnumericrole,
+       'curr' AS baseextprice_xtnumericrole,
+       'cost' AS cohist_unitcost_xtnumericrole,
+       'curr' AS extcost_xtnumericrole,
+       'curr' AS cohist_commission_xtnumericrole,
+       'curr' AS basecommission_xtnumericrole,
        0 AS cohist_qtyshipped_xttotalrole,
        0 AS baseextprice_xttotalrole,
        0 AS extcost_xttotalrole,
-       0 AS margin_xttotalrole,
        0 AS basecommission_xttotalrole
-  FROM saleshistory
+  FROM cohist JOIN custinfo ON (cust_id=cohist_cust_id)
+              JOIN salesrep ON (salesrep_id=cohist_salesrep_id)
+              LEFT OUTER JOIN saletype ON (saletype_id=cohist_saletype_id)
+              LEFT OUTER JOIN shipzone ON (shipzone_id=cohist_shipzone_id)
+<? if exists("includeMisc") ?>
+              LEFT OUTER JOIN itemsite ON (itemsite_id=cohist_itemsite_id)
+              LEFT OUTER JOIN site() ON (warehous_id=itemsite_warehous_id)
+              LEFT OUTER JOIN item ON (item_id=itemsite_item_id)
+<? else ?>
+              JOIN itemsite ON (itemsite_id=cohist_itemsite_id)
+              JOIN site() ON (warehous_id=itemsite_warehous_id)
+              JOIN item ON (item_id=itemsite_item_id)
+<? endif ?>
 <? if exists("cohead_id") ?>
               JOIN cohead ON (cohead_number=cohist_ordernumber)
 <? endif ?>
@@ -34,8 +63,6 @@ WHERE ( (true)
 <? if exists("includeMisc") ?>
   AND  (COALESCE(cohist_misc_type, '') <> 'F')
   AND  (COALESCE(cohist_misc_type, '') <> 'T')
-<? else ?>
-  AND  (warehous_id IS NOT NULL)
 <? endif ?>
 <? if exists("startDate") ?>
   AND  (cohist_invcdate >= <? value("startDate") ?>)
index d648700..7db4ed2 100644 (file)
@@ -1,18 +1,21 @@
 SELECT dropIfExists('view', 'saleshistory');
 CREATE VIEW saleshistory AS
-SELECT *,
-       COALESCE(item_number, cohist_misc_descrip) AS itemnumber,
-       (item_descrip1 || ' ' || item_descrip2) AS itemdescription,
+SELECT cohist.*,
+       CASE WHEN (cohist_invcnumber='-1') THEN 'Credit'
+            ELSE cohist_invcnumber
+       END AS invoicenumber,
+       cust_id, cust_number, cust_name, cust_curr_id, cust_custtype_id, custtype_code, custtype_descrip,
+       salesrep_number, salesrep_name, shipzone_id, shipzone_name, shipzone_descrip,
+       itemsite_warehous_id, itemsite_item_id,
+       item_id, item_number, item_descrip1, (item_descrip1 || ' ' || item_descrip2) AS itemdescription,
+       item_prodcat_id, warehous_code, warehous_descrip, prodcat_code,
+       currtobase(cohist_curr_id, cohist_commission, cohist_invcdate) AS basecommission,
+       currtobase(cohist_curr_id, cohist_unitprice, cohist_invcdate) AS baseunitprice,
+       currtocurr(cohist_curr_id, cust_curr_id, cohist_unitprice, cohist_invcdate) AS custunitprice,
        round((cohist_qtyshipped * cohist_unitprice), 2) AS extprice,
-       round((cohist_qtyshipped * baseunitprice), 2) AS baseextprice,
-       round((cohist_qtyshipped * custunitprice), 2) AS custextprice,
+       round((cohist_qtyshipped * currtobase(cohist_curr_id, cohist_unitprice, cohist_invcdate)), 2) AS baseextprice,
+       round((cohist_qtyshipped * currtocurr(cohist_curr_id, cust_curr_id, cohist_unitprice, cohist_invcdate)), 2) AS custextprice,
        round((cohist_qtyshipped * cohist_unitcost), 4) AS extcost,
-       round((cohist_qtyshipped * baseunitprice) - (cohist_qtyshipped * cohist_unitcost), 2) AS margin,
-       CASE WHEN (cohist_qtyshipped * baseunitprice > 0.0) THEN
-            (round((cohist_qtyshipped * baseunitprice) - (cohist_qtyshipped * cohist_unitcost), 2) /
-             round((cohist_qtyshipped * baseunitprice), 2))
-            ELSE 0.0
-       END AS marginpercent,
        currConcat(cohist_curr_id) AS currAbbr,
        'Return'::TEXT AS cohist_invcdate_xtnullrole,
        'qty'::TEXT AS cohist_qtyshipped_xtnumericrole,
@@ -24,26 +27,22 @@ SELECT *,
        'curr'::TEXT AS baseextprice_xtnumericrole,
        'cost'::TEXT AS cohist_unitcost_xtnumericrole,
        'curr'::TEXT AS extcost_xtnumericrole,
-       'curr'::TEXT AS margin_xtnumericrole,
-       'percent'::TEXT AS marginpercent_xtnumericrole,
        'curr'::TEXT AS cohist_commission_xtnumericrole,
-       'curr'::TEXT AS basecommission_xtnumericrole
-FROM (
-SELECT *,
-       currtobase(cohist_curr_id, cohist_commission, cohist_invcdate) AS basecommission,
-       currtobase(cohist_curr_id, cohist_unitprice, cohist_invcdate) AS baseunitprice,
-       currtocurr(cohist_curr_id, cust_curr_id, cohist_unitprice, cohist_invcdate) AS custunitprice
+       'curr'::TEXT AS basecommission_xtnumericrole,
+       0 AS cohist_qtyshipped_xttotalrole,
+       0 AS custextprice_xttotalrole,
+       0 AS baseextprice_xttotalrole,
+       0 AS extcost_xttotalrole,
+       0 AS basecommission_xttotalrole
 FROM cohist JOIN custinfo ON (cust_id=cohist_cust_id)
             JOIN custtype ON (custtype_id=cust_custtype_id)
             JOIN salesrep ON (salesrep_id=cohist_salesrep_id)
-            LEFT OUTER JOIN itemsite ON (itemsite_id=cohist_itemsite_id)
-            LEFT OUTER JOIN site() ON (warehous_id=itemsite_warehous_id)
-            LEFT OUTER JOIN item ON (item_id=itemsite_item_id)
-            LEFT OUTER JOIN prodcat ON (prodcat_id=item_prodcat_id)
+            JOIN itemsite ON (itemsite_id=cohist_itemsite_id)
+            JOIN site() ON (warehous_id=itemsite_warehous_id)
+            JOIN item ON (item_id=itemsite_item_id)
+            JOIN prodcat ON (prodcat_id=item_prodcat_id)
             LEFT OUTER JOIN shiptoinfo ON (shipto_id=cohist_shipto_id)
-            LEFT OUTER JOIN shipzone ON (shipzone_id=shipto_shipzone_id)
-            LEFT OUTER JOIN saletype ON (saletype_id=cohist_saletype_id)
-     ) AS data;
+            LEFT OUTER JOIN shipzone ON (shipzone_id=shipto_shipzone_id);
 
 REVOKE ALL ON TABLE saleshistory FROM PUBLIC;
 GRANT  ALL ON TABLE saleshistory TO GROUP xtrole;