SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Asamco BV - Alex
-- Create date: 26-05-2023
-- Description: Create Segmented GL Account
-- =============================================
CREATE OR ALTER PROCEDURE dbo._as_CreateSegmentedGLAccount
-- Add the parameters for the stored procedure here
@Segment1Code nvarchar(100),
@Segment1Desc nvarchar(100),
@Segment2Code nvarchar(100) = '',
@Segment2Desc nvarchar(100) = '',
@Segment3Code nvarchar(100) = '',
@Segment3Desc nvarchar(100) = '',
@Segment4Code nvarchar(100) = '',
@Segment4Desc nvarchar(100) = '',
@Segment5Code nvarchar(100) = '',
@Segment5Desc nvarchar(100) = '',
@AccountTypeDesc nvarchar(100),
@AllowSales bit = 0,
@AllowPurchases bit = 0,
@AllowJournal bit = 1,
@BranchId int = 0,
@AccountLink bigint OUTPUT
AS
BEGIN
/*
declare @AccountLink bigint =0
EXEC dbo._as_CreateSegmentedGLAccount
@Segment1Code = 'Value4',
@Segment1Desc = 'Desc1',
@Segment2Code = 'Value44',
@Segment2Desc = 'Desc2',
@Segment3Code = 'Value3',
@Segment3Desc = 'Desc3',
@AccountTypeDesc = 'Cash and Cash equivalents',
@AllowSales = 0,
@AllowPurchases = 1,
@AllowJournal = 1,
@BranchId = 0,
@AccountLink = @AccountLink OUTPUT;
SELECT @AccountLink, * FROM Accounts where AccountLink = @AccountLink
*/
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
/*check and or set account type:*/
DECLARE @AccountTypeId int,@Msg nvarchar(1000)
SELECT TOP 1 @AccountTypeId = idGLAccountType FROM _etblGLAccountTypes WHERE cAccountTypeDescription = @AccountTypeDesc
IF COALESCE(@AccountTypeId,0) = 0
BEGIN
SET @Msg = CONCAT('Account Type ',@AccountTypeDesc,' doesnt exist')
RAISERROR(@msg,17,1); return -1
END
/*retrieve or create segment*/
DECLARE @Segment1Id bigint,@Segment2Id bigint,@Segment3Id bigint,@Segment4Id bigint,@Segment5Id bigint
/*Getting or creating segment Ids:*/
--EXEC _as_CreateSegment @Segment1Id output,@Segment1Code,@Segment1Desc,0
EXEC _as_CreateSegment @Segment1Id OUTPUT, @Segment1Code, @Segment1Desc, 0;
EXEC _as_CreateSegment @Segment2Id OUTPUT, @Segment2Code, @Segment2Desc, 1;
EXEC _as_CreateSegment @Segment3Id OUTPUT, @Segment3Code, @Segment3Desc, 2;
EXEC _as_CreateSegment @Segment4Id OUTPUT, @Segment4Code, @Segment4Desc, 3;
EXEC _as_CreateSegment @Segment5Id OUTPUT, @Segment5Code, @Segment5Desc, 4;
DECLARE @MasterSubAcc nvarchar(100), @AccountDesc nvarchar(300), @Divisor varchar(1)
SET @Divisor = COALESCE((SELECT TOP 1 E.cGLSegmentSeparator FROM Entities E),'/')
SELECT @MasterSubAcc = CONCAT(@Segment1Code
,CASE WHEN @Segment2Code <> '' THEN CONCAT(@Divisor,@Segment2Code) ELSE '' END
,CASE WHEN @Segment3Code <> '' THEN CONCAT(@Divisor,@Segment3Code) ELSE '' END
,CASE WHEN @Segment4Code <> '' THEN CONCAT(@Divisor,@Segment4Code) ELSE '' END
,CASE WHEN @Segment5Code <> '' THEN CONCAT(@Divisor,@Segment5Code) ELSE '' END
)
,@AccountDesc = CONCAT(@Segment1Desc
,CASE WHEN @Segment2Desc <> '' THEN CONCAT(@Divisor,@Segment2Desc) ELSE '' END
,CASE WHEN @Segment3Desc <> '' THEN CONCAT(@Divisor,@Segment3Desc) ELSE '' END
,CASE WHEN @Segment4Desc <> '' THEN CONCAT(@Divisor,@Segment4Desc) ELSE '' END
,CASE WHEN @Segment5Desc <> '' THEN CONCAT(@Divisor,@Segment5Desc) ELSE '' END
)
IF NOT EXISTS(SELECT * FROM Accounts A WHERE A.Master_Sub_Account = @MasterSubAcc)
BEGIN
PRINT CONCAT('Creating account: ',
' @Segment1Code>>: ', @Segment1Code,
' @Segment1Desc>>: ', @Segment1Desc,
' @Segment2Code>>: ', @Segment2Code,
' @Segment2Desc>>: ', @Segment2Desc,
' @Segment3Code>>: ', @Segment3Code,
' @Segment3Desc>>: ', @Segment3Desc,
' @Segment4Code>>: ', @Segment4Code,
' @Segment4Desc>>: ', @Segment4Desc,
' @Segment5Code>>: ', @Segment5Code,
' @Segment5Desc>>: ', @Segment5Desc,
' @AccountTypeDesc>>: ', @AccountTypeDesc,
' @AllowSales>>: ', CASE WHEN @AllowSales = 1 THEN 'True' ELSE 'False' END,
' @AllowPurchases>>: ', CASE WHEN @AllowPurchases = 1 THEN 'True' ELSE 'False' END,
' @AllowJournal>>: ', CASE WHEN @AllowJournal = 1 THEN 'True' ELSE 'False' END,
' @BranchId>>: ', @BranchId
);
DECLARE @tblOutput TABLE (Id bigint)
/*Now create the account:*/
INSERT INTO [dbo].[Accounts]
([Master_Sub_Account]
,[AccountLevel]
,[Account]
,[iAccountType]
,[SubAccOfLink]
,[Dept]
,[Brch]
,[Jr]
,[Description]
,[CaseAcc]
,[ActiveAccount]
,[dAccountsTimeStamp]
,[cNextChequeNum]
,[iGLSegment0ID]
,[iGLSegment1ID]
,[iGLSegment2ID]
,[iGLSegment3ID]
,[iGLSegment4ID]
,[iGLSegment5ID]
,[iGLSegment6ID]
,[iGLSegment7ID]
,[iGLSegment8ID]
,[iGLSegment9ID]
,[iReportCategoryID]
,[fBankStatementBalance]
,[cExtDescription]
,[iTaxTypeINVID]
,[iTaxTypeCRNID]
,[iTaxTypeGRVID]
,[iTaxTypeRTSID]
,[iAllowICSales]
,[iAllowICPurchases]
,[iMBReportingCategoryID]
,[iMBCashFlowCategoryID]
,[bMBIsAsset]
,[bMBIsGrant]
,[iMBAssetClassificationID]
,[iMBAssetCategoryID]
,[iMBAssetTypeID]
,[iMBGrantLevel1TypeID]
,[iMBGrantLevel2TypeID]
,[iMBGrantLevel3TypeID]
,[bIsBranchLoanAccount]
,[bForeignBankAcc]
,[iForeignBankCurrencyID]
,[iForeignBankPEXAccID]
,[iForeignBankLEXAccID]
,[bRevalueWithSellingRate]
,[bPaymentsBasedTax]
,[cBankName]
,[cBankAccountName]
,[cBankCode]
,[cBankAccountNumber]
,[cBranchName]
,[cSEPABranchCode]
,[cBankRefNr]
,[Accounts_iBranchID]
)
OUTPUT inserted.AccountLink INTO @tblOutput (Id)
VALUES
(@MasterSubAcc --<Master_Sub_Account, varchar(91),>
,0 --<AccountLevel, int,>
,@MasterSubAcc --<Account, varchar(91),>
,@AccountTypeId --<iAccountType, int,>
,0 --<SubAccOfLink, int,>
,'' --<Dept, varchar(10),>
,'' --<Brch, varchar(10),>
,@AllowJournal --<Jr, bit,>
,@AccountDesc --<Description, varchar(255),>
,'' --<CaseAcc, varchar(10),>
,1 --<ActiveAccount, bit,>
,GETDATE() --<dAccountsTimeStamp, datetime,>
,'' --<cNextChequeNum, varchar(20),>
,@Segment1Id --<iGLSegment0ID, int,>
,@Segment2Id --<iGLSegment1ID, int,>
,@Segment3Id --<iGLSegment2ID, int,>
,@Segment4Id --<iGLSegment3ID, int,>
,@Segment5Id --<iGLSegment4ID, int,>
,0 --<iGLSegment5ID, int,>
,0 --<iGLSegment6ID, int,>
,0 --<iGLSegment7ID, int,>
,0 --<iGLSegment8ID, int,>
,0 --<iGLSegment9ID, int,>
,0 --<iReportCategoryID, int,>
,0 --<fBankStatementBalance, float,>
,@AccountDesc --<cExtDescription, varchar(255),>
,0 --<iTaxTypeINVID, int,>
,0 --<iTaxTypeCRNID, int,>
,0 --<iTaxTypeGRVID, int,>
,0 --<iTaxTypeRTSID, int,>
,@AllowSales --<iAllowICSales, bit,>
,@AllowPurchases --<iAllowICPurchases, bit,>
,0 --<iMBReportingCategoryID, int,>
,0 --<iMBCashFlowCategoryID, int,>
,0 --<bMBIsAsset, bit,>
,0 --<bMBIsGrant, bit,>
,0 --<iMBAssetClassificationID, int,>
,0 --<iMBAssetCategoryID, int,>
,0 --<iMBAssetTypeID, int,>
,0 --<iMBGrantLevel1TypeID, int,>
,0 --<iMBGrantLevel2TypeID, int,>
,0 --<iMBGrantLevel3TypeID, int,>
,0 --<bIsBranchLoanAccount, bit,>
,0 --<bForeignBankAcc, bit,>
,0 --<iForeignBankCurrencyID, int,>
,0 --<iForeignBankPEXAccID, int,>
,0 --<iForeignBankLEXAccID, int,>
,0 --<bRevalueWithSellingRate, bit,>
,0 --<bPaymentsBasedTax, bit,>
,'' --<cBankName, varchar(40),>
,'' --<cBankAccountName, varchar(50),>
,'' --<cBankCode, varchar(15),>
,'' --<cBankAccountNumber, varchar(40),>
,'' --<cBranchName, varchar(30),>
,'' --<cSEPABranchCode, varchar(30),>
,'' --<cBankRefNr, varchar(30),>
,@BranchId --<Accounts_iBranchID, int,>
)
SELECT TOP 1 @AccountLink = Id FROM @tblOutput
END --if not exists @MasterSubAcc
ELSE
BEGIN
PRINT CONCAT('Account already exists: ', @MasterSubAcc);
SELECT TOP 1 @AccountLink = AccountLink FROM Accounts A WHERE A.Master_Sub_Account = @MasterSubAcc
END
END
GO |