-- Script manuel : Correction des ecritures tva_achats erronees (JOIN tva sans filtre Annee)
-- Date : 2026-03-25
-- Description : Le JOIN sur la table tva sans filtre sur Annee multipliait les montants
--               par le nombre d'annees presentes dans la table tva.
--
-- PRE-REQUIS : SP_comptabiliserFacturesFournisseur doit etre a jour (contenir le filtre tva.Annee)
-- USAGE : Executer sur chaque base metier concernee

-- Verifier que la SP est a jour
IF NOT EXISTS (
    SELECT 1 FROM sys.sql_modules
    WHERE object_id = OBJECT_ID('SP_comptabiliserFacturesFournisseur')
    AND definition LIKE '%tva.Annee%'
)
BEGIN
    RAISERROR('SP_comptabiliserFacturesFournisseur pas a jour ! Lancer une maintenance d''abord.', 16, 1)
    RETURN
END

-- Identifier les ntva_achats errones
DECLARE @ids TABLE (ntva_achats INT)
INSERT INTO @ids
SELECT DISTINCT la.ntva_achats
FROM ltva_achats la
JOIN tva_achats ta ON la.ntva_achats = ta.ntva_achats
WHERE la.Taux <> 0
  AND ta.Annee >= 2025
  AND ABS(la.TVA - ROUND(la.HT * la.Taux / 100, 2)) > 1

IF NOT EXISTS (SELECT 1 FROM @ids)
BEGIN
    PRINT 'Aucune ecriture tva_achats erronee trouvee.'
    RETURN
END

PRINT 'Ecritures erronees trouvees :'
SELECT ta.ntva_achats, ta.origine, ta.Annee, ta.Mois
FROM tva_achats ta
WHERE ta.ntva_achats IN (SELECT ntva_achats FROM @ids)

-- Sauvegarder les numeros de facture avant suppression
DECLARE @ListeFactures VARCHAR(MAX)
SELECT @ListeFactures = STRING_AGG(CAST(REPLACE(origine, 'FF', '') AS VARCHAR(MAX)), ',')
FROM tva_achats
WHERE ntva_achats IN (SELECT ntva_achats FROM @ids)

PRINT 'Factures concernees : ' + @ListeFactures

-- Remettre comptabilise = 0
UPDATE f SET comptabilise = 0
FROM facturef f
WHERE CONCAT('FF', f.nfacturef) IN (SELECT origine FROM tva_achats WHERE ntva_achats IN (SELECT ntva_achats FROM @ids))

-- Supprimer les ecritures comptables
DELETE FROM Ecriture WHERE origin IN (SELECT CONCAT('SA', ntva_achats) FROM @ids)

-- Supprimer les lignes puis entetes tva_achats
DELETE FROM ltva_achats WHERE ntva_achats IN (SELECT ntva_achats FROM @ids)
DELETE FROM tva_achats WHERE ntva_achats IN (SELECT ntva_achats FROM @ids)

-- Relancer le transfert comptable
EXEC SP_comptabiliserFacturesFournisseur 'JA', @ListeFactures, '0'

PRINT 'Correction terminee avec succes.'
