Snippets
Created by
Nick Reilingh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | PRINT 'BEGIN INSTALL/UPDATE LP_ASSIGN_PREMIUMS'; GO SET ANSI_NULLS, QUOTED_IDENTIFIER ON; GO /*********************************************************************************************************************** Author: Nick Reilingh, Fisher Center at Bard College Description: This procedure creates premium rows to be fulfilled. Procedure: - Start by deriving premiums for all current memberships - Remove any premiums in the history table - Add everything that remains to the history table - Remove premiums that already exist on constituents - Add everything else to constituents. ***********************************************************************************************************************/ CREATE OR ALTER PROCEDURE [dbo].[LP_ASSIGN_PREMIUMS] AS SET NOCOUNT, XACT_ABORT ON; WITH memb_org_prem_levels AS ( SELECT p.premium_no, ml.memb_org_no, ml.[rank], p.value_amt FROM dbo.LTR_X_PREMIUM_LEVEL pl JOIN dbo.T_MEMB_LEVEL ml ON pl.memb_level = ml.memb_level JOIN dbo.T_PREMIUM p ON pl.premium_no = p.premium_no ) SELECT m.campaign_no, m.customer_no, pl.premium_no INTO #new_premiums FROM dbo.TX_CUST_MEMBERSHIP m JOIN dbo.T_MEMB_LEVEL ml ON m.memb_org_no = ml.memb_org_no AND m.memb_level = ml.memb_level JOIN memb_org_prem_levels pl ON ml.memb_org_no = pl.memb_org_no AND pl.[rank] >= ml.[rank] AND (m.declined_ind <> 'Y' OR pl.value_amt = 0.00) WHERE m.cur_record = 'Y' EXCEPT SELECT campaign_no, customer_no, premium_no FROM dbo.LT_PREMIUM_HIST; BEGIN TRY BEGIN TRAN; INSERT dbo.LT_PREMIUM_HIST (campaign_no, customer_no, premium_no) SELECT campaign_no, customer_no, premium_no FROM #new_premiums; DELETE n FROM #new_premiums n JOIN dbo.T_CUST_PREM p ON n.campaign_no = p.campaign_no AND n.customer_no = p.customer_no AND n.premium_no = p.premium; DECLARE @insert_count int = (SELECT COUNT(*) FROM #new_premiums); IF @insert_count > 0 BEGIN; DECLARE @next_id int; EXEC dbo.AP_GET_NEXTID_function @type = 'CP', @nextid = @next_id OUTPUT, @increment = @insert_count; WITH inserting AS ( SELECT cust_prem_no = @next_id + ROW_NUMBER() OVER (ORDER BY (SELECT 0)) - 1, i.customer_no, i.campaign_no, premium = i.premium_no FROM #new_premiums i ) INSERT dbo.T_CUST_PREM (cust_prem_no, customer_no, campaign_no, premium) SELECT cust_prem_no, customer_no, campaign_no, premium FROM inserting; END; COMMIT TRAN; END TRY BEGIN CATCH IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION; THROW; END CATCH; GO GRANT EXECUTE ON [dbo].[LP_ASSIGN_PREMIUMS] TO [ImpUsers], [tessitura_app]; GO /* END INSTALL/UPDATE LP_ASSIGN_PREMIUMS */ |
Comments (0)
You can clone a snippet to your computer for local editing. Learn more.