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.

299 lines
26 KiB

1 year ago
  1. USE [FastMoneyPro_Remit]
  2. GO
  3. /****** Object: StoredProcedure [dbo].[proc_UpdateBDTRate_FromXE] Script Date: 9/27/2019 1:30:14 PM ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8. --exec proc_UpdateBDTRate_FromXE @FromCurr='usd',@toCurr='bdt',@LiveRate='84.8',@flag = 'P'
  9. CREATE proc [dbo].[proc_UpdateBDTRate_FromXE]
  10. @FromCurr VARCHAR(5) = NULL,
  11. @toCurr VARCHAR(5) = NULL,
  12. @LiveRate FLOAT = NULL,
  13. @requestXml VARCHAR(MAX) = NULL,
  14. @responseXml VARCHAR(MAX) = NULL,
  15. @flag varchar(10)
  16. AS
  17. SET NOCOUNT ON;
  18. SET XACT_ABORT ON
  19. --select @FromCurr,@toCurr,@cRate
  20. --return
  21. BEGIN TRY
  22. declare @defExRateId int ,@user varchar(50) = 'system',@msg varchar(max) = ''
  23. EXEC proc_errorHandler 0, 'Record updated successfully.', 0
  24. RETURN
  25. --IF (CAST(GETDATE() AS DATE) <'2019-08-19')
  26. --BEGIN
  27. -- EXEC proc_errorHandler 0, 'Record updated successfully.', 0
  28. -- RETURN
  29. --END
  30. INSERT INTO tlbExrateApilogs(requestXml,responseXml,createdBy)
  31. SELECT @requestXml,@responseXml,@user
  32. IF @FromCurr = 'error'
  33. BEGIN
  34. EXEC proc_errorHandler 1,@responseXml, NULL
  35. ----## SEND SMS THROUGH KT NETWORK
  36. INSERT INTO KT_SMS.dbo.SDK_SMS_SEND ( USER_ID, SCHEDULE_TYPE, SUBJECT, SMS_MSG, NOW_DATE, SEND_DATE, CALLBACK, DEST_INFO)
  37. select 'globalmoney',0,'XE',left(@responseXml,90),format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01030436864'
  38. union all
  39. select 'globalmoney',0,'XE',left(@responseXml,90),format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01074518940'
  40. RETURN
  41. END
  42. IF ISNULL(@LiveRate, 0) = 0
  43. BEGIN
  44. SET @MSG = 'Sorry 0 ex rate for ' + @toCurr + ' can not be updated';
  45. ----## SEND SMS THROUGH KT NETWORK
  46. INSERT INTO KT_SMS.dbo.SDK_SMS_SEND ( USER_ID, SCHEDULE_TYPE, SUBJECT, SMS_MSG, NOW_DATE, SEND_DATE, CALLBACK, DEST_INFO)
  47. select 'globalmoney',0,'XE','Sorry 0 ex rate can not be updated',format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','1^01030436864'
  48. union all
  49. select 'globalmoney',0,'XE',@MSG,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','1^01074518940'
  50. EXEC proc_errorHandler 1, 'Sorry 0 ex rate can not be updated.', NULL
  51. RETURN
  52. END
  53. DECLARE @pRate FLOAT
  54. DECLARE @tolCMax FLOAT, @tolCMin FLOAT, @tolPMax FLOAT, @tolPMin FLOAT, @errorMsg VARCHAR(200), @id INT
  55. SELECT defExRateId = defExRateId,currency = currency,cRate = cRate, cMargin = ISNULL(cMargin,0),pRate = ISNULL(pRate,0) ,pMargin = ISNULL(pMargin,0)
  56. INTO #tempDefRate
  57. FROM defExRate WITH(NOLOCK)
  58. WHERE currency = @toCurr and baseCurrency = @FromCurr
  59. IF NOT EXISTS(SELECT 'A' FROM #tempDefRate)
  60. BEGIN
  61. set @msg = 'No cost rate setup found for currency '+@FromCurr+' and '+@toCurr
  62. EXEC proc_errorHandler 1, @msg, NULL
  63. ----## SEND SMS THROUGH KT NETWORK
  64. INSERT INTO KT_SMS.dbo.SDK_SMS_SEND ( USER_ID, SCHEDULE_TYPE, SUBJECT, SMS_MSG, NOW_DATE, SEND_DATE, CALLBACK, DEST_INFO)
  65. SELECT 'globalmoney',0,'XE',@msg,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01030436864'
  66. union all
  67. SELECT 'globalmoney',0,'XE',@msg,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01074518940'
  68. RETURN
  69. END
  70. SELECT
  71. @tolCMax = ISNULL(cMax, 0.0)
  72. ,@tolCMin = ISNULL(cMin, 0.0)
  73. ,@tolPMax = ISNULL(pMax, 0.0)
  74. ,@tolPMin = ISNULL(pMin, 0.0)
  75. FROM rateMask WITH(NOLOCK) WHERE currency = @toCurr AND baseCurrency = @FromCurr
  76. IF NOT EXISTS(SELECT 'X' FROM rateMask WITH(NOLOCK) WHERE currency = @toCurr)
  77. BEGIN
  78. SET @msg = 'Please define rate mask for currency ' + @toCurr
  79. EXEC proc_errorHandler 1, @msg, NULL
  80. ----## SEND SMS THROUGH KT NETWORK
  81. INSERT INTO KT_SMS.dbo.SDK_SMS_SEND ( USER_ID, SCHEDULE_TYPE, SUBJECT, SMS_MSG, NOW_DATE, SEND_DATE, CALLBACK, DEST_INFO)
  82. select 'globalmoney',0,'XE',@msg,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01030436864'
  83. union all
  84. select 'globalmoney',0,'XE',@msg,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01074518940'
  85. RETURN
  86. END
  87. IF @flag = 'P'
  88. BEGIN
  89. --Collection
  90. SET @pRate = ROUND(@LiveRate,2) -0.05
  91. IF EXISTS (SELECT 'A' FROM #tempDefRate WHERE @pRate - ISNULL(pMargin, 0) > @tolPMax)
  92. BEGIN
  93. SET @errorMsg = 'BDT Max tolerance exceeds.Rate must lie between ' + CAST(@tolPMin AS VARCHAR) + ' AND ' + CAST(@tolPMax AS VARCHAR)
  94. EXEC proc_errorHandler 1, @errorMsg, NULL
  95. ----## SEND SMS THROUGH KT NETWORK
  96. INSERT INTO KT_SMS.dbo.SDK_SMS_SEND ( USER_ID, SCHEDULE_TYPE, SUBJECT, SMS_MSG, NOW_DATE, SEND_DATE, CALLBACK, DEST_INFO)
  97. select 'globalmoney',0,'XE',@errorMsg,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01030436864'
  98. union all
  99. select 'globalmoney',0,'XE',@errorMsg,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01074518940'
  100. RETURN
  101. END
  102. IF EXISTS (SELECT 'A' FROM #tempDefRate WHERE @pRate - ISNULL(pMargin, 0) < @tolPMin)
  103. BEGIN
  104. SET @errorMsg = 'BDT Min tolerance exceeds.Rate must lie between ' + CAST(@tolPMin AS VARCHAR) + ' AND ' + CAST(@tolPMax AS VARCHAR)
  105. EXEC proc_errorHandler 1, @errorMsg, NULL
  106. ----## SEND SMS THROUGH KT NETWORK
  107. INSERT INTO KT_SMS.dbo.SDK_SMS_SEND ( USER_ID, SCHEDULE_TYPE, SUBJECT, SMS_MSG, NOW_DATE, SEND_DATE, CALLBACK, DEST_INFO)
  108. SELECT 'globalmoney',0,'XE',@errorMsg,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01030436864'
  109. UNION All
  110. SELECT 'globalmoney',0,'XE',@errorMsg,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01074518940'
  111. RETURN
  112. END
  113. END
  114. CREATE TABLE #exRateIdTempMain(exRateTreasuryId INT)
  115. CREATE TABLE #exRateIdTempMod(exRateTreasuryId INT)
  116. BEGIN TRANSACTION
  117. --Currency Rate/ Agent Rate Update------------------------------------------------------------------------------------
  118. UPDATE D SET
  119. pRate = @pRate
  120. ,modifiedBy = @user
  121. ,modifiedDate = GETDATE()
  122. FROM defExRate D
  123. INNER JOIN #tempDefRate T ON T.defExRateId = D.defExRateId
  124. --Change Record History-----------------------------------------------------------------------------------------------
  125. INSERT INTO defExRateHistory(
  126. defExRateId
  127. ,setupType
  128. ,currency,country,agent,baseCurrency,tranType,factor
  129. ,cRate,cMargin,cMax,cMin
  130. ,pRate,pMargin,pMax,pMin
  131. ,isEnable,createdBy,createdDate,approvedBy,approvedDate,modType
  132. )
  133. SELECT
  134. main.defExRateId
  135. ,main.setupType
  136. ,main.currency,main.country,main.agent,main.baseCurrency,main.tranType,factor
  137. ,T.cRate,T.cMargin,cMax,cMin
  138. ,main.pRate,T.pMargin,pMax,pMin
  139. ,isEnable,@user,GETDATE(),@user,GETDATE(),'U'
  140. FROM defExRate main WITH(NOLOCK)
  141. INNER JOIN #tempDefRate T ON T.defExRateId = main.defExRateId
  142. --FROM defExRate main WITH(NOLOCK) WHERE defExRateId = @defExRateId
  143. IF @flag = 'P'
  144. BEGIN
  145. --1. Get All Corridor records affected by receive cost rate change
  146. DELETE FROM #exRateIdTempMain
  147. INSERT INTO #exRateIdTempMain
  148. SELECT exRateTreasuryId FROM exRateTreasury e WITH(NOLOCK)
  149. INNER JOIN #tempDefRate R ON R.defExRateId = E.pRateId
  150. --2. Update Records in Mod Table if data already exist in mod table
  151. IF EXISTS(SELECT 'X' FROM exRateTreasuryMod mode WITH(NOLOCK) INNER JOIN #exRateIdTempMain temp ON mode.exRateTreasuryId = temp.exRateTreasuryId)
  152. BEGIN
  153. DELETE FROM #exRateIdTempMod
  154. INSERT INTO #exRateIdTempMod
  155. SELECT mode.exRateTreasuryId FROM exRateTreasuryMod mode WITH(NOLOCK)
  156. INNER JOIN #exRateIdTempMain temp ON mode.exRateTreasuryId = temp.exRateTreasuryId
  157. UPDATE ert SET
  158. pRate = @pRate
  159. --,pMargin = @pMargin
  160. ,maxCrossRate = ROUND(@pRate/def.cRate, dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  161. ,crossRate = ROUND((@pRate - ert.pMargin - pHoMargin)/(def.cRate + def.cMargin + cHoMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  162. ,customerRate = CASE WHEN ISNULL(toleranceOn, '') IN ('S', 'P', '') THEN ROUND((@pRate - ert.pMargin - pHoMargin - pAgentMargin)/(def.cRate + def.cMargin + cHoMargin + cAgentMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  163. WHEN ISNULL(toleranceOn, '') IN ('C') THEN ROUND((@pRate - ert.pMargin - pHoMargin)/(def.cRate + def.cMargin + cHoMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency)) - ISNULL(agentCrossRateMargin, 0) END
  164. ,createdBy = @user
  165. ,createdDate = GETDATE()
  166. FROM exRateTreasuryMod ert
  167. INNER JOIN #tempDefRate def ON ert.cRateId = def.defExRateId
  168. INNER JOIN #exRateIdTempMod temp ON ert.exRateTreasuryId = temp.exRateTreasuryId
  169. END
  170. --3. Update Record in main table for modType Insert.
  171. UPDATE ert SET
  172. pRate = @pRate
  173. --,pMargin = @pMargin
  174. ,maxCrossRate = ROUND(@pRate/def.cRate, dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  175. ,crossRate = ROUND((@pRate - tef.pMargin - pHoMargin)/(def.cRate + def.cMargin + cHoMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  176. --,customerRate = ROUND((@pRate - @pMargin - pHoMargin - pAgentMargin)/(def.cRate + def.cMargin + cHoMargin + cAgentMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  177. ,customerRate = CASE WHEN ISNULL(toleranceOn, '') IN ('S', 'P', '') THEN ROUND((@pRate - tef.pMargin - pHoMargin - pAgentMargin)/(def.cRate + def.cMargin + cHoMargin + cAgentMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  178. WHEN ISNULL(toleranceOn, '') IN ('C') THEN ROUND((@pRate - tef.pMargin - pHoMargin)/(def.cRate + def.cMargin + cHoMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency)) - ISNULL(agentCrossRateMargin, 0) END
  179. ,createdBy = @user
  180. ,createdDate = GETDATE()
  181. FROM exRateTreasury ert
  182. INNER JOIN defExRate def ON ert.cRateId = def.defExRateId
  183. INNER JOIN #tempDefRate tef ON ert.pRateId = tef.defExRateId
  184. WHERE ert.approvedBy IS NULL
  185. INSERT INTO exRateTreasuryMod(
  186. exRateTreasuryId
  187. ,cRateId,cCurrency,cCountry,cAgent,cRateFactor,cRate,cMargin,cHoMargin,cAgentMargin
  188. ,pRateId,pCurrency,pCountry,pAgent,pRateFactor,pRate,pMargin,pHoMargin,pAgentMargin
  189. ,sharingType
  190. ,sharingValue
  191. ,toleranceOn
  192. ,agentTolMin
  193. ,agentTolMax
  194. ,customerTolMin
  195. ,customerTolMax
  196. ,crossRate
  197. ,customerRate
  198. ,maxCrossRate
  199. ,agentCrossRateMargin
  200. ,tolerance
  201. ,crossRateFactor
  202. ,isActive
  203. ,modType,createdBy,createdDate
  204. )
  205. SELECT
  206. exRateTreasuryId
  207. ,ert.cRateId,ert.cCurrency,cCountry,cAgent,cRateFactor,def.cRate,def.cMargin,cHoMargin,cAgentMargin
  208. ,ert.pRateId,ert.pCurrency,pCountry,pAgent,pRateFactor,@pRate,tef.pMargin,pHoMargin,pAgentMargin
  209. ,ert.sharingType
  210. ,ert.sharingValue
  211. ,ert.toleranceOn
  212. ,ert.agentTolMin
  213. ,ert.agentTolMax
  214. ,ert.customerTolMin
  215. ,ert.customerTolMax
  216. ,ROUND((@pRate - tef.pMargin - pHoMargin)/(def.cRate + def.cMargin + cHoMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  217. ,CASE WHEN ISNULL(toleranceOn, '') IN ('S', 'P', '') THEN ROUND((@pRate - tef.pMargin - pHoMargin - pAgentMargin)/(def.cRate + def.cMargin + cHoMargin + cAgentMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  218. WHEN ISNULL(toleranceOn, '') IN ('C') THEN ROUND((@pRate - tef.pMargin - pHoMargin)/(def.cRate + def.cMargin + cHoMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency)) - ISNULL(ert.agentCrossRateMargin, 0) END
  219. ,ROUND(@pRate/def.cRate, dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  220. ,ert.agentCrossRateMargin
  221. ,tolerance
  222. ,crossRateFactor
  223. ,ert.isActive
  224. ,'U',@user,GETDATE()
  225. FROM exRateTreasury ert WITH(NOLOCK)
  226. INNER JOIN defExRate def WITH(NOLOCK) ON ert.cRateId = def.defExRateId
  227. INNER JOIN #tempDefRate tef WITH(NOLOCK) ON ert.pRateId = tef.defExRateId
  228. WHERE ert.approvedBy IS NOT NULL AND ISNULL(ert.isActive, 'N') = 'Y'
  229. AND ert.exRateTreasuryId NOT IN (SELECT exRateTreasuryId FROM #exRateIdTempMod)
  230. UPDATE ert SET
  231. ert.isUpdated = 'Y'
  232. FROM exRateTreasury ert
  233. INNER JOIN #tempDefRate tef WITH(NOLOCK) ON ert.pRateId = tef.defExRateId
  234. WHERE approvedBy IS NOT NULL AND ISNULL(isActive, 'N') = 'Y'
  235. END
  236. IF @@TRANCOUNT > 0
  237. COMMIT TRANSACTION
  238. EXEC proc_errorHandler 0, 'Record updated successfully.', @defExRateId
  239. declare @exRateTreasuryIds varchar(max)=''
  240. select @exRateTreasuryIds = @exRateTreasuryIds+cast(exRateTreasuryId as varchar)+',' from exRateTreasuryMod(nolock) where createdBy='system'
  241. set @exRateTreasuryIds = left(@exRateTreasuryIds,len(@exRateTreasuryIds)-1)
  242. EXEC proc_exRateTreasury @flag = 'approve' , @user ='system',@exRateTreasuryIds = @exRateTreasuryIds
  243. end try
  244. begin catch
  245. IF @@TRANCOUNT > 0
  246. ROLLBACK TRANSACTION
  247. set @errorMsg = error_Message()
  248. EXEC proc_errorHandler 1,@errorMsg, @defExRateId
  249. end catch
  250. GO