USE [FastMoneyPro_Remit] GO /****** Object: StoredProcedure [dbo].[proc_UpdateBDTRate_FromXE] Script Date: 9/27/2019 1:30:14 PM ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO --exec proc_UpdateBDTRate_FromXE @FromCurr='usd',@toCurr='bdt',@LiveRate='84.8',@flag = 'P' CREATE proc [dbo].[proc_UpdateBDTRate_FromXE] @FromCurr VARCHAR(5) = NULL, @toCurr VARCHAR(5) = NULL, @LiveRate FLOAT = NULL, @requestXml VARCHAR(MAX) = NULL, @responseXml VARCHAR(MAX) = NULL, @flag varchar(10) AS SET NOCOUNT ON; SET XACT_ABORT ON --select @FromCurr,@toCurr,@cRate --return BEGIN TRY declare @defExRateId int ,@user varchar(50) = 'system',@msg varchar(max) = '' EXEC proc_errorHandler 0, 'Record updated successfully.', 0 RETURN --IF (CAST(GETDATE() AS DATE) <'2019-08-19') --BEGIN -- EXEC proc_errorHandler 0, 'Record updated successfully.', 0 -- RETURN --END INSERT INTO tlbExrateApilogs(requestXml,responseXml,createdBy) SELECT @requestXml,@responseXml,@user IF @FromCurr = 'error' BEGIN EXEC proc_errorHandler 1,@responseXml, NULL ----## SEND SMS THROUGH KT NETWORK INSERT INTO KT_SMS.dbo.SDK_SMS_SEND ( USER_ID, SCHEDULE_TYPE, SUBJECT, SMS_MSG, NOW_DATE, SEND_DATE, CALLBACK, DEST_INFO) select 'globalmoney',0,'XE',left(@responseXml,90),format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01030436864' union all select 'globalmoney',0,'XE',left(@responseXml,90),format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01074518940' RETURN END IF ISNULL(@LiveRate, 0) = 0 BEGIN SET @MSG = 'Sorry 0 ex rate for ' + @toCurr + ' can not be updated'; ----## SEND SMS THROUGH KT NETWORK INSERT INTO KT_SMS.dbo.SDK_SMS_SEND ( USER_ID, SCHEDULE_TYPE, SUBJECT, SMS_MSG, NOW_DATE, SEND_DATE, CALLBACK, DEST_INFO) select 'globalmoney',0,'XE','Sorry 0 ex rate can not be updated',format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','1^01030436864' union all select 'globalmoney',0,'XE',@MSG,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','1^01074518940' EXEC proc_errorHandler 1, 'Sorry 0 ex rate can not be updated.', NULL RETURN END DECLARE @pRate FLOAT DECLARE @tolCMax FLOAT, @tolCMin FLOAT, @tolPMax FLOAT, @tolPMin FLOAT, @errorMsg VARCHAR(200), @id INT SELECT defExRateId = defExRateId,currency = currency,cRate = cRate, cMargin = ISNULL(cMargin,0),pRate = ISNULL(pRate,0) ,pMargin = ISNULL(pMargin,0) INTO #tempDefRate FROM defExRate WITH(NOLOCK) WHERE currency = @toCurr and baseCurrency = @FromCurr IF NOT EXISTS(SELECT 'A' FROM #tempDefRate) BEGIN set @msg = 'No cost rate setup found for currency '+@FromCurr+' and '+@toCurr EXEC proc_errorHandler 1, @msg, NULL ----## SEND SMS THROUGH KT NETWORK INSERT INTO KT_SMS.dbo.SDK_SMS_SEND ( USER_ID, SCHEDULE_TYPE, SUBJECT, SMS_MSG, NOW_DATE, SEND_DATE, CALLBACK, DEST_INFO) SELECT 'globalmoney',0,'XE',@msg,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01030436864' union all SELECT 'globalmoney',0,'XE',@msg,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01074518940' RETURN END SELECT @tolCMax = ISNULL(cMax, 0.0) ,@tolCMin = ISNULL(cMin, 0.0) ,@tolPMax = ISNULL(pMax, 0.0) ,@tolPMin = ISNULL(pMin, 0.0) FROM rateMask WITH(NOLOCK) WHERE currency = @toCurr AND baseCurrency = @FromCurr IF NOT EXISTS(SELECT 'X' FROM rateMask WITH(NOLOCK) WHERE currency = @toCurr) BEGIN SET @msg = 'Please define rate mask for currency ' + @toCurr EXEC proc_errorHandler 1, @msg, NULL ----## SEND SMS THROUGH KT NETWORK INSERT INTO KT_SMS.dbo.SDK_SMS_SEND ( USER_ID, SCHEDULE_TYPE, SUBJECT, SMS_MSG, NOW_DATE, SEND_DATE, CALLBACK, DEST_INFO) select 'globalmoney',0,'XE',@msg,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01030436864' union all select 'globalmoney',0,'XE',@msg,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01074518940' RETURN END IF @flag = 'P' BEGIN --Collection SET @pRate = ROUND(@LiveRate,2) -0.05 IF EXISTS (SELECT 'A' FROM #tempDefRate WHERE @pRate - ISNULL(pMargin, 0) > @tolPMax) BEGIN SET @errorMsg = 'BDT Max tolerance exceeds.Rate must lie between ' + CAST(@tolPMin AS VARCHAR) + ' AND ' + CAST(@tolPMax AS VARCHAR) EXEC proc_errorHandler 1, @errorMsg, NULL ----## SEND SMS THROUGH KT NETWORK INSERT INTO KT_SMS.dbo.SDK_SMS_SEND ( USER_ID, SCHEDULE_TYPE, SUBJECT, SMS_MSG, NOW_DATE, SEND_DATE, CALLBACK, DEST_INFO) select 'globalmoney',0,'XE',@errorMsg,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01030436864' union all select 'globalmoney',0,'XE',@errorMsg,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01074518940' RETURN END IF EXISTS (SELECT 'A' FROM #tempDefRate WHERE @pRate - ISNULL(pMargin, 0) < @tolPMin) BEGIN SET @errorMsg = 'BDT Min tolerance exceeds.Rate must lie between ' + CAST(@tolPMin AS VARCHAR) + ' AND ' + CAST(@tolPMax AS VARCHAR) EXEC proc_errorHandler 1, @errorMsg, NULL ----## SEND SMS THROUGH KT NETWORK INSERT INTO KT_SMS.dbo.SDK_SMS_SEND ( USER_ID, SCHEDULE_TYPE, SUBJECT, SMS_MSG, NOW_DATE, SEND_DATE, CALLBACK, DEST_INFO) SELECT 'globalmoney',0,'XE',@errorMsg,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01030436864' UNION All SELECT 'globalmoney',0,'XE',@errorMsg,format(getdate(),'yyyyMMddHHmmss'),format(getdate(),'yyyyMMddHHmmss'),'1588-6864','gme^01074518940' RETURN END END CREATE TABLE #exRateIdTempMain(exRateTreasuryId INT) CREATE TABLE #exRateIdTempMod(exRateTreasuryId INT) BEGIN TRANSACTION --Currency Rate/ Agent Rate Update------------------------------------------------------------------------------------ UPDATE D SET pRate = @pRate ,modifiedBy = @user ,modifiedDate = GETDATE() FROM defExRate D INNER JOIN #tempDefRate T ON T.defExRateId = D.defExRateId --Change Record History----------------------------------------------------------------------------------------------- INSERT INTO defExRateHistory( defExRateId ,setupType ,currency,country,agent,baseCurrency,tranType,factor ,cRate,cMargin,cMax,cMin ,pRate,pMargin,pMax,pMin ,isEnable,createdBy,createdDate,approvedBy,approvedDate,modType ) SELECT main.defExRateId ,main.setupType ,main.currency,main.country,main.agent,main.baseCurrency,main.tranType,factor ,T.cRate,T.cMargin,cMax,cMin ,main.pRate,T.pMargin,pMax,pMin ,isEnable,@user,GETDATE(),@user,GETDATE(),'U' FROM defExRate main WITH(NOLOCK) INNER JOIN #tempDefRate T ON T.defExRateId = main.defExRateId --FROM defExRate main WITH(NOLOCK) WHERE defExRateId = @defExRateId IF @flag = 'P' BEGIN --1. Get All Corridor records affected by receive cost rate change DELETE FROM #exRateIdTempMain INSERT INTO #exRateIdTempMain SELECT exRateTreasuryId FROM exRateTreasury e WITH(NOLOCK) INNER JOIN #tempDefRate R ON R.defExRateId = E.pRateId --2. Update Records in Mod Table if data already exist in mod table IF EXISTS(SELECT 'X' FROM exRateTreasuryMod mode WITH(NOLOCK) INNER JOIN #exRateIdTempMain temp ON mode.exRateTreasuryId = temp.exRateTreasuryId) BEGIN DELETE FROM #exRateIdTempMod INSERT INTO #exRateIdTempMod SELECT mode.exRateTreasuryId FROM exRateTreasuryMod mode WITH(NOLOCK) INNER JOIN #exRateIdTempMain temp ON mode.exRateTreasuryId = temp.exRateTreasuryId UPDATE ert SET pRate = @pRate --,pMargin = @pMargin ,maxCrossRate = ROUND(@pRate/def.cRate, dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency)) ,crossRate = ROUND((@pRate - ert.pMargin - pHoMargin)/(def.cRate + def.cMargin + cHoMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency)) ,customerRate = CASE WHEN ISNULL(toleranceOn, '') IN ('S', 'P', '') THEN ROUND((@pRate - ert.pMargin - pHoMargin - pAgentMargin)/(def.cRate + def.cMargin + cHoMargin + cAgentMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency)) WHEN ISNULL(toleranceOn, '') IN ('C') THEN ROUND((@pRate - ert.pMargin - pHoMargin)/(def.cRate + def.cMargin + cHoMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency)) - ISNULL(agentCrossRateMargin, 0) END ,createdBy = @user ,createdDate = GETDATE() FROM exRateTreasuryMod ert INNER JOIN #tempDefRate def ON ert.cRateId = def.defExRateId INNER JOIN #exRateIdTempMod temp ON ert.exRateTreasuryId = temp.exRateTreasuryId END --3. Update Record in main table for modType Insert. UPDATE ert SET pRate = @pRate --,pMargin = @pMargin ,maxCrossRate = ROUND(@pRate/def.cRate, dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency)) ,crossRate = ROUND((@pRate - tef.pMargin - pHoMargin)/(def.cRate + def.cMargin + cHoMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency)) --,customerRate = ROUND((@pRate - @pMargin - pHoMargin - pAgentMargin)/(def.cRate + def.cMargin + cHoMargin + cAgentMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency)) ,customerRate = CASE WHEN ISNULL(toleranceOn, '') IN ('S', 'P', '') THEN ROUND((@pRate - tef.pMargin - pHoMargin - pAgentMargin)/(def.cRate + def.cMargin + cHoMargin + cAgentMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency)) WHEN ISNULL(toleranceOn, '') IN ('C') THEN ROUND((@pRate - tef.pMargin - pHoMargin)/(def.cRate + def.cMargin + cHoMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency)) - ISNULL(agentCrossRateMargin, 0) END ,createdBy = @user ,createdDate = GETDATE() FROM exRateTreasury ert INNER JOIN defExRate def ON ert.cRateId = def.defExRateId INNER JOIN #tempDefRate tef ON ert.pRateId = tef.defExRateId WHERE ert.approvedBy IS NULL INSERT INTO exRateTreasuryMod( exRateTreasuryId ,cRateId,cCurrency,cCountry,cAgent,cRateFactor,cRate,cMargin,cHoMargin,cAgentMargin ,pRateId,pCurrency,pCountry,pAgent,pRateFactor,pRate,pMargin,pHoMargin,pAgentMargin ,sharingType ,sharingValue ,toleranceOn ,agentTolMin ,agentTolMax ,customerTolMin ,customerTolMax ,crossRate ,customerRate ,maxCrossRate ,agentCrossRateMargin ,tolerance ,crossRateFactor ,isActive ,modType,createdBy,createdDate ) SELECT exRateTreasuryId ,ert.cRateId,ert.cCurrency,cCountry,cAgent,cRateFactor,def.cRate,def.cMargin,cHoMargin,cAgentMargin ,ert.pRateId,ert.pCurrency,pCountry,pAgent,pRateFactor,@pRate,tef.pMargin,pHoMargin,pAgentMargin ,ert.sharingType ,ert.sharingValue ,ert.toleranceOn ,ert.agentTolMin ,ert.agentTolMax ,ert.customerTolMin ,ert.customerTolMax ,ROUND((@pRate - tef.pMargin - pHoMargin)/(def.cRate + def.cMargin + cHoMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency)) ,CASE WHEN ISNULL(toleranceOn, '') IN ('S', 'P', '') THEN ROUND((@pRate - tef.pMargin - pHoMargin - pAgentMargin)/(def.cRate + def.cMargin + cHoMargin + cAgentMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency)) WHEN ISNULL(toleranceOn, '') IN ('C') THEN ROUND((@pRate - tef.pMargin - pHoMargin)/(def.cRate + def.cMargin + cHoMargin), dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency)) - ISNULL(ert.agentCrossRateMargin, 0) END ,ROUND(@pRate/def.cRate, dbo.FNAGetCrossRateDecimalMask(ert.cCurrency, ert.pCurrency)) ,ert.agentCrossRateMargin ,tolerance ,crossRateFactor ,ert.isActive ,'U',@user,GETDATE() FROM exRateTreasury ert WITH(NOLOCK) INNER JOIN defExRate def WITH(NOLOCK) ON ert.cRateId = def.defExRateId INNER JOIN #tempDefRate tef WITH(NOLOCK) ON ert.pRateId = tef.defExRateId WHERE ert.approvedBy IS NOT NULL AND ISNULL(ert.isActive, 'N') = 'Y' AND ert.exRateTreasuryId NOT IN (SELECT exRateTreasuryId FROM #exRateIdTempMod) UPDATE ert SET ert.isUpdated = 'Y' FROM exRateTreasury ert INNER JOIN #tempDefRate tef WITH(NOLOCK) ON ert.pRateId = tef.defExRateId WHERE approvedBy IS NOT NULL AND ISNULL(isActive, 'N') = 'Y' END IF @@TRANCOUNT > 0 COMMIT TRANSACTION EXEC proc_errorHandler 0, 'Record updated successfully.', @defExRateId declare @exRateTreasuryIds varchar(max)='' select @exRateTreasuryIds = @exRateTreasuryIds+cast(exRateTreasuryId as varchar)+',' from exRateTreasuryMod(nolock) where createdBy='system' set @exRateTreasuryIds = left(@exRateTreasuryIds,len(@exRateTreasuryIds)-1) EXEC proc_exRateTreasury @flag = 'approve' , @user ='system',@exRateTreasuryIds = @exRateTreasuryIds end try begin catch IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION set @errorMsg = error_Message() EXEC proc_errorHandler 1,@errorMsg, @defExRateId end catch GO