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.

458 lines
44 KiB

1 year ago
  1. USE [FastMoneyPro_Remit]
  2. GO
  3. /****** Object: StoredProcedure [dbo].[proc_UpdateCostRate_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. CREATE proc [dbo].[proc_UpdateCostRate_FromXE]
  9. @FromCurr VARCHAR(5) = NULL,
  10. @toCurr VARCHAR(5) = NULL,
  11. @LiveRate FLOAT = NULL,
  12. @requestXml VARCHAR(MAX) = NULL,
  13. @responseXml VARCHAR(MAX) = NULL,
  14. @flag varchar(10)
  15. AS
  16. SET NOCOUNT ON;
  17. --select @FromCurr,@toCurr,@cRate
  18. --return
  19. BEGIN TRY
  20. declare @defExRateId int ,@user varchar(50) = 'system',@msg varchar(max) = ''
  21. INSERT INTO tlbExrateApilogs(requestXml,responseXml,createdBy)
  22. SELECT @requestXml,@responseXml,@user
  23. IF @FromCurr = 'error'
  24. BEGIN
  25. EXEC proc_errorHandler 1,@responseXml, NULL
  26. ----## SEND SMS THROUGH KT NETWORK
  27. INSERT INTO KT_SMS.dbo.SDK_SMS_SEND ( USER_ID, SCHEDULE_TYPE, SUBJECT, SMS_MSG, NOW_DATE, SEND_DATE, CALLBACK, DEST_INFO)
  28. select 'globalmoney',0,'XE',left(@responseXml,90),format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01030436864'
  29. union all
  30. select 'globalmoney',0,'XE',left(@responseXml,90),format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01074518940'
  31. RETURN
  32. END
  33. IF ISNULL(@LiveRate, 0) = 0
  34. BEGIN
  35. SET @MSG = 'Sorry 0 ex rate for ' + @toCurr + ' can not be updated';
  36. ----## SEND SMS THROUGH KT NETWORK
  37. INSERT INTO KT_SMS.dbo.SDK_SMS_SEND ( USER_ID, SCHEDULE_TYPE, SUBJECT, SMS_MSG, NOW_DATE, SEND_DATE, CALLBACK, DEST_INFO)
  38. select 'globalmoney',0,'XE','Sorry 0 ex rate can not be updated',format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','1^01030436864'
  39. union all
  40. select 'globalmoney',0,'XE',@MSG,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','1^01074518940'
  41. EXEC proc_errorHandler 1, 'Sorry 0 ex rate can not be updated.', NULL
  42. RETURN
  43. END
  44. SET @LiveRate = CASE WHEN @toCurr = 'VND' THEN ROUND(@LiveRate,0) ELSE ROUND(@LiveRate,2) END
  45. DECLARE @currency VARCHAR(5),@cRate FLOAT,@cMargin FLOAT,@pRate FLOAT,@pMargin FLOAT
  46. DECLARE @tolCMax FLOAT, @tolCMin FLOAT, @tolPMax FLOAT, @tolPMin FLOAT, @errorMsg VARCHAR(200), @id INT
  47. SELECT @defExRateId = defExRateId,@currency = currency,@cRate = cRate, @cMargin = ISNULL(cMargin,0),@pRate = ISNULL(pRate,0) ,@pMargin = ISNULL(pMargin,0)
  48. FROM defExRate WITH(NOLOCK)
  49. WHERE currency = @toCurr and baseCurrency = @FromCurr
  50. IF ISNULL(@defExRateId,0) = 0
  51. BEGIN
  52. set @msg = 'No cost rate setup found for currency '+@FromCurr+' and '+@toCurr
  53. EXEC proc_errorHandler 1, @msg, NULL
  54. ----## SEND SMS THROUGH KT NETWORK
  55. INSERT INTO KT_SMS.dbo.SDK_SMS_SEND ( USER_ID, SCHEDULE_TYPE, SUBJECT, SMS_MSG, NOW_DATE, SEND_DATE, CALLBACK, DEST_INFO)
  56. select 'globalmoney',0,'XE',@msg,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01030436864'
  57. union all
  58. select 'globalmoney',0,'XE',@msg,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01074518940'
  59. RETURN
  60. END
  61. SELECT
  62. @tolCMax = ISNULL(cMax, 0.0)
  63. ,@tolCMin = ISNULL(cMin, 0.0)
  64. ,@tolPMax = ISNULL(pMax, 0.0)
  65. ,@tolPMin = ISNULL(pMin, 0.0)
  66. FROM rateMask WITH(NOLOCK) WHERE currency = @toCurr AND baseCurrency = @FromCurr
  67. IF NOT EXISTS(SELECT 'X' FROM rateMask WITH(NOLOCK) WHERE currency = @currency)
  68. BEGIN
  69. SET @msg = 'Please define rate mask for currency ' + @currency
  70. EXEC proc_errorHandler 1, @msg, NULL
  71. ----## SEND SMS THROUGH KT NETWORK
  72. INSERT INTO KT_SMS.dbo.SDK_SMS_SEND ( USER_ID, SCHEDULE_TYPE, SUBJECT, SMS_MSG, NOW_DATE, SEND_DATE, CALLBACK, DEST_INFO)
  73. select 'globalmoney',0,'XE',@msg,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01030436864'
  74. union all
  75. select 'globalmoney',0,'XE',@msg,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01074518940'
  76. RETURN
  77. END
  78. IF @flag ='BNI'
  79. BEGIN
  80. SET @cRate = round(@LiveRate,2) - 0.04
  81. IF((@cRate + ISNULL(@pMargin, 0)) > @tolPMax)
  82. BEGIN
  83. SET @errorMsg = 'IDR Max tolerance Rate exceeds. Rate must lie between ' + CAST(@tolPMin AS VARCHAR) + ' AND ' + CAST(@tolPMax AS VARCHAR)
  84. EXEC proc_errorHandler 1, @errorMsg, NULL
  85. ----## SEND SMS THROUGH KT NETWORK
  86. INSERT INTO KT_SMS.dbo.SDK_SMS_SEND ( USER_ID, SCHEDULE_TYPE, SUBJECT, SMS_MSG, NOW_DATE, SEND_DATE, CALLBACK, DEST_INFO)
  87. select 'globalmoney',0,'XE',@errorMsg,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01030436864'
  88. union all
  89. select 'globalmoney',0,'XE',@errorMsg,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01074518940'
  90. RETURN
  91. END
  92. IF((@cRate + ISNULL(@pMargin, 0)) < @tolPMin)
  93. BEGIN
  94. SET @errorMsg = 'IDR Min tolerance Rate exceeds.Rate must lie between ' + CAST(@tolPMin AS VARCHAR) + ' AND ' + CAST(@tolPMax AS VARCHAR)
  95. EXEC proc_errorHandler 1, @errorMsg, NULL
  96. ----## SEND SMS THROUGH KT NETWORK
  97. INSERT INTO KT_SMS.dbo.SDK_SMS_SEND ( USER_ID, SCHEDULE_TYPE, SUBJECT, SMS_MSG, NOW_DATE, SEND_DATE, CALLBACK, DEST_INFO)
  98. select 'globalmoney',0,'XE',@errorMsg,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01030436864'
  99. union all
  100. select 'globalmoney',0,'XE',@errorMsg,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01074518940'
  101. RETURN
  102. END
  103. INSERT INTO defExRateHistory(
  104. defExRateId
  105. ,setupType
  106. ,currency,country,agent,baseCurrency,tranType,factor
  107. ,cRate,cMargin,cMax,cMin
  108. ,pRate,pMargin,pMax,pMin
  109. ,isEnable,createdBy,createdDate,approvedBy,approvedDate,modType
  110. )
  111. SELECT
  112. @defExRateId
  113. ,main.setupType
  114. ,main.currency,main.country,main.agent,main.baseCurrency,main.tranType,factor
  115. ,cRate,cMargin,cMax,cMin
  116. ,@cRate,pMargin,pMax,pMin
  117. ,isEnable,@user,GETDATE(),@user,GETDATE(),'U'
  118. FROM defExRate main WITH(NOLOCK) WHERE defExRateId = @defExRateId
  119. UPDATE defExRate SET pRate = @cRate WHERE defExRateId = @defExRateId
  120. EXEC proc_errorHandler 0, 'Record updated successfully.', @defExRateId
  121. RETURN
  122. END
  123. IF @flag = 'C'
  124. BEGIN
  125. --Collection
  126. SET @cRate = round(@LiveRate,2) + 1
  127. IF((@cRate + ISNULL(@cMargin, 0)) > @tolCMax)
  128. BEGIN
  129. SET @errorMsg = 'KRW Max tolerance Rate exceeds.Rate must lie between ' + CAST(@tolCMin AS VARCHAR) + ' AND ' + CAST(@tolCMax AS VARCHAR)
  130. EXEC proc_errorHandler 1, @errorMsg, NULL
  131. ----## SEND SMS THROUGH KT NETWORK
  132. INSERT INTO KT_SMS.dbo.SDK_SMS_SEND ( USER_ID, SCHEDULE_TYPE, SUBJECT, SMS_MSG, NOW_DATE, SEND_DATE, CALLBACK, DEST_INFO)
  133. select 'globalmoney',0,'XE',@errorMsg,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01030436864'
  134. union all
  135. select 'globalmoney',0,'XE',@errorMsg,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01074518940'
  136. RETURN
  137. END
  138. IF((@cRate + ISNULL(@cMargin, 0)) < @tolCMin)
  139. BEGIN
  140. SET @errorMsg = 'KRW Min tolerance Rate exceeds.Rate must lie between ' + CAST(@tolCMin AS VARCHAR) + ' AND ' + CAST(@tolCMax AS VARCHAR)
  141. EXEC proc_errorHandler 1, @errorMsg, NULL
  142. ----## SEND SMS THROUGH KT NETWORK
  143. INSERT INTO KT_SMS.dbo.SDK_SMS_SEND ( USER_ID, SCHEDULE_TYPE, SUBJECT, SMS_MSG, NOW_DATE, SEND_DATE, CALLBACK, DEST_INFO)
  144. select 'globalmoney',0,'XE',@errorMsg,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01030436864'
  145. union all
  146. select 'globalmoney',0,'XE',@errorMsg,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01074518940'
  147. RETURN
  148. END
  149. END
  150. IF @flag = 'P'
  151. BEGIN
  152. --Collection
  153. SET @pRate = ROUND(@LiveRate,2) - CASE WHEN @toCurr='NPR' THEN 0.80
  154. WHEN @toCurr='VND' THEN 50
  155. WHEN @toCurr='BDT' THEN 0
  156. WHEN @toCurr='THB' THEN 0.06
  157. ELSE 0 END
  158. IF((@pRate - ISNULL(@pMargin, 0)) > @tolPMax)
  159. BEGIN
  160. SET @errorMsg = @toCurr+' Max tolerance Rate exceeds.Rate must lie between ' + CAST(@tolPMin AS VARCHAR) + ' AND ' + CAST(@tolPMax AS VARCHAR)
  161. EXEC proc_errorHandler 1, @errorMsg, NULL
  162. ----## SEND SMS THROUGH KT NETWORK
  163. INSERT INTO KT_SMS.dbo.SDK_SMS_SEND ( USER_ID, SCHEDULE_TYPE, SUBJECT, SMS_MSG, NOW_DATE, SEND_DATE, CALLBACK, DEST_INFO)
  164. select 'globalmoney',0,'XE',@errorMsg,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01030436864'
  165. union all
  166. select 'globalmoney',0,'XE',@errorMsg,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01074518940'
  167. RETURN
  168. END
  169. IF((@pRate - ISNULL(@pMargin, 0)) < @tolPMin)
  170. BEGIN
  171. SET @errorMsg = @toCurr+' Min tolerance Rate exceeds.Rate must lie between ' + CAST(@tolPMin AS VARCHAR) + ' AND ' + CAST(@tolPMax AS VARCHAR)
  172. EXEC proc_errorHandler 1, @errorMsg, NULL
  173. ----## SEND SMS THROUGH KT NETWORK
  174. INSERT INTO KT_SMS.dbo.SDK_SMS_SEND ( USER_ID, SCHEDULE_TYPE, SUBJECT, SMS_MSG, NOW_DATE, SEND_DATE, CALLBACK, DEST_INFO)
  175. select 'globalmoney',0,'XE',@errorMsg,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01030436864'
  176. union all
  177. select 'globalmoney',0,'XE',@errorMsg,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01074518940'
  178. RETURN
  179. END
  180. END
  181. CREATE TABLE #exRateIdTempMain(exRateTreasuryId INT)
  182. CREATE TABLE #exRateIdTempMod(exRateTreasuryId INT)
  183. BEGIN TRANSACTION
  184. --Currency Rate/ Agent Rate Update------------------------------------------------------------------------------------
  185. UPDATE defExRate SET
  186. cRate = @cRate
  187. ,pRate = @pRate
  188. ,modifiedBy = @user
  189. ,modifiedDate = GETDATE()
  190. WHERE defExRateId = @defExRateId
  191. --Change Record History-----------------------------------------------------------------------------------------------
  192. INSERT INTO defExRateHistory(
  193. defExRateId
  194. ,setupType
  195. ,currency,country,agent,baseCurrency,tranType,factor
  196. ,cRate,cMargin,cMax,cMin
  197. ,pRate,pMargin,pMax,pMin
  198. ,isEnable,createdBy,createdDate,approvedBy,approvedDate,modType
  199. )
  200. SELECT
  201. @defExRateId
  202. ,main.setupType
  203. ,main.currency,main.country,main.agent,main.baseCurrency,main.tranType,factor
  204. ,@cRate,@cMargin,cMax,cMin
  205. ,@pRate,@pMargin,pMax,pMin
  206. ,isEnable,@user,GETDATE(),@user,GETDATE(),'U'
  207. FROM defExRate main WITH(NOLOCK) WHERE defExRateId = @defExRateId
  208. IF @flag = 'C'
  209. BEGIN
  210. --1. Get All Corridor records affected by send cost rate change
  211. DELETE FROM #exRateIdTempMain
  212. INSERT INTO #exRateIdTempMain
  213. SELECT exRateTreasuryId FROM exRateTreasury WITH(NOLOCK) WHERE cRateId = @defExRateId
  214. --2. Update Records in Mod Table if data already exist in mod table
  215. IF EXISTS(SELECT 'X' FROM exRateTreasuryMod mode WITH(NOLOCK) INNER JOIN #exRateIdTempMain temp ON mode.exRateTreasuryId = temp.exRateTreasuryId)
  216. BEGIN
  217. DELETE FROM #exRateIdTempMod
  218. INSERT INTO #exRateIdTempMod
  219. SELECT mode.exRateTreasuryId FROM exRateTreasuryMod mode WITH(NOLOCK)
  220. INNER JOIN #exRateIdTempMain temp ON mode.exRateTreasuryId = temp.exRateTreasuryId
  221. UPDATE ert SET
  222. cRate = @cRate
  223. ,cMargin = @cMargin
  224. ,maxCrossRate = ROUND(def.pRate/@cRate, dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  225. ,crossRate = ROUND((def.pRate - def.pMargin - pHoMargin)/(@cRate + @cMargin + cHoMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  226. ,customerRate = CASE WHEN ISNULL(toleranceOn, '') IN ('S', 'P', '') THEN
  227. ROUND((def.pRate - def.pMargin - pHoMargin - pAgentMargin)/(@cRate + @cMargin + cHoMargin + cAgentMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  228. WHEN ISNULL(toleranceOn, '') IN ('C') THEN
  229. ROUND((def.pRate - def.pMargin - pHoMargin)/(@cRate + @cMargin + cHoMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency)) - ISNULL(agentCrossRateMargin, 0)
  230. END
  231. ,createdBy = @user
  232. ,createdDate = GETDATE()
  233. FROM exRateTreasuryMod ert
  234. INNER JOIN defExRate def ON ert.pRateId = def.defExRateId
  235. INNER JOIN #exRateIdTempMod temp ON ert.exRateTreasuryId = temp.exRateTreasuryId
  236. END
  237. --3. Update Record in main table for modType Insert.
  238. UPDATE ert SET
  239. cRate = @cRate
  240. ,cMargin = @cMargin
  241. ,maxCrossRate = ROUND(def.pRate/@cRate, dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  242. ,crossRate = ROUND((def.pRate - def.pMargin - pHoMargin)/(@cRate + @cMargin + cHoMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  243. --,customerRate = ROUND((def.pRate - def.pMargin - pHoMargin - pAgentMargin)/(@cRate + @cMargin + cHoMargin + cAgentMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  244. ,customerRate = CASE WHEN ISNULL(toleranceOn, '') IN ('S', 'P', '') THEN
  245. ROUND((def.pRate - def.pMargin - pHoMargin - pAgentMargin)/(@cRate + @cMargin + cHoMargin + cAgentMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  246. WHEN ISNULL(toleranceOn, '') IN ('C') THEN
  247. ROUND((def.pRate - def.pMargin - pHoMargin)/(@cRate + @cMargin + cHoMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency)) - ISNULL(agentCrossRateMargin, 0)
  248. END
  249. ,createdBy = @user
  250. ,createdDate = GETDATE()
  251. FROM exRateTreasury ert
  252. INNER JOIN defExRate def ON ert.pRateId = def.defExRateId
  253. WHERE cRateId = @defExRateId AND ert.approvedBy IS NULL
  254. --4. Insert records in mod table for modType Update.
  255. INSERT INTO exRateTreasuryMod(
  256. exRateTreasuryId
  257. ,cRateId,cCurrency,cCountry,cAgent,cRateFactor,cRate,cMargin,cHoMargin,cAgentMargin
  258. ,pRateId,pCurrency,pCountry,pAgent,pRateFactor,pRate,pMargin,pHoMargin,pAgentMargin
  259. ,sharingType,sharingValue,toleranceOn,agentTolMin,agentTolMax,customerTolMin,customerTolMax
  260. ,crossRate,customerRate,maxCrossRate,agentCrossRateMargin,tolerance,crossRateFactor,isActive
  261. ,modType,createdBy,createdDate
  262. )
  263. SELECT
  264. exRateTreasuryId
  265. ,ert.cRateId,ert.cCurrency,cCountry,cAgent,cRateFactor,@cRate,@cMargin,cHoMargin,cAgentMargin
  266. ,ert.pRateId,ert.pCurrency,pCountry,pAgent,pRateFactor,def.pRate,def.pMargin,pHoMargin,pAgentMargin
  267. ,ert.sharingType,ert.sharingValue,ert.toleranceOn,ert.agentTolMin,ert.agentTolMax,ert.customerTolMin
  268. ,ert.customerTolMax
  269. ,ROUND((def.pRate - def.pMargin - pHoMargin)/(@cRate + @cMargin + cHoMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  270. ,CASE WHEN ISNULL(toleranceOn, '') IN ('S', 'P', '') THEN ROUND((def.pRate - def.pMargin - pHoMargin - pAgentMargin)/(@cRate + @cMargin + cHoMargin + cAgentMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  271. WHEN ISNULL(toleranceOn, '') IN ('C') THEN ROUND((def.pRate - def.pMargin - pHoMargin)/(@cRate + @cMargin + cHoMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency)) - ISNULL(agentCrossRateMargin, 0) END
  272. ,ROUND(def.pRate/@cRate, dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  273. ,ert.agentCrossRateMargin
  274. ,tolerance
  275. ,crossRateFactor
  276. ,ert.isActive
  277. ,'U',@user,GETDATE()
  278. FROM exRateTreasury ert WITH(NOLOCK)
  279. INNER JOIN defExRate def WITH(NOLOCK) ON ert.pRateId = def.defExRateId
  280. WHERE ert.cRateId = @defExRateId AND ert.approvedBy IS NOT NULL AND ISNULL(ert.isActive, 'N') = 'Y'
  281. AND ert.exRateTreasuryId NOT IN (SELECT exRateTreasuryId FROM #exRateIdTempMod)
  282. --5. Mark Records as "has been updated"-----------------------------------------------------------------
  283. UPDATE exRateTreasury SET
  284. isUpdated = 'Y'
  285. WHERE cRateId = @defExRateId AND approvedBy IS NOT NULL AND ISNULL(isActive, 'N') = 'Y'
  286. AND exRateTreasuryId NOT IN (SELECT exRateTreasuryId FROM #exRateIdTempMod)
  287. END
  288. IF @flag = 'P'
  289. BEGIN
  290. --1. Get All Corridor records affected by receive cost rate change
  291. DELETE FROM #exRateIdTempMain
  292. INSERT INTO #exRateIdTempMain
  293. SELECT exRateTreasuryId FROM exRateTreasury WITH(NOLOCK) WHERE pRateId = @defExRateId
  294. --2. Update Records in Mod Table if data already exist in mod table
  295. IF EXISTS(SELECT 'X' FROM exRateTreasuryMod mode WITH(NOLOCK) INNER JOIN #exRateIdTempMain temp ON mode.exRateTreasuryId = temp.exRateTreasuryId)
  296. BEGIN
  297. DELETE FROM #exRateIdTempMod
  298. INSERT INTO #exRateIdTempMod
  299. SELECT mode.exRateTreasuryId FROM exRateTreasuryMod mode WITH(NOLOCK)
  300. INNER JOIN #exRateIdTempMain temp ON mode.exRateTreasuryId = temp.exRateTreasuryId
  301. UPDATE ert SET
  302. pRate = @pRate
  303. ,pMargin = @pMargin
  304. ,maxCrossRate = ROUND(@pRate/def.cRate, dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  305. ,crossRate = ROUND((@pRate - @pMargin - pHoMargin)/(def.cRate + def.cMargin + cHoMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  306. ,customerRate = CASE WHEN ISNULL(toleranceOn, '') IN ('S', 'P', '') THEN ROUND((@pRate - @pMargin - pHoMargin - pAgentMargin)/(def.cRate + def.cMargin + cHoMargin + cAgentMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  307. WHEN ISNULL(toleranceOn, '') IN ('C') THEN ROUND((@pRate - @pMargin - pHoMargin)/(def.cRate + def.cMargin + cHoMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency)) - ISNULL(agentCrossRateMargin, 0) END
  308. ,createdBy = @user
  309. ,createdDate = GETDATE()
  310. FROM exRateTreasuryMod ert
  311. INNER JOIN defExRate def ON ert.cRateId = def.defExRateId
  312. INNER JOIN #exRateIdTempMod temp ON ert.exRateTreasuryId = temp.exRateTreasuryId
  313. END
  314. --3. Update Record in main table for modType Insert.
  315. UPDATE ert SET
  316. pRate = @pRate
  317. ,pMargin = @pMargin
  318. ,maxCrossRate = ROUND(@pRate/def.cRate, dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  319. ,crossRate = ROUND((@pRate - @pMargin - pHoMargin)/(def.cRate + def.cMargin + cHoMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  320. --,customerRate = ROUND((@pRate - @pMargin - pHoMargin - pAgentMargin)/(def.cRate + def.cMargin + cHoMargin + cAgentMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  321. ,customerRate = CASE WHEN ISNULL(toleranceOn, '') IN ('S', 'P', '') THEN ROUND((@pRate - @pMargin - pHoMargin - pAgentMargin)/(def.cRate + def.cMargin + cHoMargin + cAgentMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  322. WHEN ISNULL(toleranceOn, '') IN ('C') THEN ROUND((@pRate - @pMargin - pHoMargin)/(def.cRate + def.cMargin + cHoMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency)) - ISNULL(agentCrossRateMargin, 0) END
  323. ,createdBy = @user
  324. ,createdDate = GETDATE()
  325. FROM exRateTreasury ert
  326. INNER JOIN defExRate def ON ert.cRateId = def.defExRateId
  327. WHERE pRateId = @defExRateId AND ert.approvedBy IS NULL
  328. INSERT INTO exRateTreasuryMod(
  329. exRateTreasuryId
  330. ,cRateId,cCurrency,cCountry,cAgent,cRateFactor,cRate,cMargin,cHoMargin,cAgentMargin
  331. ,pRateId,pCurrency,pCountry,pAgent,pRateFactor,pRate,pMargin,pHoMargin,pAgentMargin
  332. ,sharingType
  333. ,sharingValue
  334. ,toleranceOn
  335. ,agentTolMin
  336. ,agentTolMax
  337. ,customerTolMin
  338. ,customerTolMax
  339. ,crossRate
  340. ,customerRate
  341. ,maxCrossRate
  342. ,agentCrossRateMargin
  343. ,tolerance
  344. ,crossRateFactor
  345. ,isActive
  346. ,modType,createdBy,createdDate
  347. )
  348. SELECT
  349. exRateTreasuryId
  350. ,ert.cRateId,ert.cCurrency,cCountry,cAgent,cRateFactor,def.cRate,def.cMargin,cHoMargin,cAgentMargin
  351. ,ert.pRateId,ert.pCurrency,pCountry,pAgent,pRateFactor,@pRate,@pMargin,pHoMargin,pAgentMargin
  352. ,ert.sharingType
  353. ,ert.sharingValue
  354. ,ert.toleranceOn
  355. ,ert.agentTolMin
  356. ,ert.agentTolMax
  357. ,ert.customerTolMin
  358. ,ert.customerTolMax
  359. ,ROUND((@pRate - @pMargin - pHoMargin)/(def.cRate + def.cMargin + cHoMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  360. ,CASE WHEN ISNULL(toleranceOn, '') IN ('S', 'P', '') THEN ROUND((@pRate - @pMargin - pHoMargin - pAgentMargin)/(def.cRate + def.cMargin + cHoMargin + cAgentMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  361. WHEN ISNULL(toleranceOn, '') IN ('C') THEN ROUND((@pRate - @pMargin - pHoMargin)/(def.cRate + def.cMargin + cHoMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency)) - ISNULL(ert.agentCrossRateMargin, 0) END
  362. ,ROUND(@pRate/def.cRate, dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  363. ,ert.agentCrossRateMargin
  364. ,tolerance
  365. ,crossRateFactor
  366. ,ert.isActive
  367. ,'U',@user,GETDATE()
  368. FROM exRateTreasury ert WITH(NOLOCK)
  369. INNER JOIN defExRate def WITH(NOLOCK) ON ert.cRateId = def.defExRateId
  370. WHERE ert.pRateId = @defExRateId AND ert.approvedBy IS NOT NULL AND ISNULL(ert.isActive, 'N') = 'Y'
  371. AND ert.exRateTreasuryId NOT IN (SELECT exRateTreasuryId FROM #exRateIdTempMod)
  372. UPDATE exRateTreasury SET
  373. isUpdated = 'Y'
  374. WHERE pRateId = @defExRateId AND approvedBy IS NOT NULL AND ISNULL(isActive, 'N') = 'Y'
  375. AND exRateTreasuryId NOT IN (SELECT exRateTreasuryId FROM #exRateIdTempMod)
  376. END
  377. IF @@TRANCOUNT > 0
  378. COMMIT TRANSACTION
  379. EXEC proc_errorHandler 0, 'Record updated successfully.', @defExRateId
  380. declare @exRateTreasuryIds varchar(max)=''
  381. select @exRateTreasuryIds = @exRateTreasuryIds+cast(exRateTreasuryId as varchar)+',' from exRateTreasuryMod(nolock) where createdBy='system'
  382. set @exRateTreasuryIds = left(@exRateTreasuryIds,len(@exRateTreasuryIds)-1)
  383. EXEC proc_exRateTreasury @flag = 'approve' , @user ='system',@exRateTreasuryIds = @exRateTreasuryIds
  384. end try
  385. begin catch
  386. set @errorMsg = error_Message()
  387. EXEC proc_errorHandler 1,@errorMsg, @defExRateId
  388. end catch
  389. GO