From: Chris Sharp Date: Tue, 20 Jun 2017 13:05:07 +0000 (-0400) Subject: LP#1630271 - Add Purchase Order Summary View X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=dfc40558fa49e8a311ae42cc6df629ae3e80a137;p=evergreen%2Fpines.git LP#1630271 - Add Purchase Order Summary View The purchase order reporting source contains several fields that are available in the reporter but are non-functional (because they are generated on-the-fly within user interfaces). This view allows a similar calculation and provides access back to the PO object as well. Signed-off-by: Chris Sharp --- diff --git a/Open-ILS/examples/fm_IDL.xml b/Open-ILS/examples/fm_IDL.xml index c55fca1838..197d362978 100644 --- a/Open-ILS/examples/fm_IDL.xml +++ b/Open-ILS/examples/fm_IDL.xml @@ -10449,6 +10449,34 @@ SELECT usr, + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Open-ILS/src/sql/Pg/example.reporter-extension.sql b/Open-ILS/src/sql/Pg/example.reporter-extension.sql index b77116e33f..1eb38c7b03 100644 --- a/Open-ILS/src/sql/Pg/example.reporter-extension.sql +++ b/Open-ILS/src/sql/Pg/example.reporter-extension.sql @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2008 Georgia Public Library Service + * Copyright (C) 2004-2017 Georgia Public Library Service * Copyright (C) 2007-2008 Equinox Software, Inc. * Mike Rylander * @@ -386,6 +386,116 @@ CREATE OR REPLACE VIEW reporter.acq_invoice_summary_view AS LEFT OUTER JOIN acq.provider shipper ON (invoice.shipper = shipper.id) LEFT OUTER JOIN actor.org_unit receiver ON (invoice.receiver = receiver.id); +CREATE VIEW reporter.acq_purchase_order_summary_view AS +SELECT po.id, + po.owner, + po.creator, + po.editor, + po.ordering_agency, + po.create_time, + po.edit_time, + po.provider, + po.state, + po.order_date, + po.name, + po.cancel_reason, + po.prepayment_required, + -- lineitem_count + (SELECT COALESCE(COUNT(*), 0) + FROM acq.lineitem li + WHERE li.purchase_order = po.id) AS lineitem_count, + -- amount_encumbered + (SELECT COALESCE(SUM(amount), '0.00') + FROM acq.fund_debit afd + WHERE afd.encumbrance = TRUE + AND afd.id IN ( + SELECT fund_debit + FROM acq.lineitem_detail lid + WHERE lineitem IN ( + SELECT id + FROM acq.lineitem + WHERE purchase_order = po.id) + ) OR afd.id IN ( + SELECT fund_debit + FROM acq.po_item + WHERE purchase_order = po.id + ) OR afd.id IN ( + SELECT fund_debit + FROM acq.invoice_item + WHERE purchase_order = po.id + )) AS amount_encumbered, + -- amount_spent + (SELECT COALESCE(SUM(amount), '0.00') + FROM acq.fund_debit afd + WHERE afd.encumbrance = FALSE + AND afd.id IN ( + SELECT fund_debit + FROM acq.lineitem_detail lid + WHERE lineitem IN ( + SELECT id + FROM acq.lineitem + WHERE purchase_order = po.id) + ) OR afd.id IN ( + SELECT fund_debit + FROM acq.po_item + WHERE purchase_order = po.id + ) OR afd.id IN ( + SELECT fund_debit + FROM acq.invoice_item + WHERE purchase_order = po.id + )) AS amount_spent, + -- amount_estimated + CASE + WHEN ( + SELECT id + FROM acq.fund_debit + WHERE id IN ( + SELECT fund_debit + FROM acq.lineitem_detail + WHERE lineitem IN ( + SELECT id + FROM acq.lineitem + WHERE purchase_order = po.id + ) + ) OR id IN ( + SELECT fund_debit + FROM acq.po_item + WHERE purchase_order = po.id + ) OR id IN ( + SELECT fund_debit + FROM acq.invoice_item + WHERE purchase_order = po.id + ) limit 1 + ) IS NOT NULL THEN ( + SELECT COALESCE(SUM(amount), '0.00') + FROM acq.fund_debit + WHERE id IN ( + SELECT fund_debit + FROM acq.lineitem_detail + WHERE lineitem IN ( + SELECT id + FROM acq.lineitem + WHERE purchase_order = po.id + ) + ) OR id IN ( + SELECT fund_debit + FROM acq.po_item + WHERE purchase_order = po.id + ) OR id IN ( + SELECT fund_debit + FROM acq.invoice_item + WHERE purchase_order = po.id + ) + ) ELSE ( + SELECT ( + COALESCE(SUM(li.estimated_unit_price), '0.00') + + COALESCE(SUM(poi.estimated_cost), '0.00') + ) FROM acq.lineitem li + LEFT OUTER JOIN acq.lineitem_detail lid ON (li.id = lid.lineitem) + LEFT OUTER JOIN acq.po_item poi ON (poi.purchase_order = po.id) + WHERE li.purchase_order = po.id + ) END AS amount_estimated +FROM acq.purchase_order po; CREATE OR REPLACE VIEW reporter.copy_statistics_view AS SELECT acp.id as copy_id, diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.acq_invoice_reporter_view.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.acq_invoice_reporter_view.sql index 9aab645275..57e2d6a3d0 100644 --- a/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.acq_invoice_reporter_view.sql +++ b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.acq_invoice_reporter_view.sql @@ -71,4 +71,115 @@ CREATE OR REPLACE VIEW reporter.acq_invoice_summary_view AS LEFT OUTER JOIN acq.provider shipper ON (invoice.shipper = shipper.id) LEFT OUTER JOIN actor.org_unit receiver ON (invoice.receiver = receiver.id); +CREATE VIEW reporter.acq_purchase_order_summary_view AS +SELECT po.id, + po.owner, + po.creator, + po.editor, + po.ordering_agency, + po.create_time, + po.edit_time, + po.provider, + po.state, + po.order_date, + po.name, + po.cancel_reason, + po.prepayment_required, + -- lineitem_count + (SELECT COALESCE(COUNT(*), 0) + FROM acq.lineitem li + WHERE li.purchase_order = po.id) AS lineitem_count, + -- amount_encumbered + (SELECT COALESCE(SUM(amount), '0.00') + FROM acq.fund_debit afd + WHERE afd.encumbrance = TRUE + AND afd.id IN ( + SELECT fund_debit + FROM acq.lineitem_detail lid + WHERE lineitem IN ( + SELECT id + FROM acq.lineitem + WHERE purchase_order = po.id) + ) OR afd.id IN ( + SELECT fund_debit + FROM acq.po_item + WHERE purchase_order = po.id + ) OR afd.id IN ( + SELECT fund_debit + FROM acq.invoice_item + WHERE purchase_order = po.id + )) AS amount_encumbered, + -- amount_spent + (SELECT COALESCE(SUM(amount), '0.00') + FROM acq.fund_debit afd + WHERE afd.encumbrance = FALSE + AND afd.id IN ( + SELECT fund_debit + FROM acq.lineitem_detail lid + WHERE lineitem IN ( + SELECT id + FROM acq.lineitem + WHERE purchase_order = po.id) + ) OR afd.id IN ( + SELECT fund_debit + FROM acq.po_item + WHERE purchase_order = po.id + ) OR afd.id IN ( + SELECT fund_debit + FROM acq.invoice_item + WHERE purchase_order = po.id + )) AS amount_spent, + -- amount_estimated + CASE + WHEN ( + SELECT id + FROM acq.fund_debit + WHERE id IN ( + SELECT fund_debit + FROM acq.lineitem_detail + WHERE lineitem IN ( + SELECT id + FROM acq.lineitem + WHERE purchase_order = po.id + ) + ) OR id IN ( + SELECT fund_debit + FROM acq.po_item + WHERE purchase_order = po.id + ) OR id IN ( + SELECT fund_debit + FROM acq.invoice_item + WHERE purchase_order = po.id + ) limit 1 + ) IS NOT NULL THEN ( + SELECT COALESCE(SUM(amount), '0.00') + FROM acq.fund_debit + WHERE id IN ( + SELECT fund_debit + FROM acq.lineitem_detail + WHERE lineitem IN ( + SELECT id + FROM acq.lineitem + WHERE purchase_order = po.id + ) + ) OR id IN ( + SELECT fund_debit + FROM acq.po_item + WHERE purchase_order = po.id + ) OR id IN ( + SELECT fund_debit + FROM acq.invoice_item + WHERE purchase_order = po.id + ) + ) ELSE ( + SELECT ( + COALESCE(SUM(li.estimated_unit_price), '0.00') + + COALESCE(SUM(poi.estimated_cost), '0.00') + ) FROM acq.lineitem li + LEFT OUTER JOIN acq.lineitem_detail lid ON (li.id = lid.lineitem) + LEFT OUTER JOIN acq.po_item poi ON (poi.purchase_order = po.id) + WHERE li.purchase_order = po.id + ) END AS amount_estimated +FROM acq.purchase_order po; + COMMIT;