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

54 lines
3.5 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 onay durumunu ve bağları taşır.
CREATE OR REPLACE PROCEDURE public."Inv_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 "Inv_T_Transfer" ("Id", "TenantId", "BranchId", "WarehouseId", "OperationTypeId", "OperationKind", "PartnerId", "SourceLocationId", "DestinationLocationId",
"ScheduledDate", "SourceDocument", "PurchaseOrderId", "BackorderOfId", "ReturnOfId", "CarrierId", "ResponsibleUserId", "ProjectId", "DeliveryPolicy",
"Status", "SourceApproverUserNames", "ApprovalUserName", "ApprovalStatus", "ApprovalDate", "ApprovalDescription", "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', t."SourceApproverUserNames", t."ApprovalUserName", t."ApprovalStatus", t."ApprovalDate", t."ApprovalDescription", NOW() AT TIME ZONE 'UTC', p_user_id, false
FROM "Inv_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 "Inv_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 "Inv_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 "Inv_T_TransferLine" l
INNER JOIN tmp_inv_map m ON m."OldId" = l."Id";
IF v_is_return THEN
INSERT INTO "Inv_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 "Inv_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."Inv_P_TransferNumber"(p_new_id);
IF NOT v_is_return THEN
CALL public."Inv_P_TransferCheckAvailability"(p_new_id);
END IF;
CALL public."Inv_P_TransferRecalc"(p_new_id);
END;
$$;