USE [FastMoneyPro_Remit] GO /****** Object: StoredProcedure [dbo].[proc_seRate] Script Date: 9/27/2019 1:30:14 PM ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO /* EXEC proc_seRate @flag = 's', @user = 'admin' */ CREATE proc [dbo].[proc_seRate] @flag VARCHAR(50) = NULL ,@user VARCHAR(30) = NULL ,@seRateId VARCHAR(30) = NULL ,@baseCurrency INT = NULL ,@localCurrency INT = NULL ,@sHub INT = NULL ,@sCountry INT = NULL ,@ssAgent INT = NULL ,@sAgent INT = NULL ,@sBranch INT = NULL ,@rHub INT = NULL ,@rCountry INT = NULL ,@rsAgent INT = NULL ,@rAgent INT = NULL ,@rBranch INT = NULL ,@state INT = NULL ,@zip VARCHAR(20) = NULL ,@agentGroup INT = NULL ,@cost MONEY = NULL ,@margin DECIMAL(26, 16) = NULL ,@agentMargin MONEY = NULL ,@ve MONEY = NULL ,@ne MONEY = NULL ,@spFlag CHAR(1) = NULL ,@effectiveFrom DATETIME = NULL ,@effectiveTo DATETIME = NULL ,@hasChanged CHAR(1) = NULL ,@isEnable CHAR(1) = NULL ,@sortBy VARCHAR(50) = NULL ,@sortOrder VARCHAR(5) = NULL ,@pageSize INT = NULL ,@pageNumber INT = NULL AS SET NOCOUNT ON SET XACT_ABORT ON BEGIN TRY CREATE TABLE #msg(errorCode INT, msg VARCHAR(100), id INT) DECLARE @sql VARCHAR(MAX) ,@oldValue VARCHAR(MAX) ,@newValue VARCHAR(MAX) ,@module VARCHAR(10) ,@tableAlias VARCHAR(100) ,@logIdentifier VARCHAR(50) ,@logParamMod VARCHAR(100) ,@logParamMain VARCHAR(100) ,@table VARCHAR(MAX) ,@select_field_list VARCHAR(MAX) ,@extra_field_list VARCHAR(MAX) ,@sql_filter VARCHAR(MAX) ,@modType VARCHAR(6) ,@ApprovedFunctionId INT SELECT @logIdentifier = 'seRateId' ,@logParamMain = 'seRate' ,@logParamMod = 'seRateHistory' ,@module = '20' ,@tableAlias = 'Special Ex-Rate' ,@ApprovedFunctionId = CASE @spFlag WHEN 'P' THEN 20111130 WHEN 'S' THEN 20111330 ELSE 0 END IF @flag IN ('s') BEGIN IF @sortBy IS NULL SET @sortBy = 'seRateId' IF @sortOrder IS NULL SET @sortOrder = 'ASC' DECLARE @m VARCHAR(MAX) SET @m = '( SELECT seRateId = ISNULL(mode.seRateId, main.seRateId) ,baseCurrency = ISNULL(mode.baseCurrency, main.baseCurrency) ,localCurrency = ISNULL(mode.localCurrency, main.localCurrency) ,sHub = ISNULL(mode.sHub, main.sHub) ,sCountry = ISNULL(mode.sCountry, main.sCountry) ,ssAgent = ISNULL(mode.ssAgent, main.ssAgent) ,sAgent = ISNULL(mode.sAgent, main.sAgent) ,sBranch = ISNULL(mode.sBranch, main.sBranch) ,rHub = ISNULL(mode.rHub, main.rHub) ,rCountry = ISNULL(mode.rCountry, main.rCountry) ,rsAgent = ISNULL(mode.rsAgent, main.rsAgent) ,rAgent = ISNULL(mode.rAgent, main.rAgent) ,rBranch = ISNULL(mode.rBranch, main.rBranch) ,state = ISNULL(mode.state, main.state) ,zip = ISNULL(mode.zip, main.zip) ,agentGroup = ISNULL(mode.agentGroup, main.agentGroup) ,cost = ISNULL(mode.cost, main.cost) ,margin = ISNULL(mode.margin, main.margin) ,agentMargin = ISNULL(mode.agentMargin, main.agentMargin) ,ve = ISNULL(mode.ve, main.ve) ,ne = ISNULL(mode.ne, main.ne) ,effectiveFrom = ISNULL(mode.effectiveFrom, main.effectiveFrom) ,effectiveTo = ISNULL(mode.effectiveTo, main.effectiveTo) ,spFlag = ISNULL(mode.spFlag, main.spFlag) ,isEnable = ISNULL(mode.isEnable, main.isEnable) ,main.createdBy ,main.createdDate ,modifiedBy = CASE WHEN main.approvedBy IS NULL THEN main.createdBy ELSE mode.createdBy END ,modifiedDate = CASE WHEN main.approvedBy IS NULL THEN main.createdDate ELSE mode.createdDate END ,hasChanged = CASE WHEN (main.approvedBy IS NULL) OR (mode.seRateId IS NOT NULL) THEN ''Y'' ELSE ''N'' END FROM seRate main WITH(NOLOCK) LEFT JOIN seRateHistory mode ON main.seRateId = mode.seRateId AND mode.approvedBy IS NULL AND ( mode.createdBy = ''' + @user + ''' OR ''Y'' = dbo.FNAHasRight(''' + @user + ''',' + CAST(@ApprovedFunctionId AS VARCHAR) + ') ) WHERE ISNULL(main.isDeleted, ''N'') <> ''Y'' AND ( main.approvedBy IS NOT NULL OR main.createdBy = ''' + @user + ''' OR ''Y'' = dbo.FNAHasRight(''' + @user + ''',' + CAST(@ApprovedFunctionId AS VARCHAR) + ') ) AND main.spFlag = ''' + @spFlag + ''' ) ' SET @table = '( SELECT main.seRateId ,main.baseCurrency ,baseCurrencyName = bc.currencyCode ,main.localCurrency ,localCurrencyName = lc.currencyCode ,main.sHub ,sHubName = sh.agentName ,main.sCountry ,sCountryName = sc.countryName ,main.ssAgent ,ssAgentName = ssa.agentName ,main.sAgent ,sAgentName = ISNULL(sa.agentName, ''Any'') ,main.sBranch ,sBranchName = ISNULL(sb.agentName, ''Any'') ,main.rHub ,rHubName = rh.agentName ,main.rCountry ,rCountryName = rc.countryName ,main.rsAgent ,rsAgentName = rsa.agentName ,main.rAgent ,rAgentName = ISNULL(ra.agentName, ''Any'') ,main.rBranch ,rBranchName = ISNULL(rb.agentName, ''Any'') ,main.state ,main.zip ,main.agentGroup ,main.cost ,main.margin ,offer = CASE WHEN main.spFlag = ''S'' THEN CAST(main.cost AS DECIMAL(26, 16)) + CAST(main.margin AS DECIMAL(26, 16)) ELSE CAST(main.cost AS DECIMAL(26,16)) - CAST(main.margin AS DECIMAL(26, 16)) END ,main.agentMargin ,main.ve ,main.ne ,main.effectiveFrom ,main.effectiveTo ,main.isEnable ,main.modifiedBy ,main.hasChanged FROM ' + @m + ' main LEFT JOIN agentMaster sh WITH(NOLOCK) ON sh.agentId = main.sHub LEFT JOIN countryMaster sc WITH(NOLOCK) ON main.sCountry = sc.countryId LEFT JOIN agentMaster ssa WITH(NOLOCK) ON ssa.agentId = main.ssAgent LEFT JOIN agentMaster sa WITH(NOLOCK) ON sa.agentId = main.sAgent LEFT JOIN agentMaster sb WITH(NOLOCK) ON sb.agentId = main.sBranch LEFT JOIN agentMaster rh WITH(NOLOCK) ON rh.agentId = main.rHub LEFT JOIN countryMaster rc WITH(NOLOCK) ON main.rCountry = rc.countryId LEFT JOIN agentMaster rsa WITH(NOLOCK) ON rsa.agentId = main.rsAgent LEFT JOIN agentMaster ra WITH(NOLOCK) ON ra.agentId = main.rAgent LEFT JOIN agentMaster rb WITH(NOLOCK) ON rb.agentId = main.rBranch LEFT JOIN currencyMaster bc WITH(NOLOCK) ON main.baseCurrency = bc.currencyId LEFT JOIN currencyMaster lc WITH(NOLOCK) ON main.localCurrency = lc.currencyId ) x ' --print @table SET @sql_filter = '' IF @sHub IS NOT NULL SET @sql_filter = @sql_filter + ' AND sHub = ' + CAST(@sHub AS VARCHAR(50)) IF @hasChanged IS NOT NULL SET @sql_filter = @sql_filter + ' AND hasChanged = ''' + @hasChanged + '''' IF @rHub IS NOT NULL SET @sql_filter = @sql_filter + ' AND rHub = ' + CAST(@rHub AS VARCHAR(50)) IF @sCountry IS NOT NULL SET @sql_filter = @sql_filter + ' AND sCountry = ' + CAST(@sCountry AS VARCHAR(50)) IF @ssAgent IS NOT NULL SET @sql_filter = @sql_filter + ' AND ssAgent = ' + CAST(@ssAgent AS VARCHAR(50)) IF @sAgent IS NOT NULL SET @sql_filter = @sql_filter + ' AND sAgent = ' + CAST(@sAgent AS VARCHAR(50)) IF @sBranch IS NOT NULL SET @sql_filter = @sql_filter + ' AND sBranch = ' + CAST(@sBranch AS VARCHAR(50)) IF @rCountry IS NOT NULL SET @sql_filter = @sql_filter + ' AND rCountry = ' + CAST(@rCountry AS VARCHAR(50)) IF @rsAgent IS NOT NULL SET @sql_filter = @sql_filter + ' AND rsAgent = ' + CAST(@rsAgent AS VARCHAR(50)) IF @rAgent IS NOT NULL SET @sql_filter = @sql_filter + ' AND rAgent = ' + CAST(@rAgent AS VARCHAR(50)) IF @rBranch IS NOT NULL SET @sql_filter = @sql_filter + ' AND rBranch = ' + CAST(@rBranch AS VARCHAR(50)) IF @baseCurrency IS NOT NULL SET @sql_filter = @sql_filter + ' AND baseCurrency = ' + CAST(@baseCurrency AS VARCHAR(50)) IF @localCurrency IS NOT NULL SET @sql_filter = @sql_filter + ' AND localCurrency = ' + CAST(@localCurrency AS VARCHAR(50)) IF @state IS NOT NULL SET @sql_filter = @sql_filter + ' AND state = ' + CAST(@state AS VARCHAR(50)) IF @zip IS NOT NULL SET @sql_filter = @sql_filter + ' AND zip = ' + CAST(@zip AS VARCHAR(50)) IF @agentGroup IS NOT NULL SET @sql_filter = @sql_filter + ' AND agentGroup = ' + CAST(@agentGroup AS VARCHAR(50)) /* ,@hub INT = NULL ,@baseCurrency INT = NULL ,@localCurrency INT = NULL ,@sCountry INT = NULL ,@sAgent INT = NULL ,@sBranch INT = NULL ,@rCountry INT = NULL ,@rAgent INT = NULL ,@rBranch INT = NULL ,@state INT = NULL ,@zip VARCHAR(20) = NULL ,@agentGroup INT = NULL */ SET @select_field_list = ' seRateId ,baseCurrency ,baseCurrencyName ,localCurrency ,localCurrencyName ,sHub ,sHubName ,sCountry ,sCountryName ,ssAgent ,ssAgentName ,sAgent ,sAgentName ,sBranch ,sBranchName ,rHub ,rHubName ,rCountry ,rCountryName ,rsAgent ,rsAgentName ,rAgent ,rAgentName ,rBranch ,rBranchName ,state ,zip ,agentGroup ,cost ,margin ,offer ,agentMargin ,ve ,ne ,effectiveFrom ,effectiveTo ,isEnable ,modifiedBy ,hasChanged ' EXEC dbo.proc_paging @table ,@sql_filter ,@select_field_list ,@extra_field_list ,@sortBy ,@sortOrder ,@pageSize ,@pageNumber END ELSE IF @flag = 'i' BEGIN IF EXISTS(SELECT 'x' FROM seRate WHERE sHub = @sHub AND ssAgent = @ssAgent AND sCountry = @sCountry AND ISNULL(sAgent, 0) = ISNULL(@sAgent, 0) AND ISNULL(sBranch, 0) = ISNULL(@sBranch, 0) AND rHub =@rHub AND rsAgent = @rsAgent AND rCountry = @rCountry AND ISNULL(rAgent, 0) = ISNULL(@rAgent, 0) AND ISNULL(rBranch, 0) = ISNULL(@rBranch, 0) AND baseCurrency = @baseCurrency AND localCurrency = @localCurrency AND spFlag = @spFlag AND ISNULL(isDeleted,'N')<>'Y') BEGIN EXEC proc_errorHandler 1, 'Record already exist.', @seRateId RETURN END BEGIN TRANSACTION INSERT INTO seRate ( baseCurrency ,localCurrency ,sHub ,sCountry ,ssAgent ,sAgent ,sBranch ,rHub ,rCountry ,rsAgent ,rAgent ,rBranch ,[state] ,zip ,agentGroup ,cost ,margin ,agentMargin ,ve ,ne ,spFlag ,effectiveFrom ,effectiveTo ,isEnable ,createdBy ,createdDate ) SELECT @baseCurrency ,@localCurrency ,@sHub ,@sCountry ,@ssAgent ,@sAgent ,@sBranch ,@rHub ,@rCountry ,@rsAgent ,@rAgent ,@rBranch ,@state ,@zip ,@agentGroup ,@cost ,@margin ,@agentMargin ,@ve ,@ne ,@spFlag ,@effectiveFrom ,@effectiveTo ,@isEnable ,@user ,GETDATE() SET @seRateId = SCOPE_IDENTITY() IF @@TRANCOUNT > 0 COMMIT TRANSACTION EXEC proc_errorHandler 0, 'Record has been added successfully.', @seRateId END ELSE IF @flag = 'ci' BEGIN SELECT @ssAgent = parentId FROM agentMaster WHERE agentId = @sAgent SELECT @sHub = parentId FROM agentMaster WHERE agentId = @ssAgent SELECT @rsAgent = parentId FROM agentMaster WHERE agentId = @rAgent SELECT @rHub = parentId FROM agentMaster WHERE agentId = @rsAgent IF EXISTS(SELECT 'x' FROM seRate WHERE sHub = @sHub AND ssAgent = @ssAgent AND sCountry = @sCountry AND ISNULL(sAgent, 0) = ISNULL(@sAgent, 0) AND ISNULL(sBranch, 0) = ISNULL(@sBranch, 0) AND rHub =@rHub AND rsAgent = @rsAgent AND rCountry = @rCountry AND ISNULL(rAgent, 0) = ISNULL(@rAgent, 0) AND ISNULL(rBranch, 0) = ISNULL(@rBranch, 0) AND spFlag = @spFlag AND ISNULL(isDeleted,'N')<>'Y') BEGIN SELECT @seRateId = seRateId FROM seRate WHERE sHub = @sHub AND ssAgent = @ssAgent AND sCountry = @sCountry AND ISNULL(sAgent, 0) = ISNULL(@sAgent, 0) AND ISNULL(sBranch, 0) = ISNULL(@sBranch, 0) AND rHub =@rHub AND rsAgent = @rsAgent AND rCountry = @rCountry AND ISNULL(rAgent, 0) = ISNULL(@rAgent, 0) AND ISNULL(rBranch, 0) = ISNULL(@rBranch, 0) AND spFlag = @spFlag AND ISNULL(isDeleted,'N')<>'Y' INSERT INTO seRateHistory( seRateId ,baseCurrency ,localCurrency ,sHub ,sCountry ,ssAgent ,sAgent ,sBranch ,rHub ,rCountry ,rsAgent ,rAgent ,rBranch ,[state] ,zip ,agentGroup ,cost ,margin ,agentMargin ,ve ,ne ,spFlag ,effectiveFrom ,effectiveTo ,isEnable ,createdBy ,createdDate ,modType ) SELECT @seRateId ,@baseCurrency ,@localCurrency ,@sHub ,@sCountry ,@ssAgent ,@sAgent ,@sBranch ,@rHub ,@rCountry ,@rsAgent ,@rAgent ,@rBranch ,@state ,@zip ,@agentGroup ,@cost ,@margin ,@agentMargin ,@ve ,@ne ,@spFlag ,@effectiveFrom ,@effectiveTo ,@isEnable ,@user ,GETDATE() ,'U' --UPDATE seRate SET -- sHub = @sHub -- ,sCountry = @sCountry -- ,ssAgent = @ssAgent -- ,sAgent = @sAgent -- ,sBranch = @sBranch -- ,rHub = @rHub -- ,rCountry = @rCountry -- ,rsAgent = @rsAgent -- ,rAgent = @rAgent -- ,rBranch = @rBranch -- ,cost = @cost -- ,margin = @margin -- ,agentMargin = @agentMargin -- ,spFlag = @spFlag -- ,modifiedBy = @user -- ,modifiedDate = GETDATE() -- WHERE sHub = @sHub AND -- sCountry = @sCountry AND -- ssAgent = @ssAgent AND -- ISNULL(sAgent, 0) = ISNULL(@sAgent, 0) AND -- ISNULL(sBranch, 0) = ISNULL(@sBranch, 0) AND -- rHub = @rHub AND -- rCountry = @rCountry AND -- rsAgent = @rsAgent AND -- ISNULL(rAgent, 0) = ISNULL(@rAgent, 0) AND -- ISNULL(rBranch, 0) = ISNULL(@rBranch, 0) AND -- spFlag = @spFlag EXEC proc_errorHandler 0, 'Record has been updated successfully.', @seRateId END ELSE BEGIN BEGIN TRANSACTION INSERT INTO seRate ( baseCurrency ,localCurrency ,sHub ,sCountry ,ssAgent ,sAgent ,sBranch ,rHub ,rCountry ,rsAgent ,rAgent ,rBranch ,[state] ,zip ,agentGroup ,cost ,margin ,agentMargin ,ve ,ne ,spFlag ,effectiveFrom ,effectiveTo ,isEnable ,createdBy ,createdDate ) SELECT @baseCurrency ,@localCurrency ,@sHub ,@sCountry ,@ssAgent ,@sAgent ,@sBranch ,@rHub ,@rCountry ,@rsAgent ,@rAgent ,@rBranch ,@state ,@zip ,@agentGroup ,@cost ,@margin ,@agentMargin ,@ve ,@ne ,@spFlag ,@effectiveFrom ,@effectiveTo ,@isEnable ,@user ,GETDATE() SET @seRateId = SCOPE_IDENTITY() IF @@TRANCOUNT > 0 COMMIT TRANSACTION EXEC proc_errorHandler 0, 'Record has been updated successfully.', @seRateId END END ELSE IF @flag = 'a' BEGIN IF EXISTS ( SELECT 'X' FROM seRateHistory WITH(NOLOCK) WHERE seRateId = @seRateId AND createdBy = @user AND approvedBy IS NULL ) BEGIN SELECT mode.* ,CONVERT(VARCHAR, mode.effectiveFrom, 101) effFrom ,CONVERT(VARCHAR, mode.effectiveTo, 101) effTo FROM seRateHistory mode WITH(NOLOCK) INNER JOIN seRate main WITH(NOLOCK) ON mode.seRateId = main.seRateId WHERE mode.seRateId= @seRateId AND mode.approvedBy IS NULL END ELSE BEGIN SELECT * ,CONVERT(VARCHAR, effectiveFrom, 101) effFrom ,CONVERT(VARCHAR, effectiveTo, 101) effTo FROM seRate WITH(NOLOCK) WHERE seRateId = @seRateId END END ELSE IF @flag = 'u' BEGIN IF EXISTS ( SELECT 'X' FROM seRate WITH(NOLOCK) WHERE seRateId = @seRateId AND ( createdBy <> @user AND approvedBy IS NULL) ) BEGIN EXEC proc_errorHandler 1, '