Advertisement
Guest User

Untitled

a guest
Jun 19th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 6.32 KB | None | 0 0
  1. USE [ABC]
  2. GO
  3. /****** Object:  UserDefinedFunction [dbo].[fnReportDealCoreFee_OPTIMIZED]    Script Date: 6/18/2018 5:05:16 PM ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8. CREATE FUNCTION [dbo].[fnReportDealCoreFee_OPTIMIZED] (@StartDate DATETIME, @EndDate DATETIME, @Type INT)
  9.  RETURNS TABLE /*(DealID INT, StageID INT, DealName VARCHAR(50), VolumeCompleted MONEY, VolumePipeline MONEY, TotalFee MONEY,
  10.   isCompletedYTD BIT, DealOfficeID INT, DealDepartmentID INT, isPipeline BIT, isCompleted BIT, isQuote BIT, isApplication BIT, isCommitment BIT,
  11.  isFeeSplit BIT, PaidFeesTotal MONEY, PaidFeesYTD MONEY, AllocatedFee MONEY, AllocatedOfficeID INT, AllocatedDepartmentID INT, FeeCalcCompleted MONEY,
  12.  FeeCalcPipeline MONEY, CountDealCompleted INT, CountDealPipeline INT, DealOfficeName VARCHAR(50), AllocatedOfficeName VARCHAR(50), DealTypeID INT,
  13.  PropertyTypeID INT, CityID INT, AmountReceivable MONEY,LastPaymentDate DATETIME)*/
  14.  AS
  15.  
  16.  --DECLARE @StartDate DATETIME = '1/1/2016'
  17.  --DECLARE @EndDate DATETIME = '12/31/2016'
  18.  --DECLARE @Type INT = -1
  19.  
  20. --if (@StartDate is null)
  21. --  select @StartDate = convert(datetime, '1/1/'+convert(varchar(4),DatePart(yyyy,@EndDate)))
  22. --Select @EndDate =  convert(datetime, convert(varchar(10), @EndDate,101) + ' 23:59' )
  23. RETURN
  24. SELECT
  25. /* DealID */    D.DealID,
  26.                 DL.StageID,
  27.                 D.DealName,
  28.                 CASE WHEN ISNULL(CASE WHEN DL.DealOfficeID <> D2F.OfficeID OR DL.DealDepartmentID <> D2F.DepartmentID THEN 1 ELSE 0 END /*AS isFeeSplit*/,0) = 0 AND DL.isCompletedYTD = 1 THEN DL.DealVolume ELSE 0 END AS DealVolumeCompleted,
  29.                 CASE WHEN ISNULL(CASE WHEN DL.DealOfficeID <> D2F.OfficeID OR DL.DealDepartmentID <> D2F.DepartmentID THEN 1 ELSE 0 END /*AS isFeeSplit*/,0) = 0 AND (DS.isPipeline = 1 OR DL.StageID = 0) THEN DL.RawDealVolume ELSE 0 END AS VolumePipeline,
  30.                 D.TotalFee,
  31.                 DL.isCompletedYTD,  
  32.                 D.OfficeID AS DealOfficeID,
  33.                 D.DepartmentID AS DealDepartmentID,
  34.                 DS.isPipeline,
  35.                 DS.isCompleted,
  36.                 DS.isQuote,
  37.                 DS.isApplication,
  38.                 DS.isCommitment,
  39.                 CASE WHEN DL.DealOfficeID <> D2F.OfficeID OR DL.DealDepartmentID <> D2F.DepartmentID THEN 1 ELSE 0 END AS isFeeSplit,  
  40.                 --[dbo].[fnGetMoney](D.currencyID,1,(SELECT SUM(COALESCE(AmountPaid, AmountExpected, 0)) FROM dbo.DealClientPayments WHERE DealID = D.DealID),[dbo].[fnGetDealDate](D.dealid,@EndDate)) AS PaidFeesTotal,
  41.                 --[dbo].[fnGetMoney](D.currencyID,1,(SELECT SUM(CASE WHEN ISNULL(AccountingDate,DatePaid) >= @StartDate AND ISNULL(AccountingDate, DatePaid)< @EndDate THEN COALESCE(AmountPaid,AmountExpected,0) ELSE 0 END) FROM dbo.DealClientPayments WHERE DealID = D.DealID),[dbo].[fnGetDealDate](D.dealid,@EndDate)) AS YTDClientFee,
  42.                 --[dbo].[fnGetMoney](D.currencyID,1, SUM(D2F.Fee),[dbo].[fnGetDealDate](D.dealid,@EndDate)) AS AllocatedFee,
  43.  
  44.    
  45.                 ISNULL(D2F.OfficeID, D.OfficeID) AllocatedOfficeID,
  46.                 ISNULL(D2F.DepartmentID, D.DepartmentID) AllocatedDepartmentID, --Changed these from using the DL.DealDepartmentID to use the direct Deals Table.
  47.  
  48.                 --[dbo].[fnGetMoney](D.currencyID,1,   CASE WHEN D.TotalFee > 0 THEN ISNULL(SUM(D2F.Fee)/*FL.AllocatedFee*/, D.TotalFee) * ISNULL((SELECT SUM(CASE WHEN ISNULL(AccountingDate,DatePaid) >= @StartDate AND ISNULL(AccountingDate, DatePaid)< @EndDate THEN COALESCE(AmountPaid,AmountExpected,0) ELSE 0 END) FROM dbo.DealClientPayments WHERE DealID = D.DealID)/*YTDClientFee*/,0)  / D.TotalFee ELSE 0 END    ,[dbo].[fnGetDealDate](D.dealid,@EndDate)) AS FeeCalcCompleted,
  49.  
  50.                 --[dbo].[fnGetMoney](D.currencyID,1,  
  51.                 --CASE WHEN D.TotalFee > 0 THEN ISNULL(SUM(D2F.Fee)/*FL.AllocatedFee*/,D.TotalFee) - ( ISNULL((SELECT  SUM(CASE WHEN ISNULL(AccountingDate,DatePaid) <= @EndDate THEN ISNULL(ISNULL(AmountPaid,AmountExpected),0) ELSE 0 END) FROM dbo.DealClientPayments WHERE DealID = D.DealID) /*FL.PreviousClientFees*/,0)  / D.TotalFee ) ELSE 0 END,
  52.                
  53.                 --[dbo].[fnGetDealDate](D.dealid,@EndDate)) AS FeeCalcPipeline,
  54.  
  55.                
  56.  
  57.                 CASE WHEN ISNULL(CASE WHEN DL.DealOfficeID <> D2F.OfficeID OR DL.DealDepartmentID <> D2F.DepartmentID THEN 1 ELSE 0 END,0) = 0 AND DL.isMisc = 0 AND DL.isCompletedYTD = 1 THEN 1 ELSE 0 END AS CountDealComplete,
  58.                 CASE WHEN ISNULL(CASE WHEN DL.DealOfficeID <> D2F.OfficeID OR DL.DealDepartmentID <> D2F.DepartmentID THEN 1 ELSE 0 END,0) = 0 AND DL.isMisc = 0 AND (DS.isPipeline = 1 OR DL.StageID = 0) THEN 1 ELSE 0 END AS CountDealPipeline,
  59.                 DL.DealOfficeName,
  60.                 CASE WHEN ADP.DisplayWithOffice = 1 THEN AO.[Name] + ' ' + ADP.ShortName ELSE AO.Name END  AS AllocatedOfficeName,
  61.                 DL.DealTypeID,
  62.                 DL.PropertyTypeID,
  63.                 DL.CityID--,
  64.                 --(SELECT SUM(CASE WHEN (ISNULL(AccountingDate,DatePaid) >= @EndDate OR DatePaid IS NULL) AND (DL2.StageID IN (7,8,9)) THEN ISNULL(AmountExpected, 0) ELSE 0 END)   FROM dbo.DealClientPayments INNER JOIN report.fnReportDealCore(@StartDate, @EndDate, @Type) AS DL2 ON dbo.DealClientPayments.DealID = DL2.DealID WHERE DealClientPayments.DealID = D.DealID) AS AmountReceivable
  65.                 --(SELECT MAX(CASE WHEN ISNULL(AccountingDate, ISNULL(DatePaid, DateExpected)) <= @EndDate THEN (ISNULL(AccountingDate, ISNULL(DatePaid, DateExpected))) ELSE NULL END) FROM dbo.DealClientPayments WHERE DealID = D.DealID) AS LastPaymentDate
  66.  
  67.  
  68. FROM dbo.fnReportDealCore(@StartDate, @EndDate, @Type) AS DL
  69.     INNER JOIN Deals D ON DL.DealID = D.DealID
  70.     INNER JOIN DealStages AS DS ON DL.StageID = DS.StageID
  71.  
  72.     LEFT JOIN dbo.DealClientPayments DCP ON DL.DealID = DCP.DealID
  73.  
  74.     LEFT JOIN (SELECT DealID, SUM(Fee) AS Fee, OfficeID, DepartmentID FROM dbo.DealsToFees GROUP BY DealID, OfficeID, DepartmentID) D2F ON DL.DealID = D2F.DealID
  75.     LEFT JOIN dbo.Offices AS AO ON D2F.OfficeID = AO.OfficeID
  76.     LEFT JOIN DealPlatforms AS ADP ON D2F.DepartmentID = ADP.DepartmentID
  77.  
  78.     --WHERE D.DealID = 88330
  79.     GROUP BY
  80.         D.DealID,
  81.         DL.StageID,
  82.         D.DealName,
  83.         DL.DealVolume,
  84.         DL.RawDealVolume,
  85.         D.TotalFee,
  86.         DL.isCompletedYTD,  
  87.         D.OfficeID,
  88.         D.DepartmentID,
  89.         DS.isPipeline,
  90.         DS.isCompleted,
  91.         DS.isQuote,
  92.         DS.isApplication,
  93.         DS.isCommitment,
  94.         CASE WHEN DL.DealOfficeID <> D2F.OfficeID OR DL.DealDepartmentID <> D2F.DepartmentID THEN 1 ELSE 0 END, --AS isFeeSplit--
  95.         D.CurrencyID,
  96.         D2F.OfficeID,
  97.         D2F.DepartmentID,
  98.  
  99.         D.OfficeID,
  100.         D.DepartmentID,
  101.         DL.DealTypeID,
  102.         DL.PropertyTypeID,
  103.         DL.CityID,
  104.         DL.DealOfficeName,
  105.         ADP.DisplayWithOffice,
  106.         AO.[Name],
  107.         ADP.ShortName,
  108.         DL.isMisc
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement