You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

182 lines
9.4 KiB

1 year ago
  1. USE [FastMoneyPro_Remit]
  2. GO
  3. /****** Object: StoredProcedure [dbo].[proc_exRateAgent] Script Date: 9/27/2019 1:30:14 PM ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8. /*
  9. exec proc_exRateAgent @flag='v',@agentId='3885',@cCurrency='MYR',@pCountry='151',@pCurrency='NPR',@tranType='1'
  10. EXEC proc_serviceTypeMaster 'l2'
  11. */
  12. CREATE proc [dbo].[proc_exRateAgent]
  13. @flag VARCHAR(50) = NULL
  14. ,@user VARCHAR(30) = NULL
  15. ,@agentId INT = NULL
  16. ,@cRate FLOAT = NULL
  17. ,@pRate FLOAT = NULL
  18. ,@cCurrency VARCHAR(30) = NULL
  19. ,@pCountry INT = NULL
  20. ,@pCurrency VARCHAR(50) = NULL
  21. ,@tranType INT = NULL
  22. AS
  23. SET NOCOUNT ON;
  24. SET XACT_ABORT ON;
  25. BEGIN TRY
  26. IF @flag = 'v'
  27. BEGIN
  28. DECLARE @pCountryName AS VARCHAR(200),@tranTypeName AS VARCHAR(200)
  29. SELECT @pCountryName=countryName FROM countryMaster WHERE countryId=@pCountry
  30. SELECT @tranTypeName=typeTitle FROM serviceTypeMaster WHERE serviceTypeId=@tranType
  31. SELECT @cCurrency cCurrency
  32. ,@pCountryName pCountry
  33. ,@pCurrency pCurrency
  34. ,ISNULL(@tranTypeName,'Any') tranType
  35. ,CAST(ISNULL(customerCrossRate, 0) AS DECIMAL(11, 6)) customerCrossRate
  36. FROM dbo.FNAGetExRateForTran(@agentId, NULL,@pCountry, @cCurrency,@pCurrency,null,@user)
  37. END
  38. ELSE IF @flag = 'lr'
  39. BEGIN
  40. DECLARE @defExRateId INT, @agentCountryId INT
  41. SELECT @agentCountryId = agentCountryId FROM agentMaster WITH(NOLOCK) WHERE agentId = @agentId
  42. SELECT @defExRateId = defExRateId FROM defExRate WITH(NOLOCK) WHERE ISNULL(isActive, 'N') = 'Y' AND setupType = 'AG' AND agent = @agentId AND country = @agentCountryId
  43. IF @defExRateId IS NULL
  44. SELECT @defExRateId = defExRateId FROM defExRate WITH(NOLOCK) WHERE ISNULL(isActive, 'N') = 'Y' AND setupType = 'AG' AND agent IS NULL AND country = @agentCountryId
  45. SELECT
  46. cRate = ag.cRate
  47. ,pRate = ag.pRate - ag.pMargin
  48. ,ag.currency
  49. ,rm.cMin
  50. ,rm.cMax
  51. ,rm.pMin
  52. ,rm.pMax
  53. ,rateMaskBd = ISNULL(CASE WHEN ag.factor = 'M' THEN rm.rateMaskMulBd ELSE rm.rateMaskDivBd END, 6)
  54. ,rateMaskAd = ISNULL(CASE WHEN ag.factor = 'M' THEN rm.rateMaskMulAd ELSE rm.rateMaskDivAd END, 6)
  55. FROM defExRate ag WITH(NOLOCK)
  56. LEFT JOIN rateMask rm WITH(NOLOCK) ON ag.currency = rm.currency
  57. WHERE defExRateId = @defExRateId
  58. END
  59. ELSE IF @flag = 'u'
  60. BEGIN
  61. DECLARE @cMax FLOAT, @cMin FLOAT, @pMax FLOAT, @pMin FLOAT
  62. SELECT
  63. @cMax = cu.cMax, @cMin = cu.cMin, @pMax = cu.pMax, @pMin = cu.pMin
  64. FROM defExRate ag WITH(NOLOCK)
  65. INNER JOIN defExRate cu WITH(NOLOCK) ON ag.currency = cu.currency AND cu.setupType = 'CU'
  66. WHERE ag.setupType = 'AG'
  67. AND ag.agent = @agentId
  68. AND ISNULL(ag.isEnable, 'N') = 'Y'
  69. AND ISNULL(ag.isActive, 'N') = 'Y'
  70. IF @cRate > @cMax
  71. BEGIN
  72. EXEC proc_errorHandler 1, 'Collection rate exceeds max tolerance rate', NULL
  73. RETURN
  74. END
  75. IF @cRate < @cMin
  76. BEGIN
  77. EXEC proc_errorHandler 1, 'Collection rate deceeds min tolerance rate', NULL
  78. RETURN
  79. END
  80. IF @pRate > @pMax
  81. BEGIN
  82. EXEC proc_errorHandler 1, 'Payment rate exceeds max tolerance rate', NULL
  83. RETURN
  84. END
  85. IF @pRate < @pMin
  86. BEGIN
  87. EXEC proc_errorHandler 1, 'Payment rate exceeds min tolerance rate', NULL
  88. RETURN
  89. END
  90. BEGIN TRANSACTION
  91. UPDATE defExRate SET
  92. cRate = @cRate
  93. --,cMargin = 0
  94. ,pRate = @pRate
  95. --,pMargin = 0
  96. ,modifiedBy = @user
  97. ,modifiedDate = GETDATE()
  98. WHERE setupType = 'AG'
  99. AND agent = @agentId
  100. AND ISNULL(isEnable, 'N') = 'Y'
  101. AND ISNULL(isActive, 'N') = 'Y'
  102. INSERT INTO defExRateHistory(
  103. defExRateId
  104. ,setupType
  105. ,currency
  106. ,country
  107. ,agent
  108. ,baseCurrency
  109. ,cRate
  110. ,cMargin
  111. ,pRate
  112. ,pMargin
  113. ,cMax
  114. ,cMin
  115. ,pMax
  116. ,pMin
  117. ,factor
  118. ,isEnable
  119. ,modType
  120. ,createdBy
  121. ,createdDate
  122. ,approvedBy
  123. ,approvedDate
  124. )
  125. SELECT
  126. defExRateId
  127. ,setupType
  128. ,currency
  129. ,country
  130. ,agent
  131. ,baseCurrency
  132. ,@cRate
  133. ,cMargin
  134. ,@pRate
  135. ,pMargin
  136. ,cMax
  137. ,cMin
  138. ,pMax
  139. ,pMin
  140. ,factor
  141. ,isEnable
  142. ,'U'
  143. ,@user
  144. ,GETDATE()
  145. ,@user
  146. ,GETDATE()
  147. FROM defExRate WITH(NOLOCK)
  148. WHERE setupType = 'AG'
  149. AND agent = @agentId
  150. AND ISNULL(isEnable, 'N') = 'Y'
  151. AND ISNULL(isActive, 'N') = 'Y'
  152. COMMIT TRANSACTION
  153. EXEC proc_errorHandler 0, 'Rate updated successfully', NULL
  154. END
  155. END TRY
  156. BEGIN CATCH
  157. IF @@TRANCOUNT > 0
  158. ROLLBACK TRANSACTION
  159. DECLARE @errorMessage VARCHAR(MAX)
  160. SET @errorMessage = ERROR_MESSAGE()
  161. EXEC proc_errorHandler 1, @errorMessage, @user
  162. END CATCH
  163. GO