ck_order_get_list_new.sql
unknown
pgsql
a year ago
10 kB
13
Indexable
create function ck_order_get_list_new(refcursor, search_text text, filter jsonb) returns refcursor
language plpgsql
as
$$
DECLARE
divisions_length int;
divisions jsonb;
-- trangThai varchar(200);
ngayDienRaStart bigint;
ngayDienRaEnd bigint;
ks_trangThai varchar;
ks_destination varchar;
begin
divisions = filter -> 'divisions';
-- trangThai = (filter ->> 'trangThai')::varchar;
ngayDienRaStart = (filter ->> 'ngayDienRaStart')::bigint;
ngayDienRaEnd = (filter ->> 'ngayDienRaEnd')::bigint;
ks_trangThai = (filter ->> 'ks_trangThai')::varchar;
ks_destination = (filter ->> 'ks_destination')::varchar;
divisions_length = jsonb_array_length(divisions);
open $1 for
-- new
WITH ck_order AS (SELECT *,
ROW_NUMBER() OVER (PARTITION BY contract_number ORDER BY ID DESC) AS "rowNum"
FROM ck_order)
select ck_order.id as "id",
ck_order.name as "name",
ck_order.amount as "amount",
ck_order.division_ma as "divisionMa",
ck_order.ghi_chu as "ghi_chu",
ck_order.ngay_dien_ra as "ngayDienRa",
ck_order.ngay_gui as "ngayGui",
ck_order.ngay_nhan as "ngayNhan",
ck_order.ngay_tao as "ngayTao",
ck_order.contract_number as "contractNumber",
ck_order.trang_thai as "trangThai",
ck_order.destination as "destination",
ck_order.meta_reject_note as "metaRejectNote",
ck_order.reject_note as "rejectNote",
ck_order.internal_accept_at as "internalAcceptAt",
ck_order.crm_code as "soCode",
fw_user.first_name || fw_user.last_name as "internalAcceptBy",
ck_order.is_custom as "isCustom",
ck_order."rowNum" as "rowNum",
fw_division.ten as "divisionTen",
fw_division.image as "divisionImage",
ck_order.can_cancel as "canCancel",
jsonb_strip_nulls(jsonb_build_object(
'id', ck_division_po.id,
'name', ck_division_po.name,
'divisionMa', ck_division_po.division_ma,
'createdAt', ck_division_po.created_at,
'isApproved', ck_division_po.is_internal_accept,
'neededAt', ck_division_po.needed_at,
'status', ck_division_po.status,
'items', po_detail.items
)) as "poItem",
coalesce(ck_division_meta_po.name, '') || coalesce(ck_division_po.name, '') as "title",
CASE
WHEN ck_division_meta_po.needed_at IS NOT NULL THEN ck_division_meta_po.needed_at
ELSE ck_division_po.needed_at END as "requestTime",
coalesce(ck_division_po.note, '') || coalesce(ck_division_meta_po.note, '') as "note",
(select jsonb_agg(jsonb_build_object('id', ck_order_item.id,
'dishId', ck_order_item.dish_id,
'orderId', ck_order_item.order_id,
'divisionMa', ck_order.division_ma,
'dishMasterId', dm_dish.master_id,
'dishGroupName', dm_dish_group.name,
'dishName', dm_dish.name,
'dishUnit', dm_dish.unit,
'dishGroupId', dm_dish.group_id,
'recipe', recipe.recipe,
'quantity', ck_order_item.quantity))
from ck_order_item
LEFT JOIN dm_dish on dm_dish.id = ck_order_item.dish_id
LEFT JOIN dm_dish_group on dm_dish.group_id = dm_dish_group.id
LEFT JOIN (SELECT dm_dish_recipe.dish_id,
jsonb_agg(jsonb_build_object('materialId', dm_dish_recipe.material_id,
'semiDishId', dm_dish_recipe.semi_dish_id,
'materialName', dm_material.name,
'semiDishName', dm_sm.name,
'unit', dm_unit.id,
'unitName', dm_unit.name,
'dataSemi', semi_data.list_material,
'value', dm_dish_recipe.value)) as recipe
from dm_dish_recipe
left join dm_material on dm_material.id = dm_dish_recipe.material_id
left join dm_semi_dish dm_sm on dm_sm.id = dm_dish_recipe.semi_dish_id
left join dm_unit on dm_unit.id = dm_sm.unit::integer
left join (select semi_dish.id as semi_dish_id,
jsonb_agg(jsonb_build_object('materialId', material.id,
'materialMasterId',
material.master_id,
'materialName',
material.name,
'unit', dm_unit.name,
'unitName', dm_unit.name,
'value',
semi_recipe.value)) as list_material
from dm_semi_dish semi_dish
left join
dm_semi_dish_material semi_recipe
on semi_dish.id = semi_recipe.semi_dish_id
left join dm_material material
on semi_recipe.material_id = material.id
left join dm_unit on dm_unit.id = material.unit
group by semi_dish.id) semi_data
on semi_data.semi_dish_id = dm_dish_recipe.semi_dish_id
group by dm_dish_recipe.dish_id) recipe on recipe.dish_id = dm_dish.id
where (ck_order_item.order_id = ck_order.id)
GROUP BY ck_order_item.order_id) as items
from ck_order
left join ck_division_po_get_detail('{}') po_detail on po_detail.order_id = ck_order.id
LEFT JOIN fw_division on fw_division.ma = ck_order.division_ma
left join fw_user on fw_user.id = ck_order.internal_accept_by
left join ck_division_po on ck_division_po.order_id = ck_order.id
left join ck_division_meta_po on ck_division_meta_po.order_id = ck_division_meta_po.id
-- left join ck_order_crm on ck_order.crm_code = ck_order_crm.code
where (search_text is null or search_text = '' or ck_order.name ilike search_text or
fw_division.ten ilike search_text)
and (divisions_length = 0 or divisions ? ck_order.division_ma)
and ck_order.is_orderable = 1
-- and (trangThai is null or trangThai = '' or ck_order.trang_thai = trangThai)
and (ngayDienRaStart is null or ck_order.ngay_dien_ra >= ngayDienRaStart)
and (ngayDienRaEnd is null or ck_order.ngay_dien_ra <= ngayDienRaEnd)
and (ks_destination is null or ck_order.destination = ks_destination)
and (ks_trangThai is null or ck_order.trang_thai = ks_trangThai)
ORDER BY ck_order.ngay_tao DESC;
return $1;
end
$$;
alter function ck_order_get_list_new(refcursor, text, jsonb) owner to "inholdings-dev";
Editor is loading...
Leave a Comment