48 lines
1.8 KiB
SQL
48 lines
1.8 KiB
SQL
-- Fix incorrect order_rows.commission_amount
|
|
-- We can calculate correct value using data->>'discountValue' which is the discount sum incl vat for the row
|
|
-- The first select identifies the rows to udpate.
|
|
-- The second select extracts only the two fields of interest.
|
|
-- The third select cleans up the values slightly
|
|
with to_update as (
|
|
select
|
|
-- order_rows.inserted,
|
|
order_rows.id rowid,
|
|
type,
|
|
-- sub_type,
|
|
orders.delivery_vat,
|
|
orders.order_sum,
|
|
order_id,
|
|
price,
|
|
-- designer_id,
|
|
data->>'commission' as commission,
|
|
-- data->>'commission_resale'as commission_resale,
|
|
data->>'discountType' discount_type,
|
|
round(price * orders.delivery_vat, 2) as price_incl_vat,
|
|
round((data->>'discountValue')::numeric, 2) as discount_value,
|
|
round(price * orders.delivery_vat, 2) - round((data->>'discountValue')::numeric, 2) as commissionable_w_vat,
|
|
(round(price * orders.delivery_vat, 2) - round((data->>'discountValue')::numeric, 2)) / delivery_vat as commissionable_amount_ex_vat,
|
|
((round(price * orders.delivery_vat, 2) - round((data->>'discountValue')::numeric, 2)) / delivery_vat) * (( data->>'commission')::numeric / 100) as new_commission_amount,
|
|
commission_amount
|
|
from
|
|
order_rows
|
|
left join orders on order_id = orders.id
|
|
where
|
|
order_rows.id >= 2500000
|
|
and data->>'discountType' != '%'
|
|
and ( (data->>'commission' is not null) and ((data->>'commission')::numeric > 0))
|
|
), id_and_amount as (select rowid, new_commission_amount from to_update),
|
|
nicer_zeroes as (
|
|
select rowid,
|
|
case new_commission_amount
|
|
-- 0.0000000000000000000000000000000000000000 to 0
|
|
when 0.0000 then 0
|
|
-- 0.0826446280991735537190000000000000000000 to 10 decimals
|
|
else round(new_commission_amount, 10)
|
|
end as new_value
|
|
from to_update)
|
|
update order_rows
|
|
set commission_amount = new_value
|
|
from nicer_zeroes
|
|
where order_rows.id = rowid
|
|
|