sozsoft-platform/configs/seeds/postgres/object/Stk_P_TransferCopy.sql

54 lines
3.2 KiB
MySQL
Raw Normal View History

2026-10-12 21:43:05 +00:00
-- 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.
2026-10-19 14:35:08 +00:00
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)
2026-10-12 21:43:05 +00:00
LANGUAGE plpgsql AS $$
DECLARE v_is_return boolean := p_mode = 'Return';
BEGIN
p_new_id := gen_random_uuid();
2026-10-19 14:35:08 +00:00
INSERT INTO "Stk_T_Transfer" ("Id", "TenantId", "BranchId", "WarehouseId", "OperationTypeId", "OperationKind", "PartnerId", "SourceLocationId", "DestinationLocationId",
2026-10-12 21:43:05 +00:00
"ScheduledDate", "SourceDocument", "PurchaseOrderId", "BackorderOfId", "ReturnOfId", "CarrierId", "ResponsibleUserId", "ProjectId", "DeliveryPolicy",
"Status", "CreationTime", "CreatorId", "IsDeleted")
2026-10-12 21:43:05 +00:00
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
2026-10-19 14:35:08 +00:00
FROM "Stk_T_Transfer" t
2026-10-12 21:43:05 +00:00
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"
2026-10-19 14:35:08 +00:00
FROM "Stk_T_TransferLine"
2026-10-12 21:43:05 +00:00
WHERE "TransferId" = p_source_id AND "IsDeleted" = false
AND ((v_is_return AND "Quantity" > 0) OR (NOT v_is_return AND "Quantity" < "DemandQuantity"));
2026-10-19 14:35:08 +00:00
INSERT INTO "Stk_T_TransferLine" ("Id", "TenantId", "TransferId", "ProductId", "Description", "DemandQuantity", "Quantity", "UomId",
2026-10-12 21:43:05 +00:00
"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
2026-10-19 14:35:08 +00:00
FROM "Stk_T_TransferLine" l
2026-10-12 21:43:05 +00:00
INNER JOIN tmp_inv_map m ON m."OldId" = l."Id";
IF v_is_return THEN
2026-10-19 14:35:08 +00:00
INSERT INTO "Stk_T_TransferLineLot" ("Id", "TenantId", "TransferLineId", "LotNo", "Quantity", "CreationTime", "CreatorId", "IsDeleted")
2026-10-12 21:43:05 +00:00
SELECT gen_random_uuid(), z."TenantId", m."NewId", z."LotNo", z."Quantity", NOW() AT TIME ZONE 'UTC', p_user_id, false
2026-10-19 14:35:08 +00:00
FROM "Stk_T_TransferLineLot" z
2026-10-12 21:43:05 +00:00
INNER JOIN tmp_inv_map m ON m."OldId" = z."TransferLineId"
WHERE z."IsDeleted" = false;
END IF;
DROP TABLE tmp_inv_map;
2026-10-19 14:35:08 +00:00
CALL public."Stk_P_TransferNumber"(p_new_id);
2026-10-12 21:43:05 +00:00
IF NOT v_is_return THEN
2026-10-19 14:35:08 +00:00
CALL public."Stk_P_TransferCheckAvailability"(p_new_id);
2026-10-12 21:43:05 +00:00
END IF;
2026-10-19 14:35:08 +00:00
CALL public."Stk_P_TransferRecalc"(p_new_id);
2026-10-12 21:43:05 +00:00
END;
$$;