Erster commit
This commit is contained in:
396
SWESQL/SQL-Server/Prozeduren/[PRCUST_SET_JSON_INVOICE_DATA].sql
Normal file
396
SWESQL/SQL-Server/Prozeduren/[PRCUST_SET_JSON_INVOICE_DATA].sql
Normal file
@@ -0,0 +1,396 @@
|
|||||||
|
CREATE OR ALTER PROCEDURE PRCUST_SET_JSON_INVOICE_DATA
|
||||||
|
@json NVARCHAR(MAX)
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
SET NOCOUNT ON;
|
||||||
|
|
||||||
|
PRINT 'Starte Verarbeitung von JSON-Daten...';
|
||||||
|
|
||||||
|
---------------------------------------------------------
|
||||||
|
-- JSON VALIDIEREN
|
||||||
|
---------------------------------------------------------
|
||||||
|
IF dbo.FN_VALIDATE_JSON_INVOICE_DATA(@json) = 0
|
||||||
|
BEGIN
|
||||||
|
PRINT 'JSON-Validierung fehlgeschlagen.';
|
||||||
|
SELECT
|
||||||
|
success = 0
|
||||||
|
, message = 'Ungültige JSON-Struktur.'
|
||||||
|
, data = NULL;
|
||||||
|
RETURN;
|
||||||
|
END
|
||||||
|
|
||||||
|
PRINT 'JSON-Validierung erfolgreich.';
|
||||||
|
|
||||||
|
BEGIN TRY
|
||||||
|
DECLARE @docs TABLE (doc NVARCHAR(MAX));
|
||||||
|
DECLARE @doc NVARCHAR(MAX);
|
||||||
|
DECLARE @DocumentID INT;
|
||||||
|
|
||||||
|
PRINT 'Extrahiere purchaseDocuments...';
|
||||||
|
|
||||||
|
INSERT INTO @docs(doc)
|
||||||
|
SELECT value
|
||||||
|
FROM OPENJSON(@json, '$.purchaseDocuments');
|
||||||
|
|
||||||
|
DECLARE doc_cursor CURSOR FOR SELECT doc FROM @docs;
|
||||||
|
OPEN doc_cursor;
|
||||||
|
FETCH NEXT FROM doc_cursor INTO @doc;
|
||||||
|
|
||||||
|
WHILE @@FETCH_STATUS = 0
|
||||||
|
BEGIN
|
||||||
|
PRINT 'Füge PurchaseDocument ein...';
|
||||||
|
|
||||||
|
---------------------------------------------------------
|
||||||
|
-- PurchaseDocument einfügen (zeilenweise)
|
||||||
|
---------------------------------------------------------
|
||||||
|
INSERT INTO PurchaseDocument (
|
||||||
|
DocumentType
|
||||||
|
, No_
|
||||||
|
, NoSeries
|
||||||
|
, ProcessIDTransfer
|
||||||
|
, BuyFromVendorNo
|
||||||
|
, PayToVendorNo
|
||||||
|
, PostingDate
|
||||||
|
, PaymentTermsCode
|
||||||
|
, PaymentTermsCodeIR
|
||||||
|
, DueDate
|
||||||
|
, PmtDiscountDate
|
||||||
|
, PaymentDiscount
|
||||||
|
, CurrencyCode
|
||||||
|
, InvoiceDiscCode
|
||||||
|
, PostingDescription
|
||||||
|
, PaymentMethodCode
|
||||||
|
, VendorInvoiceNo
|
||||||
|
, VendorCrMemoNo
|
||||||
|
, PhrVendorBankAccountCode
|
||||||
|
, PhrBankBranchNo
|
||||||
|
, PhrBankAccountNo
|
||||||
|
, PhrIBAN
|
||||||
|
, PhrSWIFTCode
|
||||||
|
, PhrBankName
|
||||||
|
, PhrBankAccountEntryPriority
|
||||||
|
, PhrRMCashDiscountReceived
|
||||||
|
, PhrRMAmountIncludingVAT
|
||||||
|
, PhrRMAmountLessDiscount
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
DocumentType
|
||||||
|
, No
|
||||||
|
, NoSeries
|
||||||
|
, ProcessIDTransfer
|
||||||
|
, BuyFromVendorNo
|
||||||
|
, PayToVendorNo
|
||||||
|
, PostingDate
|
||||||
|
, PaymentTermsCode
|
||||||
|
, PaymentTermsCodeIR
|
||||||
|
, DueDate
|
||||||
|
, PmtDiscountDate
|
||||||
|
, PaymentDiscount
|
||||||
|
, CurrencyCode
|
||||||
|
, InvoiceDiscCode
|
||||||
|
, PostingDescription
|
||||||
|
, PaymentMethodCode
|
||||||
|
, VendorInvoiceNo
|
||||||
|
, VendorCrMemoNo
|
||||||
|
, PhrVendorBankAccountCode
|
||||||
|
, PhrBankBranchNo
|
||||||
|
, PhrBankAccountNo
|
||||||
|
, PhrIBAN
|
||||||
|
, PhrSWIFTCode
|
||||||
|
, PhrBankName
|
||||||
|
, PhrBankAccountEntryPriority
|
||||||
|
, PhrRMCashDiscountReceived
|
||||||
|
, PhrRMAmountIncludingVAT
|
||||||
|
, PhrRMAmountLessDiscount
|
||||||
|
FROM OPENJSON(@doc)
|
||||||
|
WITH (
|
||||||
|
DocumentType INT
|
||||||
|
, No NVARCHAR(50)
|
||||||
|
, NoSeries NVARCHAR(50)
|
||||||
|
, ProcessIDTransfer NVARCHAR(50)
|
||||||
|
, BuyFromVendorNo NVARCHAR(50)
|
||||||
|
, PayToVendorNo NVARCHAR(50)
|
||||||
|
, PostingDate DATE
|
||||||
|
, PaymentTermsCode NVARCHAR(20)
|
||||||
|
, PaymentTermsCodeIR NVARCHAR(20)
|
||||||
|
, DueDate DATE
|
||||||
|
, PmtDiscountDate DATE
|
||||||
|
, PaymentDiscount DECIMAL(10,2)
|
||||||
|
, CurrencyCode NVARCHAR(10)
|
||||||
|
, InvoiceDiscCode NVARCHAR(50)
|
||||||
|
, PostingDescription NVARCHAR(250)
|
||||||
|
, PaymentMethodCode NVARCHAR(20)
|
||||||
|
, VendorInvoiceNo NVARCHAR(50)
|
||||||
|
, VendorCrMemoNo NVARCHAR(50)
|
||||||
|
, PhrVendorBankAccountCode NVARCHAR(50)
|
||||||
|
, PhrBankBranchNo NVARCHAR(50)
|
||||||
|
, PhrBankAccountNo NVARCHAR(50)
|
||||||
|
, PhrIBAN NVARCHAR(50)
|
||||||
|
, PhrSWIFTCode NVARCHAR(50)
|
||||||
|
, PhrBankName NVARCHAR(100)
|
||||||
|
, PhrBankAccountEntryPriority BIT
|
||||||
|
, PhrRMCashDiscountReceived BIT
|
||||||
|
, PhrRMAmountIncludingVAT DECIMAL(18,2)
|
||||||
|
, PhrRMAmountLessDiscount DECIMAL(18,2)
|
||||||
|
, purchaseLines NVARCHAR(MAX) AS JSON
|
||||||
|
);
|
||||||
|
|
||||||
|
SET @DocumentID = SCOPE_IDENTITY();
|
||||||
|
|
||||||
|
PRINT 'PurchaseDocument eingefügt. DocumentID = ' + CAST(@DocumentID AS NVARCHAR(20));
|
||||||
|
|
||||||
|
---------------------------------------------------------
|
||||||
|
-- purchaseLines extrahieren
|
||||||
|
---------------------------------------------------------
|
||||||
|
PRINT 'Extrahiere purchaseLines...';
|
||||||
|
|
||||||
|
DECLARE @lines TABLE (line NVARCHAR(MAX));
|
||||||
|
INSERT INTO @lines(line)
|
||||||
|
SELECT value
|
||||||
|
FROM OPENJSON(@doc, '$.purchaseLines');
|
||||||
|
|
||||||
|
DECLARE @line NVARCHAR(MAX);
|
||||||
|
DECLARE @LineID INT;
|
||||||
|
|
||||||
|
DECLARE line_cursor CURSOR FOR SELECT line FROM @lines;
|
||||||
|
OPEN line_cursor;
|
||||||
|
FETCH NEXT FROM line_cursor INTO @line;
|
||||||
|
|
||||||
|
WHILE @@FETCH_STATUS = 0
|
||||||
|
BEGIN
|
||||||
|
PRINT 'Füge PurchaseLine ein...';
|
||||||
|
|
||||||
|
INSERT INTO PurchaseLine (
|
||||||
|
DocumentID
|
||||||
|
, AttachedToLineNo
|
||||||
|
, Type
|
||||||
|
, No_
|
||||||
|
, Description
|
||||||
|
, Description2
|
||||||
|
, LocationCode
|
||||||
|
, VariantCode
|
||||||
|
, Quantity
|
||||||
|
, UnitOfMeasureCode
|
||||||
|
, DirectUnitCost
|
||||||
|
, LineDiscount
|
||||||
|
, AbleToDiscount
|
||||||
|
, DiscountCalculated
|
||||||
|
, WorkOrderNo
|
||||||
|
, GenBusPostingGroup
|
||||||
|
, GenProdPostingGroup
|
||||||
|
, VatBusPostingGroup
|
||||||
|
, VatProdPostingGroup
|
||||||
|
, ApplToItemEntry
|
||||||
|
, PostingWithoutApply
|
||||||
|
, AnticipatedPayment
|
||||||
|
, ReceiptNo
|
||||||
|
, ReceiptLineNo
|
||||||
|
, IrOrderNo
|
||||||
|
, IrOrderLineNo
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
@DocumentID
|
||||||
|
, AttachedToLineNo
|
||||||
|
, Type
|
||||||
|
, No
|
||||||
|
, Description
|
||||||
|
, Description2
|
||||||
|
, LocationCode
|
||||||
|
, VariantCode
|
||||||
|
, Quantity
|
||||||
|
, UnitOfMeasureCode
|
||||||
|
, DirectUnitCost
|
||||||
|
, LineDiscount
|
||||||
|
, AbleToDiscount
|
||||||
|
, DiscountCalculated
|
||||||
|
, WorkOrderNo
|
||||||
|
, GenBusPostingGroup
|
||||||
|
, GenProdPostingGroup
|
||||||
|
, VatBusPostingGroup
|
||||||
|
, VatProdPostingGroup
|
||||||
|
, ApplToItemEntry
|
||||||
|
, PostingWithoutApply
|
||||||
|
, AnticipatedPayment
|
||||||
|
, ReceiptNo
|
||||||
|
, ReceiptLineNo
|
||||||
|
, IrOrderNo
|
||||||
|
, IrOrderLineNo
|
||||||
|
FROM OPENJSON(@line)
|
||||||
|
WITH (
|
||||||
|
AttachedToLineNo INT
|
||||||
|
, Type INT
|
||||||
|
, No NVARCHAR(50)
|
||||||
|
, Description NVARCHAR(250)
|
||||||
|
, Description2 NVARCHAR(250)
|
||||||
|
, LocationCode NVARCHAR(50)
|
||||||
|
, VariantCode NVARCHAR(50)
|
||||||
|
, Quantity DECIMAL(18,4)
|
||||||
|
, UnitOfMeasureCode NVARCHAR(20)
|
||||||
|
, DirectUnitCost DECIMAL(18,4)
|
||||||
|
, LineDiscount DECIMAL(18,4)
|
||||||
|
, AbleToDiscount BIT
|
||||||
|
, DiscountCalculated BIT
|
||||||
|
, WorkOrderNo NVARCHAR(50)
|
||||||
|
, GenBusPostingGroup NVARCHAR(20)
|
||||||
|
, GenProdPostingGroup NVARCHAR(20)
|
||||||
|
, VatBusPostingGroup NVARCHAR(20)
|
||||||
|
, VatProdPostingGroup NVARCHAR(20)
|
||||||
|
, ApplToItemEntry INT
|
||||||
|
, PostingWithoutApply BIT
|
||||||
|
, AnticipatedPayment DECIMAL(18,2)
|
||||||
|
, ReceiptNo NVARCHAR(50)
|
||||||
|
, ReceiptLineNo INT
|
||||||
|
, IrOrderNo NVARCHAR(50)
|
||||||
|
, IrOrderLineNo INT
|
||||||
|
, dimSetEntries NVARCHAR(MAX) AS JSON
|
||||||
|
, itemChargeAssignmentLines NVARCHAR(MAX) AS JSON
|
||||||
|
);
|
||||||
|
|
||||||
|
SET @LineID = SCOPE_IDENTITY();
|
||||||
|
|
||||||
|
PRINT 'PurchaseLine eingefügt. LineID = ' + CAST(@LineID AS NVARCHAR(20));
|
||||||
|
|
||||||
|
---------------------------------------------------------
|
||||||
|
-- dimSetEntries
|
||||||
|
---------------------------------------------------------
|
||||||
|
PRINT 'Füge dimSetEntries ein...';
|
||||||
|
|
||||||
|
INSERT INTO DimSetEntry (
|
||||||
|
LineID
|
||||||
|
, DimensionCode
|
||||||
|
, DimensionValueCode
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
@LineID
|
||||||
|
, DimensionCode
|
||||||
|
, DimensionValueCode
|
||||||
|
FROM OPENJSON(@line, '$.dimSetEntries')
|
||||||
|
WITH (
|
||||||
|
DimensionCode NVARCHAR(50)
|
||||||
|
, DimensionValueCode NVARCHAR(50)
|
||||||
|
);
|
||||||
|
|
||||||
|
---------------------------------------------------------
|
||||||
|
-- itemChargeAssignmentLines
|
||||||
|
---------------------------------------------------------
|
||||||
|
PRINT 'Füge itemChargeAssignmentLines ein...';
|
||||||
|
|
||||||
|
INSERT INTO ItemChargeAssignment (
|
||||||
|
LineID
|
||||||
|
, ItemChargeNo
|
||||||
|
, UnitCost
|
||||||
|
, AppliesToDocType
|
||||||
|
, AppliesToDocNo
|
||||||
|
, AppliesToDocLineNo
|
||||||
|
, ItemNo
|
||||||
|
, Description
|
||||||
|
, QtyToAssign
|
||||||
|
, QtyAssigned
|
||||||
|
, AmountToAssign
|
||||||
|
, AppliesToDocLineAmount
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
@LineID
|
||||||
|
, ItemChargeNo
|
||||||
|
, UnitCost
|
||||||
|
, AppliesToDocType
|
||||||
|
, AppliesToDocNo
|
||||||
|
, AppliesToDocLineNo
|
||||||
|
, ItemNo
|
||||||
|
, Description
|
||||||
|
, QtyToAssign
|
||||||
|
, QtyAssigned
|
||||||
|
, AmountToAssign
|
||||||
|
, AppliesToDocLineAmount
|
||||||
|
FROM OPENJSON(@line, '$.itemChargeAssignmentLines')
|
||||||
|
WITH (
|
||||||
|
ItemChargeNo NVARCHAR(50)
|
||||||
|
, UnitCost DECIMAL(18,4)
|
||||||
|
, AppliesToDocType INT
|
||||||
|
, AppliesToDocNo NVARCHAR(50)
|
||||||
|
, AppliesToDocLineNo INT
|
||||||
|
, ItemNo NVARCHAR(50)
|
||||||
|
, Description NVARCHAR(250)
|
||||||
|
, QtyToAssign DECIMAL(18,4)
|
||||||
|
, QtyAssigned DECIMAL(18,4)
|
||||||
|
, AmountToAssign DECIMAL(18,4)
|
||||||
|
, AppliesToDocLineAmount DECIMAL(18,4)
|
||||||
|
);
|
||||||
|
|
||||||
|
FETCH NEXT FROM line_cursor INTO @line;
|
||||||
|
END
|
||||||
|
|
||||||
|
CLOSE line_cursor;
|
||||||
|
DEALLOCATE line_cursor;
|
||||||
|
|
||||||
|
FETCH NEXT FROM doc_cursor INTO @doc;
|
||||||
|
END
|
||||||
|
|
||||||
|
CLOSE doc_cursor;
|
||||||
|
DEALLOCATE doc_cursor;
|
||||||
|
|
||||||
|
PRINT 'Erzeuge JSON-Ausgabe...';
|
||||||
|
|
||||||
|
---------------------------------------------------------
|
||||||
|
-- JSON-Ausgabe exakt wie Upload-Datei
|
||||||
|
---------------------------------------------------------
|
||||||
|
DECLARE @output NVARCHAR(MAX);
|
||||||
|
|
||||||
|
SELECT @output =
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
pd.*
|
||||||
|
, (
|
||||||
|
SELECT
|
||||||
|
pl.*
|
||||||
|
, (
|
||||||
|
SELECT *
|
||||||
|
FROM DimSetEntry d
|
||||||
|
WHERE d.LineID = pl.LineID
|
||||||
|
FOR JSON PATH
|
||||||
|
) AS dimSetEntries
|
||||||
|
, (
|
||||||
|
SELECT *
|
||||||
|
FROM ItemChargeAssignment ia
|
||||||
|
WHERE ia.LineID = pl.LineID
|
||||||
|
FOR JSON PATH
|
||||||
|
) AS itemChargeAssignmentLines
|
||||||
|
FROM PurchaseLine pl
|
||||||
|
WHERE pl.DocumentID = pd.DocumentID
|
||||||
|
FOR JSON PATH
|
||||||
|
) AS purchaseLines
|
||||||
|
FROM PurchaseDocument pd
|
||||||
|
WHERE pd.DocumentID = @DocumentID
|
||||||
|
FOR JSON PATH
|
||||||
|
) AS purchaseDocuments
|
||||||
|
FOR JSON PATH
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
PRINT 'JSON-Ausgabe erstellt.';
|
||||||
|
|
||||||
|
---------------------------------------------------------
|
||||||
|
-- Erfolgsmeldung + strukturierte JSON-Ausgabe
|
||||||
|
---------------------------------------------------------
|
||||||
|
SELECT
|
||||||
|
success = 1
|
||||||
|
, message = 'Daten erfolgreich verarbeitet.'
|
||||||
|
, data = @output;
|
||||||
|
|
||||||
|
PRINT 'Verarbeitung erfolgreich abgeschlossen.';
|
||||||
|
|
||||||
|
END TRY
|
||||||
|
BEGIN CATCH
|
||||||
|
PRINT 'FEHLER: ' + ERROR_MESSAGE();
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
success = 0
|
||||||
|
, message = ERROR_MESSAGE()
|
||||||
|
, data = NULL;
|
||||||
|
END CATCH
|
||||||
|
END
|
||||||
|
GO
|
||||||
Reference in New Issue
Block a user