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.

525 lines
30 KiB

1 year ago
  1. USE [FastMoneyPro_Remit]
  2. GO
  3. /****** Object: StoredProcedure [dbo].[proc_deRate] 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_deRate]
  9. @flag VARCHAR(50) = NULL
  10. ,@user VARCHAR(30) = NULL
  11. ,@deRateId VARCHAR(30) = NULL
  12. ,@hub INT = NULL
  13. ,@country INT = NULL
  14. ,@baseCurrency INT = NULL
  15. ,@localCurrency INT = NULL
  16. ,@cost MONEY = NULL
  17. ,@margin MONEY = NULL
  18. ,@ve MONEY = NULL
  19. ,@ne MONEY = NULL
  20. ,@spFlag CHAR(1) = NULL
  21. ,@hasChanged CHAR(1) = NULL
  22. ,@isEnable CHAR(1) = NULL
  23. ,@sortBy VARCHAR(50) = NULL
  24. ,@sortOrder VARCHAR(5) = NULL
  25. ,@pageSize INT = NULL
  26. ,@pageNumber INT = NULL
  27. AS
  28. SET NOCOUNT ON
  29. SET XACT_ABORT ON
  30. BEGIN TRY
  31. CREATE TABLE #msg(errorCode INT, msg VARCHAR(100), id INT)
  32. DECLARE
  33. @sql VARCHAR(MAX)
  34. ,@oldValue VARCHAR(MAX)
  35. ,@newValue VARCHAR(MAX)
  36. ,@module VARCHAR(10)
  37. ,@tableAlias VARCHAR(100)
  38. ,@logIdentifier VARCHAR(50)
  39. ,@logParamMod VARCHAR(100)
  40. ,@logParamMain VARCHAR(100)
  41. ,@table VARCHAR(MAX)
  42. ,@select_field_list VARCHAR(MAX)
  43. ,@extra_field_list VARCHAR(MAX)
  44. ,@sql_filter VARCHAR(MAX)
  45. ,@modType VARCHAR(6)
  46. ,@ApprovedFunctionId INT
  47. SELECT
  48. @logIdentifier = 'deRateId'
  49. ,@logParamMain = 'deRate'
  50. ,@logParamMod = 'deRateHistory'
  51. ,@module = '20'
  52. ,@tableAlias = 'Default Ex-Rate'
  53. ,@ApprovedFunctionId = CASE @spFlag WHEN 'P' THEN 20111230 WHEN 'S' THEN 20111030 ELSE 0 END
  54. IF @flag IN ('s')
  55. BEGIN
  56. IF @sortBy IS NULL
  57. SET @sortBy = 'deRateId'
  58. IF @sortOrder IS NULL
  59. SET @sortOrder = 'ASC'
  60. DECLARE @m VARCHAR(MAX)
  61. SET @m = '(
  62. SELECT
  63. deRateId = ISNULL(mode.deRateId, main.deRateId)
  64. ,hub = ISNULL(mode.hub, main.hub)
  65. ,country = ISNULL(mode.country, main.country)
  66. ,baseCurrency = ISNULL(mode.baseCurrency, main.baseCurrency)
  67. ,localCurrency = ISNULL(mode.localCurrency, main.localCurrency)
  68. ,cost = ISNULL(mode.cost, main.cost)
  69. ,margin = ISNULL(mode.margin, main.margin)
  70. ,ve = ISNULL(mode.ve, main.ve)
  71. ,ne = ISNULL(mode.ne, main.ne)
  72. ,spFlag = ISNULL(mode.spFlag, main.spFlag)
  73. ,isEnable = ISNULL(mode.isEnable, main.isEnable)
  74. ,main.createdBy
  75. ,main.createdDate
  76. ,modifiedBy = CASE WHEN main.approvedBy IS NULL THEN main.createdBy ELSE mode.createdBy END
  77. ,modifiedDate = CASE WHEN main.approvedBy IS NULL THEN main.createdDate ELSE mode.createdDate END
  78. ,hasChanged = CASE WHEN (main.approvedBy IS NULL) OR (mode.deRateId IS NOT NULL) THEN ''Y'' ELSE ''N'' END
  79. FROM deRate main WITH(NOLOCK)
  80. LEFT JOIN deRateHistory mode ON main.deRateId = mode.deRateId AND mode.approvedBy IS NULL
  81. AND (
  82. mode.createdBy = ''' + @user + '''
  83. OR ''Y'' = dbo.FNAHasRight(''' + @user + ''',' + CAST(@ApprovedFunctionId AS VARCHAR) + ')
  84. )
  85. WHERE ISNULL(main.isDeleted, ''N'') <> ''Y''
  86. AND (
  87. main.approvedBy IS NOT NULL
  88. OR main.createdBy = ''' + @user + '''
  89. OR ''Y'' = dbo.FNAHasRight(''' + @user + ''',' + CAST(@ApprovedFunctionId AS VARCHAR) + ')
  90. )
  91. AND main.spFlag = ''' + @spFlag + '''
  92. ) '
  93. SET @table = '(
  94. SELECT
  95. main.deRateId
  96. ,main.hub
  97. ,hubName = am.agentName
  98. ,main.country
  99. ,countryName = c.countryName
  100. ,main.baseCurrency
  101. ,baseCurrencyName = bc.currencyCode
  102. ,main.localCurrency
  103. ,localCurrencyName = lc.currencyCode
  104. ,main.cost
  105. ,main.margin
  106. ,main.ve
  107. ,main.ne
  108. ,offer = CASE WHEN main.spFlag = ''S'' THEN main.cost + main.margin ELSE
  109. main.cost - main.margin END
  110. ,main.spFlag
  111. ,main.isEnable
  112. ,main.modifiedBy
  113. ,main.hasChanged
  114. FROM ' + @m + ' main
  115. LEFT JOIN agentMaster am WITH(NOLOCK) ON main.hub = am.agentId
  116. LEFT JOIN countryMaster c WITH(NOLOCK) ON main.country = c.countryId
  117. LEFT JOIN currencyMaster bc WITH(NOLOCK) ON main.baseCurrency = bc.currencyId
  118. LEFT JOIN currencyMaster lc WITH(NOLOCK) ON main.localCurrency = lc.currencyId
  119. ) x'
  120. SET @sql_filter = ''
  121. --SET @sql_filter = @sql_filter + ' AND ISNULL(isDeleted, '''') <> ''Y'''
  122. IF @hub IS NOT NULL
  123. SET @sql_filter = @sql_filter + ' AND hub = ' + CAST(@hub AS VARCHAR(50))
  124. IF @hasChanged IS NOT NULL
  125. SET @sql_filter = @sql_filter + ' AND hasChanged = ''' + @hasChanged +''''
  126. IF @country IS NOT NULL
  127. SET @sql_filter = @sql_filter + ' AND country = ' + CAST(@country AS VARCHAR(50))
  128. IF @baseCurrency IS NOT NULL
  129. SET @sql_filter = @sql_filter + ' AND baseCurrency = ' + CAST(@baseCurrency AS VARCHAR(50))
  130. IF @localCurrency IS NOT NULL
  131. SET @sql_filter = @sql_filter + ' AND localCurrency = ' + CAST(@localCurrency AS VARCHAR(50))
  132. SET @select_field_list = '
  133. deRateId
  134. ,hub
  135. ,hubName
  136. ,country
  137. ,countryName
  138. ,baseCurrency
  139. ,baseCurrencyName
  140. ,localCurrency
  141. ,localCurrencyName
  142. ,cost
  143. ,margin
  144. ,ve
  145. ,ne
  146. ,offer
  147. ,spFlag
  148. ,isEnable
  149. ,modifiedBy
  150. ,hasChanged
  151. '
  152. EXEC dbo.proc_paging
  153. @table
  154. ,@sql_filter
  155. ,@select_field_list
  156. ,@extra_field_list
  157. ,@sortBy
  158. ,@sortOrder
  159. ,@pageSize
  160. ,@pageNumber
  161. END
  162. IF @flag = 'i'
  163. BEGIN
  164. IF EXISTS(SELECT 'X' FROM deRate WHERE hub = @hub AND country = @country AND spFlag = @spFlag)
  165. BEGIN
  166. EXEC proc_errorHandler 1, 'Record already exists', @deRateId
  167. RETURN
  168. END
  169. BEGIN TRANSACTION
  170. INSERT INTO deRate (
  171. hub
  172. ,country
  173. ,baseCurrency
  174. ,localCurrency
  175. ,cost
  176. ,margin
  177. ,ve
  178. ,ne
  179. ,spFlag
  180. ,isEnable
  181. ,createdBy
  182. ,createdDate
  183. )
  184. SELECT
  185. @hub
  186. ,@country
  187. ,@baseCurrency
  188. ,@localCurrency
  189. ,@cost
  190. ,@margin
  191. ,@ve
  192. ,@ne
  193. ,@spFlag
  194. ,@isEnable
  195. ,@user
  196. ,GETDATE()
  197. SET @deRateId = SCOPE_IDENTITY()
  198. IF @@TRANCOUNT > 0
  199. COMMIT TRANSACTION
  200. EXEC proc_errorHandler 0, 'Record has been added successfully.', @deRateId
  201. END
  202. ELSE IF @flag = 'a'
  203. BEGIN
  204. IF EXISTS (
  205. SELECT 'X' FROM deRateHistory WITH(NOLOCK)
  206. WHERE deRateId = @deRateId AND createdBy = @user AND approvedBy IS NULL
  207. )
  208. BEGIN
  209. SELECT
  210. mode.*
  211. FROM deRateHistory mode WITH(NOLOCK)
  212. INNER JOIN deRate main WITH(NOLOCK) ON mode.deRateId = main.deRateId
  213. WHERE mode.deRateId= @deRateId AND mode.approvedBy IS NULL
  214. END
  215. ELSE
  216. BEGIN
  217. SELECT * FROM deRate WITH(NOLOCK) WHERE deRateId = @deRateId
  218. END
  219. END
  220. ELSE IF @flag = 'u'
  221. BEGIN
  222. IF EXISTS (
  223. SELECT 'X' FROM deRate WITH(NOLOCK)
  224. WHERE deRateId = @deRateId AND ( createdBy <> @user AND approvedBy IS NULL)
  225. )
  226. BEGIN
  227. EXEC proc_errorHandler 1, '<center>You can not modify this record. <br /> You are trying to perform an illegal operation.</center>', @deRateId
  228. RETURN
  229. END
  230. IF EXISTS (
  231. SELECT 'X' FROM deRateHistory WITH(NOLOCK)
  232. WHERE deRateId = @deRateId AND (createdBy<> @user OR modType = 'D') AND approvedBy IS NULL
  233. )
  234. BEGIN
  235. EXEC proc_errorHandler 1, '<center>You can not modify this record. <br /> You are trying to perform an illegal operation.</center>', @deRateId
  236. RETURN
  237. END
  238. BEGIN TRANSACTION
  239. IF EXISTS (SELECT 'X' FROM deRate WHERE approvedBy IS NULL AND deRateId = @deRateId)
  240. BEGIN
  241. UPDATE deRate SET
  242. hub = @hub
  243. ,country = @country
  244. ,baseCurrency = @baseCurrency
  245. ,localCurrency = @localCurrency
  246. ,cost = @cost
  247. ,margin = @margin
  248. ,ve = @ve
  249. ,ne = @ne
  250. ,spFlag = @spFlag
  251. ,isEnable = @isEnable
  252. ,modifiedBy = @user
  253. ,modifiedDate = GETDATE()
  254. WHERE deRateId = @deRateId
  255. END
  256. ELSE
  257. BEGIN
  258. DELETE FROM deRateHistory WHERE deRateId = @deRateId AND approvedBy IS NULL
  259. INSERT INTO deRateHistory(
  260. deRateId
  261. ,hub
  262. ,country
  263. ,baseCurrency
  264. ,localCurrency
  265. ,cost
  266. ,margin
  267. ,ve
  268. ,ne
  269. ,spFlag
  270. ,isEnable
  271. ,createdBy
  272. ,createdDate
  273. ,modType
  274. )
  275. SELECT
  276. @deRateId
  277. ,@hub
  278. ,@country
  279. ,@baseCurrency
  280. ,@localCurrency
  281. ,@cost
  282. ,@margin
  283. ,@ve
  284. ,@ne
  285. ,@spFlag
  286. ,@isEnable
  287. ,@user
  288. ,GETDATE()
  289. ,'U'
  290. END
  291. IF @@TRANCOUNT > 0
  292. COMMIT TRANSACTION
  293. EXEC proc_errorHandler 0, 'Record updated successfully.', @deRateId
  294. END
  295. ELSE IF @flag = 'd'
  296. BEGIN
  297. IF EXISTS (
  298. SELECT 'X' FROM deRate WITH(NOLOCK)
  299. WHERE deRateId = @deRateId AND (createdBy <> @user AND approvedBy IS NULL)
  300. )
  301. BEGIN
  302. EXEC proc_errorHandler 1, '<center>You can not delete this record. <br /> You are trying to perform an illegal operation.</center>', @deRateId
  303. RETURN
  304. END
  305. IF EXISTS (
  306. SELECT 'X' FROM deRateHistory WITH(NOLOCK)
  307. WHERE deRateId = @deRateId AND approvedBy IS NULL
  308. )
  309. BEGIN
  310. EXEC proc_errorHandler 1, '<center>You can not delete this record. <br /> Previous modification has not been approved yet.</center>', @deRateId
  311. RETURN
  312. END
  313. IF EXISTS(SELECT 'X' FROM deRate WITH(NOLOCK) WHERE deRateId = @deRateId AND createdBy = @user AND approvedBy IS NULL)
  314. BEGIN
  315. DELETE FROM deRate WHERE deRateId = @deRateId
  316. EXEC proc_errorHandler 0, 'Record deleted successfully.', @deRateId
  317. RETURN
  318. END
  319. INSERT INTO deRateHistory(
  320. deRateId
  321. ,hub
  322. ,country
  323. ,baseCurrency
  324. ,localCurrency
  325. ,cost
  326. ,margin
  327. ,ve
  328. ,ne
  329. ,spFlag
  330. ,isEnable
  331. ,createdBy
  332. ,createdDate
  333. ,modType
  334. )
  335. SELECT
  336. deRateId
  337. ,hub
  338. ,country
  339. ,baseCurrency
  340. ,localCurrency
  341. ,cost
  342. ,margin
  343. ,ve
  344. ,ne
  345. ,spFlag
  346. ,isEnable
  347. ,@user
  348. ,GETDATE()
  349. ,'D'
  350. FROM deRate WHERE deRateId = @deRateId
  351. EXEC proc_errorHandler 0, 'Record deleted successfully.', @deRateId
  352. END
  353. ELSE IF @flag IN('reject')
  354. BEGIN
  355. IF NOT EXISTS (
  356. SELECT 'X' FROM deRate WITH(NOLOCK)
  357. WHERE deRateId = @deRateId
  358. )
  359. AND
  360. NOT EXISTS (
  361. SELECT 'X' FROM deRate WITH(NOLOCK)
  362. WHERE deRateId = @deRateId AND approvedBy IS NULL
  363. )
  364. BEGIN
  365. EXEC proc_errorHandler 1, '<center>Modification approval is not pending.</center>', @deRateId
  366. RETURN
  367. END
  368. BEGIN TRANSACTION
  369. IF EXISTS (SELECT 'X' FROM deRate WHERE approvedBy IS NULL AND deRateId = @deRateId)
  370. BEGIN --New record
  371. SET @modType = 'Reject'
  372. EXEC [dbo].proc_GetColumnToRow @logParamMain, @logIdentifier, @deRateId, @oldValue OUTPUT
  373. INSERT INTO #msg(errorCode, msg, id)
  374. EXEC proc_applicationLogs 'i', NULL, @modType, @tableAlias, @deRateId, @user, @oldValue, @newValue
  375. IF EXISTS (SELECT 'x' FROM #msg WHERE errorCode <> '0')
  376. BEGIN
  377. IF @@TRANCOUNT > 0
  378. ROLLBACK TRANSACTION
  379. EXEC proc_errorHandler 1, 'Failed to reject the transaction.', @deRateId
  380. RETURN
  381. END
  382. DELETE FROM deRate WHERE deRateId = @deRateId
  383. END
  384. ELSE
  385. BEGIN
  386. SET @modType = 'Reject'
  387. EXEC [dbo].proc_GetColumnToRow @logParamMain, @logIdentifier, @deRateId, @oldValue OUTPUT
  388. INSERT INTO #msg(errorCode, msg, id)
  389. EXEC proc_applicationLogs 'i', NULL, @modType, @tableAlias, @deRateId, @user, @oldValue, @newValue
  390. IF EXISTS (SELECT 'x' FROM #msg WHERE errorCode <> '0')
  391. BEGIN
  392. IF @@TRANCOUNT > 0
  393. ROLLBACK TRANSACTION
  394. EXEC proc_errorHandler 1, 'Failed to reject the transaction.', @deRateId
  395. RETURN
  396. END
  397. DELETE FROM deRateHistory WHERE deRateId = @deRateId AND approvedBy IS NULL
  398. END
  399. IF @@TRANCOUNT > 0
  400. COMMIT TRANSACTION
  401. EXEC proc_errorHandler 0, 'Changes rejected successfully.', @deRateId
  402. END
  403. ELSE IF @flag IN ('approve')
  404. BEGIN
  405. IF NOT EXISTS (
  406. SELECT 'X' FROM deRate WITH(NOLOCK)
  407. WHERE deRateId = @deRateId
  408. )
  409. AND
  410. NOT EXISTS (
  411. SELECT 'X' FROM deRate WITH(NOLOCK)
  412. WHERE deRateId = @deRateId AND approvedBy IS NULL
  413. )
  414. BEGIN
  415. EXEC proc_errorHandler 1, '<center>Modification approval is not pending.</center>', @deRateId
  416. RETURN
  417. END
  418. BEGIN TRANSACTION
  419. IF EXISTS (SELECT 'X' FROM deRate WHERE approvedBy IS NULL AND deRateId = @deRateId )
  420. SET @modType = 'I'
  421. ELSE
  422. SELECT @modType = modType FROM deRateHistory WHERE deRateId = @deRateId AND approvedBy IS NULL
  423. IF @modType = 'I'
  424. BEGIN --New record
  425. UPDATE deRate SET
  426. isActive = 'Y'
  427. ,approvedBy = @user
  428. ,approvedDate= GETDATE()
  429. WHERE deRateId = @deRateId
  430. EXEC [dbo].proc_GetColumnToRow @logParamMain, @logIdentifier, @deRateId, @newValue OUTPUT
  431. END
  432. ELSE IF @modType = 'U'
  433. BEGIN
  434. EXEC [dbo].proc_GetColumnToRow @logParamMain, @logIdentifier, @deRateId, @oldValue OUTPUT
  435. UPDATE main SET
  436. main.hub = mode.hub
  437. ,main.country = mode.country
  438. ,main.baseCurrency = mode.baseCurrency
  439. ,main.localCurrency = mode.localCurrency
  440. ,main.cost = mode.cost
  441. ,main.margin = mode.margin
  442. ,main.ve = mode.ve
  443. ,main.ne = mode.ne
  444. ,main.spFlag = mode.spFlag
  445. ,main.isEnable = mode.isEnable
  446. ,main.modifiedBy = @user
  447. ,main.modifiedDate = GETDATE()
  448. FROM deRate main
  449. INNER JOIN deRateHistory mode ON mode.deRateId = main.deRateId
  450. WHERE mode.deRateId = @deRateId AND mode.approvedBy IS NULL
  451. EXEC [dbo].proc_GetColumnToRow 'deRate', 'deRateId', @deRateId, @newValue OUTPUT
  452. END
  453. ELSE IF @modType = 'D'
  454. BEGIN
  455. EXEC [dbo].proc_GetColumnToRow @logParamMain, @logIdentifier, @deRateId, @oldValue OUTPUT
  456. UPDATE deRate SET
  457. isDeleted = 'Y'
  458. ,modifiedDate = GETDATE()
  459. ,modifiedBy = @user
  460. WHERE deRateId = @deRateId
  461. END
  462. UPDATE deRateHistory SET
  463. approvedBy = @user
  464. ,approvedDate = GETDATE()
  465. WHERE deRateId = @deRateId AND approvedBy IS NULL
  466. INSERT INTO #msg(errorCode, msg, id)
  467. EXEC proc_applicationLogs 'i', NULL, @modType, @tableAlias, @deRateId, @user, @oldValue, @newValue
  468. IF @@TRANCOUNT > 0
  469. COMMIT TRANSACTION
  470. EXEC proc_errorHandler 0, 'Changes approved successfully.', @deRateId
  471. END
  472. END TRY
  473. BEGIN CATCH
  474. IF @@TRANCOUNT > 0
  475. ROLLBACK TRANSACTION
  476. DECLARE @errorMessage VARCHAR(MAX)
  477. SET @errorMessage = ERROR_MESSAGE()
  478. EXEC proc_errorHandler 1, @errorMessage, @deRateId
  479. END CATCH
  480. GO