Advertisement
Guest User

Untitled

a guest
Oct 18th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 5.49 KB | None | 0 0
  1. USE [aa_bis]
  2. GO
  3. /****** Object:  UserDefinedFunction [dbo].[get_lista_klientow_z_pomocatech_F_BASE]    Script Date: 18.10.2017 15:10:01 ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8. ALTER FUNCTION [dbo].[get_lista_klientow_z_pomocatech_F_BASE] (@id_klienta INT,@subscriptions subscriptionsType READONLY,@kategorie kategorieType READONLY,@ftype INT)
  9. RETURNS @klienci TABLE(id_klienta INT,typ INT)
  10. AS
  11. BEGIN
  12. -- 2 ver
  13.  
  14. DECLARE @date_ref datetime
  15. DECLARE @Months12Ago datetime, @Months25Ago datetime
  16. DECLARE @F1 INT = 1
  17. DECLARE @F2 INT = 2
  18.  
  19. --declare @klienci TABLE(id_klienta int INDEX IX1 CLUSTERED,typ int)
  20.  
  21. SET @Months12Ago = DATEADD(DAY, 14, DATEADD(MONTH, -12, DATEADD(dd, 0, DATEDIFF(dd, 0, getdate()))))
  22. SET @Months25Ago = DATEADD(MONTH, -37, DATEADD(dd, 0, DATEDIFF(dd, 0, getdate())))
  23.  
  24. DECLARE @first_license TABLE (id_klienta INT, id_sprzedawcy INT, dt_first_lic datetime, rn INT)
  25. DECLARE @last_tech_supp TABLE (id_klienta INT, id_sprzedawcy INT, dt_last_tech_supp datetime, rn INT)
  26.     INSERT INTO @first_license
  27.     SELECT *
  28.     FROM (
  29.     SELECT id_klienta, id_sprzedawcy, data_sprzedazy AS dt_first_lic, ROW_NUMBER() OVER(PARTITION BY id_klienta ORDER BY data_sprzedazy ASC) AS rn   -- pierwsza licencja bezterminowa
  30.     FROM s_faktury WHERE EXISTS (
  31.     SELECT id_faktury FROM s_faktury_pozycje WHERE s_faktury_pozycje.id_faktury = s_faktury.id_faktury AND EXISTS (SELECT [id_produktu] FROM [dbo].[s_produkty] WHERE typ_produktu=1 AND id_rodzaju_kodu IN (SELECT id_rodzaju_kodu FROM dbo.fun_get_id_rodzaju_kodakt(-1)) AND id_kategorii IN(SELECT id_kategorii FROM @kategorie) AND s_produkty.id_produktu=s_faktury_pozycje.id_produktu))
  32.     -- -1    licencja
  33.     -- 365    licencja roczna
  34.     AND typ_faktury IN (10,7,12)
  35.     ) AS w1 WHERE rn=1
  36.    
  37.     UNION
  38.    
  39.     SELECT *
  40.     FROM (
  41.     SELECT id_klienta, id_sprzedawcy, data_sprzedazy AS dt_first_lic, ROW_NUMBER() OVER(PARTITION BY id_klienta ORDER BY data_sprzedazy DESC) AS rn   -- ostatnia licencja roczna
  42.     FROM s_faktury WHERE EXISTS (
  43.     SELECT id_faktury FROM s_faktury_pozycje WHERE s_faktury_pozycje.id_faktury = s_faktury.id_faktury AND EXISTS (SELECT [id_produktu] FROM [dbo].[s_produkty] WHERE typ_produktu=1 AND id_rodzaju_kodu IN (SELECT id_rodzaju_kodu FROM dbo.fun_get_id_rodzaju_kodakt(365))  AND id_kategorii IN(SELECT id_kategorii FROM @kategorie) AND s_produkty.id_produktu=s_faktury_pozycje.id_produktu))
  44.     -- -1    licencja
  45.     -- 365    licencja roczna
  46.     AND typ_faktury IN (10,7,12)
  47.     ) AS w1 WHERE rn=1
  48.  
  49.     -- tech. supp
  50.  
  51.     INSERT INTO @last_tech_supp
  52.     SELECT * FROM (
  53.     SELECT id_klienta, id_sprzedawcy, data_sprzedazy AS dt_last_tech_supp, ROW_NUMBER() OVER(PARTITION BY id_klienta ORDER BY data_sprzedazy DESC) AS rn -- ostatnia subskrypcja aktualizacji
  54.     FROM s_faktury WHERE EXISTS (
  55.     SELECT id_faktury FROM s_faktury_pozycje WHERE s_faktury_pozycje.id_faktury = s_faktury.id_faktury AND EXISTS (SELECT [id_produktu] FROM [dbo].[s_produkty] WHERE id_produktu IN (SELECT subscription FROM @subscriptions) AND s_produkty.id_produktu=s_faktury_pozycje.id_produktu)) --244
  56.     -- 204    Subskrybcja na aktualizację oprogramowania ProDentis i opiekę techniczną 12 miesięcy.              
  57.     -- 215    Subskrybcja na aktualizację oprogramowania Protetis i opiekę techniczną 12 miesięcy                
  58.     -- 242    Subskrybcja na aktualizację oprogramowania MEDICUS i opiekę techniczną 12 miesięcy.                
  59.     -- 251    Subskrybcja na aktualizację oprogramowania ProDentis i opiekę techniczną 12 miesięcy + NFZ na 2017r
  60.     -- 268    Subskrybcja na aktualizację programu MEDICUS z NFZ dla stomatologii i opiekę techniczną 12 miesięcy
  61.     AND typ_faktury IN (10,7,12)
  62.     -- 7    Faktura VAT
  63.     -- 10    Faktura Fikcyjna
  64.     -- 12    FVATIS Sp. z o.o.
  65.     ) AS w2 WHERE rn=1
  66.     --group by id_klienta
  67.  
  68.     -- klienci -> zakup licencji i pomoc techniczna
  69.     INSERT INTO @klienci
  70.     SELECT s_klienci.id_klienta,1 AS typ
  71.     FROM (
  72.     SELECT isnull(fl.id_klienta,lts.id_klienta) AS id_klienta, dt_first_lic, dt_last_tech_supp
  73.     FROM (SELECT * FROM @first_license WHERE (dt_first_lic<getdate() AND dt_first_lic>@Months12Ago)) AS fl
  74.     FULL JOIN (SELECT * FROM @last_tech_supp WHERE (dt_last_tech_supp<getdate() AND dt_last_tech_supp>@Months12Ago)) AS lts ON fl.id_klienta=lts.id_klienta) AS f
  75.     JOIN s_klienci ON s_klienci.id_klienta = f.id_klienta
  76.     WHERE isnull(@id_klienta, s_klienci.id_klienta) = s_klienci.id_klienta
  77.     --and  ( and dt_last_tech_supp is null))
  78.     ORDER BY dt_last_tech_supp, dt_first_lic
  79.  
  80.     INSERT INTO @klienci
  81.     SELECT id_klienta,3 AS typ
  82.     FROM @first_license fl
  83.      WHERE isnull(@id_klienta, fl.id_klienta) = fl.id_klienta AND NOT EXISTS (SELECT  id_klienta FROM @klienci WHERE id_klienta = fl.id_klienta)
  84.     UNION
  85.     SELECT id_klienta,3 AS typ
  86.     FROM @last_tech_supp lts
  87.     WHERE isnull(@id_klienta, lts.id_klienta) = lts.id_klienta AND NOT EXISTS (SELECT  id_klienta FROM @klienci WHERE id_klienta = lts.id_klienta)
  88.  
  89.     IF(@ftype =@F2 OR (@ftype = @F1 AND  @id_klienta IS NOT NULL))
  90.     BEGIN
  91.         INSERT INTO @klienci
  92.         SELECT s_klienci.id_klienta,2 AS typ
  93.         FROM s_klienci
  94.         LEFT JOIN crm_klienci_infodod ON crm_klienci_infodod.id_klienta = s_klienci.id_klienta
  95.     WHERE isnull(@id_klienta,s_klienci.id_klienta) =s_klienci.id_klienta AND NOT EXISTS (SELECT  id_klienta FROM @klienci WHERE id_klienta = s_klienci.id_klienta)
  96.         AND opieka_techniczna_do IS NOT NULL AND opieka_techniczna_do >= GETDATE()
  97.     END
  98. --end
  99. RETURN
  100. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement