Advertisement
Guest User

Untitled

a guest
Dec 12th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.60 KB | None | 0 0
  1. CREATE PROCEDURE [dbo].[get_payments] @date_start DATETIME
  2. ,@date_end DATETIME
  3. ,@payable_id INT = 0
  4. ,@transaction_reference VARCHAR(100) = NULL
  5. ,@channel_transaction_reference VARCHAR(100) = NULL
  6. ,@merchant_customer_id VARCHAR(100) = NULL
  7. ,@masked_card_pan VARCHAR(20) = NULL
  8. ,@merchant_code VARCHAR(50) = NULL
  9. ,@response_code VARCHAR(1024) = NULL
  10. ,@channel VARCHAR(10) = NULL
  11. ,@retrieval_reference_number VARCHAR(20) = NULL
  12. ,@bank_code VARCHAR(10) = NULL
  13. ,@acquirer_code VARCHAR(10) = NULL
  14. ,@amount BIGINT = 0
  15. ,@count INT = 0
  16. ,@page_num INT
  17. ,@page_size INT
  18. AS
  19. SET NOCOUNT ON
  20. SET NOCOUNT ON
  21.  
  22. DECLARE @response_table TABLE (response_code VARCHAR(8000))
  23.  
  24. INSERT INTO @response_table
  25. SELECT Item
  26. FROM Split(@response_code, ',')
  27.  
  28. IF @page_size IS NULL
  29. BEGIN
  30. IF @count <= 0
  31. BEGIN
  32. SELECT COUNT(*) AS cnt
  33. FROM payments_notification p(NOLOCK)
  34. INNER JOIN payables py(NOLOCK) ON p.payable_id = py.id
  35. INNER JOIN @response_table resp ON (
  36. @response_code IS NULL
  37. OR p.response_code = resp.response_code
  38. )
  39. WHERE
  40. date_of_payment >= @date_start AND date_of_payment < @date_end AND
  41. (@payable_id = 0 OR @payable_id IS NULL OR p.payable_id = @payable_id) AND
  42. (@channel IS NULL OR p.channel = @channel) AND
  43. (@merchant_code IS NULL OR p.merchant_code = @merchant_code) AND
  44. (@transaction_reference IS NULL OR p.transaction_reference = @transaction_reference) AND
  45. (@channel_transaction_reference IS NULL OR p.channel_transaction_reference = @channel_transaction_reference) AND
  46. (@masked_card_pan IS NULL OR p.masked_card_pan = @masked_card_pan) AND
  47. (@merchant_customer_id IS NULL OR p.merchant_customer_id = @merchant_customer_id) AND
  48. (@bank_code IS NULL OR p.bank_code = @bank_code)AND
  49. (@retrieval_reference_number IS NULL OR p.retrieval_reference_number = @retrieval_reference_number)AND
  50. (@acquirer_code IS NULL OR p.acquirer_code = @acquirer_code)AND
  51. (@amount =0 OR @amount IS NULL OR p.amount = @amount)
  52. option(recompile)
  53. END
  54. ELSE
  55. BEGIN
  56. SELECT @count as cnt
  57. END
  58.  
  59. SELECT
  60. p.*,
  61. py.name,
  62. py.code,
  63. py.fee_type
  64. FROM payments_notification p (nolock)
  65. INNER JOIN payables py (nolock)
  66. ON p.payable_id = py.id
  67. INNER JOIN @response_table resp
  68. ON (@response_code IS NULL OR p.response_code=resp.response_code)
  69. WHERE
  70. date_of_payment >= @date_start AND date_of_payment < @date_end AND
  71. (@payable_id = 0 OR @payable_id IS NULL OR p.payable_id = @payable_id) AND
  72. (@channel IS NULL OR p.channel = @channel) AND
  73. (@merchant_code IS NULL OR p.merchant_code = @merchant_code) AND
  74. (@transaction_reference IS NULL OR p.transaction_reference = @transaction_reference) AND
  75. (@channel_transaction_reference IS NULL OR p.channel_transaction_reference = @channel_transaction_reference) AND
  76. (@masked_card_pan IS NULL OR p.masked_card_pan = @masked_card_pan) AND
  77. (@merchant_customer_id IS NULL OR p.merchant_customer_id = @merchant_customer_id) AND
  78. (@bank_code IS NULL OR p.bank_code = @bank_code)AND
  79. (@retrieval_reference_number IS NULL OR p.retrieval_reference_number = @retrieval_reference_number)AND
  80. (@acquirer_code IS NULL OR p.acquirer_code = @acquirer_code)AND
  81. (@amount =0 OR @amount IS NULL OR p.amount = @amount)
  82. ORDER BY date_of_payment desc
  83. option(recompile)
  84. END
  85. ELSE
  86. BEGIN
  87. IF @count <= 0
  88. BEGIN
  89. SELECT
  90. COUNT(*) AS cnt
  91. FROM payments_notification p (nolock)
  92. INNER JOIN payables py (nolock)
  93. ON p.payable_id = py.id
  94. INNER JOIN @response_table resp
  95. ON (@response_code IS NULL OR p.response_code=resp.response_code)
  96. WHERE
  97. date_of_payment >= @date_start AND date_of_payment < @date_end AND
  98. (@payable_id = 0 OR @payable_id IS NULL OR p.payable_id = @payable_id) AND
  99. (@channel IS NULL OR p.channel = @channel) AND
  100. (@merchant_code IS NULL OR p.merchant_code = @merchant_code) AND
  101. (@transaction_reference IS NULL OR p.transaction_reference = @transaction_reference) AND
  102. (@channel_transaction_reference IS NULL OR p.channel_transaction_reference = @channel_transaction_reference) AND
  103. (@masked_card_pan IS NULL OR p.masked_card_pan = @masked_card_pan) AND
  104. (@merchant_customer_id IS NULL OR p.merchant_customer_id = @merchant_customer_id) AND
  105. (@bank_code IS NULL OR p.bank_code = @bank_code)AND
  106. (@retrieval_reference_number IS NULL OR p.retrieval_reference_number = @retrieval_reference_number)AND
  107. (@acquirer_code IS NULL OR p.acquirer_code = @acquirer_code)AND
  108. (@amount =0 OR @amount IS NULL OR p.amount = @amount)
  109. option(recompile)
  110. END
  111. ELSE
  112. BEGIN
  113. SELECT @count as cnt
  114. END
  115.  
  116. SET @page_num = ABS(@page_num)
  117. SET @page_size = ABS(@page_size)
  118. IF @page_num < 1
  119. SET @page_num = 1
  120. IF @page_size < 1
  121. SET @page_size = 1
  122. DECLARE @offset INT
  123. SET @offset = (@page_num - 1) * @page_size
  124.  
  125. SELECT
  126. p.*,
  127. py.name,
  128. py.code,
  129. py.fee_type
  130. FROM payments_notification p (nolock)
  131. INNER JOIN payables py (nolock)
  132. ON p.payable_id = py.id
  133. INNER JOIN @response_table resp
  134. ON (@response_code IS NULL OR p.response_code=resp.response_code)
  135. WHERE
  136. date_of_payment >= @date_start AND date_of_payment < @date_end AND
  137. (@payable_id = 0 OR @payable_id IS NULL OR p.payable_id = @payable_id) AND
  138. (@channel IS NULL OR p.channel = @channel) AND
  139. (@merchant_code IS NULL OR p.merchant_code = @merchant_code) AND
  140. (@transaction_reference IS NULL OR p.transaction_reference = @transaction_reference) AND
  141. (@channel_transaction_reference IS NULL OR p.channel_transaction_reference = @channel_transaction_reference) AND
  142. (@masked_card_pan IS NULL OR p.masked_card_pan = @masked_card_pan) AND
  143. (@merchant_customer_id IS NULL OR p.merchant_customer_id = @merchant_customer_id) AND
  144. (@bank_code IS NULL OR p.bank_code = @bank_code)AND
  145. (@retrieval_reference_number IS NULL OR p.retrieval_reference_number = @retrieval_reference_number)AND
  146. (@acquirer_code IS NULL OR p.acquirer_code = @acquirer_code)AND
  147. (@amount =0 OR @amount IS NULL OR p.amount = @amount)
  148. ORDER BY p.date_of_payment desc OFFSET @offset ROWS FETCH NEXT @page_size ROWS ONLY
  149. option(recompile)
  150. END
  151. GO
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement