
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER Procedure [dbo].[PROC_WYLICZ_I_ZAPISZ_PROWIZJE_AGENTA_DO_PLANU]
@ROK INTEGER = 2003,
@MS INTEGER = 2,
@id_Agencji INTEGER = 2
As
UPDATE [PLAN] SET
PR_PROWIZJI=W_PROWIZJA
FROM
(
--WYLICZENIE WYSOKOSCI PROWIZJI
SELECT  *, 1.0*ROUND(PODSTAWA+P_O+P_B+P_Z,4) AS W_PROWIZJA
FROM
(
SELECT * ,
ROUND ( (CASE WHEN PP_O>OCENA THEN OCENA ELSE PP_O END) , 4 ) AS P_O
FROM
(
SELECT * ,
ROUND(1.0*OCENA_ZA_MS/100*(OCENA * (CASE WHEN OCENA_ZA_MS>=50 THEN 1 ELSE 0 END)) ,4) AS PP_O,
CASE WHEN BUDZET_WYKONANY_AGENT>BUDZET_AGENTA THEN BUDZET ELSE 0 END AS P_B,
CASE WHEN BUDZET_WYKONANY_BIURO>BUDZET_BIURA THEN ZESPOL ELSE 0 END AS P_Z
FROM
(
SELECT PB.AGENCJA, PB.AGENT, PB.ROK, PB.MS, 
    PB.BUDZET_BIURA, PB.BUDZET_AGENTA, 
    PB.BUDZET_WYKONANY AS BUDZET_WYKONANY_AGENT, 
    SUM([PLAN].W_BUDZET) AS BUDZET_WYKONANY_BIURO, 
    PB.OCENA_ZA_MS, PB.PODSTAWA, PB.ZESPOL, PB.BUDZET, 
    PB.OCENA
FROM (SELECT AGENCJE.Id_agencji, 
          AGENCJE.Symbol AS AGENCJA, 
          [PLAN].SYMBOL AS AGENT, [PLAN].ROK, [PLAN].MS, 
          BUDZET_BIUR.BUDZET AS BUDZET_BIURA, 
          [PLAN].BUDZET AS BUDZET_AGENTA, 
          [PLAN].W_BUDZET AS BUDZET_WYKONANY, 
          ROUND([PLAN].OCENA, 2) AS OCENA_ZA_MS, 
          PLANY_PROWIZJI.PODSTAWA, 
          PLANY_PROWIZJI.ZESPOL, 
          PLANY_PROWIZJI.BUDZET, 
          PLANY_PROWIZJI.OCENA
      FROM dbo.AGENCJE INNER JOIN
          dbo.AGENCI ON 
          dbo.AGENCJE.Id_agencji = dbo.AGENCI.ID_AGENCJI and dbo.AGENCJE.Id_agencji=@id_Agencji  INNER
           JOIN
          dbo.BUDZET_BIUR ON 
          dbo.AGENCJE.Id_agencji = dbo.BUDZET_BIUR.ID_BIURA and dbo.AGENCJE.Id_agencji=@id_Agencji
           INNER JOIN
          dbo.[PLAN] ON 
          dbo.AGENCI.Symbol = dbo.[PLAN].SYMBOL AND 
          dbo.BUDZET_BIUR.ROK = dbo.[PLAN].ROK AND 
          dbo.BUDZET_BIUR.MS = dbo.[PLAN].MS INNER JOIN
          dbo.PLANY_PROWIZJI ON 
          dbo.AGENCI.ID_PLANU_PROWIZYJNEGO = dbo.PLANY_PROWIZJI.ID_PLANU_PROWIZYJNEGO
      WHERE (dbo.[PLAN].ROK = @ROK) AND (dbo.[PLAN].MS = @MS)) 
    PB INNER JOIN
    dbo.AGENCJE INNER JOIN
    dbo.AGENCI ON 
    dbo.AGENCJE.Id_agencji = dbo.AGENCI.ID_AGENCJI INNER JOIN
    dbo.[PLAN] ON dbo.AGENCI.Symbol = dbo.[PLAN].SYMBOL ON 
    PB.Id_agencji = dbo.AGENCJE.Id_agencji AND 
    PB.ROK = dbo.[PLAN].ROK AND 
    PB.MS = dbo.[PLAN].MS
WHERE (dbo.[PLAN].ROK = @ROK) AND (dbo.[PLAN].MS = @MS)
GROUP BY dbo.AGENCJE.Id_agencji, dbo.[PLAN].MS, 
    dbo.[PLAN].ROK, PB.AGENCJA, PB.AGENT, PB.ROK, PB.MS, 
    PB.BUDZET_BIURA, PB.BUDZET_AGENTA, 
    PB.BUDZET_WYKONANY, PB.OCENA_ZA_MS, PB.PODSTAWA, 
    PB.ZESPOL, PB.BUDZET, PB.OCENA) AS PW
) AS PX
) AS PV
) AS WW
--Końcówka instrukcji Update
inner join [plan] on WW.agent=[plan].symbol and WW.rok=[plan].rok and WW.ms=[plan].ms
return
GO

SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO

