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.

1598 lines
60 KiB

1 year ago
  1. USE [FastMoneyPro_Remit]
  2. GO
  3. /****** Object: StoredProcedure [dbo].[proc_defExRate] Script Date: 7/4/2019 11:35:48 AM ******/
  4. DROP PROCEDURE [dbo].[proc_defExRate]
  5. GO
  6. /****** Object: StoredProcedure [dbo].[proc_defExRate] Script Date: 7/4/2019 11:35:48 AM ******/
  7. SET ANSI_NULLS ON
  8. GO
  9. SET QUOTED_IDENTIFIER ON
  10. GO
  11. /*
  12. IF EXISTS (SELECT 'x' FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[proc_defExRate]') AND TYPE IN (N'P', N'PC'))
  13. DROP PROCEDURE [dbo].proc_defExRate
  14. GO
  15. */
  16. /*
  17. proc_defExRate @flag = 'm', @user = 'admin', @setupType = 'CU', @sortBy = 'defExRateId', @sortOrder = 'ASC', @pageSize = '10', @pageNumber = '1'
  18. */
  19. CREATE proc [dbo].[proc_defExRate]
  20. @flag VARCHAR(50) = NULL
  21. ,@user VARCHAR(30) = NULL
  22. ,@defExRateId VARCHAR(30) = NULL
  23. ,@defExRateIds VARCHAR(MAX) = NULL
  24. ,@setupType CHAR(2) = NULL
  25. ,@currency VARCHAR(3) = NULL
  26. ,@country INT = NULL
  27. ,@countryName VARCHAR(100) = NULL
  28. ,@agent INT = NULL
  29. ,@agentName VARCHAR(100) = NULL
  30. ,@baseCurrency VARCHAR(3) = NULL
  31. ,@tranType INT = NULL
  32. ,@factor CHAR(1) = NULL
  33. ,@cRate FLOAT = NULL
  34. ,@cMargin FLOAT = NULL
  35. ,@cMax FLOAT = NULL
  36. ,@cMin FLOAT = NULL
  37. ,@pRate FLOAT = NULL
  38. ,@pMargin FLOAT = NULL
  39. ,@pMax FLOAT = NULL
  40. ,@pMin FLOAT = NULL
  41. ,@hasChanged CHAR(1) = NULL
  42. ,@isEnable CHAR(1) = NULL
  43. ,@isActive CHAR(1) = NULL
  44. ,@sortBy VARCHAR(50) = NULL
  45. ,@sortOrder VARCHAR(5) = NULL
  46. ,@pageSize INT = NULL
  47. ,@pageNumber INT = NULL
  48. AS
  49. SET NOCOUNT ON
  50. SET XACT_ABORT ON
  51. BEGIN TRY
  52. CREATE TABLE #msg(errorCode INT, msg VARCHAR(100), id INT)
  53. DECLARE
  54. @sql VARCHAR(MAX)
  55. ,@oldValue VARCHAR(MAX)
  56. ,@newValue VARCHAR(MAX)
  57. ,@module VARCHAR(10)
  58. ,@tableAlias VARCHAR(100)
  59. ,@logIdentifier VARCHAR(50)
  60. ,@logParamMod VARCHAR(100)
  61. ,@logParamMain VARCHAR(100)
  62. ,@table VARCHAR(MAX)
  63. ,@select_field_list VARCHAR(MAX)
  64. ,@extra_field_list VARCHAR(MAX)
  65. ,@sql_filter VARCHAR(MAX)
  66. ,@modType VARCHAR(6)
  67. ,@ApprovedFunctionId INT
  68. DECLARE @rateIdList TABLE(rowId INT IDENTITY(1,1), defExRateId INT)
  69. DECLARE @rateIdListCo TABLE(defExRateId INT)
  70. DECLARE @rateIdListAg TABLE(defExRateId INT)
  71. DECLARE @hasRight CHAR(1)
  72. DECLARE @exRateMsg VARCHAR(MAX)
  73. DECLARE @msg VARCHAR(MAX)
  74. CREATE TABLE #defExRateIdTemp(defExRateId INT)
  75. CREATE TABLE #exRateIdTempMain(exRateTreasuryId INT)
  76. CREATE TABLE #exRateIdTempMod(exRateTreasuryId INT)
  77. SELECT
  78. @logIdentifier = 'defExRateId'
  79. ,@logParamMain = 'defExRate'
  80. ,@logParamMod = 'defExRateHistory'
  81. ,@module = '20'
  82. ,@tableAlias = 'Default Ex-Rate'
  83. ,@ApprovedFunctionId = CASE @setupType WHEN 'CU' THEN 20111030 WHEN 'CO' THEN 20111130 WHEN 'AG' THEN 20111230 END
  84. IF @flag = 'rateMask' --Load Rate Mask according to Currency & Factor
  85. BEGIN
  86. IF NOT EXISTS(SELECT 'X' FROM rateMask WITH(NOLOCK) WHERE currency = @currency)
  87. BEGIN
  88. SELECT maskBD='99',maskAD='99',cMin=0,cMax=0,pMin=0,pMax=0
  89. RETURN
  90. END
  91. SELECT
  92. maskBD = ISNULL(CASE WHEN @factor='M' then rateMaskMulBd when @factor='D' then rateMaskDivBd end,'99')
  93. ,maskAD = ISNULL(CASE WHEN @factor='M' then rateMaskMulAD when @factor='D' then rateMaskDivAd end,'99')
  94. ,cMin
  95. ,cMax
  96. ,pMin
  97. ,pMax
  98. FROM rateMask WITH(NOLOCK) WHERE currency = @currency
  99. END
  100. IF @flag IN ('s')
  101. BEGIN
  102. SET @hasRight = dbo.FNAHasRight(@user, CAST(@ApprovedFunctionId AS VARCHAR))
  103. IF(@setupType = 'CU')
  104. SET @sortBy = 'currencyName'
  105. ELSE IF(@setupType = 'CO')
  106. SET @sortBy = 'countryName'
  107. ELSE IF(@setupType = 'AG')
  108. SET @sortBy = 'countryName,agentName'
  109. --IF @sortOrder IS NULL
  110. SET @sortOrder = ''
  111. DECLARE @m VARCHAR(MAX)
  112. SET @m = '(
  113. SELECT
  114. defExRateId = ISNULL(mode.defExRateId, main.defExRateId)
  115. ,setupType = ISNULL(mode.setupType, main.setupType)
  116. ,currency = ISNULL(mode.currency, main.currency)
  117. ,country = ISNULL(mode.country, main.country)
  118. ,agent = ISNULL(mode.agent, main.agent)
  119. ,baseCurrency = ISNULL(mode.baseCurrency, main.baseCurrency)
  120. ,tranType = ISNULL(mode.tranType, main.tranType)
  121. ,factor = ISNULL(mode.factor, main.factor)
  122. ,cRate = ISNULL(mode.cRate, main.cRate)
  123. ,cMargin = ISNULL(mode.cMargin, main.cMargin)
  124. ,pRate = ISNULL(mode.pRate, main.pRate)
  125. ,pMargin = ISNULL(mode.pMargin, main.pMargin)
  126. ,isEnable = ISNULL(mode.isEnable, main.isEnable)
  127. ,lastModifiedBy = ISNULL(main.modifiedBy, main.createdBy)
  128. ,lastModifiedDate = ISNULL(main.modifiedDate, main.createdDate)
  129. ,main.createdBy
  130. ,main.createdDate
  131. ,modifiedBy = CASE WHEN main.approvedBy IS NULL THEN main.createdBy ELSE mode.createdBy END
  132. ,modifiedDate = CASE WHEN main.approvedBy IS NULL THEN main.createdDate ELSE mode.createdDate END
  133. ,hasChanged = CASE WHEN (main.approvedBy IS NULL) OR (mode.defExRateId IS NOT NULL) THEN ''Y'' ELSE ''N'' END
  134. FROM defExRate main WITH(NOLOCK)
  135. LEFT JOIN defExRateHistory mode ON main.defExRateId = mode.defExRateId AND mode.approvedBy IS NULL
  136. AND (
  137. mode.createdBy = ''' + @user + '''
  138. OR ''Y'' = ''' + @hasRight + '''
  139. )
  140. WHERE ISNULL(main.isDeleted, ''N'') <> ''Y''
  141. AND (
  142. main.approvedBy IS NOT NULL
  143. OR main.createdBy = ''' + @user + '''
  144. OR ''Y'' = ''' + @hasRight + '''
  145. )
  146. ) '
  147. SET @table = '(
  148. SELECT
  149. main.defExRateId
  150. ,main.currency
  151. ,currencyName = curr.currencyName
  152. ,main.country
  153. ,countryName = c.countryName
  154. ,countryCode = c.countryCode
  155. ,main.agent
  156. ,agentName = ISNULL(am.agentName, ''[All]'')
  157. ,main.baseCurrency
  158. ,main.tranType
  159. ,tranTypeName = ISNULL(stm.typeTitle, ''Any'')
  160. ,main.factor
  161. ,main.cRate
  162. ,main.cMargin
  163. ,cMin = ISNULL(mask.cMin, 0)
  164. ,cMax = ISNULL(mask.cMax, 0)
  165. ,cOffer = CASE WHEN main.factor = ''M'' THEN main.cRate + main.cMargin ELSE main.cRate - main.cMargin END
  166. ,main.pRate
  167. ,main.pMargin
  168. ,pMin = ISNULL(mask.pMin, 0)
  169. ,pMax = ISNULL(mask.pMax, 0)
  170. ,pOffer = CASE WHEN main.factor = ''M'' THEN main.pRate - main.pMargin ELSE main.pRate + main.pMargin END
  171. ,cOperationType = ISNULL(am.agentRole, c.operationType)
  172. ,main.isEnable
  173. ,main.lastModifiedBy
  174. ,main.lastModifiedDate
  175. ,main.modifiedBy
  176. ,main.hasChanged
  177. ,maskMulBD= isnull(rateMaskMulBd,''99'')
  178. ,maskMulAD= isnull(rateMaskMulAd,''99'')
  179. ,maskDivBD= isnull(rateMaskDivBd,''99'')
  180. ,maskDivAD= isnull(rateMaskDivAD,''99'')
  181. FROM ' + @m + ' main
  182. LEFT JOIN currencyMaster curr ON main.currency = curr.currencyCode
  183. LEFT JOIN countryMaster c ON main.country = c.countryId
  184. LEFT JOIN agentMaster am WITH(NOLOCK) ON main.agent = am.agentId
  185. LEFT JOIN serviceTypeMaster stm WITH(NOLOCK) ON main.tranType = stm.serviceTypeId
  186. LEFT JOIN rateMask MASK(NOLOCK) on MAIN.currency = MASK.currency AND main.baseCurrency = mask.baseCurrency
  187. WHERE 1=1
  188. '
  189. IF @setupType IS NOT NULL
  190. SET @table = @table + ' AND setupType = ''' + @setupType + ''''
  191. SET @table = @table + ') x'
  192. SET @sql_filter = ''
  193. --SET @sql_filter = @sql_filter + ' AND ISNULL(isDeleted, '''') <> ''Y'''
  194. IF @hasChanged IS NOT NULL
  195. SET @sql_filter = @sql_filter + ' AND hasChanged = ''' + @hasChanged +''''
  196. IF @currency IS NOT NULL
  197. SET @sql_filter = @sql_filter + ' AND currency = ''' + @currency + ''''
  198. IF @country IS NOT NULL
  199. SET @sql_filter = @sql_filter + ' AND country = ' + CAST(@country AS VARCHAR(50))
  200. IF @countryName IS NOT NULL
  201. SET @sql_filter = @sql_filter + ' AND countryName LIKE ''%' + @countryName + '%'''
  202. IF @agent IS NOT NULL
  203. SET @sql_filter = @sql_filter + ' AND agent = ' + CAST(@agent AS VARCHAR(50))
  204. IF @agentName IS NOT NULL
  205. SET @sql_filter = @sql_filter + ' AND agentName LIKE ''%' + @agentName + '%'''
  206. IF @baseCurrency IS NOT NULL
  207. SET @sql_filter = @sql_filter + ' AND baseCurrency = ''' + @baseCurrency + ''''
  208. SET @select_field_list = '
  209. defExRateId
  210. ,currency
  211. ,currencyName
  212. ,country
  213. ,countryName
  214. ,countryCode
  215. ,agent
  216. ,agentName
  217. ,baseCurrency
  218. ,tranType
  219. ,tranTypeName
  220. ,factor
  221. ,cRate
  222. ,cMargin
  223. ,cMax
  224. ,cMin
  225. ,cOffer
  226. ,pRate
  227. ,pMargin
  228. ,pMax
  229. ,pMin
  230. ,pOffer
  231. ,cOperationType
  232. ,isEnable
  233. ,lastModifiedBy
  234. ,lastModifiedDate
  235. ,modifiedBy
  236. ,hasChanged
  237. ,maskMulBD
  238. ,maskMulAD
  239. ,maskDivBD
  240. ,maskDivAD
  241. '
  242. EXEC dbo.proc_paging
  243. @table
  244. ,@sql_filter
  245. ,@select_field_list
  246. ,@extra_field_list
  247. ,@sortBy
  248. ,@sortOrder
  249. ,@pageSize
  250. ,@pageNumber
  251. END
  252. IF @flag IN ('m') --Approval List
  253. BEGIN
  254. IF(@setupType = 'CU')
  255. SET @sortBy = 'currencyName'
  256. ELSE IF(@setupType = 'CO')
  257. SET @sortBy = 'countryName'
  258. ELSE IF(@setupType = 'AG')
  259. SET @sortBy = 'agentName'
  260. IF @sortOrder IS NULL
  261. SET @sortOrder = 'ASC'
  262. SET @m = '(
  263. SELECT
  264. defExRateId = ISNULL(mode.defExRateId, main.defExRateId)
  265. ,setupType = ISNULL(mode.setupType, main.setupType)
  266. ,currency = ISNULL(mode.currency, main.currency)
  267. ,country = ISNULL(mode.country, main.country)
  268. ,agent = ISNULL(mode.agent, main.agent)
  269. ,baseCurrency = ISNULL(mode.baseCurrency, main.baseCurrency)
  270. ,tranType = ISNULL(mode.tranType, main.tranType)
  271. ,factorOld = CASE WHEN main.approvedBy IS NULL THEN NULL ELSE main.factor END
  272. ,cRateOld = CASE WHEN main.approvedBy IS NULL THEN NULL ELSE main.cRate END
  273. ,cMarginOld = CASE WHEN main.approvedBy IS NULL THEN NULL ELSE main.cMargin END
  274. ,cMaxOld = CASE WHEN main.approvedBy IS NULL THEN NULL ELSE main.cMax END
  275. ,cMinOld = CASE WHEN main.approvedBy IS NULL THEN NULL ELSE main.cMin END
  276. ,pRateOld = CASE WHEN main.approvedBy IS NULL THEN NULL ELSE main.pRate END
  277. ,pMarginOld = CASE WHEN main.approvedBy IS NULL THEN NULL ELSE main.pMargin END
  278. ,pMaxOld = CASE WHEN main.approvedBy IS NULL THEN NULL ELSE main.pMax END
  279. ,pMinOld = CASE WHEN main.approvedBy IS NULL THEN NULL ELSE main.pMin END
  280. ,isEnableOld = CASE WHEN main.approvedBy IS NULL THEN NULL ELSE main.isEnable END
  281. ,factorNew = CASE WHEN main.approvedBy IS NULL THEN main.factor ELSE mode.factor END
  282. ,cRateNew = CASE WHEN main.approvedBy IS NULL THEN main.cRate ELSE mode.cRate END
  283. ,cMarginNew = CASE WHEN main.approvedBy IS NULL THEN main.cMargin ELSE mode.cMargin END
  284. ,cMaxNew = CASE WHEN main.approvedBy IS NULL THEN main.cMax ELSE mode.cMax END
  285. ,cMinNew = CASE WHEN main.approvedBy IS NULL THEN main.cMin ELSE mode.cMin END
  286. ,pRateNew = CASE WHEN main.approvedBy IS NULL THEN main.pRate ELSE mode.pRate END
  287. ,pMarginNew = CASE WHEN main.approvedBy IS NULL THEN main.pMargin ELSE mode.pMargin END
  288. ,pMaxNew = CASE WHEN main.approvedBy IS NULL THEN main.pMax ELSE mode.pMax END
  289. ,pMinNew = CASE WHEN main.approvedBy IS NULL THEN main.pMin ELSE mode.pMin END
  290. ,isEnableNew = CASE WHEN main.approvedBy IS NULL THEN main.isEnable ELSE mode.isEnable END
  291. ,modType = CASE WHEN main.approvedBy IS NULL THEN ''I'' ELSE mode.modType END
  292. ,main.createdBy
  293. ,main.createdDate
  294. ,modifiedBy = CASE WHEN main.approvedBy IS NULL THEN main.createdBy ELSE mode.createdBy END
  295. ,modifiedDate = CASE WHEN main.approvedBy IS NULL THEN main.createdDate ELSE mode.createdDate END
  296. ,hasChanged = CASE WHEN (main.approvedBy IS NULL) OR (mode.defExRateId IS NOT NULL) THEN ''Y'' ELSE ''N'' END
  297. FROM defExRate main WITH(NOLOCK)
  298. LEFT JOIN defExRateHistory mode ON main.defExRateId = mode.defExRateId AND mode.approvedBy IS NULL
  299. AND (
  300. mode.createdBy = ''' + @user + '''
  301. OR ''Y'' = dbo.FNAHasRight(''' + @user + ''',' + CAST(@ApprovedFunctionId AS VARCHAR) + ')
  302. )
  303. WHERE ISNULL(main.isDeleted, ''N'') <> ''Y''
  304. AND (
  305. main.approvedBy IS NOT NULL
  306. OR main.createdBy = ''' + @user + '''
  307. OR ''Y'' = dbo.FNAHasRight(''' + @user + ''',' + CAST(@ApprovedFunctionId AS VARCHAR) + ')
  308. )
  309. ) '
  310. SET @table = '(
  311. SELECT
  312. main.defExRateId
  313. ,main.currency
  314. ,currencyName = curr.currencyName
  315. ,main.country
  316. ,countryName = c.countryName
  317. ,main.agent
  318. ,agentName = ISNULL(am.agentName, ''All'')
  319. ,main.baseCurrency
  320. ,main.tranType
  321. ,tranTypeName = ISNULL(stm.typeTitle, ''Any'')
  322. ,main.factorOld
  323. ,factorNameOld = CASE WHEN main.factorOld = ''M'' THEN ''MUL'' ELSE ''DIV'' END
  324. ,main.cRateOld
  325. ,main.cMarginOld
  326. ,main.cMaxOld
  327. ,main.cMinOld
  328. ,cOfferOld = CASE WHEN main.factorOld = ''M'' THEN main.cRateOld + main.cMarginOld ELSE main.cRateOld - main.cMarginOld END
  329. ,main.pRateOld
  330. ,main.pMarginOld
  331. ,main.pMaxOld
  332. ,main.pMinOld
  333. ,pOfferOld = CASE WHEN main.factorOld = ''M'' THEN main.pRateOld - main.pMarginOld ELSE main.pRateOld + main.pMarginOld END
  334. ,main.isEnableOld
  335. ,main.factorNew
  336. ,factorNameNew = CASE WHEN main.factorNew = ''M'' THEN ''MUL'' ELSE ''DIV'' END
  337. ,main.cRateNew
  338. ,main.cMarginNew
  339. ,main.cMaxNew
  340. ,main.cMinNew
  341. ,cOfferNew = CASE WHEN main.factorNew = ''M'' THEN main.cRateNew + main.cMarginNew ELSE main.cRateNew - main.cMarginNew END
  342. ,main.pRateNew
  343. ,main.pMarginNew
  344. ,main.pMaxNew
  345. ,main.pMinNew
  346. ,pOfferNew = CASE WHEN main.factorNew = ''M'' THEN main.pRateNew - main.pMarginNew ELSE main.pRateNew + main.pMarginNew END
  347. ,cOperationType = c.operationType
  348. ,main.isEnableNew
  349. ,modType = CASE WHEN main.modType = ''I'' THEN ''Insert'' WHEN main.modType = ''U'' THEN ''Update'' END
  350. ,main.modifiedBy
  351. ,main.hasChanged
  352. FROM ' + @m + ' main
  353. LEFT JOIN currencyMaster curr ON main.currency = curr.currencyCode
  354. LEFT JOIN countryMaster c ON main.country = c.countryId
  355. LEFT JOIN agentMaster am WITH(NOLOCK) ON main.agent = am.agentId
  356. LEFT JOIN serviceTypeMaster stm WITH(NOLOCK) ON main.tranType = stm.serviceTypeId
  357. WHERE 1=1 AND main.hasChanged = ''Y''
  358. '
  359. IF @setupType IS NOT NULL
  360. SET @table = @table + ' AND setupType = ''' + @setupType + ''''
  361. SET @table = @table + ') x'
  362. SET @sql_filter = ''
  363. --SET @sql_filter = @sql_filter + ' AND ISNULL(isDeleted, '''') <> ''Y'''
  364. IF @hasChanged IS NOT NULL
  365. SET @sql_filter = @sql_filter + ' AND hasChanged = ''' + @hasChanged +''''
  366. IF @currency IS NOT NULL
  367. SET @sql_filter = @sql_filter + ' AND currency = ''' + @currency + ''''
  368. IF @country IS NOT NULL
  369. SET @sql_filter = @sql_filter + ' AND country = ' + CAST(@country AS VARCHAR(50))
  370. IF @countryName IS NOT NULL
  371. SET @sql_filter = @sql_filter + ' AND countryName LIKE ''%' + @countryName + '%'''
  372. IF @agent IS NOT NULL
  373. SET @sql_filter = @sql_filter + ' AND agent = ' + CAST(@agent AS VARCHAR(50))
  374. IF @agentName IS NOT NULL
  375. SET @sql_filter = @sql_filter + ' AND agentName LIKE ''%' + @agentName + '%'''
  376. IF @baseCurrency IS NOT NULL
  377. SET @sql_filter = @sql_filter + ' AND baseCurrency = ''' + @baseCurrency + ''''
  378. SET @select_field_list = '
  379. defExRateId
  380. ,currency
  381. ,currencyName
  382. ,country
  383. ,countryName
  384. ,agent
  385. ,agentName
  386. ,baseCurrency
  387. ,tranType
  388. ,tranTypeName
  389. ,factorOld
  390. ,factorNameOld
  391. ,cRateOld
  392. ,cMarginOld
  393. ,cMaxOld
  394. ,cMinOld
  395. ,cOfferOld
  396. ,pRateOld
  397. ,pMarginOld
  398. ,pMaxOld
  399. ,pMinOld
  400. ,pOfferOld
  401. ,isEnableOld
  402. ,factorNew
  403. ,factorNameNew
  404. ,cRateNew
  405. ,cMarginNew
  406. ,cMaxNew
  407. ,cMinNew
  408. ,cOfferNew
  409. ,pRateNew
  410. ,pMarginNew
  411. ,pMaxNew
  412. ,pMinNew
  413. ,pOfferNew
  414. ,cOperationType
  415. ,isEnableNew
  416. ,modType
  417. ,modifiedBy
  418. ,hasChanged
  419. '
  420. EXEC dbo.proc_paging
  421. @table
  422. ,@sql_filter
  423. ,@select_field_list
  424. ,@extra_field_list
  425. ,@sortBy
  426. ,@sortOrder
  427. ,@pageSize
  428. ,@pageNumber
  429. END
  430. IF @flag IN ('i', 'u')
  431. BEGIN
  432. DECLARE @tolCMax FLOAT, @tolCMin FLOAT, @tolPMax FLOAT, @tolPMin FLOAT, @errorMsg VARCHAR(200), @id INT
  433. IF(ISNULL(@defExRateId, 0) <> 0)
  434. SELECT @currency = currency, @tranType = tranType FROM defExRate WITH(NOLOCK) WHERE defExRateId = @defExRateId
  435. IF NOT EXISTS(SELECT 'X' FROM rateMask WITH(NOLOCK) WHERE currency = @currency)
  436. BEGIN
  437. SET @msg = 'Please define rate mask for currency ' + @currency
  438. EXEC proc_errorHandler 1, @msg, NULL
  439. RETURN
  440. END
  441. SELECT
  442. @tolCMax = ISNULL(cMax, 0.0)
  443. ,@tolCMin = ISNULL(cMin, 0.0)
  444. ,@tolPMax = ISNULL(pMax, 0.0)
  445. ,@tolPMin = ISNULL(pMin, 0.0)
  446. FROM rateMask WITH(NOLOCK)
  447. WHERE currency = @currency
  448. IF(@factor = 'M')
  449. BEGIN
  450. --Collection
  451. --Upward Max/Min Rate Checking------------------------------------------
  452. IF((@cRate + ISNULL(@cMargin, 0)) > @tolCMax)
  453. BEGIN
  454. SET @errorMsg = 'Collection Offer Rate exceeds Max tolerance Rate. Collection Offer must lie between ' + CAST(@tolCMin AS VARCHAR) + ' AND ' + CAST(@tolCMax AS VARCHAR)
  455. EXEC proc_errorHandler 1, @errorMsg, NULL
  456. RETURN
  457. END
  458. IF((@cRate + ISNULL(@cMargin, 0)) < @tolCMin)
  459. BEGIN
  460. SET @errorMsg = 'Collection Offer Rate exceeds Min tolerance Rate. Collection Offer must lie between ' + CAST(@tolCMin AS VARCHAR) + ' AND ' + CAST(@tolCMax AS VARCHAR)
  461. EXEC proc_errorHandler 1, @errorMsg, NULL
  462. RETURN
  463. END
  464. --Payment
  465. --Upward Max/Min Rate Checking------------------------------------------
  466. IF((@pRate - ISNULL(@pMargin, 0)) > @tolPMax)
  467. BEGIN
  468. SET @errorMsg = 'Payment Offer Rate exceeds Max tolerance Rate. Payment Offer must lie between ' + CAST(@tolPMin AS VARCHAR) + ' AND ' + CAST(@tolPMax AS VARCHAR)
  469. EXEC proc_errorHandler 1, @errorMsg, NULL
  470. RETURN
  471. END
  472. IF((@pRate - ISNULL(@pMargin, 0)) < @tolPMin)
  473. BEGIN
  474. SET @errorMsg = 'Payment Offer Rate exceeds Min tolerance Rate. Payment Offer must lie between ' + CAST(@tolPMin AS VARCHAR) + ' AND ' + CAST(@tolPMax AS VARCHAR)
  475. EXEC proc_errorHandler 1, @errorMsg, NULL
  476. RETURN
  477. END
  478. END
  479. ELSE IF(@factor = 'D')
  480. BEGIN
  481. --Collection
  482. --Upward Max/Min Rate Checking------------------------------------------
  483. IF((@cRate - @cMargin) > @tolCMax)
  484. BEGIN
  485. SET @errorMsg = 'Collection Offer Rate exceeds Max tolerance Rate. Collection Offer must lie between ' + CAST(@tolCMin AS VARCHAR) + ' AND ' + CAST(@tolCMax AS VARCHAR)
  486. EXEC proc_errorHandler 1, @errorMsg, NULL
  487. RETURN
  488. END
  489. IF((@cRate - @cMargin) < @tolCMin)
  490. BEGIN
  491. SET @errorMsg = 'Collection Offer Rate exceeds Min tolerance Rate. Collection Offer must lie between ' + CAST(@tolCMin AS VARCHAR) + ' AND ' + CAST(@tolCMax AS VARCHAR)
  492. EXEC proc_errorHandler 1, @errorMsg, NULL
  493. RETURN
  494. END
  495. --Payment
  496. --Upward Max/Min Rate Checking------------------------------------------
  497. IF((@pRate + @pMargin) > @tolPMax)
  498. BEGIN
  499. SET @errorMsg = 'Payment Offer Rate exceeds Max tolerance Rate. Payment Offer must lie between ' + CAST(@tolPMin AS VARCHAR) + ' AND ' + CAST(@tolPMax AS VARCHAR)
  500. EXEC proc_errorHandler 1, @errorMsg, NULL
  501. RETURN
  502. END
  503. IF((@pRate + @pMargin) < @tolPMin)
  504. BEGIN
  505. SET @errorMsg = 'Payment Offer Rate exceeds Min tolerance Rate. Payment Offer must lie between ' + CAST(@tolPMin AS VARCHAR) + ' AND ' + CAST(@tolPMax AS VARCHAR)
  506. EXEC proc_errorHandler 1, @errorMsg, NULL
  507. RETURN
  508. END
  509. END
  510. END
  511. IF @flag = 'i'
  512. BEGIN
  513. IF EXISTS(SELECT 'X' FROM defExRate WHERE @setupType = 'CU' AND ISNULL(tranType, 0) = ISNULL(@tranType, 0) AND currency = @currency AND ISNULL(isDeleted, 'N') = 'N')
  514. BEGIN
  515. EXEC proc_errorHandler 1, 'Record already exists', NULL
  516. RETURN
  517. END
  518. IF EXISTS(SELECT 'X' FROM defExRate WHERE @setupType = 'CO' AND ISNULL(tranType, 0) = ISNULL(@tranType, 0) AND currency = @currency AND country = @country AND ISNULL(isDeleted, 'N') = 'N')
  519. BEGIN
  520. EXEC proc_errorHandler 1, 'Record already exists', NULL
  521. RETURN
  522. END
  523. IF EXISTS(SELECT 'X' FROM defExRate WHERE @setupType = 'AG' AND ISNULL(tranType, 0) = ISNULL(@tranType, 0) AND currency = @currency AND country = @country AND ISNULL(agent, 0) = ISNULL(@agent, 0) AND ISNULL(isDeleted, 'N') = 'N')
  524. BEGIN
  525. EXEC proc_errorHandler 1, 'Record already exists', NULL
  526. RETURN
  527. END
  528. IF EXISTS(SELECT 'X' FROM defExRate WHERE agent = @agent AND country = @country)
  529. BEGIN
  530. EXEC proc_errorHandler 1, 'Record already exists', @defExRateId
  531. RETURN
  532. END
  533. BEGIN TRANSACTION
  534. INSERT INTO defExRate (
  535. setupType
  536. ,currency
  537. ,country
  538. ,agent
  539. ,baseCurrency
  540. ,tranType
  541. ,factor
  542. ,cRate
  543. ,cMargin
  544. ,cMax
  545. ,cMin
  546. ,pRate
  547. ,pMargin
  548. ,pMax
  549. ,pMin
  550. ,isEnable
  551. ,isActive
  552. ,createdBy
  553. ,createdDate
  554. ,approvedBy
  555. ,approvedDate
  556. )
  557. SELECT
  558. @setupType
  559. ,@currency
  560. ,@country
  561. ,@agent
  562. ,@baseCurrency
  563. ,@tranType
  564. ,@factor
  565. ,ISNULL(@cRate, 0)
  566. ,ISNULL(@cMargin, 0)
  567. ,@cMax
  568. ,@cMin
  569. ,ISNULL(@pRate, 0)
  570. ,ISNULL(@pMargin, 0)
  571. ,@pMax
  572. ,@pMin
  573. ,@isEnable
  574. ,'Y'
  575. ,@user
  576. ,GETDATE()
  577. ,@user
  578. ,GETDATE()
  579. SET @defExRateId = SCOPE_IDENTITY()
  580. IF @agent IS NOT NULL
  581. BEGIN
  582. IF EXISTS(SELECT 'X' FROM exRateTreasury WITH(NOLOCK) WHERE cAgent = @agent)
  583. BEGIN
  584. SET @cMargin = ISNULL(@cMargin, 0)
  585. IF EXISTS(SELECT 'X' FROM exRateTreasury WITH(NOLOCK) WHERE cAgent = @agent AND approvedBy IS NULL)
  586. BEGIN
  587. UPDATE exRateTreasury SET
  588. cRateId = @defExRateId
  589. ,cRate = @cRate
  590. ,cMargin = @cMargin
  591. ,isUpdated = 'Y'
  592. WHERE cCurrency = @currency
  593. AND cCountry = @country
  594. AND cAgent = @agent AND approvedBy IS NULL
  595. END
  596. IF EXISTS(SELECT 'X' FROM exRateTreasury WITH(NOLOCK) WHERE cAgent = @agent AND approvedBy IS NOT NULL)
  597. BEGIN
  598. DELETE FROM exRateTreasuryMod
  599. WHERE cCurrency = @currency
  600. AND cCountry = @country
  601. AND cAgent = @agent
  602. INSERT INTO exRateTreasuryMod(
  603. exRateTreasuryId
  604. ,cRateId,cCurrency,cCountry,cAgent,cRateFactor,cRate,cMargin,cHoMargin,cAgentMargin
  605. ,pRateId,pCurrency,pCountry,pAgent,pRateFactor,pRate,pMargin,pHoMargin,pAgentMargin
  606. ,sharingType
  607. ,sharingValue
  608. ,toleranceOn
  609. ,agentTolMin
  610. ,agentTolMax
  611. ,customerTolMin
  612. ,customerTolMax
  613. ,crossRate
  614. ,customerRate
  615. ,maxCrossRate
  616. ,tolerance
  617. ,crossRateFactor
  618. ,isActive
  619. ,modType,createdBy,createdDate
  620. )
  621. SELECT
  622. exRateTreasuryId
  623. ,@defExRateId,ert.cCurrency,cCountry,cAgent,cRateFactor,@cRate,@cMargin,cHoMargin,cAgentMargin
  624. ,ert.pRateId,ert.pCurrency,pCountry,pAgent,pRateFactor,pRate,pMargin,pHoMargin,pAgentMargin
  625. ,ert.sharingType
  626. ,ert.sharingValue
  627. ,ert.toleranceOn
  628. ,ert.agentTolMin
  629. ,ert.agentTolMax
  630. ,ert.customerTolMin
  631. ,ert.customerTolMax
  632. ,ROUND((pRate - pMargin - pHoMargin)/(@cRate + @cMargin + cHoMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  633. ,ROUND((pRate - pMargin - pHoMargin - pAgentMargin)/(@cRate + @cMargin + cHoMargin + cAgentMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  634. ,ROUND(pRate/@cRate, dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  635. ,tolerance
  636. ,crossRateFactor
  637. ,isActive
  638. ,'U',@user,GETDATE()
  639. FROM exRateTreasury ert WITH(NOLOCK)
  640. WHERE ert.cCurrency = @currency
  641. AND ert.cCountry = @country
  642. AND cAgent = @agent AND ert.approvedBy IS NOT NULL
  643. UPDATE exRateTreasury SET
  644. isUpdated = 'Y'
  645. WHERE cCurrency = @currency
  646. AND cCountry = @country
  647. AND cAgent = @agent AND approvedBy IS NOT NULL
  648. END
  649. END
  650. IF EXISTS(SELECT 'X' FROM exRateTreasury WITH(NOLOCK) WHERE pAgent = @agent)
  651. BEGIN
  652. SET @pMargin = ISNULL(@pMargin, 0)
  653. IF EXISTS(SELECT 'X' FROM exRateTreasury WITH(NOLOCK) WHERE pAgent = @agent AND approvedBy IS NULL)
  654. BEGIN
  655. UPDATE exRateTreasury SET
  656. pRateId = @defExRateId
  657. ,pRate = @cRate
  658. ,pMargin = @cMargin
  659. ,isUpdated = 'Y'
  660. WHERE pCurrency = @currency
  661. AND pCountry = @country
  662. AND pAgent = @agent AND approvedBy IS NULL
  663. END
  664. IF EXISTS(SELECT 'X' FROM exRateTreasury WITH(NOLOCK) WHERE pAgent = @agent AND approvedBy IS NOT NULL)
  665. BEGIN
  666. DELETE FROM exRateTreasuryMod
  667. WHERE pCurrency = @currency
  668. AND pCountry = @country
  669. AND pAgent = @agent
  670. INSERT INTO exRateTreasuryMod(
  671. exRateTreasuryId
  672. ,cRateId,cCurrency,cCountry,cAgent,cRateFactor,cRate,cMargin,cHoMargin,cAgentMargin
  673. ,pRateId,pCurrency,pCountry,pAgent,pRateFactor,pRate,pMargin,pHoMargin,pAgentMargin
  674. ,sharingType
  675. ,sharingValue
  676. ,toleranceOn
  677. ,agentTolMin
  678. ,agentTolMax
  679. ,customerTolMin
  680. ,customerTolMax
  681. ,crossRate
  682. ,customerRate
  683. ,maxCrossRate
  684. ,tolerance
  685. ,crossRateFactor
  686. ,isActive
  687. ,modType,createdBy,createdDate
  688. )
  689. SELECT
  690. exRateTreasuryId
  691. ,ert.cRateId,ert.cCurrency,cCountry,cAgent,cRateFactor,cRate,cMargin,cHoMargin,cAgentMargin
  692. ,@defExRateId,ert.pCurrency,pCountry,pAgent,pRateFactor,@pRate,@pMargin,pHoMargin,pAgentMargin
  693. ,ert.sharingType
  694. ,ert.sharingValue
  695. ,ert.toleranceOn
  696. ,ert.agentTolMin
  697. ,ert.agentTolMax
  698. ,ert.customerTolMin
  699. ,ert.customerTolMax
  700. ,ROUND((@pRate - @pMargin - pHoMargin)/(cRate + cMargin + cHoMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  701. ,ROUND((@pRate - @pMargin - pHoMargin - pAgentMargin)/(cRate + cMargin + cHoMargin + cAgentMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  702. ,ROUND(@pRate/cRate, dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  703. ,tolerance
  704. ,crossRateFactor
  705. ,isActive
  706. ,'U',@user,GETDATE()
  707. FROM exRateTreasury ert WITH(NOLOCK)
  708. WHERE ert.pCurrency = @currency
  709. AND ert.pCountry = @country
  710. AND pAgent = @agent AND ert.approvedBy IS NOT NULL
  711. UPDATE exRateTreasury SET
  712. isUpdated = 'Y'
  713. WHERE pCurrency = @currency
  714. AND pCountry = @country
  715. AND pAgent = @agent AND approvedBy IS NOT NULL
  716. END
  717. END
  718. END
  719. IF @@TRANCOUNT > 0
  720. COMMIT TRANSACTION
  721. EXEC proc_errorHandler 0, 'Record has been added successfully.', @defExRateId
  722. END
  723. ELSE IF @flag = 'a'
  724. BEGIN
  725. IF EXISTS (
  726. SELECT 'X' FROM defExRateHistory WITH(NOLOCK)
  727. WHERE defExRateId = @defExRateId AND createdBy = @user AND approvedBy IS NULL
  728. )
  729. BEGIN
  730. SELECT
  731. mode.*
  732. FROM defExRateHistory mode WITH(NOLOCK)
  733. INNER JOIN defExRate main WITH(NOLOCK) ON mode.defExRateId = main.defExRateId
  734. WHERE mode.defExRateId= @defExRateId AND mode.approvedBy IS NULL
  735. END
  736. ELSE
  737. BEGIN
  738. SELECT * FROM defExRate WITH(NOLOCK) WHERE defExRateId = @defExRateId
  739. END
  740. END
  741. ELSE IF @flag = 'u'
  742. BEGIN
  743. /*
  744. IF EXISTS (
  745. SELECT 'X' FROM defExRate WITH(NOLOCK)
  746. WHERE defExRateId = @defExRateId AND ( createdBy <> @user AND approvedBy IS NULL)
  747. )
  748. BEGIN
  749. EXEC proc_errorHandler 1, 'You can not modify this record. Previous modification has not been approved yet.', @defExRateId
  750. RETURN
  751. END
  752. IF EXISTS (
  753. SELECT 'X' FROM defExRateHistory WITH(NOLOCK)
  754. WHERE defExRateId = @defExRateId AND (createdBy<> @user OR modType = 'D') AND approvedBy IS NULL
  755. )
  756. BEGIN
  757. EXEC proc_errorHandler 1, 'You can not modify this record. Previous modification has not been approved yet.', @defExRateId
  758. RETURN
  759. END
  760. IF EXISTS(SELECT 'X' FROM exRateTreasury WITH(NOLOCK) WHERE (cRateId = @defExRateId OR pRateId = @defExRateId) AND approvedBy IS NULL AND createdBy <> @user)
  761. BEGIN
  762. EXEC proc_errorHandler 1, 'You can not modify this record. Previous modification has not been approved yet.', @defExRateId
  763. RETURN
  764. END
  765. IF EXISTS(SELECT 'X' FROM exRateTreasuryMod WITH(NOLOCK) WHERE (cRateId = @defExRateId OR pRateId = @defExRateId) AND createdBy <> @user)
  766. BEGIN
  767. EXEC proc_errorHandler 1, 'You can not modify this record. Previous modification has not been approved yet.', @defExRateId
  768. RETURN
  769. END
  770. */
  771. DECLARE @isCRateUpdate CHAR(1) = 'N', @isPRateUpdate CHAR(1) = 'N'
  772. IF NOT EXISTS(SELECT 'X' FROM defExRate WITH(NOLOCK) WHERE defExRateId = @defExRateId AND cRate = @cRate)
  773. BEGIN
  774. SET @isCRateUpdate = 'Y'
  775. END
  776. IF NOT EXISTS(SELECT 'X' FROM defExRate WITH(NOLOCK) WHERE defExRateId = @defExRateId AND cMargin = @cMargin)
  777. BEGIN
  778. SET @isCRateUpdate = 'Y'
  779. END
  780. IF NOT EXISTS(SELECT 'X' FROM defExRate WITH(NOLOCK) WHERE defExRateId = @defExRateId AND pRate = @pRate)
  781. BEGIN
  782. SET @isPRateUpdate = 'Y'
  783. END
  784. IF NOT EXISTS(SELECT 'X' FROM defExRate WITH(NOLOCK) WHERE defExRateId = @defExRateId AND pMargin = @pMargin)
  785. BEGIN
  786. SET @isPRateUpdate = 'Y'
  787. END
  788. SELECT
  789. @setupType = setupType
  790. ,@currency = currency
  791. ,@country = country
  792. ,@agent = agent
  793. FROM defExRate WITH(NOLOCK) WHERE defExRateId = @defExRateId
  794. BEGIN TRANSACTION
  795. --Currency Rate/ Agent Rate Update------------------------------------------------------------------------------------
  796. UPDATE defExRate SET
  797. factor = @factor
  798. ,cRate = ISNULL(@cRate, 0)
  799. ,cMargin = ISNULL(@cMargin, 0)
  800. ,cMax = @cMax
  801. ,cMin = @cMin
  802. ,pRate = ISNULL(@pRate, 0)
  803. ,pMargin = ISNULL(@pMargin, 0)
  804. ,pMax = @pMax
  805. ,pMin = @pMin
  806. ,isEnable = @isEnable
  807. ,modifiedBy = @user
  808. ,modifiedDate = GETDATE()
  809. WHERE defExRateId = @defExRateId
  810. --Change Record History-----------------------------------------------------------------------------------------------
  811. INSERT INTO defExRateHistory(
  812. defExRateId
  813. ,setupType
  814. ,currency,country,agent,baseCurrency,tranType,factor
  815. ,cRate,cMargin,cMax,cMin
  816. ,pRate,pMargin,pMax,pMin
  817. ,isEnable,createdBy,createdDate,approvedBy,approvedDate,modType
  818. )
  819. SELECT
  820. @defExRateId
  821. ,main.setupType
  822. ,main.currency,main.country,main.agent,main.baseCurrency,main.tranType,@factor
  823. ,@cRate,@cMargin,@cMax,@cMin
  824. ,@pRate,@pMargin,@pMax,@pMin
  825. ,@isEnable,@user,GETDATE(),@user,GETDATE(),'U'
  826. FROM defExRate main WITH(NOLOCK) WHERE defExRateId = @defExRateId
  827. IF @isCRateUpdate = 'Y'
  828. BEGIN
  829. SET @cMargin = ISNULL(@cMargin, 0)
  830. --1. Get All Corridor records affected by send cost rate change
  831. DELETE FROM #exRateIdTempMain
  832. INSERT INTO #exRateIdTempMain
  833. SELECT exRateTreasuryId FROM exRateTreasury WITH(NOLOCK) WHERE cRateId = @defExRateId
  834. --2. Update Records in Mod Table if data already exist in mod table
  835. IF EXISTS(SELECT 'X' FROM exRateTreasuryMod mode WITH(NOLOCK) INNER JOIN #exRateIdTempMain temp ON mode.exRateTreasuryId = temp.exRateTreasuryId)
  836. BEGIN
  837. DELETE FROM #exRateIdTempMod
  838. INSERT INTO #exRateIdTempMod
  839. SELECT mode.exRateTreasuryId FROM exRateTreasuryMod mode WITH(NOLOCK)
  840. INNER JOIN #exRateIdTempMain temp ON mode.exRateTreasuryId = temp.exRateTreasuryId
  841. UPDATE ert SET
  842. cRate = @cRate
  843. ,cMargin = @cMargin
  844. ,maxCrossRate = ROUND(def.pRate/@cRate, dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  845. ,crossRate = ROUND((def.pRate - def.pMargin - pHoMargin)/(@cRate + @cMargin + cHoMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  846. ,customerRate = CASE WHEN ISNULL(toleranceOn, '') IN ('S', 'P', '') THEN
  847. ROUND((def.pRate - def.pMargin - pHoMargin - pAgentMargin)/(@cRate + @cMargin + cHoMargin + cAgentMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  848. WHEN ISNULL(toleranceOn, '') IN ('C') THEN
  849. ROUND((def.pRate - def.pMargin - pHoMargin)/(@cRate + @cMargin + cHoMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency)) - ISNULL(agentCrossRateMargin, 0)
  850. END
  851. ,createdBy = @user
  852. ,createdDate = GETDATE()
  853. FROM exRateTreasuryMod ert
  854. INNER JOIN defExRate def ON ert.pRateId = def.defExRateId
  855. INNER JOIN #exRateIdTempMod temp ON ert.exRateTreasuryId = temp.exRateTreasuryId
  856. END
  857. --3. Update Record in main table for modType Insert.
  858. UPDATE ert SET
  859. cRate = @cRate
  860. ,cMargin = @cMargin
  861. ,maxCrossRate = ROUND(def.pRate/@cRate, dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  862. ,crossRate = ROUND((def.pRate - def.pMargin - pHoMargin)/(@cRate + @cMargin + cHoMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  863. --,customerRate = ROUND((def.pRate - def.pMargin - pHoMargin - pAgentMargin)/(@cRate + @cMargin + cHoMargin + cAgentMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  864. ,customerRate = CASE WHEN ISNULL(toleranceOn, '') IN ('S', 'P', '') THEN
  865. ROUND((def.pRate - def.pMargin - pHoMargin - pAgentMargin)/(@cRate + @cMargin + cHoMargin + cAgentMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  866. WHEN ISNULL(toleranceOn, '') IN ('C') THEN
  867. ROUND((def.pRate - def.pMargin - pHoMargin)/(@cRate + @cMargin + cHoMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency)) - ISNULL(agentCrossRateMargin, 0)
  868. END
  869. ,createdBy = @user
  870. ,createdDate = GETDATE()
  871. FROM exRateTreasury ert
  872. INNER JOIN defExRate def ON ert.pRateId = def.defExRateId
  873. WHERE cRateId = @defExRateId AND ert.approvedBy IS NULL
  874. --4. Insert records in mod table for modType Update.
  875. INSERT INTO exRateTreasuryMod(
  876. exRateTreasuryId
  877. ,cRateId,cCurrency,cCountry,cAgent,cRateFactor,cRate,cMargin,cHoMargin,cAgentMargin
  878. ,pRateId,pCurrency,pCountry,pAgent,pRateFactor,pRate,pMargin,pHoMargin,pAgentMargin
  879. ,sharingType
  880. ,sharingValue
  881. ,toleranceOn
  882. ,agentTolMin
  883. ,agentTolMax
  884. ,customerTolMin
  885. ,customerTolMax
  886. ,crossRate
  887. ,customerRate
  888. ,maxCrossRate
  889. ,agentCrossRateMargin
  890. ,tolerance
  891. ,crossRateFactor
  892. ,isActive
  893. ,modType,createdBy,createdDate
  894. )
  895. SELECT
  896. exRateTreasuryId
  897. ,ert.cRateId,ert.cCurrency,cCountry,cAgent,cRateFactor,@cRate,@cMargin,cHoMargin,cAgentMargin
  898. ,ert.pRateId,ert.pCurrency,pCountry,pAgent,pRateFactor,def.pRate,def.pMargin,pHoMargin,pAgentMargin
  899. ,ert.sharingType
  900. ,ert.sharingValue
  901. ,ert.toleranceOn
  902. ,ert.agentTolMin
  903. ,ert.agentTolMax
  904. ,ert.customerTolMin
  905. ,ert.customerTolMax
  906. ,ROUND((def.pRate - def.pMargin - pHoMargin)/(@cRate + @cMargin + cHoMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  907. ,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))
  908. 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
  909. ,ROUND(def.pRate/@cRate, dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  910. ,ert.agentCrossRateMargin
  911. ,tolerance
  912. ,crossRateFactor
  913. ,ert.isActive
  914. ,'U',@user,GETDATE()
  915. FROM exRateTreasury ert WITH(NOLOCK)
  916. INNER JOIN defExRate def WITH(NOLOCK) ON ert.pRateId = def.defExRateId
  917. WHERE ert.cRateId = @defExRateId AND ert.approvedBy IS NOT NULL AND ISNULL(ert.isActive, 'N') = 'Y'
  918. AND ert.exRateTreasuryId NOT IN (SELECT exRateTreasuryId FROM #exRateIdTempMod)
  919. --5. Mark Records as "has been updated"-----------------------------------------------------------------
  920. UPDATE exRateTreasury SET
  921. isUpdated = 'Y'
  922. WHERE cRateId = @defExRateId AND approvedBy IS NOT NULL AND ISNULL(isActive, 'N') = 'Y'
  923. AND exRateTreasuryId NOT IN (SELECT exRateTreasuryId FROM #exRateIdTempMod)
  924. END
  925. IF @isPRateUpdate = 'Y'
  926. BEGIN
  927. SET @pMargin = ISNULL(@pMargin, 0)
  928. --1. Get All Corridor records affected by receive cost rate change
  929. DELETE FROM #exRateIdTempMain
  930. INSERT INTO #exRateIdTempMain
  931. SELECT exRateTreasuryId FROM exRateTreasury WITH(NOLOCK) WHERE pRateId = @defExRateId
  932. --2. Update Records in Mod Table if data already exist in mod table
  933. IF EXISTS(SELECT 'X' FROM exRateTreasuryMod mode WITH(NOLOCK) INNER JOIN #exRateIdTempMain temp ON mode.exRateTreasuryId = temp.exRateTreasuryId)
  934. BEGIN
  935. DELETE FROM #exRateIdTempMod
  936. INSERT INTO #exRateIdTempMod
  937. SELECT mode.exRateTreasuryId FROM exRateTreasuryMod mode WITH(NOLOCK)
  938. INNER JOIN #exRateIdTempMain temp ON mode.exRateTreasuryId = temp.exRateTreasuryId
  939. UPDATE ert SET
  940. pRate = @pRate
  941. ,pMargin = @pMargin
  942. ,maxCrossRate = ROUND(@pRate/def.cRate, dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  943. ,crossRate = ROUND((@pRate - @pMargin - pHoMargin)/(def.cRate + def.cMargin + cHoMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  944. ,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))
  945. 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
  946. ,createdBy = @user
  947. ,createdDate = GETDATE()
  948. FROM exRateTreasuryMod ert
  949. INNER JOIN defExRate def ON ert.cRateId = def.defExRateId
  950. INNER JOIN #exRateIdTempMod temp ON ert.exRateTreasuryId = temp.exRateTreasuryId
  951. END
  952. --3. Update Record in main table for modType Insert.
  953. UPDATE ert SET
  954. cRate = @cRate
  955. ,cMargin = @cMargin
  956. ,maxCrossRate = ROUND(@pRate/def.cRate, dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  957. ,crossRate = ROUND((@pRate - @pMargin - pHoMargin)/(def.cRate + def.cMargin + cHoMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  958. --,customerRate = ROUND((@pRate - @pMargin - pHoMargin - pAgentMargin)/(def.cRate + def.cMargin + cHoMargin + cAgentMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  959. ,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))
  960. 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
  961. ,createdBy = @user
  962. ,createdDate = GETDATE()
  963. FROM exRateTreasury ert
  964. INNER JOIN defExRate def ON ert.cRateId = def.defExRateId
  965. WHERE pRateId = @defExRateId AND ert.approvedBy IS NULL
  966. INSERT INTO exRateTreasuryMod(
  967. exRateTreasuryId
  968. ,cRateId,cCurrency,cCountry,cAgent,cRateFactor,cRate,cMargin,cHoMargin,cAgentMargin
  969. ,pRateId,pCurrency,pCountry,pAgent,pRateFactor,pRate,pMargin,pHoMargin,pAgentMargin
  970. ,sharingType
  971. ,sharingValue
  972. ,toleranceOn
  973. ,agentTolMin
  974. ,agentTolMax
  975. ,customerTolMin
  976. ,customerTolMax
  977. ,crossRate
  978. ,customerRate
  979. ,maxCrossRate
  980. ,agentCrossRateMargin
  981. ,tolerance
  982. ,crossRateFactor
  983. ,isActive
  984. ,modType,createdBy,createdDate
  985. )
  986. SELECT
  987. exRateTreasuryId
  988. ,ert.cRateId,ert.cCurrency,cCountry,cAgent,cRateFactor,def.cRate,def.cMargin,cHoMargin,cAgentMargin
  989. ,ert.pRateId,ert.pCurrency,pCountry,pAgent,pRateFactor,@pRate,@pMargin,pHoMargin,pAgentMargin
  990. ,ert.sharingType
  991. ,ert.sharingValue
  992. ,ert.toleranceOn
  993. ,ert.agentTolMin
  994. ,ert.agentTolMax
  995. ,ert.customerTolMin
  996. ,ert.customerTolMax
  997. ,ROUND((@pRate - @pMargin - pHoMargin)/(def.cRate + def.cMargin + cHoMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  998. ,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))
  999. 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
  1000. ,ROUND(@pRate/def.cRate, dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency))
  1001. ,ert.agentCrossRateMargin
  1002. ,tolerance
  1003. ,crossRateFactor
  1004. ,ert.isActive
  1005. ,'U',@user,GETDATE()
  1006. FROM exRateTreasury ert WITH(NOLOCK)
  1007. INNER JOIN defExRate def WITH(NOLOCK) ON ert.cRateId = def.defExRateId
  1008. WHERE ert.pRateId = @defExRateId AND ert.approvedBy IS NOT NULL AND ISNULL(ert.isActive, 'N') = 'Y'
  1009. AND ert.exRateTreasuryId NOT IN (SELECT exRateTreasuryId FROM #exRateIdTempMod)
  1010. UPDATE exRateTreasury SET
  1011. isUpdated = 'Y'
  1012. WHERE pRateId = @defExRateId AND approvedBy IS NOT NULL AND ISNULL(isActive, 'N') = 'Y'
  1013. AND exRateTreasuryId NOT IN (SELECT exRateTreasuryId FROM #exRateIdTempMod)
  1014. SELECT @exRateMsg = 'IME Nepal ExRate for 1 USD = ' + CAST((@pRate - ISNULL(@pMargin, 0)) AS VARCHAR) + ' NPR as of date ' + CONVERT(VARCHAR, GETDATE(), 109) + ' (MST)'
  1015. SELECT @countryName = countryName FROM countryMaster WITH(NOLOCK) WHERE countryId = (SELECT country FROM defExRate WITH(NOLOCK) WHERE defExRateId = @defExRateId)
  1016. EXEC proc_emailSmsHandler @flag = 'sms', @user = @user, @msg = @exRateMsg, @country = @countryName
  1017. END
  1018. IF @@TRANCOUNT > 0
  1019. COMMIT TRANSACTION
  1020. EXEC proc_errorHandler 0, 'Record updated successfully.', @defExRateId
  1021. END
  1022. ELSE IF @flag = 'd'
  1023. BEGIN
  1024. IF EXISTS (
  1025. SELECT 'X' FROM defExRate WITH(NOLOCK)
  1026. WHERE defExRateId = @defExRateId AND (createdBy <> @user AND approvedBy IS NULL)
  1027. )
  1028. BEGIN
  1029. EXEC proc_errorHandler 1, '<center>You can not delete this record. <br /> You are trying to perform an illegal operation.</center>', @defExRateId
  1030. RETURN
  1031. END
  1032. IF EXISTS (
  1033. SELECT 'X' FROM defExRateHistory WITH(NOLOCK)
  1034. WHERE defExRateId = @defExRateId AND approvedBy IS NULL
  1035. )
  1036. BEGIN
  1037. EXEC proc_errorHandler 1, '<center>You can not delete this record. <br /> Previous modification has not been approved yet.</center>', @defExRateId
  1038. RETURN
  1039. END
  1040. IF EXISTS(SELECT 'X' FROM defExRate WITH(NOLOCK) WHERE defExRateId = @defExRateId AND createdBy = @user AND approvedBy IS NULL)
  1041. BEGIN
  1042. DELETE FROM defExRate WHERE defExRateId = @defExRateId
  1043. EXEC proc_errorHandler 0, 'Record deleted successfully.', @defExRateId
  1044. RETURN
  1045. END
  1046. INSERT INTO defExRateHistory(
  1047. defExRateId
  1048. ,currency
  1049. ,country
  1050. ,agent
  1051. ,baseCurrency
  1052. ,tranType
  1053. ,factor
  1054. ,cRate
  1055. ,cMargin
  1056. ,cMax
  1057. ,cMin
  1058. ,pRate
  1059. ,pMargin
  1060. ,pMax
  1061. ,pMin
  1062. ,isEnable
  1063. ,createdBy
  1064. ,createdDate
  1065. ,modType
  1066. )
  1067. SELECT
  1068. defExRateId
  1069. ,currency
  1070. ,country
  1071. ,agent
  1072. ,baseCurrency
  1073. ,tranType
  1074. ,factor
  1075. ,cRate
  1076. ,cMargin
  1077. ,cMax
  1078. ,cMin
  1079. ,pRate
  1080. ,pMargin
  1081. ,pMax
  1082. ,pMin
  1083. ,isEnable
  1084. ,@user
  1085. ,GETDATE()
  1086. ,'D'
  1087. FROM defExRate WHERE defExRateId = @defExRateId
  1088. EXEC proc_errorHandler 0, 'Record deleted successfully.', @defExRateId
  1089. END
  1090. ELSE IF @flag IN('reject')
  1091. BEGIN
  1092. IF(ISNULL(@defExRateIds, '') = '')
  1093. BEGIN
  1094. EXEC proc_errorHandler 1, 'Please select the record(s) to reject', NULL
  1095. RETURN
  1096. END
  1097. BEGIN TRANSACTION
  1098. SET @sql = 'SELECT defExRateId FROM defExRate WITH(NOLOCK) WHERE defExRateId IN (' + @defExRateIds + ')'
  1099. INSERT @rateIdList
  1100. EXEC (@sql)
  1101. WHILE EXISTS(SELECT 'X' FROM @rateIdList)
  1102. BEGIN
  1103. SELECT TOP 1 @defExRateId = defExRateId FROM @rateIdList
  1104. IF EXISTS (SELECT 'X' FROM defExRate WHERE approvedBy IS NULL AND defExRateId = @defExRateId)
  1105. BEGIN --New record
  1106. SET @modType = 'Reject'
  1107. EXEC [dbo].proc_GetColumnToRow @logParamMain, @logIdentifier, @defExRateId, @oldValue OUTPUT
  1108. INSERT INTO #msg(errorCode, msg, id)
  1109. EXEC proc_applicationLogs 'i', NULL, @modType, @tableAlias, @defExRateId, @user, @oldValue, @newValue
  1110. IF EXISTS (SELECT 'x' FROM #msg WHERE errorCode <> '0')
  1111. BEGIN
  1112. IF @@TRANCOUNT > 0
  1113. ROLLBACK TRANSACTION
  1114. EXEC proc_errorHandler 1, 'Failed to reject the transaction.', @defExRateId
  1115. RETURN
  1116. END
  1117. DELETE FROM defExRate WHERE defExRateId = @defExRateId
  1118. END
  1119. ELSE
  1120. BEGIN
  1121. SET @modType = 'Reject'
  1122. EXEC [dbo].proc_GetColumnToRow @logParamMain, @logIdentifier, @defExRateId, @oldValue OUTPUT
  1123. INSERT INTO #msg(errorCode, msg, id)
  1124. EXEC proc_applicationLogs 'i', NULL, @modType, @tableAlias, @defExRateId, @user, @oldValue, @newValue
  1125. IF EXISTS (SELECT 'x' FROM #msg WHERE errorCode <> '0')
  1126. BEGIN
  1127. IF @@TRANCOUNT > 0
  1128. ROLLBACK TRANSACTION
  1129. EXEC proc_errorHandler 1, 'Failed to reject the transaction.', @defExRateId
  1130. RETURN
  1131. END
  1132. DELETE FROM defExRateHistory WHERE defExRateId = @defExRateId AND approvedBy IS NULL
  1133. END
  1134. DELETE FROM @rateIdList WHERE defExRateId = @defExRateId
  1135. END
  1136. IF @@TRANCOUNT > 0
  1137. COMMIT TRANSACTION
  1138. EXEC proc_errorHandler 0, 'Changes rejected successfully.', @defExRateId
  1139. END
  1140. ELSE IF @flag IN ('approve')
  1141. BEGIN
  1142. --IF NOT EXISTS (
  1143. -- SELECT 'X' FROM defExRate WITH(NOLOCK)
  1144. -- WHERE defExRateId = @defExRateId
  1145. --)
  1146. --AND
  1147. --NOT EXISTS (
  1148. -- SELECT 'X' FROM defExRate WITH(NOLOCK)
  1149. -- WHERE defExRateId = @defExRateId AND approvedBy IS NULL
  1150. --)
  1151. --BEGIN
  1152. -- EXEC proc_errorHandler 1, 'Modification approval is not pending.', @defExRateId
  1153. -- RETURN
  1154. --END
  1155. IF(ISNULL(@defExRateIds, '') = '')
  1156. BEGIN
  1157. EXEC proc_errorHandler 1, 'Please select the record(s) to approve', NULL
  1158. RETURN
  1159. END
  1160. DECLARE @coCountry INT, @coAgent INT, @cocRate FLOAT, @cocMargin FLOAT, @copRate FLOAT, @copMargin FLOAT, @idCo INT, @idAg INT,
  1161. @agcMargin FLOAT, @agcRate FLOAT, @agpRate FLOAT, @agpMargin FLOAT, @cpFlag CHAR(1)
  1162. BEGIN TRANSACTION
  1163. SET @sql = 'SELECT defExRateId FROM defExRate WITH(NOLOCK) WHERE defExRateId IN (' + @defExRateIds + ')'
  1164. INSERT @rateIdList
  1165. EXEC (@sql)
  1166. WHILE EXISTS(SELECT 'X' FROM @rateIdList)
  1167. BEGIN
  1168. SELECT TOP 1 @defExRateId = defExRateId FROM @rateIdList
  1169. IF EXISTS (SELECT 'X' FROM defExRate WHERE approvedBy IS NULL AND defExRateId = @defExRateId )
  1170. SET @modType = 'I'
  1171. ELSE
  1172. SELECT @modType = modType FROM defExRateHistory WHERE defExRateId = @defExRateId AND approvedBy IS NULL
  1173. IF @modType = 'I'
  1174. BEGIN --New record
  1175. UPDATE defExRate SET
  1176. isActive = 'Y'
  1177. ,approvedBy = @user
  1178. ,approvedDate= GETDATE()
  1179. WHERE defExRateId = @defExRateId
  1180. SELECT
  1181. @currency = currency
  1182. ,@country = country
  1183. ,@agent = agent
  1184. ,@tranType = tranType
  1185. ,@factor = factor
  1186. ,@cRate = cRate
  1187. ,@cMargin = cMargin
  1188. ,@cMax = cMax
  1189. ,@cMin = cMin
  1190. ,@pRate = pRate
  1191. ,@pMargin = pMargin
  1192. ,@pMax = pMax
  1193. ,@pMin = pMin
  1194. FROM defExRateHistory WHERE defExRateId = @defExRateId AND approvedBy IS NULL
  1195. IF(@setupType = 'CO')
  1196. BEGIN
  1197. --1. Fetch Cost Rate from currency setup
  1198. SELECT
  1199. @cRate = CASE WHEN factor = 'M' THEN cRate + ISNULL(cMargin, 0) ELSE cRate - ISNULL(cMargin, 0) END
  1200. ,@pRate = CASE WHEN factor = 'M' THEN pRate - ISNULL(pMargin, 0) ELSE pRate + ISNULL(pMargin, 0) END
  1201. FROM defExRate WHERE ISNULL(isActive, 'N') = 'Y' AND setupType = 'CU' AND currency = @currency AND ISNULL(tranType, 0) = ISNULL(ISNULL(@tranType, tranType), 0)
  1202. --2. Update Country Rate
  1203. UPDATE defExRate SET
  1204. cRate = @cRate
  1205. ,pRate = @pRate
  1206. WHERE defExRateId = @defExRateId
  1207. --3. Update Agent Rate Setup according to corresponding country
  1208. UPDATE defExRate SET
  1209. cRate = CASE WHEN @factor = 'M' THEN @cRate + ISNULL(@cMargin, 0) ELSE @cRate - ISNULL(@cMargin, 0) END
  1210. ,pRate = CASE WHEN @factor = 'M' THEN @pRate - ISNULL(@pMargin, 0) ELSE @pRate + ISNULL(@pMargin, 0) END
  1211. WHERE setupType IN ('AG') AND currency = @currency AND country = @country AND ISNULL(tranType, 0) = ISNULL(ISNULL(@tranType, tranType), 0)
  1212. --4. Update Corridor Setup According to Corresponding Country
  1213. UPDATE spExRate SET
  1214. cRate = CASE WHEN cCountry = @country THEN
  1215. (
  1216. CASE WHEN @factor = 'M' THEN @cRate + ISNULL(@cMargin, 0) ELSE @cRate - ISNULL(@cMargin, 0) END
  1217. )
  1218. ELSE cRate END
  1219. ,pRate = CASE WHEN pCountry = @country THEN
  1220. (
  1221. CASE WHEN @factor = 'M' THEN @pRate - ISNULL(@pMargin, 0) ELSE @pRate + ISNULL(@pMargin, 0) END
  1222. )
  1223. ELSE pRate END
  1224. WHERE cCountry = @country OR pCountry = @country
  1225. /*
  1226. --Update Exchange Rate Treasury
  1227. DECLARE @crossRate FLOAT, @maxCrossRate FLOAT, @cost FLOAT, @margin FLOAT
  1228. UPDATE exRateTreasury SET
  1229. cRate = CASE WHEN @factor = 'M' THEN @cRate + ISNULL(@cMargin, 0) ELSE @cRate - ISNULL(@cMargin, 0) END
  1230. ,pRate = CASE WHEN @factor = 'M' THEN @pRate - ISNULL(@pMargin, 0) ELSE @pRate + ISNULL(@pMargin, 0) END
  1231. WHERE cCurrency = @currency AND ISNULL(cCountry, 0) = ISNULL(@country, 0)
  1232. */
  1233. --5. Update Corridor Setup According to Corresponding Agent
  1234. INSERT @rateIdListAg
  1235. SELECT defExRateId FROM defExRate WITH(NOLOCK) WHERE ISNULL(isActive, 'N') = 'Y' AND setupType = 'AG' AND currency = @currency AND country = @country
  1236. WHILE EXISTS(SELECT 'X' FROM @rateIdListAg)
  1237. BEGIN
  1238. SELECT TOP 1 @idAg = defExRateId FROM @rateIdListAg
  1239. SELECT @coAgent = agent, @agcRate = cRate, @agcMargin = cMargin, @agpRate = pRate, @agpMargin = pMargin FROM defExRate WHERE defExRateId = @idAg
  1240. UPDATE spExRate SET
  1241. cRate = CASE WHEN cAgent = @coAgent THEN
  1242. (
  1243. CASE WHEN @factor = 'M' THEN @cRate + ISNULL(@cMargin, 0) + ISNULL(@agcMargin, 0) ELSE @cRate - ISNULL(@cMargin, 0) - ISNULL(@agcMargin, 0) END
  1244. )
  1245. ELSE cRate END
  1246. ,pRate = CASE WHEN pAgent = @coAgent THEN
  1247. (
  1248. CASE WHEN @factor = 'M' THEN @pRate - ISNULL(@pMargin, 0) - ISNULL(@agpMargin, 0) ELSE @pRate + ISNULL(@pMargin, 0) + ISNULL(@agpMargin, 0) END
  1249. )
  1250. ELSE pRate END
  1251. WHERE cAgent = @coAgent OR pAgent = @coAgent
  1252. DELETE FROM @rateIdListAg WHERE defExRateId = @idAg
  1253. END
  1254. END
  1255. IF(@setupType = 'AG')
  1256. BEGIN
  1257. --4. Update Corridor Setup according to corresponding agent
  1258. UPDATE spExRate SET
  1259. cRate = CASE WHEN cAgent = @agent THEN
  1260. (
  1261. CASE WHEN @factor = 'M' THEN @cRate + ISNULL(@cMargin, 0) ELSE @cRate - ISNULL(@cMargin, 0) END
  1262. )
  1263. ELSE cRate END
  1264. ,pRate = CASE WHEN pAgent = @agent THEN
  1265. (
  1266. CASE WHEN @factor = 'M' THEN @pRate - ISNULL(@pMargin, 0) ELSE @pRate + ISNULL(@pMargin, 0) END
  1267. )
  1268. ELSE pRate END
  1269. WHERE cAgent = @agent OR pAgent = @agent
  1270. END
  1271. EXEC [dbo].proc_GetColumnToRow @logParamMain, @logIdentifier, @defExRateId, @newValue OUTPUT
  1272. END
  1273. ELSE IF @modType = 'U'
  1274. BEGIN
  1275. EXEC [dbo].proc_GetColumnToRow @logParamMain, @logIdentifier, @defExRateId, @oldValue OUTPUT
  1276. UPDATE main SET
  1277. main.factor = mode.factor
  1278. ,main.cRate = mode.cRate
  1279. ,main.cMargin = mode.cMargin
  1280. ,main.cMax = mode.cMax
  1281. ,main.cMin = mode.cMin
  1282. ,main.pRate = mode.pRate
  1283. ,main.pMargin = mode.pMargin
  1284. ,main.pMax = mode.pMax
  1285. ,main.pMin = mode.pMin
  1286. ,main.isEnable = mode.isEnable
  1287. ,main.modifiedBy = @user
  1288. ,main.modifiedDate = GETDATE()
  1289. FROM defExRate main
  1290. INNER JOIN defExRateHistory mode ON mode.defExRateId = main.defExRateId
  1291. WHERE mode.defExRateId = @defExRateId AND mode.approvedBy IS NULL
  1292. SELECT
  1293. @currency = currency
  1294. ,@country = country
  1295. ,@agent = agent
  1296. ,@tranType = tranType
  1297. ,@factor = factor
  1298. ,@cRate = cRate
  1299. ,@cMargin = cMargin
  1300. ,@cMax = cMax
  1301. ,@cMin = cMin
  1302. ,@pRate = pRate
  1303. ,@pMargin = pMargin
  1304. ,@pMax = pMax
  1305. ,@pMin = pMin
  1306. FROM defExRateHistory WHERE defExRateId = @defExRateId AND approvedBy IS NULL
  1307. IF(@setupType = 'CU')
  1308. BEGIN
  1309. --1. Update Country Rate Setup
  1310. UPDATE defExRate SET
  1311. factor = @factor
  1312. ,cRate = CASE WHEN @factor = 'M' THEN @cRate + ISNULL(@cMargin, 0) ELSE @cRate - ISNULL(@cMargin, 0) END
  1313. ,pRate = CASE WHEN @factor = 'M' THEN @pRate - ISNULL(@pMargin, 0) ELSE @pRate + ISNULL(@pMargin, 0) END
  1314. WHERE setupType IN ('CO') AND currency = @currency AND ISNULL(tranType, 0) = ISNULL(ISNULL(@tranType, tranType), 0)
  1315. INSERT @rateIdListCo
  1316. SELECT defExRateId FROM defExRate WITH(NOLOCK) WHERE ISNULL(isActive, 'N') = 'Y' AND setupType = 'CO' AND currency = @currency
  1317. WHILE EXISTS(SELECT 'X' FROM @rateIdListCo)
  1318. BEGIN
  1319. SELECT TOP 1 @idCo = defExRateId FROM @rateIdListCo
  1320. SELECT @coCountry = country, @cocMargin = cMargin, @copMargin = pMargin FROM defExRate WHERE defExRateId = @idCo
  1321. --2. Update Agent Rate Setup according to corresponding country
  1322. UPDATE defExRate SET
  1323. factor = @factor
  1324. ,cRate = CASE WHEN @factor = 'M' THEN @cRate + ISNULL(@cMargin, 0) + ISNULL(@cocMargin, 0) ELSE @cRate - ISNULL(@cMargin, 0) - ISNULL(@cocMargin, 0) END
  1325. ,pRate = CASE WHEN @factor = 'M' THEN @pRate - ISNULL(@pMargin, 0) - ISNULL(@copMargin, 0) ELSE @pRate + ISNULL(@pMargin, 0) + ISNULL(@copMargin, 0) END
  1326. WHERE setupType IN ('AG') AND currency = @currency AND country = @coCountry AND ISNULL(tranType, 0) = ISNULL(ISNULL(@tranType, tranType), 0)
  1327. --3. Update Corridor Rate Setup according to corresponding country
  1328. UPDATE spExRate SET
  1329. cRate = CASE WHEN cCountry = @coCountry THEN
  1330. (
  1331. CASE WHEN @factor = 'M' THEN @cRate + ISNULL(@cMargin, 0) + ISNULL(@cocMargin, 0) ELSE @cRate - ISNULL(@cMargin, 0) - ISNULL(@cocMargin, 0) END
  1332. )
  1333. ELSE cRate END
  1334. ,pRate = CASE WHEN pCountry = @coCountry THEN
  1335. (
  1336. CASE WHEN @factor = 'M' THEN @pRate - ISNULL(@pMargin, 0) - ISNULL(@copMargin, 0) ELSE @pRate + ISNULL(@pMargin, 0) + ISNULL(@copMargin, 0) END
  1337. )
  1338. ELSE pRate END
  1339. WHERE cCountry = @coCountry OR pCountry = @coCountry
  1340. --4. Update Corridor Rate Setup according to Corresponding Agent
  1341. INSERT @rateIdListAg
  1342. SELECT defExRateId FROM defExRate WITH(NOLOCK) WHERE ISNULL(isActive, 'N') = 'Y' AND setupType = 'AG' AND currency = @currency AND country = @coCountry
  1343. WHILE EXISTS(SELECT 'X' FROM @rateIdListAg)
  1344. BEGIN
  1345. SELECT TOP 1 @idAg = defExRateId FROM @rateIdListAg
  1346. SELECT @coAgent = agent, @agcRate = cRate, @agcMargin = cMargin, @agpRate = pRate, @agpMargin = pMargin FROM defExRate WHERE defExRateId = @idAg
  1347. UPDATE spExRate SET
  1348. cRate = CASE WHEN cAgent = @coAgent THEN
  1349. (
  1350. CASE WHEN @factor = 'M' THEN @cRate + ISNULL(@cMargin, 0) + ISNULL(@cocMargin, 0) + ISNULL(@agcMargin, 0) ELSE @cRate - ISNULL(@cMargin, 0) - ISNULL(@cocMargin, 0) - ISNULL(@agcMargin, 0) END
  1351. )
  1352. ELSE cRate END
  1353. ,pRate = CASE WHEN pAgent = @coAgent THEN
  1354. (
  1355. CASE WHEN @factor = 'M' THEN @pRate + ISNULL(@pMargin, 0) - ISNULL(@copMargin, 0) - ISNULL(@agpMargin, 0) ELSE @pRate + ISNULL(@pMargin, 0) + ISNULL(@copMargin, 0) + ISNULL(@agpMargin, 0) END
  1356. )
  1357. ELSE pRate END
  1358. WHERE cAgent = @coAgent OR pAgent = @coAgent
  1359. DELETE FROM @rateIdListAg WHERE defExRateId = @idAg
  1360. END
  1361. DELETE FROM @rateIdListCo WHERE defExRateId = @idCo
  1362. END
  1363. END
  1364. IF(@setupType = 'CO')
  1365. BEGIN
  1366. --1. Fetch cost rate from currency rate setup
  1367. SELECT
  1368. @cRate = CASE WHEN factor = 'M' THEN cRate + ISNULL(cMargin, 0) ELSE cRate - ISNULL(cMargin, 0) END
  1369. ,@pRate = CASE WHEN factor = 'M' THEN pRate - ISNULL(pMargin, 0) ELSE pRate + ISNULL(pMargin, 0) END
  1370. FROM defExRate WHERE ISNULL(isActive, 'N') = 'Y' AND setupType = 'CU' AND currency = @currency AND ISNULL(tranType, 0) = ISNULL(ISNULL(@tranType, tranType), 0)
  1371. --2. Update Country Rate
  1372. UPDATE defExRate SET
  1373. cRate = @cRate
  1374. ,pRate = @pRate
  1375. WHERE defExRateId = @defExRateId
  1376. --3. Update Agent Rate according to corresponding Country
  1377. UPDATE defExRate SET
  1378. cRate = CASE WHEN @factor = 'M' THEN @cRate + ISNULL(@cMargin, 0) ELSE @cRate - ISNULL(@cMargin, 0) END
  1379. ,pRate = CASE WHEN @factor = 'M' THEN @pRate - ISNULL(@pMargin, 0) ELSE @pRate + ISNULL(@pMargin, 0) END
  1380. WHERE setupType IN ('AG') AND currency = @currency AND country = @country AND ISNULL(tranType, 0) = ISNULL(ISNULL(@tranType, tranType), 0)
  1381. --4. Update Corridor Rate according to corresponding Country
  1382. UPDATE spExRate SET
  1383. cRate = CASE WHEN cCountry = @country THEN
  1384. (
  1385. CASE WHEN @factor = 'M' THEN @cRate + ISNULL(@cMargin, 0) ELSE @cRate - ISNULL(@cMargin, 0) END
  1386. )
  1387. ELSE cRate END
  1388. ,pRate = CASE WHEN pCountry = @country THEN
  1389. (
  1390. CASE WHEN @factor = 'M' THEN @pRate - ISNULL(@pMargin, 0) ELSE @pRate + ISNULL(@pMargin, 0) END
  1391. )
  1392. ELSE pRate END
  1393. WHERE cCountry = @country OR pCountry = @country
  1394. --5. Update Corridor Rate according to corresponding Agent
  1395. INSERT @rateIdListAg
  1396. SELECT defExRateId FROM defExRate WITH(NOLOCK) WHERE ISNULL(isActive, 'N') = 'Y' AND setupType = 'AG' AND currency = @currency AND country = @country
  1397. WHILE EXISTS(SELECT 'X' FROM @rateIdListAg)
  1398. BEGIN
  1399. SELECT TOP 1 @idAg = defExRateId FROM @rateIdListAg
  1400. SELECT @coAgent = agent, @agcRate = cRate, @agcMargin = cMargin, @agpRate = pRate, @agpMargin = pMargin FROM defExRate WHERE defExRateId = @idAg
  1401. UPDATE spExRate SET
  1402. cRate = CASE WHEN cAgent = @coAgent THEN
  1403. (
  1404. CASE WHEN @factor = 'M' THEN @cRate + ISNULL(@cMargin, 0) + ISNULL(@agcMargin, 0) ELSE @cRate - ISNULL(@cMargin, 0) - ISNULL(@agcMargin, 0) END
  1405. )
  1406. ELSE cRate END
  1407. ,pRate = CASE WHEN pAgent = @coAgent THEN
  1408. (
  1409. CASE WHEN @factor = 'M' THEN @pRate - ISNULL(@pMargin, 0) - ISNULL(@agpMargin, 0) ELSE @pRate + ISNULL(@pMargin, 0) + ISNULL(@agpMargin, 0) END
  1410. )
  1411. ELSE pRate END
  1412. WHERE cAgent = @coAgent OR pAgent = @coAgent
  1413. DELETE FROM @rateIdListAg WHERE defExRateId = @idAg
  1414. END
  1415. END
  1416. IF(@setupType = 'AG')
  1417. BEGIN
  1418. --4. Update Corridor Rate Setup according to corresponding agent
  1419. UPDATE spExRate SET
  1420. cRate = CASE WHEN cAgent = @agent THEN
  1421. (
  1422. CASE WHEN @factor = 'M' THEN @cRate + ISNULL(@cMargin, 0) ELSE @cRate - ISNULL(@cMargin, 0) END
  1423. )
  1424. ELSE cRate END
  1425. ,pRate = CASE WHEN pAgent = @agent THEN
  1426. (
  1427. CASE WHEN @factor = 'M' THEN @pRate - ISNULL(@pMargin, 0) ELSE @pRate + ISNULL(@pMargin, 0) END
  1428. )
  1429. ELSE pRate END
  1430. WHERE cAgent = @agent OR pAgent = @agent
  1431. END
  1432. EXEC [dbo].proc_GetColumnToRow 'defExRate', 'defExRateId', @defExRateId, @newValue OUTPUT
  1433. END
  1434. ELSE IF @modType = 'D'
  1435. BEGIN
  1436. EXEC [dbo].proc_GetColumnToRow @logParamMain, @logIdentifier, @defExRateId, @oldValue OUTPUT
  1437. UPDATE defExRate SET
  1438. isDeleted = 'Y'
  1439. ,modifiedDate = GETDATE()
  1440. ,modifiedBy = @user
  1441. WHERE defExRateId = @defExRateId
  1442. END
  1443. UPDATE defExRateHistory SET
  1444. approvedBy = @user
  1445. ,approvedDate = GETDATE()
  1446. WHERE defExRateId = @defExRateId AND approvedBy IS NULL
  1447. INSERT INTO #msg(errorCode, msg, id)
  1448. EXEC proc_applicationLogs 'i', NULL, @modType, @tableAlias, @defExRateId, @user, @oldValue, @newValue
  1449. DELETE FROM @rateIdList WHERE defExRateId = @defExRateId
  1450. END
  1451. IF @@TRANCOUNT > 0
  1452. COMMIT TRANSACTION
  1453. EXEC proc_errorHandler 0, 'Changes approved successfully.', @defExRateId
  1454. END
  1455. ELSE IF @flag = 'ai'
  1456. BEGIN
  1457. INSERT INTO #defExRateIdTemp
  1458. SELECT value FROM dbo.Split(',', @defExRateIds)
  1459. UPDATE def SET
  1460. def.isActive = @isActive
  1461. ,def.modifiedBy = @user
  1462. ,def.modifiedDate = GETDATE()
  1463. FROM defExRate def
  1464. INNER JOIN #defExRateIdTemp tmp ON def.defExRateId = tmp.defExRateId
  1465. EXEC proc_errorHandler 0, 'Selected record(s) has been deactivated', NULL
  1466. END
  1467. END TRY
  1468. BEGIN CATCH
  1469. IF @@TRANCOUNT > 0
  1470. ROLLBACK TRANSACTION
  1471. DECLARE @errorMessage VARCHAR(MAX)
  1472. SET @errorMessage = ERROR_MESSAGE()
  1473. EXEC proc_errorHandler 1, @errorMessage, @defExRateId
  1474. END CATCH
  1475. GO