--
-- ec_shipment_tax/1
--
create or replace function ec_shipment_tax(
integer
) returns numeric as $$
DECLARE
v_shipment_id alias for $1;
item_price_tax numeric;
item_shipping_tax numeric;
base_shipping_tax numeric;
v_order_id ec_orders.order_id%TYPE;
min_shipment_id ec_shipments.shipment_id%TYPE;
BEGIN
SELECT into v_order_id order_id
FROM ec_shipments where shipment_id=v_shipment_id;
SELECT into min_shipment_id min(s.shipment_id)
from ec_shipments s, ec_items i, ec_products p
where s.order_id = v_order_id
and s.shipment_id = i.shipment_id
and i.product_id = p.product_id
and p.no_shipping_avail_p = 'f';
IF v_shipment_id=min_shipment_id THEN
SELECT into base_shipping_tax
coalesce(shipping_tax_charged,0) - coalesce(shipping_tax_refunded,0)
FROM ec_orders where order_id=v_order_id;
ELSE
base_shipping_tax := 0;
END IF;
SELECT into item_price_tax
coalesce(sum(price_tax_charged),0) - coalesce(sum(price_tax_refunded),0)
FROM ec_items where shipment_id=v_shipment_id and item_state <> 'void';
SELECT into item_shipping_tax
coalesce(sum(shipping_tax_charged),0) - coalesce(sum(shipping_tax_refunded),0)
FROM ec_items where shipment_id=v_shipment_id and item_state <> 'void';
RETURN item_price_tax + item_shipping_tax + base_shipping_tax;
END;$$ language plpgsql;