# NewStore Check Query for Promo
## Select Order from Store within 6 Month Ago
```
SELECT op.id
FROM
orders AS o
JOIN
order_parcels AS op ON op.order_id = o.id
JOIN
order_brands AS ob ON ob.order_parcel_id = op.id
JOIN
order_brand_catalogues AS obc ON obc.order_brand_id = ob.id
WHERE
o.store_id = [StoreID yg digunakan]
AND op.created_at > 'now'::timestamp - '6 month'::interval;
```
## Update Order from Store within 6 Month Ago
```
update order_parcels set created_at = 'now'::timestamp - '7 month'::interval
WHERE order_parcels.id in ([OrderParcelId])
```
# promo Query
## Check Collectible Voucher code
```
select V.voucher_allocation_type,V.voucher_slot, V.max_collection_per_store, VC.voucher_id, V.code, count(VC.voucher_id) as JumlahCollected
from vouchers V
inner join voucher_collected VC on VC.voucher_id = V.id
where V.supplier_id = 44 and v.voucher_type <> 'direct'
GROUP by V.voucher_allocation_type,V.voucher_slot, V.max_collection_per_store, V.code,VC.voucher_id
```
## Store target
```sql
SELECT
p.id AS promo_id, p.base, p.type, p.first_buy, p.voucher_combine, p.max_redemption_per_store,
p.promo_budget, p.start_date, p.end_date, pc.id as promo_condition_id, pc.benefit_type, pc.benefit_discount, pc.benefit_max_rebate,
pc.benefit_rebate, pc.benefit_catalogue_id, pc.benefit_bonus_qty, pc.multiplication, pc.condition_base, pc.condition_qty, pc.condition_value,
pca.catalogue_id, pb.brand_id, pig.invoice_group_id
FROM
promos p
JOIN
promo_stores ps ON ps.promo_id = p.id
LEFT JOIN
promo_catalogues pca ON pca.promo_id = p.id
LEFT JOIN
promo_brands pb ON pb.promo_id = p.id
LEFT JOIN
promo_invoice_groups pig ON pig.promo_id = p.id
JOIN
promo_conditions pc ON pc.promo_id = p.id
WHERE
ps.store_id = ${data.storeId}
AND p.target = 'store'
AND p.status = 'active'
AND p.type in ('flexi', 'target')
AND p.start_date < now()
AND p.end_date > now()
AND (p.platform = 'all' OR p.platform = '${data.platform}')
AND p.deleted_at is null
AND
CASE
WHEN p.base = 'sku' THEN pca.catalogue_id IN (${data.catalogueIds})
WHEN p.base = 'brand' THEN pb.brand_id IN (${brandIds})
WHEN p.base = 'invoice_group' THEN pig.invoice_group_id IN (${invoiceGroupIds})
END
```
## Segmentation Target
```sql
SELECT
res.promo_id, res.base, res.type, res.first_buy, res.voucher_combine, res.max_redemption_per_store,
res.promo_budget, res.start_date, res.end_date, pc.id as promo_condition_id, pc.benefit_type, pc.benefit_discount, pc.benefit_max_rebate,
pc.benefit_rebate, pc.benefit_catalogue_id, pc.benefit_bonus_qty, pc.multiplication, pc.condition_base,
pc.condition_qty, pc.condition_value, pca.catalogue_id, pb.brand_id, pig.invoice_group_id
FROM
(SELECT
pr.*
FROM
(SELECT
p.id as promo_id, p.base, p.type, p.first_buy, p.voucher_combine, p.max_redemption_per_store,
p.promo_budget, p.start_date, p.end_date, promo_channels.channel_id, promo_clusters.cluster_id, promo_groups.group_id,
promo_types.type_id, promo_warehouses.warehouse_id
FROM
promos p
LEFT JOIN
promo_channels ON promo_channels.promo_id = p.id
LEFT JOIN
promo_clusters ON promo_clusters.promo_id = p.id
LEFT JOIN
promo_groups ON promo_groups.promo_id = p.id
LEFT JOIN
promo_types ON promo_types.promo_id = p.id
LEFT JOIN
promo_warehouses ON promo_warehouses.promo_id = p.id
WHERE p.deleted_at IS NULL
AND p.target = 'segmentation'
AND (p.platform = 'all' OR p.platform = '${data.platform}')
AND p.start_date < now()
AND p.end_date > now()
AND p.status = 'active'
AND p.type in ('flexi', 'target')
) AS pr
CROSS JOIN
(SELECT
s.id AS store_id, s.urban_id, s.store_code, s.name, store_channels.channel_id,
store_clusters.cluster_id, store_groups.group_id, store_types.type_id
FROM
stores AS s
LEFT OUTER JOIN
store_channels ON s.id = store_channels.store_id
LEFT OUTER JOIN
store_clusters ON s.id = store_clusters.store_id
LEFT OUTER JOIN
store_groups ON s.id = store_groups.store_id
LEFT OUTER JOIN
store_types ON s.id = store_types.store_id
WHERE
s.id = ${data.storeId}
) AS sr
WHERE
(pr.cluster_id = sr.cluster_id
OR pr.cluster_id IS NULL)
AND
(pr.channel_id = sr.channel_id
OR pr.channel_id IS NULL)
AND
(pr.group_id = sr.group_id
OR pr.group_id IS NULL)
AND
(pr.type_id = sr.type_id
OR pr.type_id IS NULL)
AND
(pr.warehouse_id in (${warehouseIds})
OR pr.warehouse_id IS NULL)
) AS res
JOIN
promo_conditions pc ON pc.promo_id = res.promo_id
LEFT JOIN
promo_catalogues pca ON pca.promo_id = res.promo_id
LEFT JOIN
promo_brands pb ON pb.promo_id = res.promo_id
LEFT JOIN
promo_invoice_groups pig ON pig.promo_id = res.promo_id
WHERE
CASE
WHEN res.base = 'sku' THEN pca.catalogue_id IN (${data.catalogueIds})
WHEN res.base = 'brand' THEN pb.brand_id IN (${brandIds})
WHEN res.base = 'invoice_group' THEN pig.invoice_group_id IN (${invoiceGroupIds})
END
```
### notes
1. ${data.storeId} itu diganti store id dari store yang lagi checkout
2. ${data.platform} itu diganti dengan dia loginnya dari mana, 'all' atau 'agent_app' atau 'sinbad_app'
3. ${data.catalogueIds} itu list dari catalogue id yang dicheckout, contohnya 1, 2, 3
4. ${brandIds} itu list dari brand id dari catalogue yang dicheckout, contohnya 1, 2, 3
5. ${invoiceGroupIds} itu list dari invoice group id dari catalogue yang dicheckout, contohnya 1, 2, 3
6. ${warehouseIds} itu list dari warehouse id dari catalogue yang dicheckout, contohnya 1, 2, 3 . ketentuan ngambil warehouse_id-nya:
a. ambil dari supplier_stores.warehouse_id langsung
b. ambil dari warehouse_urbans.warehouse_id dengan urban_id dari supplier_stores.urban_id
c. ambil dari warehouse_urbans.warehouse_id dengan urban_id dari stores.urban_id
tiga kondisi buat ngambil warehouse itu dijalannin dari a-c, prioritas utama a dulu, kalo ngga ada baru cek ke kondisi b, dst