From 1807441b2b3b3116fa4f2a18832af86343c87149 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Wed, 27 May 2015 16:43:51 -0500 Subject: [PATCH] IDEMPIERE-2550 Invoice Detail & Margin Report: Margin and Discount should be -ve for credit transactions --- db/ddlutils/oracle/views/RV_C_INVOICELINE.sql | 6 +- .../postgresql/views/RV_C_INVOICELINE.sql | 8 +- .../oracle/201505271631_IDEMPIERE-2550.sql | 145 ++++++++++++++++++ .../201505271631_IDEMPIERE-2550.sql | 145 ++++++++++++++++++ 4 files changed, 297 insertions(+), 7 deletions(-) create mode 100644 migration/i2.1/oracle/201505271631_IDEMPIERE-2550.sql create mode 100644 migration/i2.1/postgresql/201505271631_IDEMPIERE-2550.sql diff --git a/db/ddlutils/oracle/views/RV_C_INVOICELINE.sql b/db/ddlutils/oracle/views/RV_C_INVOICELINE.sql index 5c9feebb8c..d3d1a453af 100644 --- a/db/ddlutils/oracle/views/RV_C_INVOICELINE.sql +++ b/db/ddlutils/oracle/views/RV_C_INVOICELINE.sql @@ -39,13 +39,13 @@ SELECT il.ad_client_id, il.priceentered, CASE WHEN il.pricelist = 0 THEN 0 ELSE currencyRound((il.pricelist - il.priceactual) / il.pricelist * 100,i.C_Currency_ID,'N') END AS discount, CASE WHEN il.pricelimit = 0 THEN 0 ELSE currencyRound((il.priceactual - il.pricelimit) / il.pricelimit * 100,i.C_Currency_ID,'N') END AS margin, - CASE WHEN il.pricelimit = 0 THEN 0 ELSE (il.priceactual - il.pricelimit) * il.qtyinvoiced END AS marginamt, + CASE WHEN il.pricelimit = 0 THEN 0 ELSE (il.priceactual - il.pricelimit) * il.qtyinvoiced * i.multiplier END AS marginamt, currencyRound(i.multiplier * il.linenetamt,i.C_Currency_ID,'N') AS linenetamt, currencyRound(i.multiplier * il.pricelist * il.qtyinvoiced,i.C_Currency_ID,'N') AS linelistamt, CASE WHEN COALESCE(il.pricelimit, 0) = 0 THEN currencyRound(i.multiplier * il.linenetamt,i.C_Currency_ID,'N') ELSE currencyRound(i.multiplier * il.pricelimit * il.qtyinvoiced,i.C_Currency_ID,'N') END AS linelimitamt, - currencyRound(i.multiplier * il.pricelist * il.qtyinvoiced - il.linenetamt,i.C_Currency_ID,'N') AS linediscountamt, - CASE WHEN COALESCE(il.pricelimit, 0) = 0 THEN 0 ELSE currencyRound(i.multiplier * il.linenetamt - il.pricelimit * il.qtyinvoiced,i.C_Currency_ID,'N') END AS + currencyRound(i.multiplier * (il.pricelist * il.qtyinvoiced - il.linenetamt),i.C_Currency_ID,'N') AS linediscountamt, + CASE WHEN COALESCE(il.pricelimit, 0) = 0 THEN 0 ELSE currencyRound(i.multiplier * (il.linenetamt - il.pricelimit * il.qtyinvoiced),i.C_Currency_ID,'N') END AS lineoverlimitamt, il.ad_orgtrx_id, il.a_processed, diff --git a/db/ddlutils/postgresql/views/RV_C_INVOICELINE.sql b/db/ddlutils/postgresql/views/RV_C_INVOICELINE.sql index 1c6bc203ad..d3d1a453af 100644 --- a/db/ddlutils/postgresql/views/RV_C_INVOICELINE.sql +++ b/db/ddlutils/postgresql/views/RV_C_INVOICELINE.sql @@ -1,4 +1,4 @@ -CREATE OR REPLACE VIEW rv_c_invoiceline AS +CREATE OR REPLACE VIEW rv_c_invoiceline AS SELECT il.ad_client_id, il.ad_org_id, il.isactive, @@ -39,13 +39,13 @@ SELECT il.ad_client_id, il.priceentered, CASE WHEN il.pricelist = 0 THEN 0 ELSE currencyRound((il.pricelist - il.priceactual) / il.pricelist * 100,i.C_Currency_ID,'N') END AS discount, CASE WHEN il.pricelimit = 0 THEN 0 ELSE currencyRound((il.priceactual - il.pricelimit) / il.pricelimit * 100,i.C_Currency_ID,'N') END AS margin, - CASE WHEN il.pricelimit = 0 THEN 0 ELSE (il.priceactual - il.pricelimit) * il.qtyinvoiced END AS marginamt, + CASE WHEN il.pricelimit = 0 THEN 0 ELSE (il.priceactual - il.pricelimit) * il.qtyinvoiced * i.multiplier END AS marginamt, currencyRound(i.multiplier * il.linenetamt,i.C_Currency_ID,'N') AS linenetamt, currencyRound(i.multiplier * il.pricelist * il.qtyinvoiced,i.C_Currency_ID,'N') AS linelistamt, CASE WHEN COALESCE(il.pricelimit, 0) = 0 THEN currencyRound(i.multiplier * il.linenetamt,i.C_Currency_ID,'N') ELSE currencyRound(i.multiplier * il.pricelimit * il.qtyinvoiced,i.C_Currency_ID,'N') END AS linelimitamt, - currencyRound(i.multiplier * il.pricelist * il.qtyinvoiced - il.linenetamt,i.C_Currency_ID,'N') AS linediscountamt, - CASE WHEN COALESCE(il.pricelimit, 0) = 0 THEN 0 ELSE currencyRound(i.multiplier * il.linenetamt - il.pricelimit * il.qtyinvoiced,i.C_Currency_ID,'N') END AS + currencyRound(i.multiplier * (il.pricelist * il.qtyinvoiced - il.linenetamt),i.C_Currency_ID,'N') AS linediscountamt, + CASE WHEN COALESCE(il.pricelimit, 0) = 0 THEN 0 ELSE currencyRound(i.multiplier * (il.linenetamt - il.pricelimit * il.qtyinvoiced),i.C_Currency_ID,'N') END AS lineoverlimitamt, il.ad_orgtrx_id, il.a_processed, diff --git a/migration/i2.1/oracle/201505271631_IDEMPIERE-2550.sql b/migration/i2.1/oracle/201505271631_IDEMPIERE-2550.sql new file mode 100644 index 0000000000..de302c0be6 --- /dev/null +++ b/migration/i2.1/oracle/201505271631_IDEMPIERE-2550.sql @@ -0,0 +1,145 @@ +CREATE OR REPLACE VIEW rv_c_invoiceline AS +SELECT il.ad_client_id, + il.ad_org_id, + il.isactive, + il.created, + il.createdby, + il.updated, + il.updatedby, + il.c_invoiceline_id, + i.c_invoice_id, + i.salesrep_id, + i.c_bpartner_id, + i.c_bp_group_id, + il.m_product_id, + p.m_product_category_id, + i.dateinvoiced, + i.dateacct, + i.issotrx, + i.c_doctype_id, + i.docstatus, + i.ispaid, + il.c_campaign_id, + il.c_project_id, + il.c_activity_id, + il.c_projectphase_id, + il.c_projecttask_id, + il.qtyinvoiced * i.multiplier AS qtyinvoiced, + il.qtyentered * i.multiplier AS qtyentered, + il.m_attributesetinstance_id, + productattribute(il.m_attributesetinstance_id) AS productattribute, + pasi.m_attributeset_id, + pasi.m_lot_id, + pasi.guaranteedate, + pasi.lot, + pasi.serno, + il.pricelist, + il.priceactual, + il.pricelimit, + il.priceentered, + CASE WHEN il.pricelist = 0 THEN 0 ELSE currencyRound((il.pricelist - il.priceactual) / il.pricelist * 100,i.C_Currency_ID,'N') END AS discount, + CASE WHEN il.pricelimit = 0 THEN 0 ELSE currencyRound((il.priceactual - il.pricelimit) / il.pricelimit * 100,i.C_Currency_ID,'N') END AS margin, + CASE WHEN il.pricelimit = 0 THEN 0 ELSE (il.priceactual - il.pricelimit) * il.qtyinvoiced * i.multiplier END AS marginamt, + currencyRound(i.multiplier * il.linenetamt,i.C_Currency_ID,'N') AS linenetamt, + currencyRound(i.multiplier * il.pricelist * il.qtyinvoiced,i.C_Currency_ID,'N') AS linelistamt, + CASE WHEN COALESCE(il.pricelimit, 0) = 0 THEN currencyRound(i.multiplier * il.linenetamt,i.C_Currency_ID,'N') ELSE currencyRound(i.multiplier * il.pricelimit * il.qtyinvoiced,i.C_Currency_ID,'N') END + AS linelimitamt, + currencyRound(i.multiplier * (il.pricelist * il.qtyinvoiced - il.linenetamt),i.C_Currency_ID,'N') AS linediscountamt, + CASE WHEN COALESCE(il.pricelimit, 0) = 0 THEN 0 ELSE currencyRound(i.multiplier * (il.linenetamt - il.pricelimit * il.qtyinvoiced),i.C_Currency_ID,'N') END AS + lineoverlimitamt, + il.ad_orgtrx_id, + il.a_processed, + il.c_charge_id, + il.c_orderline_id, + il.c_tax_id, + il.c_uom_id AS c_invoiceline_c_uom_id, + il.description AS c_invoiceline_description, + il.isdescription, + il.isprinted, + il.line, + il.linenetamt AS c_invoiceline_linenetamt, + il.linetotalamt, + il.m_inoutline_id, + il.m_rmaline_id, + il.processed, + il.ref_invoiceline_id, + il.rramt, + il.rrstartdate, + il.s_resourceassignment_id, + il.taxamt, + il.user1_id, + il.user2_id, + p.ad_org_id AS m_product_ad_org_id, + p.classification, + p.copyfrom AS m_product_copyfrom, + p.created AS m_product_created, + p.createdby AS m_product_createdby, + p.c_revenuerecognition_id, + p.c_subscriptiontype_id, + p.c_taxcategory_id, + p.c_uom_id AS m_productline_c_uom_id, + p.description AS m_product_description, + p.descriptionurl, + p.discontinued, + p.discontinuedat, + p.documentnote, + p.group1, + p.group2, + p.guaranteedays, + p.guaranteedaysmin, + p.help, + p.imageurl, + p.isactive AS m_product_isactive, + p.isdropship, + p.isexcludeautodelivery, + p.isinvoiceprintdetails, + p.ispicklistprintdetails, + p.ispurchased, + p.isselfservice, + p.issold, + p.isstocked, + p.issummary AS m_product_issummary, + p.isverified, + p.iswebstorefeatured, + p.lowlevel, + p.m_attributeset_id AS m_product_m_attributeset_id, + p.m_freightcategory_id, + p.m_locator_id, + p.m_product_id AS m_product_m_product_id, + p.processing AS m_product_processing, + p.producttype, + p.r_mailtext_id, + p.salesrep_id AS m_product_salesrep_id, + p.s_expensetype_id, + p.shelfdepth, + p.shelfheight, + p.shelfwidth, + p.sku, + p.s_resource_id, + p.unitsperpack, + p.unitsperpallet, + p.updated AS m_product_updated, + p.updatedby AS m_product_updatedby, + p.versionno, + p.volume, + p.weight, + pasi.ad_org_id AS m_asi_ad_org_id, + pasi.created AS m_attributesetinstance_created, + pasi.createdby AS m_asi_createdby, + pasi.description AS m_asi_description, + pasi.isactive AS m_attributesetinstance_isacti, + pasi.serno AS m_attributesetinstance_serno, + pasi.updated AS m_attributesetinstance_updated, + pasi.updatedby AS m_asi_updatedby +FROM rv_c_invoice i + JOIN c_invoiceline il + ON i.c_invoice_id = il.c_invoice_id + LEFT JOIN m_product p + ON il.m_product_id = p.m_product_id + LEFT JOIN m_attributesetinstance pasi + ON il.m_attributesetinstance_id = pasi.m_attributesetinstance_id +; + +SELECT register_migration_script('201505271631_IDEMPIERE-2550.sql') FROM dual +; + diff --git a/migration/i2.1/postgresql/201505271631_IDEMPIERE-2550.sql b/migration/i2.1/postgresql/201505271631_IDEMPIERE-2550.sql new file mode 100644 index 0000000000..de302c0be6 --- /dev/null +++ b/migration/i2.1/postgresql/201505271631_IDEMPIERE-2550.sql @@ -0,0 +1,145 @@ +CREATE OR REPLACE VIEW rv_c_invoiceline AS +SELECT il.ad_client_id, + il.ad_org_id, + il.isactive, + il.created, + il.createdby, + il.updated, + il.updatedby, + il.c_invoiceline_id, + i.c_invoice_id, + i.salesrep_id, + i.c_bpartner_id, + i.c_bp_group_id, + il.m_product_id, + p.m_product_category_id, + i.dateinvoiced, + i.dateacct, + i.issotrx, + i.c_doctype_id, + i.docstatus, + i.ispaid, + il.c_campaign_id, + il.c_project_id, + il.c_activity_id, + il.c_projectphase_id, + il.c_projecttask_id, + il.qtyinvoiced * i.multiplier AS qtyinvoiced, + il.qtyentered * i.multiplier AS qtyentered, + il.m_attributesetinstance_id, + productattribute(il.m_attributesetinstance_id) AS productattribute, + pasi.m_attributeset_id, + pasi.m_lot_id, + pasi.guaranteedate, + pasi.lot, + pasi.serno, + il.pricelist, + il.priceactual, + il.pricelimit, + il.priceentered, + CASE WHEN il.pricelist = 0 THEN 0 ELSE currencyRound((il.pricelist - il.priceactual) / il.pricelist * 100,i.C_Currency_ID,'N') END AS discount, + CASE WHEN il.pricelimit = 0 THEN 0 ELSE currencyRound((il.priceactual - il.pricelimit) / il.pricelimit * 100,i.C_Currency_ID,'N') END AS margin, + CASE WHEN il.pricelimit = 0 THEN 0 ELSE (il.priceactual - il.pricelimit) * il.qtyinvoiced * i.multiplier END AS marginamt, + currencyRound(i.multiplier * il.linenetamt,i.C_Currency_ID,'N') AS linenetamt, + currencyRound(i.multiplier * il.pricelist * il.qtyinvoiced,i.C_Currency_ID,'N') AS linelistamt, + CASE WHEN COALESCE(il.pricelimit, 0) = 0 THEN currencyRound(i.multiplier * il.linenetamt,i.C_Currency_ID,'N') ELSE currencyRound(i.multiplier * il.pricelimit * il.qtyinvoiced,i.C_Currency_ID,'N') END + AS linelimitamt, + currencyRound(i.multiplier * (il.pricelist * il.qtyinvoiced - il.linenetamt),i.C_Currency_ID,'N') AS linediscountamt, + CASE WHEN COALESCE(il.pricelimit, 0) = 0 THEN 0 ELSE currencyRound(i.multiplier * (il.linenetamt - il.pricelimit * il.qtyinvoiced),i.C_Currency_ID,'N') END AS + lineoverlimitamt, + il.ad_orgtrx_id, + il.a_processed, + il.c_charge_id, + il.c_orderline_id, + il.c_tax_id, + il.c_uom_id AS c_invoiceline_c_uom_id, + il.description AS c_invoiceline_description, + il.isdescription, + il.isprinted, + il.line, + il.linenetamt AS c_invoiceline_linenetamt, + il.linetotalamt, + il.m_inoutline_id, + il.m_rmaline_id, + il.processed, + il.ref_invoiceline_id, + il.rramt, + il.rrstartdate, + il.s_resourceassignment_id, + il.taxamt, + il.user1_id, + il.user2_id, + p.ad_org_id AS m_product_ad_org_id, + p.classification, + p.copyfrom AS m_product_copyfrom, + p.created AS m_product_created, + p.createdby AS m_product_createdby, + p.c_revenuerecognition_id, + p.c_subscriptiontype_id, + p.c_taxcategory_id, + p.c_uom_id AS m_productline_c_uom_id, + p.description AS m_product_description, + p.descriptionurl, + p.discontinued, + p.discontinuedat, + p.documentnote, + p.group1, + p.group2, + p.guaranteedays, + p.guaranteedaysmin, + p.help, + p.imageurl, + p.isactive AS m_product_isactive, + p.isdropship, + p.isexcludeautodelivery, + p.isinvoiceprintdetails, + p.ispicklistprintdetails, + p.ispurchased, + p.isselfservice, + p.issold, + p.isstocked, + p.issummary AS m_product_issummary, + p.isverified, + p.iswebstorefeatured, + p.lowlevel, + p.m_attributeset_id AS m_product_m_attributeset_id, + p.m_freightcategory_id, + p.m_locator_id, + p.m_product_id AS m_product_m_product_id, + p.processing AS m_product_processing, + p.producttype, + p.r_mailtext_id, + p.salesrep_id AS m_product_salesrep_id, + p.s_expensetype_id, + p.shelfdepth, + p.shelfheight, + p.shelfwidth, + p.sku, + p.s_resource_id, + p.unitsperpack, + p.unitsperpallet, + p.updated AS m_product_updated, + p.updatedby AS m_product_updatedby, + p.versionno, + p.volume, + p.weight, + pasi.ad_org_id AS m_asi_ad_org_id, + pasi.created AS m_attributesetinstance_created, + pasi.createdby AS m_asi_createdby, + pasi.description AS m_asi_description, + pasi.isactive AS m_attributesetinstance_isacti, + pasi.serno AS m_attributesetinstance_serno, + pasi.updated AS m_attributesetinstance_updated, + pasi.updatedby AS m_asi_updatedby +FROM rv_c_invoice i + JOIN c_invoiceline il + ON i.c_invoice_id = il.c_invoice_id + LEFT JOIN m_product p + ON il.m_product_id = p.m_product_id + LEFT JOIN m_attributesetinstance pasi + ON il.m_attributesetinstance_id = pasi.m_attributesetinstance_id +; + +SELECT register_migration_script('201505271631_IDEMPIERE-2550.sql') FROM dual +; +