sozsoft-platform/configs/seeds/postgres/object/Stk_P_TransferCopy.sql
2026-10-19 17:35:08 +03:00

53 lines
3.2 KiB
PL/PgSQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- Belgeden yeni belge açar. Backorder: talepten az yapılan satırların kalanı, aynı konumlarla; stok kontrolüyle Hazır/Bekleyen olur.
-- Return (İade): yapılan miktarlar lotlarıyla, kaynak ve hedef yer değiştirerek Taslak açılır. İkisi de bağları taşır.
CREATE OR REPLACE PROCEDURE public."Stk_P_TransferCopy"(p_source_id uuid, p_mode varchar, p_user_id uuid, INOUT p_new_id uuid DEFAULT NULL)
LANGUAGE plpgsql AS $$
DECLARE v_is_return boolean := p_mode = 'Return';
BEGIN
p_new_id := gen_random_uuid();
INSERT INTO "Stk_T_Transfer" ("Id", "TenantId", "BranchId", "WarehouseId", "OperationTypeId", "OperationKind", "PartnerId", "SourceLocationId", "DestinationLocationId",
"ScheduledDate", "SourceDocument", "PurchaseOrderId", "BackorderOfId", "ReturnOfId", "CarrierId", "ResponsibleUserId", "ProjectId", "DeliveryPolicy",
"Status", "CreationTime", "CreatorId", "IsDeleted")
SELECT p_new_id, t."TenantId", t."BranchId", t."WarehouseId", t."OperationTypeId", t."OperationKind", t."PartnerId",
CASE WHEN v_is_return THEN t."DestinationLocationId" ELSE t."SourceLocationId" END,
CASE WHEN v_is_return THEN t."SourceLocationId" ELSE t."DestinationLocationId" END,
CASE WHEN v_is_return THEN NOW() AT TIME ZONE 'UTC' ELSE t."ScheduledDate" END,
CASE WHEN v_is_return THEN t."TransferNo" ELSE t."SourceDocument" END, t."PurchaseOrderId",
CASE WHEN v_is_return THEN NULL ELSE p_source_id END, CASE WHEN v_is_return THEN p_source_id END,
t."CarrierId", t."ResponsibleUserId", t."ProjectId", t."DeliveryPolicy",
'Draft', NOW() AT TIME ZONE 'UTC', p_user_id, false
FROM "Stk_T_Transfer" t
WHERE t."Id" = p_source_id;
DROP TABLE IF EXISTS tmp_inv_map;
CREATE TEMP TABLE tmp_inv_map AS
SELECT "Id" AS "OldId", gen_random_uuid() AS "NewId"
FROM "Stk_T_TransferLine"
WHERE "TransferId" = p_source_id AND "IsDeleted" = false
AND ((v_is_return AND "Quantity" > 0) OR (NOT v_is_return AND "Quantity" < "DemandQuantity"));
INSERT INTO "Stk_T_TransferLine" ("Id", "TenantId", "TransferId", "ProductId", "Description", "DemandQuantity", "Quantity", "UomId",
"PurchaseOrderLineId", "MaterialRequestItemId", "CreationTime", "CreatorId", "IsDeleted")
SELECT m."NewId", l."TenantId", p_new_id, l."ProductId", l."Description",
CASE WHEN v_is_return THEN l."Quantity" ELSE l."DemandQuantity" - l."Quantity" END, 0, l."UomId",
l."PurchaseOrderLineId", l."MaterialRequestItemId", NOW() AT TIME ZONE 'UTC', p_user_id, false
FROM "Stk_T_TransferLine" l
INNER JOIN tmp_inv_map m ON m."OldId" = l."Id";
IF v_is_return THEN
INSERT INTO "Stk_T_TransferLineLot" ("Id", "TenantId", "TransferLineId", "LotNo", "Quantity", "CreationTime", "CreatorId", "IsDeleted")
SELECT gen_random_uuid(), z."TenantId", m."NewId", z."LotNo", z."Quantity", NOW() AT TIME ZONE 'UTC', p_user_id, false
FROM "Stk_T_TransferLineLot" z
INNER JOIN tmp_inv_map m ON m."OldId" = z."TransferLineId"
WHERE z."IsDeleted" = false;
END IF;
DROP TABLE tmp_inv_map;
CALL public."Stk_P_TransferNumber"(p_new_id);
IF NOT v_is_return THEN
CALL public."Stk_P_TransferCheckAvailability"(p_new_id);
END IF;
CALL public."Stk_P_TransferRecalc"(p_new_id);
END;
$$;