create or replace view van_vw_orderstopack as
select distinct
o.ORDERID,
o.ORDERDATETIME,
c.FULLNAME,
o.PAYMENTMETHODID,
p.PAYMENTMETHOD,
t.TOTALINVAT,
s.SHOPID,
s.SHOP
from
VAN_ORDER o -- Driving table
inner join VAN_SHOPOUTLET so on so.SHOPOUTLETID = o.SHOPOUTLETID -- Needed for shop name
inner join VAN_SHOP s on s.SHOPID = so.SHOPID
inner join VAN_VW_ORDERTOTALAMOUNT t on t.ORDERID = o.ORDERID -- Needed to check if order is paid
inner join VAN_VW_CUSTOMER c on c.CUSTOMERID = o.CUSTOMERID -- For customer name
inner join VAN_PAYMENTMETHOD p on p.PAYMENTMETHODID = o.PAYMENTMETHODID -- For payment method description
inner join VAN_VW_ORDERPAYMENTCHECKSTATE sc on sc.ORDERID = o.ORDERID -- To check if all payment checks are done
where
-- Must not be deleted
o.DELETED = VAN_CONST.BOOLEAN_FALSE and
-- Must be allowed to be packed
o.ALLOWPACKING = VAN_CONST.BOOLEAN_TRUE and
-- Must be shipped by carrier
o.SHIPMENTMETHODID = VAN_CONST.SHIPMENTMETHOD_CARRIER and
-- Must not already being packed
o.ORDERID not in (select ORDERID from VAN_PACKBATCHSHIPMENTORDER) and
-- Must be fully paid or a COD, credit
( (o.PAYMENTMETHODID in (select PAYMENTMETHODID from VAN_VW_CASHONDELIVPAYMENTMETH)) or
(o.PAYMENTMETHODID in (select PAYMENTMETHODID from VAN_VW_CREDITPAYMENTMETH)) or
(t.TOTALINVAT - t.TOTALPAID <= 0) or
( (select a.TOTALINVAT - a.TOTALPAID from VAN_VW_INVOICEORDERTOTALAMOUNT a where a.ORDERID = o.ORDERID) <= 0) ) and
-- VAT number must be validated and is valid
( (case when (c.COUNTRYID = VAN_CONST.COUNTRY_BE) and (o.VATFREE = VAN_CONST.BOOLEAN_TRUE) then
VAN_CONST.BOOLEAN_TRUE
else
VAN_CONST.BOOLEAN_FALSE
end = VAN_CONST.BOOLEAN_TRUE and c.VATNUMBERVALID = VAN_CONST.BOOLEAN_TRUE) or
(case when (c.COUNTRYID = VAN_CONST.COUNTRY_BE) and (o.VATFREE = VAN_CONST.BOOLEAN_TRUE) then
VAN_CONST.BOOLEAN_TRUE
else
VAN_CONST.BOOLEAN_FALSE
end = VAN_CONST.BOOLEAN_FALSE)
) and
-- Must be allowed to ship on this date
( (o.SHIPDATE <= sysdate) or
(o.SHIPDATE is null) ) and
-- All payment checks must be OK
( (sc.CHECKOK = sc.CHECKCOUNT) or (sc.ORDERID is null) ) and
-- Orders with orderlines containing "Stockproducts"
( (select
count(*)
from
VAN_ORDERLINEITEM oli
inner join VAN_ORDERLINE ol on ol.ORDERLINEID = oli.ORDERLINEID
inner join VAN_PRODUCT p on oli.PRODUCTID = p.PRODUCTID
where
ol.ORDERID = o.ORDERID and
p.STOCKPRODUCT = VAN_CONST.BOOLEAN_TRUE)
) > 0 and
-- Quantity of products ordered must be greater than the quantity delivered
( (select
nvl(sum( (select
sum(oli.QUANTITY)
from
VAN_ORDERLINEITEM oli
where
oli.ORDERLINEID = dol.ORDERLINEID) ), 0)
from
VAN_ORDER do
inner join VAN_ORDERLINE dol on dol.ORDERID = do.ORDERID
where
do.ORDERID = o.ORDERID) > -- Ordered
(select
nvl(sum( (select
sum(dl.QUANTITY)
from
VAN_DELIVERYLINE dl
inner join VAN_ORDERLINEITEM oli on oli.ORDERLINEITEMID = dl.ORDERLINEITEMID
where
oli.ORDERLINEID = dol.ORDERLINEID) ), 0)
from
VAN_ORDER do
inner join VAN_ORDERLINE dol on dol.ORDERID = do.ORDERID
where
do.ORDERID = o.ORDERID) -- Delivered
)