Simplify CHS - Standard Tariff Mst [Import]

Simplify CHS - Standard Tariff Mst [Import]

Changes in StdTariffMstIndex

  • In Standard Tariff Mst Index need to add Import Button

Changes in StdTariffMstImport

  • Need to add StdTariffMstImport razor page and in that do not allow to Import if records are there (stdTariffCnt > 0)
  • On StdTariffMstImport we will show MudAlert Records already exists. You may not Import. same like membermstimport
  • use stdTariffCnt as varibale name not lineCnt on Import Page.

Download Model

Label NameInstructions
Tariff NameCan be upto 100 characters.
Main A/cMust be 6 digits.
Sub A/cMust be 6 digits.
Tax TypeMust be N, Y, or I (N-Not Applicable, Y-Intrastate, I-Interstate).
AmountMust be between 0 - 9999999.
CostMust be between 0 - 9999999.

Reading XL error codes

Error CodeDescription
Z1Tariff Name, Main A/c, Sub A/c, Tax Type, Amount, Cost are mandatory to fill
Z2Tariff Name can be up to 100 characters only
Z3Main A/c must be 6 digits
Z4Sub A/c must be 6 digits
Z5Tax Type must be N, Y, or I
Z6Amount must be in valid number format
Z7Cost must be in valid number format
Z8If entity GSTIN is “URP”, Tax Type must be N (Not Applicable)

Error Codes

Error CodeDescription
ATariff Name must be unique throughout the Excel.
BInvalid / Inactive Main A/c , Sub A/c .
CAmount must be greater than Cost.
recordCntMsgOnly 1000 Tariff details can be imported.

Sysgen XL

Column NameField Name
Error CodeErrorCode
Tariff CodeTariffCode
Tariff NameTariffName
AmountAmount
CostCost
Main A/cMainAc
Sub A/cSubAc
Account ParticularsMainSubAcName
Tax TypeTaxIndName

Queries for error code

var tempcreation = @"CREATE TABLE #stdtariffmst
(
    id INT PRIMARY KEY IDENTITY(1,1),
    tariffname NVARCHAR(100) COLLATE DATABASE_DEFAULT,
    mainac NVARCHAR(6) COLLATE DATABASE_DEFAULT,
    subac NVARCHAR(6) COLLATE DATABASE_DEFAULT,
    taxind NVARCHAR(1) COLLATE DATABASE_DEFAULT,
    amount NUMERIC(10,2),
    cost NUMERIC(10,2),
    errorcode NVARCHAR(200) COLLATE DATABASE_DEFAULT,
    tariffcode NVARCHAR(6) COLLATE DATABASE_DEFAULT
)";

var inserttemp = @"INSERT INTO #stdtariffmst(tariffname,mainac,subac,taxind,amount,cost)
VALUES(UPPER(TRIM(@tariffname)),@mainac,@subac,UPPER(TRIM(@taxind)),@amount,@cost)";

/* -------------------- ERROR VALIDATIONS -------------------- */

// Error Code A - Duplicate Tariff Name within Excel
var errorcodeA = @"WITH A(tariffname) AS
(
    SELECT tariffname FROM #stdtariffmst
    GROUP BY tariffname
    HAVING COUNT(tariffname) > 1
)
UPDATE #stdtariffmst SET errorcode = COALESCE(RTRIM(errorcode),'') + ' A'
FROM A WHERE #stdtariffmst.tariffname = A.tariffname";

// Error Code B - Main A/c + Sub A/c must exist in account master
var errorcodeB = @"WITH A (mainac, subac) AS
(
    SELECT A1.mainac, A1.subac
    FROM accounts A
    INNER JOIN accounts1 A1 ON A.mainac = A1.mainac
    WHERE A.actype IN ('N','A','E','I','L') AND A1.IsActive = 'Y'
)
UPDATE ##stdtariffmst SET errorcode = COALESCE(RTRIM(errorcode),'') + ' B'
WHERE NOT EXISTS (SELECT mainac,subac FROM A WHERE ##stdtariffmst.mainac = A.mainac AND ##stdtariffmst.subac = A.subac)";

// Error Code C - Amount must be greater than Cost
var errorcodeC = @"UPDATE #stdtariffmst SET errorcode = COALESCE(RTRIM(errorcode),'') + ' C'
WHERE amount <= cost";

// Error Code  D - Only 1000 Tariff details can be imported.
var recordCntQuery = @"SELECT COUNT(*) AS cnt FROM #stdtariffmst;";

// Count of total error rows
var cnterror = @"SELECT COUNT(errorcode) AS CNT FROM #stdtariffmst
WHERE COALESCE(errorcode,'') != ''";

var tariffCodeQuery = @"WITH A (rowno,id) AS
(
    SELECT ROW_NUMBER() OVER (ORDER BY id) AS rowno,id FROM #stdtariffmst
)
UPDATE #stdtariffmst
SET tariffcode = FORMAT(A.rowno, '000000')
FROM A
WHERE #stdtariffmst.id = A.id";


// Query to fetch data after validations
var data = @"SELECT tariffcode,tariffname,amount,cost,
IIF(M.taxind = 'Y', 'Intrastate',IIF(M.taxind = 'N', 'Not Applicable', 'Interstate')) AS taxindname,
errorcode,IIF(A.achead = A1.acname, A.achead,
CONCAT_WS(',',A.achead,COALESCE(A1.acname,'Invalid Account Name'))) AS mainsubacname,
CONCAT(M.mainac,M.subac) AS mainsubacno
FROM #stdtariffmst M
LEFT JOIN accounts A ON M.mainac = A.mainac
LEFT JOIN accounts1 A1 ON M.mainac = A1.mainac AND M.subac = A1.subac
ORDER BY M.id ASC;";

var stdTariffMstInsert = @"INSERT INTO StdTariffMst (tariffcode,tariffname,amount,cost,taxind,taxgroup,
mainac,subac,chargetype,isactive)
SELECT tariffcode,tariffname,amount,cost,taxind,'NA' AS taxgroup,
mainac,subac,'F' AS chargetype,'Y' AS isactive
FROM #stdtariffmst;";

New Classes and Methods

  • StdTariffMstImport
  • GetStdTariffMstCnt
  • StdTariffMstDownloadModel
public class StdTariffMst
{
    public string ErrorCode { get; set; } = string.Empty; // New Column
}