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.
 
 
 

788 lines
27 KiB

USE [FastMoneyPro_Remit]
GO
/****** Object: StoredProcedure [dbo].[proc_balanceTopUp] Script Date: 7/4/2019 11:35:48 AM ******/
DROP PROCEDURE [dbo].[proc_balanceTopUp]
GO
/****** Object: StoredProcedure [dbo].[proc_balanceTopUp] Script Date: 7/4/2019 11:35:48 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROC [dbo].[proc_balanceTopUp]
@flag VARCHAR(50) = NULL
,@user VARCHAR(30) = NULL
,@btId VARCHAR(30) = NULL
,@agentId INT = NULL
,@amount MONEY = NULL
,@topUpExpiryDate DATETIME = NULL
,@remarks VARCHAR(MAX) = NULL
,@hasChanged CHAR(1) = NULL
,@agentCountry VARCHAR(200) = NULL
,@agentDistrict VARCHAR(200) = NULL
,@agentLocation VARCHAR(200) = NULL
,@agentName VARCHAR(200) = NULL
,@createdBy VARCHAR(50) = NULL
,@approvedBy VARCHAR(50) = NULL
,@approvedDate VARCHAR(50) = NULL
,@createdDate VARCHAR(50) = NULL
,@approvedFromDate DATETIME = NULL
,@approvedToDate DATETIME = NULL
,@riskyAgent 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)
,@userId INT
,@today DATETIME = DATEADD(DAY,7,CONVERT(VARCHAR, GETDATE(), 101))
,@lastBgId INT
SELECT
@logIdentifier = 'btId'
,@logParamMain = 'balanceTopUp'
,@logParamMod = 'balanceTopUpMod'
,@module = '20'
,@tableAlias = 'Balance Top Up'
IF @flag = 'i'
BEGIN
SELECT @userId = userId FROM applicationUsers WHERE userName = @user
IF NOT EXISTS(SELECT 'X' FROM creditLimit WHERE agentId = @agentId AND ISNULL(isActive, 'N') = 'Y')
BEGIN
EXEC proc_errorHandler 1, 'Sorry, Ledger not found', @user
RETURN
END
IF NOT EXISTS(SELECT 'X' FROM topUpLimit WHERE userId = @userId)
BEGIN
EXEC proc_errorHandler 1, 'Operation Unsuccessful, You do not have permission.', @user
RETURN
END
IF @amount IS NULL
BEGIN
EXEC proc_errorHandler 1, 'Please enter the amount', @user
RETURN
END
SELECT
@lastBgId = MAX(bgId)
FROM bankGuarantee WITH(NOLOCK)
WHERE agentId = @agentId
AND ISNULL(isDeleted,'N') <> 'Y'
AND ISNULL(isActive,'Y') <>'N'
IF EXISTS(SELECT 'x' FROM bankGuarantee WITH(NOLOCK)
WHERE bgId = @lastBgId AND expiryDate < @today)
BEGIN
UPDATE dbo.creditLimit SET
limitAmt = 0,
topUpToday = 0,
modifiedBy = @user,
modifiedDate = GETDATE()
WHERE agentId = @agentId
SELECT '1','Bank Guarantee for this agent has been expired or going to expire. Please contact agent.',NULL
RETURN
END
IF @amount > 0
BEGIN
IF NOT EXISTS(SELECT 'X' FROM topUpLimit WHERE userId = @userId AND limitPerDay > (
SELECT ISNULL(SUM(ISNULL(amount, 0)),0) FROM balanceTopUp
WHERE createdDate BETWEEN CONVERT(VARCHAR, GETDATE(), 101) AND CONVERT(VARCHAR, GETDATE(), 101) + ' 23:59:59'
AND agentId = @agentId
AND createdBy = @user
))
BEGIN
EXEC proc_errorHandler 1, 'Sorry, Your top up limit authority for today for this agent has exceeded.', @user
RETURN
END
END
IF(@amount > ISNULL((SELECT balance FROM applicationUsers WITH(NOLOCK) WHERE userName = @user), 0))
BEGIN
EXEC proc_errorHandler 1, 'Sorry, You do not have sufficient balance for the operation', @user
RETURN
END
IF(ISNULL((SELECT perTopUpLimit FROM topUpLimit WHERE userId = @userId AND approvedBy IS NOT NULL), 0) < @amount)
BEGIN
EXEC proc_errorHandler 1, 'Sorry, Top-up amount exceeded the User Per Top Up Limit', @user
RETURN
END
IF(ISNULL((SELECT SUM(perTopUpAmt) FROM creditLimit WHERE agentId = @agentId AND approvedBy IS NOT NULL), 0) < @amount) --changed due to multi pule result
BEGIN
EXEC proc_errorHandler 1, 'Sorry, Top-up amount exceeded the Agent Per Top Up Limit', @user
RETURN
END
DECLARE @basicLimit MONEY, @topUpT MONEY, @topUpY MONEY, @topUpYCalc MONEY, @maxLimitAmt MONEY, @todaysAddedMaxLimit MONEY
SELECT
@basicLimit = ISNULL(cl.limitAmt, 0)
,@topUpT = ISNULL(cl.topUpToday, 0)
,@topUpY = ISNULL(cl.topUpTillYesterday, 0)
,@maxLimitAmt = ISNULL(cl.maxLimitAmt, 0)
,@todaysAddedMaxLimit = ISNULL(cl.todaysAddedMaxLimit, 0)
,@topUpYCalc = CASE WHEN cl.topUpTillYesterday - (CASE WHEN (v.clr_bal_amt - cl.yesterdaysBalance) < 0 THEN 0 ELSE (v.clr_bal_amt - cl.yesterdaysBalance) END) - cl.todaysPaid - cl.todaysCancelled + cl.todaysEPI - cl.todaysPOI <= 0 THEN 0
ELSE cl.topUpTillYesterday - (CASE WHEN (v.clr_bal_amt - cl.yesterdaysBalance) < 0 THEN 0 ELSE (v.clr_bal_amt - cl.yesterdaysBalance) END) - cl.todaysPaid - cl.todaysCancelled + cl.todaysEPI - cl.todaysPOI END
FROM creditLimit cl WITH(NOLOCK)
INNER JOIN agentMaster am WITH(NOLOCK) ON cl.agentId = am.agentId
INNER JOIN dbo.vWAgentClrBal v ON v.map_code = am.mapCodeInt WHERE cl.agentId = @agentId
IF((@amount + @basicLimit + @topUpT + @topUpYCalc) > @maxLimitAmt + @todaysAddedMaxLimit)
BEGIN
EXEC proc_errorHandler 1, 'Sorry, Agent Max Limit Amount exceeded', @user
RETURN
END
BEGIN TRANSACTION
INSERT INTO balanceTopUp (
agentId
,amount
,topUpExpiryDate
,createdBy
,createdDate
)
SELECT
@agentId
,@amount
,@topUpExpiryDate
,@user
,dbo.FNAGetDateInNepalTZ()
SET @modType = 'Insert'
EXEC [dbo].proc_GetColumnToRow @logParamMain, @logIdentifier, @btId , @newValue OUTPUT
INSERT INTO #msg(errorCode, msg, id)
EXEC proc_applicationLogs 'i', NULL, @modType, @tableAlias, @btId, @user, @oldValue, @newValue
IF EXISTS (SELECT 'x' FROM #msg WHERE errorCode <> '0')
BEGIN
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION
EXEC proc_errorHandler 1, 'Failed to add new record.', @btId
RETURN
END
IF @@TRANCOUNT > 0
COMMIT TRANSACTION
DECLARE @message AS VARCHAR(MAX)
SET @message='Top Up Limit Amount '+ CAST(@amount AS VARCHAR) +' has been requested successfully.'
EXEC proc_errorHandler 0, @message, @btId
END
ELSE IF @flag = 'ld' --Other Limit Detail
BEGIN
SELECT
am.agentName,
cl.maxLimitAmt,
cl.perTopUpAmt,
topUpTillYesterday = CASE WHEN cl.topUpTillYesterday - (CASE WHEN (v.clr_bal_amt - cl.yesterdaysBalance) < 0 THEN 0 ELSE
(v.clr_bal_amt - cl.yesterdaysBalance) END) - cl.todaysPaid - cl.todaysCancelled + cl.todaysEPI - cl.todaysPOI <= 0
THEN 0 ELSE cl.topUpTillYesterday - (CASE WHEN (v.clr_bal_amt - cl.yesterdaysBalance) < 0 THEN 0
ELSE (v.clr_bal_amt - cl.yesterdaysBalance) END) - cl.todaysPaid - cl.todaysCancelled + cl.todaysCancelled - cl.todaysPOI END,
cl.topUpToday,
todaysCancel = cl.todaysCancelled,
cl.todaysEPI,
cl.todaysPOI,
todaysFundDeposit = (V.clr_bal_amt - cl.yesterdaysBalance)
FROM creditLimit cl WITH(NOLOCK)
INNER JOIN agentMaster am WITH(NOLOCK) ON cl.agentId = am.agentId
INNER JOIN dbo.vWAgentClrBal v ON v.map_code = am.mapCodeInt WHERE cl.agentId = @agentId
END
ELSE IF @flag = 'a'
BEGIN
SELECT
am.agentId
,am.agentName
,availableAmt = ISNULL(dbo.FNAGetLimitBal(@agentId), 0)
,limit = ISNULL(main.dr_bal_lim, 0)
,maxLimitAmt = ISNULL(cr.maxLimitAmt, 0)
,currency = ISNULL(cm.currencyCode, 'N/A')
FROM agentMaster am
LEFT JOIN ac_master main ON am.agentId = main.agent_id
LEFT JOIN currencyMaster cm WITH(NOLOCK) ON main.ac_currency = cm.currencyId
LEFT JOIN creditLimit cr WITH(NOLOCK) ON am.agentId = cr.agentId
WHERE am.agentType = 2903 AND am.agentId = @agentId
END
ELSE IF @flag = 'u'
BEGIN
BEGIN TRANSACTION
UPDATE balanceTopUp SET
agentId = @agentId
,amount = @amount
,topUpExpiryDate = @topUpExpiryDate
,modifiedBy = @user
,modifiedDate = GETDATE()
WHERE btId = @btId
EXEC [dbo].proc_GetColumnToRow @logParamMain, @logIdentifier, @btId, @newValue OUTPUT
INSERT INTO #msg(errorCode, msg, id)
EXEC proc_applicationLogs 'i', NULL, @modType, @tableAlias, @btId, @user, @oldValue, @newValue
IF EXISTS (SELECT 'x' FROM #msg WHERE errorCode <> '0')
BEGIN
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION
EXEC proc_errorHandler 1, 'Failed to update record.', @btId
RETURN
END
IF @@TRANCOUNT > 0
COMMIT TRANSACTION
DECLARE @msg AS VARCHAR(MAX)
SET @msg='Top Up Amount '+ CAST(@amount AS VARCHAR) +' has been updated successfully.'
EXEC proc_errorHandler 0, @msg, @btId
END
ELSE IF @flag = 'd'
BEGIN
BEGIN TRANSACTION
UPDATE balanceTopUp SET
btStatus='Deleted'
,modifiedDate = GETDATE()
,modifiedBy = @user
WHERE btId = @btId
SET @modType = 'Delete'
EXEC [dbo].proc_GetColumnToRow @logParamMain, @logIdentifier, @btId, @oldValue OUTPUT
INSERT INTO #msg(errorCode, msg, id)
EXEC proc_applicationLogs 'i', NULL, @modType, @tableAlias, @btId, @user, @oldValue, @newValue
IF EXISTS (SELECT 'x' FROM #msg WHERE errorCode <> '0')
BEGIN
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION
EXEC proc_errorHandler 1, 'Failed to delete record.', @btId
RETURN
END
IF @@TRANCOUNT > 0
COMMIT TRANSACTION
EXEC proc_errorHandler 0, 'Record deleted successfully.', @btId
END
ELSE IF @flag = 'al' --Approval List
BEGIN
IF @sortBy IS NULL
SET @sortBy = 'agentName'
IF @sortOrder IS NULL
SET @sortOrder = 'ASC'
SET @table = '(
SELECT
bal.btId
,agentName = am.agentName+'' <b>(''+bal.createdBy+'')</b>''
,bal.amount
,bal.createdBy
,bal.createdDate
,availableBal = dbo.FNAGetLimitBalWithNegValue(am.agentId)
,currBal = V.clr_bal_amt - cl.todaysSent + cl.todaysPaid + cl.todaysCancelled - cl.todaysEPI + cl.todaysPOI
,appAmt = ''<input id="topUp_'' + CAST(bal.btId AS VARCHAR) + ''" type="text" style="width: 75px; text-align: right;" value="'' + CAST(bal.amount AS VARCHAR) + ''"/>''
,securityType = CASE WHEN bg.agentId IS NOT NULL THEN ''Bank :''+dbo.ShowDecimal(bg.amount)+''</br>[Exp. Date :''+convert(varchar,bg.expiryDate,101)+'']''
WHEN cs.agentId IS NOT NULL THEN ''Cash :''+dbo.ShowDecimal(cs.cashDeposit) ELSE ''-'' END
FROM balanceTopUp bal WITH(NOLOCK)
inner join creditLimit cl with(nolock) on cl.agentId = bal.agentId
INNER JOIN agentMaster am WITH(NOLOCK) ON bal.agentId = am.agentId
INNER JOIN dbo.vWAgentClrBal V ON V.map_code = am.mapCodeInt
LEFT JOIN dbo.cashSecurity cs WITH(NOLOCK) ON cs.agentId = bal.agentId AND ISNULL(cs.isDeleted,''N'') <>''Y''
LEFT JOIN dbo.bankGuarantee bg WITH(NOLOCK) ON bg.agentId = bal.agentId AND ISNULL(bg.isDeleted,''N'') <>''Y''
WHERE bal.approvedBy IS NULL
) x
'
SET @sql_filter = ''
IF @agentName IS NOT NULL
SET @sql_filter = @sql_filter + ' AND ISNULL(agentName, '''') LIKE ''%' + @agentName + '%'''
SET @select_field_list ='
btId
,agentName
,amount
,createdBy
,createdDate
,availableBal
,currBal
,appAmt
,securityType
'
EXEC dbo.proc_paging
@table
,@sql_filter
,@select_field_list
,@extra_field_list
,@sortBy
,@sortOrder
,@pageSize
,@pageNumber
END
ELSE IF @flag = 's'
BEGIN
IF @sortBy IS NULL
SET @sortBy = 'agentName'
IF @sortOrder IS NULL
SET @sortOrder = 'ASC'
IF @user IN ('admin', 'admin1')
BEGIN
SET @table = '(
SELECT
main.crLimitId
,am.agentId
,am.agentName
,am.agentCountry
,am.agentDistrict
,loc.districtName agentLocation
,currency = ISNULL(cm.currencyCode, ''N/A'')
,limitAmt = ISNULL(main.limitAmt, 0)
,maxLimitAmt = ISNULL(main.maxLimitAmt, 0)
,perTopUpAmt = ISNULL(main.perTopUpAmt, 0)
,currentBalance = ABS(V.clr_bal_amt - main.todaysSent + main.todaysPaid + main.todaysCancelled - main.todaysEPI + main.todaysPOI)
,availableLimit =
main.limitAmt - V.clr_bal_amt - main.todaysSent + main.todaysPaid + main.todaysCancelled - main.todaysEPI + main.todaysPOI
,expiryDate = ISNULL(CAST(main.expiryDate AS VARCHAR), ''N/A'')
,limitToppedUp = CASE WHEN main.topUpTillYesterday - (CASE WHEN (V.clr_bal_amt - main.yesterdaysBalance) < 0 THEN 0 ELSE (V.clr_bal_amt - main.yesterdaysBalance) END)
- main.todaysPaid - main.todaysCancelled + main.todaysEPI - main.todaysPOI <= 0 THEN
main.topUpToday ELSE main.topUpToday + (main.topUpTillYesterday - (CASE WHEN (V.clr_bal_amt - main.yesterdaysBalance) < 0 THEN 0 ELSE (V.clr_bal_amt - main.yesterdaysBalance) END)
- main.todaysPaid - main.todaysCancelled + main.todaysEPI - main.todaysPOI) END
,topUp = ''<input id="topUp_'' + CAST(am.agentId AS VARCHAR) + ''" type="text" style="width: 75px; text-align: right;"/>''
,todaysSent = main.todaysSent
,todaysPaid = main.todaysPaid
,todaysCancelled = main.todaysCancelled
,main.createdBy
,main.createdDate
,main.modifiedBy
FROM agentMaster am
INNER JOIN dbo.vWAgentClrBal V ON V.map_code = am.mapCodeInt
INNER JOIN creditLimit main ON am.agentId = main.agentId
LEFT JOIN currencyMaster cm WITH(NOLOCK) ON main.currency = cm.currencyId
LEFT JOIN api_districtList loc with(nolock) ON loc.districtCode=am.agentLocation
WHERE am.isSettlingAgent = ''Y''
)
'
END
ELSE
BEGIN
IF OBJECT_ID('tempdb..#agentId') IS NOT NULL
DROP TABLE #agentId
CREATE TABLE #agentId(agentId INT)
INSERT INTO #agentId
SELECT agentId FROM agentMaster WHERE ISNULL(isDeleted, 'N') = 'N'
DELETE FROM #agentId
FROM #agentId ag
INNER JOIN
agentGroupMaping agm ON agm.agentId = ag.agentId
WHERE agm.groupCat = '6900' AND ISNULL(agm.isDeleted, 'N') = 'N'
INSERT INTO #agentId
SELECT DISTINCT agm.agentId FROM userGroupMapping ugm
INNER JOIN agentGroupMaping agm ON agm.groupDetail = ugm.groupDetail AND ISNULL(agm.isDeleted, 'N') = 'N' AND ISNULL(ugm.isDeleted, 'N') = 'N'
WHERE ugm.userName = @user
SET @table = '(
SELECT
main.crLimitId
,am.agentId
,am.agentName
,am.agentCountry
,am.agentDistrict
,loc.districtName agentLocation
,currency = ISNULL(cm.currencyCode, ''N/A'')
,limitAmt = ISNULL(main.limitAmt, 0)
,maxLimitAmt = ISNULL(main.maxLimitAmt, 0)
,perTopUpAmt = ISNULL(main.perTopUpAmt, 0)
,currentBalance = V.clr_bal_amt - main.todaysSent + main.todaysPaid + main.todaysCancelled - main.todaysEPI + main.todaysPOI
,availableLimit =
CASE WHEN
main.topUpTillYesterday - (CASE WHEN (V.clr_bal_amt - main.yesterdaysBalance) < 0 THEN 0 ELSE (V.clr_bal_amt - main.yesterdaysBalance) END)
- main.todaysPaid - main.todaysCancelled + main.todaysEPI - main.todaysPOI <= 0 THEN
main.limitAmt + main.topUpToday + V.clr_bal_amt - main.todaysSent + main.todaysPaid + main.todaysCancelled - main.todaysEPI + main.todaysPOI
ELSE
main.limitAmt + (main.topUpTillYesterday - (CASE WHEN (V.clr_bal_amt - main.yesterdaysBalance) < 0
THEN 0 ELSE (V.clr_bal_amt - main.yesterdaysBalance) END) - main.todaysPaid - main.todaysCancelled + main.todaysEPI - main.todaysPOI) +
main.topUpToday + V.clr_bal_amt - main.todaysSent + main.todaysPaid + main.todaysCancelled - main.todaysEPI + main.todaysPOI
END
,expiryDate = ISNULL(CAST(main.expiryDate AS VARCHAR), ''N/A'')
,limitToppedUp = CASE WHEN main.topUpTillYesterday - (CASE WHEN (V.clr_bal_amt - main.yesterdaysBalance) < 0 THEN 0 ELSE (V.clr_bal_amt - main.yesterdaysBalance) END) - main.todaysPaid - main.todaysCancelled + main.todaysEPI - main.todaysPOI <= 0 THEN
main.topUpToday ELSE main.topUpToday + (main.topUpTillYesterday - (CASE WHEN (V.clr_bal_amt - main.yesterdaysBalance) < 0 THEN 0 ELSE (V.clr_bal_amt - main.yesterdaysBalance) END) - main.todaysPaid - main.todaysCancelled + main.todaysEPI - main
.todaysPOI) END
,topUp = ''<input id="topUp_'' + CAST(am.agentId AS VARCHAR) + ''" type="text" style="width: 75px; text-align: right;" />''
,todaysSent = main.todaysSent
,todaysPaid = main.todaysPaid
,todaysCancelled = main.todaysCancelled
,main.createdBy
,main.createdDate
,main.modifiedBy
FROM agentMaster am
INNER JOIN
(
SELECT DISTINCT agentId FROM #agentId
)ag ON am.agentId = ag.agentId
INNER JOIN dbo.vWAgentClrBal V ON V.map_code = am.mapCodeInt
INNER JOIN creditLimit main ON am.agentId = main.agentId
LEFT JOIN currencyMaster cm WITH(NOLOCK) ON main.currency = cm.currencyId
LEFT JOIN api_districtList loc WITH(NOLOCK) ON loc.districtCode=am.agentLocation
WHERE am.isSettlingAgent = ''Y''
)
'
END
SET @table = '(
SELECT
main.crLimitId
,main.agentId
,main.agentName
,main.agentCountry
,main.agentDistrict
,main.agentLocation
,main.currency
,main.limitAmt
,main.perTopUpAmt
,main.limitToppedUp
,main.maxLimitAmt
,main.currentBalance
,main.availableLimit
,main.expiryDate
,main.topUp
,main.todaysSent
,main.todaysPaid
,main.todaysCancelled
,main.createdBy
,main.createdDate
,modifiedBy = main.createdBy
,haschanged = ''N''
FROM ' + @table + ' main
) x
'
SET @sql_filter = ''
IF @haschanged IS NOT NULL
SET @sql_filter = @sql_filter + ' AND haschanged = ''' + @haschanged + ''''
IF @agentCountry IS NOT NULL
SET @sql_filter = @sql_filter + ' AND ISNULL(agentCountry, '''') LIKE ''%' + @agentCountry + '%'''
IF @agentDistrict IS NOT NULL
SET @sql_filter = @sql_filter + ' AND ISNULL(agentDistrict, '''') LIKE ''%' + @agentDistrict + '%'''
IF @agentName IS NOT NULL
SET @sql_filter = @sql_filter + ' AND ISNULL(agentName, '''') LIKE ''%' + @agentName + '%'''
IF @agentLocation IS NOT NULL
SET @sql_filter = @sql_filter + ' AND ISNULL(agentLocation, '''') LIKE ''%' + @agentLocation + '%'''
IF @riskyAgent IS NOT NULL
BEGIN
IF @riskyAgent = 'Y'
BEGIN
SET @sql_filter = @sql_filter + ' AND ((limitToppedUp >= (maxLimitAmt - limitAmt - (0.10 * maxLimitAmt)) AND maxLimitAmt <> limitAmt) OR availableLimit < 0)'
END
END
SET @select_field_list ='
crLimitId
,agentId
,agentName
,agentCountry
,agentDistrict
,agentLocation
,currency
,limitAmt
,perTopUpAmt
,limitToppedUp
,maxLimitAmt
,currentBalance
,availableLimit
,expiryDate
,topUp
,todaysSent
,todaysPaid
,todaysCancelled
,createdBy
,createdDate
,modifiedBy
,hasChanged
'
EXEC dbo.proc_paging
@table
,@sql_filter
,@select_field_list
,@extra_field_list
,@sortBy
,@sortOrder
,@pageSize
,@pageNumber
END
ELSE IF @flag = 'reject'
BEGIN
SELECT
@amount=amount,
@agentId=agentId,
@createdBy = createdBy
FROM balanceTopUp WHERE btId=@btId
BEGIN TRANSACTION
SET @modType = 'Reject'
EXEC [dbo].proc_GetColumnToRow @logParamMain, @logIdentifier, @btId, @oldValue OUTPUT
INSERT INTO #msg(errorCode, msg, id)
EXEC proc_applicationLogs 'i', NULL, @modType, @tableAlias, @btId, @user, @oldValue, @newValue
IF EXISTS (SELECT 'x' FROM #msg WHERE errorCode <> '0')
BEGIN
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION
EXEC proc_errorHandler 1, 'Failed to reject the transaction.', @btId
RETURN
END
UPDATE balanceTopUp SET
btStatus = 'Rejected'
,approvedBy = @user
,approvedDate = dbo.FNAGetDateInNepalTZ()
,remarks = @remarks
,reqAmt= @amount
,amount = 0
WHERE btId=@btId
IF @@TRANCOUNT > 0
COMMIT TRANSACTION
EXEC proc_errorHandler 0, 'Changes rejected successfully.', @btId
END
ELSE IF @flag = 'approve'
BEGIN
DECLARE @maxCreditLimitForAgent MONEY,
@availableBal MONEY,
@currBal MONEY,
@reqAmt MONEY
SELECT @reqAmt = amount,
@agentId = agentId,
@createdBy = createdBy
FROM balanceTopUp WITH(NOLOCK) WHERE btId=@btId
SELECT
@lastBgId = MAX(bgId)
FROM bankGuarantee WITH(NOLOCK)
WHERE agentId = @agentId
AND ISNULL(isDeleted,'N') <> 'Y'
AND ISNULL(isActive,'Y') <>'N'
IF EXISTS(SELECT 'x' FROM bankGuarantee WITH(NOLOCK)
WHERE bgId = @lastBgId AND expiryDate < @today)
BEGIN
UPDATE dbo.creditLimit SET
limitAmt = 0,
topUpToday = 0,
modifiedBy = @user,
modifiedDate = GETDATE()
WHERE agentId = @agentId
SELECT '1','Bank Guarantee for this agent has been expired or going to expire. Please contact agent.',NULL
RETURN
END
IF NOT EXISTS(SELECT 'x' FROM balanceTopUp WITH(NOLOCK) WHERE btId = @btId AND approvedDate IS NULL)
BEGIN
EXEC proc_errorHandler 1, 'Sorry, Record has been approved already. Please CHECK.', @btId
RETURN
END
IF (@amount IS NULL OR @amount = '')
BEGIN
EXEC proc_errorHandler 1, 'Amount should not be blank.', @btId
RETURN
END
IF(@createdBy = @user)
BEGIN
EXEC proc_errorHandler 1, 'You are not authorised to approve this record.', @btId
RETURN
END
SELECT
@basicLimit = ISNULL(cl.limitAmt, 0)
,@topUpT = ISNULL(cl.topUpToday, 0)
,@topUpY = ISNULL(cl.topUpTillYesterday, 0)
,@maxLimitAmt = ISNULL(cl.maxLimitAmt, 0)
,@todaysAddedMaxLimit = ISNULL(cl.todaysAddedMaxLimit, 0)
,@topUpYCalc = CASE WHEN cl.topUpTillYesterday - (CASE WHEN (v.clr_bal_amt - cl.yesterdaysBalance) < 0 THEN 0 ELSE (v.clr_bal_amt - cl.yesterdaysBalance) END) - cl.todaysPaid - cl.todaysCancelled + cl.todaysEPI - cl.todaysPOI <= 0 THEN 0
ELSE cl.topUpTillYesterday - (CASE WHEN (v.clr_bal_amt - cl.yesterdaysBalance) < 0 THEN 0 ELSE (v.clr_bal_amt - cl.yesterdaysBalance) END) - cl.todaysPaid - cl.todaysCancelled + cl.todaysEPI - cl.todaysPOI END
,@currBal = V.clr_bal_amt - cl.todaysSent + cl.todaysPaid + cl.todaysCancelled - cl.todaysEPI + cl.todaysPOI
FROM creditLimit cl WITH(NOLOCK)
INNER JOIN agentMaster am WITH(NOLOCK) ON cl.agentId = am.agentId
INNER JOIN dbo.vWAgentClrBal v ON v.map_code = am.mapCodeInt WHERE cl.agentId = @agentId
IF((@amount + @basicLimit + @topUpT + @topUpYCalc) > @maxLimitAmt + @todaysAddedMaxLimit)
BEGIN
EXEC proc_errorHandler 1, 'Cannot approve record. Agent MAX Limit Amount exceeded', @user
RETURN
END
SELECT @maxCreditLimitForAgent = maxCreditLimitForAgent
FROM topuplimit tl WITH(NOLOCK) INNER JOIN applicationUsers au WITH(NOLOCK) ON tl.userId = au.userId
WHERE au.userName = @user
IF @maxCreditLimitForAgent IS NULL OR @maxCreditLimitForAgent = 0
BEGIN
EXEC proc_errorHandler 1, 'Cannot approve record. User wise agent max credit limit amount has not been set yet.', @user
RETURN
END
SET @availableBal = dbo.FNAGetLimitBalWithNegValue(@agentId)
IF(@maxCreditLimitForAgent + (@currBal - @amount - @availableBal) < 0)
BEGIN
SET @msg = 'You can not approve this record. Your max credit limit for agent has been exceeded. Your Limit: '+ dbo.ShowDecimal(@maxCreditLimitForAgent) +'.'
EXEC proc_errorHandler 1, @msg, @user
RETURN
END
BEGIN TRANSACTION
UPDATE creditLimit SET
topUpToday = ISNULL(topUpToday, 0) + @amount
WHERE agentId = @agentId
UPDATE balanceTopUp SET
btStatus = 'Approved'
,approvedBy = @user
,approvedDate = dbo.FNAGetDateInNepalTZ()
,remarks = @remarks
,amount = @amount
,reqAmt = @reqAmt
WHERE btId = @btId
INSERT INTO #msg(errorCode, msg, id)
EXEC proc_applicationLogs 'i', NULL, @modType, @tableAlias, @btId, @user, @oldValue, @newValue
IF EXISTS (SELECT 'x' FROM #msg WHERE errorCode <> '0')
BEGIN
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION
EXEC proc_errorHandler 1, 'Could not approve the changes.', @btId
RETURN
END
IF @@TRANCOUNT > 0
COMMIT TRANSACTION
EXEC proc_errorHandler 0, 'Balance topup request approved successfully.', @btId
END
ELSE IF @flag='history'
BEGIN
SET @sortBy = 'approvedDate'
SET @sortOrder = 'DESC'
SET @table = '(
select
amount,
isnull(btStatus,''Requested'')btStatus,
createdBy,
createdDate,
approvedBy,
approvedDate
from balanceTopUp
where agentId=''' + CAST(@agentId AS VARCHAR) + '''
) x
'
SET @sql_filter = ''
IF @approvedBy IS NOT NULL
SET @sql_filter = @sql_filter + ' AND ISNULL(approvedBy, '''') LIKE ''%' + @approvedBy + '%'''
IF @createdBy IS NOT NULL
SET @sql_filter = @sql_filter + ' AND ISNULL(createdBy, '''') LIKE ''%' + @createdBy + '%'''
IF @approvedFromDate IS NOT NULL AND @approvedToDate IS NOT NULL
SET @sql_filter = @sql_filter + ' AND approvedDate BETWEEN ''' + CONVERT(VARCHAR,@approvedFromDate, 101) + ''' AND ''' + CONVERT(VARCHAR,@approvedToDate, 101) + ' 23:59:59'''
SET @select_field_list ='
amount
,btStatus
,createdBy
,createdDate
,approvedBy
,approvedDate
'
EXEC dbo.proc_paging
@table
,@sql_filter
,@select_field_list
,@extra_field_list
,@sortBy
,@sortOrder
,@pageSize
,@pageNumber
END
ELSE IF @flag='aa'
BEGIN
SELECT
am.agentId
,am.agentName
,securityType =
CASE WHEN cs.cashDeposit IS NULL AND bg.amount IS NULL THEN 'Security Type'
WHEN cs.cashDeposit IS NULL AND bg.amount IS NOT NULL THEN 'Bank Guarantee'
WHEN cs.cashDeposit IS NOT NULL AND bg.amount IS NULL THEN 'Cash Security'
ELSE 'Security Type' END
,securityValue =
CASE WHEN cs.cashDeposit IS NULL AND bg.amount IS NULL THEN 0
WHEN cs.cashDeposit IS NULL AND bg.amount IS NOT NULL THEN bg.amount
WHEN cs.cashDeposit IS NOT NULL AND bg.amount IS NULL THEN cs.cashDeposit
ELSE 0 END
,baseLimit = ISNULL(cr.limitAmt, 0)
,maxLimit = ISNULL(cr.maxLimitAmt, 0)
,TodaysTopup = ISNULL(cr.topUpToday,0)
,availableBal = ISNULL(dbo.FNAGetLimitBalWithNegValue(bt.agentId), 0)
,currBal = V.clr_bal_amt - cr.todaysSent + cr.todaysPaid + cr.todaysCancelled - cr.todaysEPI + cr.todaysPOI
,ReqLimit = bt.amount
FROM dbo.balanceTopUp bt WITH(NOLOCK)
INNER JOIN agentMaster am ON bt.agentId = am.agentId
LEFT JOIN creditLimit cr WITH(NOLOCK) ON am.agentId = cr.agentId
INNER JOIN dbo.vWAgentClrBal V ON V.map_code = am.mapCodeInt
LEFT JOIN dbo.cashSecurity cs WITH(NOLOCK) ON bt.agentId = cs.agentId
LEFT JOIN dbo.bankGuarantee bg WITH(NOLOCK) ON bt.agentId = bg.agentId
WHERE bt.btId = @btId
END
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION
DECLARE @errorMessage VARCHAR(MAX)
SET @errorMessage = ERROR_MESSAGE()
EXEC proc_errorHandler 1, @errorMessage, @btId
END CATCH
GO