SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER OFF GO ALTER PROCEDURE [dbo].[PROC_WYLICZ_I_ZAPISZ_PROWIZJE] @ROK INT = 2003, @MS INT = 2, @idAgencji INT = 2 AS -- wyczysc wszystko dla danej agencji DELETE FROM Prowizje WHERE Rok = @Rok AND Ms = @Ms AND Agencja = (SELECT symbol FROM Agencje where Id_Agencji = @idAgencji) INSERT INTO Prowizje (Agencja, Agent, Rok, Ms, nrFaktury, Netto, procentProwizji, Zp, idFaktury) SELECT W.Agencja, W.Symbol, YEAR(W.dataWplaty) AS Rok, Month(W.dataWplaty) AS Ms, W.NR_FK, W.Netto, --NULL AS nrFakturyKorygowanej, procentProwizji = CASE WHEN Z.Zp = 1 THEN CAST(Z.procentProwizji AS decimal(9,2)) ELSE COALESCE(CAST(P.Pr_Prowizji AS decimal(9,2)), 0) END, Z.Zp, W.ID_FAKTURY FROM WplywyByTytul AS W INNER JOIN Faktury AS F ON W.ID_FAKTURY = F.Id_Faktury INNER JOIN Zamowienia AS Z ON Z.idZamowienia = F.idZamowienia LEFT OUTER JOIN [Plan] AS P ON P.Rok=@rok AND P.Ms=@ms AND P.Symbol=W.Symbol WHERE (YEAR(W.dataWplaty) = @rok) AND (MONTH(W.dataWplaty) = @ms) --TODO: dodac pole typ faktury, ktory bedzie jednoznacznie okreslal jakie faktury nas interesuja... AND F.Numer_Roz<>'POZ' AND F.Numer_Roz<>'KAT' AND W.roznica_nowa<=60 AND F.Id_Sprzedawcy=@idAgencji AND F.Korekta<>1 ORDER BY Pr_Prowizji --******************************************************************************************* -- Usun prowizje dla faktur ktore zostaly zaplacone w tym miesiacu a moga jeszcze wystepowac -- w tabeli prowizje w poprzednich miesiacach DECLARE @IdFaktur TABLE ( id INT ) INSERT INTO @IdFaktur SELECT W.ID_FAKTURY FROM WplywyByTytul AS W INNER JOIN Faktury AS F ON W.ID_FAKTURY = F.Id_Faktury INNER JOIN Zamowienia AS Z ON Z.idZamowienia = F.idZamowienia LEFT OUTER JOIN [Plan] AS P ON P.Rok=@rok AND P.Ms=@ms AND P.Symbol=W.Symbol WHERE (YEAR(W.dataWplaty) = @rok) AND (MONTH(W.dataWplaty) = @ms) --TODO: dodac pole typ faktury, ktory bedzie jednoznacznie okreslal jakie faktury nas interesuja... AND F.Numer_Roz<>'POZ' AND F.Numer_Roz<>'KAT' AND W.roznica_nowa<=60 AND F.Id_Sprzedawcy=@idAgencji AND F.Korekta<>1 DELETE FROM Prowizje WHERE idFaktury IN (SELECT ID FROM @idFaktur) AND (Rok<>@rok OR Ms<>@ms) --******************************************************************************************* RETURN GO SET ANSI_NULLS OFF GO SET QUOTED_IDENTIFIER ON GO