35 lines
2.5 KiB
PL/PgSQL
35 lines
2.5 KiB
PL/PgSQL
-- Onaylanan satınalma siparişinden siparişin operasyon türünde Taslak alım açar: konumlar operasyon türünden, satırlar
|
||
-- siparişin envanter takipli kalemlerinin henüz alınmamış miktarıdır. Siparişin iptal olmayan alımı varsa yeni alım açılmaz.
|
||
CREATE OR REPLACE PROCEDURE public."Inv_P_TransferFromPurchaseOrder"(p_order_id uuid, p_user_id uuid DEFAULT NULL)
|
||
LANGUAGE plpgsql AS $$
|
||
DECLARE v_new uuid := gen_random_uuid(); v_count int;
|
||
BEGIN
|
||
IF EXISTS (SELECT 1 FROM "Inv_T_Transfer" WHERE "PurchaseOrderId" = p_order_id AND "IsDeleted" = false AND "Status" <> 'Cancelled') THEN
|
||
RETURN;
|
||
END IF;
|
||
|
||
INSERT INTO "Inv_T_Transfer" ("Id", "TenantId", "BranchId", "WarehouseId", "OperationTypeId", "OperationKind", "PartnerId", "SourceLocationId", "DestinationLocationId",
|
||
"ScheduledDate", "SourceDocument", "PurchaseOrderId", "ResponsibleUserId", "ProjectId", "Status", "CreationTime", "CreatorId", "IsDeleted")
|
||
SELECT v_new, o."TenantId", ot."BranchId", ot."WarehouseId", o."OperationTypeId", ot."OperationKind", o."SupplierId", ot."SourceLocationId", ot."DestinationLocationId",
|
||
COALESCE(o."ExpectedArrival", NOW() AT TIME ZONE 'UTC'), o."OrderNo", o."Id", o."BuyerUserId", o."ProjectId", 'Draft', NOW() AT TIME ZONE 'UTC', p_user_id, false
|
||
FROM "Prc_T_PurchaseOrder" o
|
||
INNER JOIN "Inv_T_OperationType" ot ON ot."Id" = o."OperationTypeId"
|
||
WHERE o."Id" = p_order_id
|
||
AND EXISTS (SELECT 1 FROM "Prc_T_PurchaseOrderLine" l
|
||
INNER JOIN "Inv_T_Product" p ON p."Id" = l."ProductId"
|
||
WHERE l."PurchaseOrderId" = o."Id" AND l."IsDeleted" = false AND p."TrackInventory" = true AND l."Quantity" > l."ReceivedQuantity");
|
||
GET DIAGNOSTICS v_count = ROW_COUNT;
|
||
IF v_count = 0 THEN
|
||
RETURN;
|
||
END IF;
|
||
|
||
INSERT INTO "Inv_T_TransferLine" ("Id", "TenantId", "TransferId", "ProductId", "Description", "DemandQuantity", "Quantity", "UomId", "PurchaseOrderLineId", "MaterialRequestItemId", "CreationTime", "CreatorId", "IsDeleted")
|
||
SELECT gen_random_uuid(), l."TenantId", v_new, l."ProductId", l."Description", l."Quantity" - l."ReceivedQuantity", 0, l."UomId", l."Id", l."MaterialRequestItemId", NOW() AT TIME ZONE 'UTC', p_user_id, false
|
||
FROM "Prc_T_PurchaseOrderLine" l
|
||
INNER JOIN "Inv_T_Product" p ON p."Id" = l."ProductId"
|
||
WHERE l."PurchaseOrderId" = p_order_id AND l."IsDeleted" = false AND p."TrackInventory" = true AND l."Quantity" > l."ReceivedQuantity";
|
||
|
||
CALL public."Inv_P_TransferNumber"(v_new);
|
||
CALL public."Inv_P_TransferRecalc"(v_new);
|
||
END;
|
||
$$;
|