--
-- ec_tax/3
--
create or replace function ec_tax(
numeric,
numeric,
integer
) returns numeric as $$
DECLARE
v_price alias for $1;
v_shipping alias for $2;
v_order_id alias for $3;
taxes ec_sales_tax_by_state%ROWTYPE;
tax_exempt_p ec_orders.tax_exempt_p%TYPE;
BEGIN
SELECT into tax_exempt_p tax_exempt_p
FROM ec_orders
WHERE order_id = v_order_id;
IF tax_exempt_p = 't' THEN
return 0;
END IF;
--SELECT t.* into taxes
--FROM ec_orders o, ec_addresses a, ec_sales_tax_by_state t
--WHERE o.shipping_address=a.address_id
--AND a.usps_abbrev=t.usps_abbrev(+)
--AND o.order_id=v_order_id;
SELECT into taxes t.*
FROM ec_orders o
JOIN
ec_addresses a on (o.shipping_address=a.address_id)
LEFT JOIN
ec_sales_tax_by_state t using (usps_abbrev)
WHERE o.order_id=v_order_id;
IF coalesce(taxes.shipping_p,'f') = 'f' THEN
return coalesce(taxes.tax_rate,0) * v_price;
ELSE
return coalesce(taxes.tax_rate,0) * (v_price + v_shipping);
END IF;
END;$$ language plpgsql;