From 95565af4cd2efe09b503b3f3d3d482ae8400b3c5 Mon Sep 17 00:00:00 2001 From: Claude Agent Date: Fri, 20 Mar 2026 10:32:55 +0000 Subject: [PATCH] fix: discriminare pe PRET+SIGN(CANTITATE) pentru duplicate CODMAT pe comanda Permite articole duplicate cu preturi diferite pe aceeasi comanda (kit + direct cu acelasi CODMAT) si articol + retur la acelasi pret. Cheia de unicitate devine (ID_COMANDA, ID_ARTICOL, PTVA, PRET, SIGN(CANTITATE)). Modificari in 8 locuri: duplicate check (pack_comenzi), cursor_comanda factura/aviz, cursor_lucrare ambele ramuri, adauga_articol_lucrare_pret, adauga_articol_factura, inchide_comanda. Zero signatura schimbata, zero schema change, zero VFP impact. Co-Authored-By: Claude Opus 4.6 (1M context) --- api/database-scripts/04_pack_comenzi.pck | 2 ++ api/database-scripts/08_PACK_FACTURARE.pck | 30 ++++++++++++++-------- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/api/database-scripts/04_pack_comenzi.pck b/api/database-scripts/04_pack_comenzi.pck index 46411a4..ce3ceb5 100644 --- a/api/database-scripts/04_pack_comenzi.pck +++ b/api/database-scripts/04_pack_comenzi.pck @@ -785,6 +785,8 @@ create or replace package body PACK_COMENZI is WHERE ID_COMANDA = V_ID_COMANDA AND ID_ARTICOL = V_ID_ARTICOL AND NVL(PTVA,0) = NVL(V_PTVA,0) + AND PRET = V_PRET2 + AND SIGN(CANTITATE) = SIGN(V_CANTITATE) AND STERS = 0; IF V_NR_INREG > 0 THEN diff --git a/api/database-scripts/08_PACK_FACTURARE.pck b/api/database-scripts/08_PACK_FACTURARE.pck index 7b2a9dd..0168cbe 100644 --- a/api/database-scripts/08_PACK_FACTURARE.pck +++ b/api/database-scripts/08_PACK_FACTURARE.pck @@ -3034,15 +3034,15 @@ CREATE OR REPLACE PACKAGE BODY "PACK_FACTURARE" is ON B.ID_POL = G.ID_POL LEFT JOIN NOM_ARTICOLE C ON A.ID_ARTICOL = C.ID_ARTICOL - LEFT JOIN (SELECT B1.ID_ARTICOL, SUM(B1.CANTITATE) AS CANTITATE + LEFT JOIN (SELECT B1.ID_ARTICOL, B1.PRET, SUM(B1.CANTITATE) AS CANTITATE FROM VANZARI A1 LEFT JOIN VANZARI_DETALII B1 ON A1.ID_VANZARE = B1.ID_VANZARE AND B1.STERS = 0 WHERE A1.STERS = 0 AND A1.ID_COMANDA = V_ID_COMANDA - GROUP BY B1.ID_ARTICOL) D - ON A.ID_ARTICOL = D.ID_ARTICOL + GROUP BY B1.ID_ARTICOL, B1.PRET) D + ON A.ID_ARTICOL = D.ID_ARTICOL AND A.PRET = D.PRET LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR FROM CURS WHERE DATA <= V_DATA_CURS @@ -3121,15 +3121,15 @@ CREATE OR REPLACE PACKAGE BODY "PACK_FACTURARE" is ON B.ID_POL = G.ID_POL LEFT JOIN NOM_ARTICOLE C ON A.ID_ARTICOL = C.ID_ARTICOL - LEFT JOIN (SELECT B1.ID_ARTICOL, SUM(B1.CANTITATE) AS CANTITATE + LEFT JOIN (SELECT B1.ID_ARTICOL, B1.PRET, SUM(B1.CANTITATE) AS CANTITATE FROM VANZARI A1 LEFT JOIN VANZARI_DETALII B1 ON A1.ID_VANZARE = B1.ID_VANZARE AND B1.STERS = 0 WHERE A1.STERS = 0 AND A1.ID_COMANDA = V_ID_COMANDA - GROUP BY B1.ID_ARTICOL) D - ON A.ID_ARTICOL = D.ID_ARTICOL + GROUP BY B1.ID_ARTICOL, B1.PRET) D + ON A.ID_ARTICOL = D.ID_ARTICOL AND A.PRET = D.PRET LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR FROM CURS WHERE DATA <= V_DATA_CURS @@ -3362,15 +3362,17 @@ CREATE OR REPLACE PACKAGE BODY "PACK_FACTURARE" is ON A.ID_ARTICOL = C.ID_ARTICOL LEFT JOIN (SELECT B1.ID_ARTICOL, A1.ID_COMANDA, + B1.PRET, SUM(B1.CANTITATE) AS CANTITATE FROM VANZARI A1 LEFT JOIN VANZARI_DETALII B1 ON A1.ID_VANZARE = B1.ID_VANZARE AND B1.STERS = 0 WHERE A1.STERS = 0 - GROUP BY B1.ID_ARTICOL, A1.ID_COMANDA) D + GROUP BY B1.ID_ARTICOL, A1.ID_COMANDA, B1.PRET) D ON A.ID_ARTICOL = D.ID_ARTICOL AND A.ID_COMANDA = D.ID_COMANDA + AND A.PRET = D.PRET LEFT JOIN (SELECT ID_ARTICOL, SUM(CANTS + CANT - CANTE) AS CANT_STOC, CONT @@ -3510,15 +3512,17 @@ CREATE OR REPLACE PACKAGE BODY "PACK_FACTURARE" is ON A.ID_ARTICOL = C.ID_ARTICOL LEFT JOIN (SELECT B1.ID_ARTICOL, A1.ID_COMANDA, + B1.PRET, SUM(B1.CANTITATE) AS CANTITATE FROM VANZARI A1 LEFT JOIN VANZARI_DETALII B1 ON A1.ID_VANZARE = B1.ID_VANZARE AND B1.STERS = 0 WHERE A1.STERS = 0 - GROUP BY B1.ID_ARTICOL, A1.ID_COMANDA) D + GROUP BY B1.ID_ARTICOL, A1.ID_COMANDA, B1.PRET) D ON A.ID_ARTICOL = D.ID_ARTICOL AND A.ID_COMANDA = D.ID_COMANDA + AND A.PRET = D.PRET LEFT JOIN (SELECT ID_ARTICOL, SUM(CANTS + CANT - CANTE) AS CANT_STOC, CONT @@ -4867,6 +4871,7 @@ CREATE OR REPLACE PACKAGE BODY "PACK_FACTURARE" is WHERE A.ID_COMANDA = V_ID_COMANDA AND A.ID_ARTICOL = V_ID_ARTICOL AND A.ID_POL = V_ID_POL + AND A.PRET = V_PRETIN AND A.STERS = 0; EXCEPTION WHEN TOO_MANY_ROWS THEN @@ -5044,6 +5049,7 @@ CREATE OR REPLACE PACKAGE BODY "PACK_FACTURARE" is ON A.ID_ARTICOL = D.ID_ARTICOL WHERE A.ID_COMANDA = V_ID_COMANDA AND A.ID_ARTICOL = V_ID_ARTICOL + AND A.PRET = V_PRET_TEMP AND A.STERS = 0; WHEN pack_facturare.ntip = 4 THEN @@ -5758,15 +5764,18 @@ CREATE OR REPLACE PACKAGE BODY "PACK_FACTURARE" is LEFT JOIN (SELECT ID_ARTICOL, ID_POL, ID_VALUTA, + PRET, SUM(CANTITATE) AS CANTITATE FROM VANZARI_DETALII_TEMP - GROUP BY ID_ARTICOL, ID_POL, ID_VALUTA) B + GROUP BY ID_ARTICOL, ID_POL, ID_VALUTA, PRET) B ON A.ID_ARTICOL = B.ID_ARTICOL AND A.ID_POL = B.ID_POL AND A.ID_VALUTA = B.ID_VALUTA + AND A.PRET = B.PRET LEFT JOIN (SELECT B.ID_ARTICOL, B.ID_POL, B.ID_VALUTA, + B.PRET, SUM(B.CANTITATE) AS CANTITATE FROM VANZARI A LEFT JOIN VANZARI_DETALII B @@ -5774,10 +5783,11 @@ CREATE OR REPLACE PACKAGE BODY "PACK_FACTURARE" is AND B.STERS = 0 WHERE A.ID_COMANDA = to_number(pack_facturare.clistaid) AND A.STERS = 0 - GROUP BY B.ID_ARTICOL, B.ID_POL, B.ID_VALUTA) C + GROUP BY B.ID_ARTICOL, B.ID_POL, B.ID_VALUTA, B.PRET) C ON A.ID_ARTICOL = C.ID_ARTICOL AND A.ID_POL = C.ID_POL AND A.ID_VALUTA = C.ID_VALUTA + AND A.PRET = C.PRET WHERE A.STERS = 0 AND A.ID_COMANDA = to_number(pack_facturare.clistaid) AND A.CANTITATE > NVL(C.CANTITATE, 0) + NVL(B.CANTITATE, 0);