public async Task <int> DeleteAsync(int id)
        {
            using (var transaction = DbContext.Database.BeginTransaction())
            {
                try
                {
                    SalesInvoiceExportModel model = await salesInvoiceExportLogic.ReadByIdAsync(id);

                    if (model != null)
                    {
                        SalesInvoiceExportModel salesInvoiceModel = new SalesInvoiceExportModel();
                        salesInvoiceModel = model;
                        await salesInvoiceExportLogic.DeleteAsync(id);
                    }


                    transaction.Commit();
                }
                catch (Exception e)
                {
                    transaction.Rollback();
                    throw new Exception(e.Message);
                }
            }
            return(await DbContext.SaveChangesAsync());
        }
        public async Task <int> CreateAsync(SalesInvoiceExportModel model)
        {
            int result = 0;

            using (var transaction = DbContext.Database.BeginTransaction())
            {
                try
                {
                    int index = 0;
                    do
                    {
                        model.Code = CodeGenerator.Generate();
                    }while (DbSet.Any(d => d.Code.Equals(model.Code)));

                    SalesInvoiceNumberGenerator(model, index);

                    salesInvoiceExportLogic.Create(model);
                    index++;

                    result = await DbContext.SaveChangesAsync();

                    transaction.Commit();
                }
                catch (Exception e)
                {
                    transaction.Rollback();
                    throw new Exception(e.Message);
                }
            }

            return(result);
        }
        private void SalesInvoiceNumberGenerator(SalesInvoiceExportModel model, int index)
        {
            SalesInvoiceExportModel lastData = DbSet.IgnoreQueryFilters().Where(w => w.LetterOfCreditNumberType.Equals(model.LetterOfCreditNumberType)).OrderByDescending(o => o.AutoIncreament).FirstOrDefault();

            int MonthNow       = DateTime.Now.Month;
            int YearNow        = DateTime.Now.Year;
            var MonthNowString = DateTime.Now.ToString("MM");
            var YearNowString  = DateTime.Now.ToString("yy");
            var formatCode     = "";

            if (model.SalesInvoiceCategory == "SPINNING")
            {
                formatCode = "B";
            }
            else if (model.SalesInvoiceCategory == "DYEINGPRINTING" && model.FPType == "Dyeing/Finishing")
            {
                formatCode = "F";
            }
            else if (model.SalesInvoiceCategory == "DYEINGPRINTING" && model.FPType == "Printing")
            {
                formatCode = "P";
            }
            else
            {
                formatCode = "";
            }

            if (lastData == null)
            {
                index = 0;
                model.AutoIncreament = 1 + index;
                model.SalesInvoiceNo = $"DL {model.AutoIncreament.ToString().PadLeft(2, '0')}{formatCode}/4.2.1/{MonthNowString}.{YearNowString}";
            }
            else
            {
                if (YearNow > lastData.CreatedUtc.Year)
                {
                    model.AutoIncreament = 1 + index;
                    model.SalesInvoiceNo = $"DL {model.AutoIncreament.ToString().PadLeft(2, '0')}{formatCode}/4.2.1/{MonthNowString}.{YearNowString}";
                }
                else
                {
                    model.AutoIncreament = lastData.AutoIncreament + (1 + index);
                    model.SalesInvoiceNo = $"DL {model.AutoIncreament.ToString().PadLeft(2, '0')}{formatCode}/4.2.1/{MonthNowString}.{YearNowString}";
                }
            }
        }
        public async Task <int> UpdateAsync(int id, SalesInvoiceExportModel model)
        {
            salesInvoiceExportLogic.UpdateAsync(id, model);

            return(await DbContext.SaveChangesAsync());
        }