Пример #1
0
        public Task <ReceiptHeader> SaveAsync(ReceiptHeader header, CancellationToken token = default(CancellationToken))
        {
            var query = @"
INSERT INTO ReceiptHeader
      ( CompanyId
      , FileType
      , CurrencyId
      , ImportFileLogId
      , AssignmentFlag
      , ImportCount
      , ImportAmount
      , CreateBy
      , CreateAt
      , UpdateBy
      , UpdateAt
        )
 OUTPUT inserted.*
 VALUES
      ( @CompanyId
      , @FileType
      , @CurrencyId
      , @ImportFileLogId
      , @AssignmentFlag
      , @ImportCount
      , @ImportAmount
      , @CreateBy
      , GETDATE()
      , @UpdateBy
      , GETDATE()
    )";

            return(dbHelper.ExecuteAsync <ReceiptHeader>(query, header, token));
        }
Пример #2
0
        public int Create(ReceiptHeader t)
        {
            int result = 0;

            try
            {
                //Initiate the instance of DBContext
                using BillingContext context = new BillingContext();
                //check specific record for same receipt no is exist or not
                var receipt = context.ReceiptHeaders.FirstOrDefault(c => c.ReceiptNo == t.ReceiptNo);

                if (receipt == null)
                {
                    //adding receipt header object to context
                    context.Add(t);
                    //save changes
                    return(result = context.SaveChanges());
                }
                else
                {
                    return(Update(t));
                }
            }
            catch (Exception ex)
            {
                Exc.ErMessage(ex);
                return(result = 0);
            }
        }
Пример #3
0
        // End of UI Update and refresh Section

        //Print Invoice Section
        private void InitPrintInvoice( )
        {   //TODO: Print Invoice
            vReciptHeader    = new ReceiptHeader();
            vReciptFooter    = new ReceiptFooter();
            vReciptDetails   = new ReceiptDetails();
            vReciptItems     = new List <ReceiptItemDetails>();
            vReciptItemTotal = new ReceiptItemTotal();
            CurrentSize      = MinimumSize;
        }
Пример #4
0
 public void SetHeaderSetting(ReceiptHeader result, string category)
 {
     lblBankInfo.Text        = result.BankName;
     lblBranchInfo.Text      = result.BranchName;
     lblBankAccountType.Text = result.AccountTypeName;
     lblAccountNo.Text       = result.AccountNumber;
     lblCreateAt.Text        = result.CreateAt.ToString();
     lblCategory.Text        = category;
 }
Пример #5
0
        public string RePrintManaulInvoice(eStoreDbContext db, RegularInvoice invoice, int StoreId = 1)
        {
            ReceiptHeader             header         = PrinterHelper.GetReceiptHeader(db, StoreId);
            ReceiptDetails            details        = PrinterHelper.GetReceiptDetails(invoice.InvoiceNo, invoice.OnDate, DateTime.Now.ToShortTimeString(), invoice.Customer.FullName);
            ReceiptItemTotal          itemtotal      = PrinterHelper.GetReceiptItemTotal(invoice);
            List <ReceiptItemDetails> itemDetailList = PrinterHelper.GetInvoiceDetails(db, invoice.SaleItems.ToList());

            return(InvoicePrinter.PrintManaulInvoice(header, itemtotal, details, itemDetailList, true));
        }
Пример #6
0
        public IHttpActionResult ThemPhieuThuChi(PhieuChiThu c)
        {
            if (c.DanhSachChiTietPhieuThu.Count > 0)
            {
                ReceiptHeader rh = new ReceiptHeader();
                rh.Code                 = c.Code;
                rh.Description          = c.DescriptionReceiptHeader;
                rh.RowIDEmployeeCreated = c.RowIDEmployeeCreated;
                rh.RowIDBuilding        = c.RowIDBuilding;
                rh.Type                 = c.Type;
                rh.CreatedDate          = DateTime.Now;


                db.ReceiptHeaders.Add(rh);

                int affectedRows = db.SaveChanges();


                if (affectedRows > 0)
                {
                    int RowIDReceiptHeader = rh.RowID;



                    foreach (var item in c.DanhSachChiTietPhieuThu)
                    {
                        ReceiptLine rl = new ReceiptLine();
                        rl.RowIDContract        = item.RowIDContract;
                        rl.RowIDReceiptHeader   = RowIDReceiptHeader;
                        rl.RowIDEmployeeCreated = item.RowIDEmployeeCreated;
                        rl.Times       = item.Times;
                        rl.Description = item.Description;
                        rl.TotalPrice  = item.TotalPrice;
                        rl.CreatedDate = DateTime.Now;


                        db.ReceiptLines.Add(rl);
                    }



                    db.SaveChanges();



                    return(Ok("Thêm thành công !"));
                }
                else
                {
                    return(BadRequest("Thêm ReceipHeader không thành công !"));
                }
            }
            else
            {
                return(BadRequest("Không có chi tiết phiếu bên trong một tờ phiếu !"));
            }
        }
Пример #7
0
 /// <summary>
 /// Refresh the header
 /// </summary>
 /// <param name="model">model</param>
 /// <returns>Refreshed header model</returns>
 public virtual JsonNetResult Refresh(ReceiptHeader model)
 {
     try
     {
         return(JsonNet(ControllerInternal.Refresh(model)));
     }
     catch (BusinessException businessException)
     {
         return(JsonNet(BuildErrorModelBase(CommonResx.GetFailedMessage, businessException, ReceiptHeaderResx.Receipt)));
     }
 }
Пример #8
0
 public virtual JsonNetResult Post(ReceiptHeader headerModel, long sequenceNumber, bool yesNo)
 {
     try
     {
         return(JsonNet(ControllerInternal.Post(headerModel, sequenceNumber, yesNo)));
     }
     catch (BusinessException businessException)
     {
         return(JsonNet(BuildErrorModelBase(CommonResx.PostingFailedMessage, businessException, ReceiptHeaderResx.Receipt)));
     }
 }
Пример #9
0
 /// <summary>
 /// Find whether Receipt record with Receipt Number passed exists
 /// </summary>
 /// <param name="id">Receipt Number</param>
 /// <param name="model">A model to save the current data</param>
 /// <returns>Returns a JsonNetResult object</returns>
 public virtual JsonNetResult Exists(string id, ReceiptHeader model)
 {
     try
     {
         return(JsonNet(ControllerInternal.Exists(id, model)));
     }
     catch (BusinessException businessException)
     {
         return(JsonNet(BuildErrorModelBase(CommonResx.GetFailedMessage, businessException, ReceiptHeaderResx.ReceiptNumber)));
     }
 }
Пример #10
0
 public virtual JsonNetResult GetHeaderValues(ReceiptHeader model, int eventType)
 {
     try
     {
         return(JsonNet(ControllerInternal.GetHeaderValues(model, eventType)));
     }
     catch (BusinessException businessException)
     {
         return(JsonNet(BuildErrorModelBase(CommonResx.GetFailedMessage, businessException, ReceiptHeaderResx.Receipts)));
     }
 }
Пример #11
0
        // GET api/Receipt/5
        public ReceiptHeader GetReceiptHeader(Guid id)
        {
            ReceiptHeader receiptheader = db.ReceiptHeaders.Find(id);

            if (receiptheader == null)
            {
                throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
            }

            return(receiptheader);
        }
Пример #12
0
 public virtual JsonNetResult CreateDetail(ReceiptHeader model, int index, int pageSize, int pageNumber)
 {
     try
     {
         return(JsonNet(ControllerInternal.CreateDetail(model, index, pageSize, pageNumber)));
     }
     catch (BusinessException businessException)
     {
         return
             (JsonNet(BuildErrorModelBase(CommonResx.AddFailedMessage, businessException, "Receipt Number")));
     }
 }
Пример #13
0
 public virtual JsonNetResult DeleteDetails(ReceiptHeader model, int pageNumber, int pageSize)
 {
     try
     {
         return(JsonNet(ControllerInternal.DeleteDetails(model, pageNumber, pageSize)));
     }
     catch (BusinessException businessException)
     {
         return
             (JsonNet(BuildErrorModelBase(CommonResx.DeleteFailedMessage, businessException, ReceiptHeaderResx.Receipts)));
     }
 }
Пример #14
0
        /// <summary>
        /// Return RecieptHeader based on StoreId
        /// </summary>
        /// <param name="db"></param>
        /// <param name="Storeid"></param>
        /// <returns></returns>
        public static ReceiptHeader GetReceiptHeader(eStoreDbContext db, int Storeid)
        {
            var store = db.Stores.Find(Storeid);

            ReceiptHeader header = new ReceiptHeader
            {
                StoreName    = store.StoreName,
                StoreAddress = store.Address,
                StoreCity    = store.City,
                StoreGST     = store.GSTNO,
                StorePhoneNo = store.PhoneNo
            };

            return(header);
        }
Пример #15
0
        public int Update(ReceiptHeader t)
        {
            int result = 0;

            try
            {
                using BillingContext context = new BillingContext();
                context.Update(t);
                return(result = context.SaveChanges());
            }
            catch (Exception ex)
            {
                Exc.ErMessage(ex);
                return(result);
            }
        }
Пример #16
0
        public IHttpActionResult DanhSachPhieuThuTheoCongTrinh(ReceiptHeader c)
        {
            var listOfReceiptHeaderAndLine = db.ReceiptHeaders.Where(w => w.RowIDBuilding == c.RowIDBuilding && w.Type == c.Type).ToList().Select(s => new
            {
                s.RowID,
                s.Code,
                s.Description,
                s.CreatedDate,
                TotalAllPrice = s.ReceiptLines.Sum(su => su.TotalPrice)

                                //ListOfReceipLine = s.ReceiptLines.Select(s2 => new { s2.RowID, s2.Description, s2.RowIDContract }).ToList()
            }).OrderByDescending(o => o.RowID).ToList();



            return(Ok(listOfReceiptHeaderAndLine));
        }
Пример #17
0
        public virtual JsonNetResult SaveDetails(ReceiptHeader model)
        {
            var response = new ViewModelBase <ReceiptHeader> {
                UserMessage = new UserMessage {
                    IsSuccess = true
                }
            };

            try
            {
                return(JsonNet(ControllerInternal.SaveDetails(model)));
            }
            catch (BusinessException businessException)
            {
                return(JsonNet(BuildErrorModelBase(CommonResx.RefreshDetailsFailedMessage, businessException, "Receipt Detail")));
            }
        }
Пример #18
0
        /// <summary>
        /// Read Header Model
        /// </summary>
        /// <param name="model"></param>
        /// <param name="setHeaderValue"></param>
        /// <returns></returns>
        public virtual JsonNetResult ReadHeader(ReceiptHeader model, bool setHeaderValue)
        {
            var response = new ViewModelBase <ReceiptHeader> {
                UserMessage = new UserMessage {
                    IsSuccess = true
                }
            };

            try
            {
                response.Data = ControllerInternal.ReadHeader(model, setHeaderValue);
                return(JsonNet(response));
            }
            catch (BusinessException businessException)
            {
                return(JsonNet(BuildErrorModelBase(businessException)));
            }
        }
Пример #19
0
 public virtual JsonNetResult SaveDetail(ReceiptDetail detail)
 {
     try
     {
         return(JsonNet(ControllerInternal.SaveDetail(detail)));
     }
     catch (BusinessException businessException)
     {
         var receiptHeader = new ReceiptHeader {
             ReceiptDetail = new EnumerableResponse <ReceiptDetail> {
                 Items = new List <ReceiptDetail> {
                     detail
                 }
             }
         };
         return(JsonNet(BuildErrorModelBase(receiptHeader, CommonResx.RefreshDetailsFailedMessage, businessException, "ReceiptView")));
     }
 }
Пример #20
0
        public virtual JsonNetResult Save(ReceiptHeader model)
        {
            ViewModelBase <ReceiptViewModel> viewModel;

            if (!ValidateModelState(ModelState, out viewModel))
            {
                return(JsonNet(viewModel));
            }

            try
            {
                var receiptUpdated = ControllerInternal.Save(model);
                return(JsonNet(receiptUpdated));
            }
            catch (BusinessException businessException)
            {
                return(JsonNet(BuildErrorModelBase(CommonResx.SaveFailedMessage, businessException)));
            }
        }
Пример #21
0
        // POST api/Receipt
        public HttpResponseMessage PostReceiptHeader(ReceiptHeader receiptheader)
        {
            if (ModelState.IsValid)
            {
                if (receiptheader.Id == Guid.Empty)
                {
                    receiptheader.Id = Guid.NewGuid();
                }
                db.ReceiptHeaders.Add(receiptheader);
                db.SaveChanges();

                HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, receiptheader);
                response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = receiptheader.Id }));
                return(response);
            }
            else
            {
                return(Request.CreateResponse(HttpStatusCode.BadRequest));
            }
        }
Пример #22
0
        public IHttpActionResult DanhSachChiTietPhieuTheoRowIDReceiptHeader(ReceiptHeader c)
        {
            var listOfReceiptHeaderAndLine = db.ReceiptLines.Where(w => w.ReceiptHeader.RowIDBuilding == c.RowIDBuilding && w.ReceiptHeader.Type == c.Type && w.IsDeleted == false).Select(s => new
            {
                s.ReceiptHeader.Code,
                DescriptionReceiptHeader = s.ReceiptHeader.Description,
                s.RowID,
                s.Description,
                s.Times,
                s.TotalPrice,
                s.CreatedDate,
                s.Category,
                s.Item,
                s.Unit,
                s.Supplier,
                ContractCode  = (s.Contract != null ? s.Contract.ContractCode : ""),
                RowIDContract = (s.Contract != null ? s.Contract.RowID : -1)
            }).OrderByDescending(o => o.RowID).ToList();

            return(Ok(listOfReceiptHeaderAndLine));
        }
Пример #23
0
        // PUT api/Receipt/5
        public HttpResponseMessage PutReceiptHeader(Guid id, ReceiptHeader receiptheader)
        {
            if (ModelState.IsValid && id == receiptheader.Id)
            {
                db.Entry(receiptheader).State = EntityState.Modified;

                try
                {
                    db.SaveChanges();
                }
                catch (DbUpdateConcurrencyException)
                {
                    return(Request.CreateResponse(HttpStatusCode.NotFound));
                }

                return(Request.CreateResponse(HttpStatusCode.OK));
            }
            else
            {
                return(Request.CreateResponse(HttpStatusCode.BadRequest));
            }
        }
Пример #24
0
        // DELETE api/Receipt/5
        public HttpResponseMessage DeleteReceiptHeader(Guid id)
        {
            ReceiptHeader receiptheader = db.ReceiptHeaders.Find(id);

            if (receiptheader == null)
            {
                return(Request.CreateResponse(HttpStatusCode.NotFound));
            }

            db.ReceiptHeaders.Remove(receiptheader);

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                return(Request.CreateResponse(HttpStatusCode.NotFound));
            }

            return(Request.CreateResponse(HttpStatusCode.OK, receiptheader));
        }
Пример #25
0
        public async Task <Tuple <ImportFileLog, ImportResult> > ParseAsync(IEnumerable <string[]> records, CancellationToken token = default(CancellationToken))
        {
            var fileLog = new ImportFileLog
            {
                Id        = FileInformation.Index,
                CompanyId = Helper.CompanyId,
                FileName  = FileInformation.Path,
                FileSize  = FileInformation.Size,
                CreateBy  = Helper.LoginUserId,
            };
            var           parseResult       = ImportResult.Success;
            ReceiptHeader header            = null;
            var           receiptCategoryId = 0;
            var           parseSkipping     = false;
            DateTime      workDay           = new DateTime(0);
            BankAccount   account           = null;

            var ebExcludeAccountList = Helper.IsAsync ?
                                       await Helper.GetEBExcludeAccountSettingListAsync(token) :
                                       Helper.GetEBExcludeAccountSettingList();

            if (ebExcludeAccountList == null)
            {
                return(Tuple.Create(fileLog, ImportResult.FileReadError)); // UNDONE: ひとまず FileReadError を返す
            }

            foreach (var fields in records)
            {
                if (fields.Length < 1)
                {
                    parseResult = ImportResult.FileFormatError;
                    break;
                }
                var datakubun = fields[0];
                if (datakubun == Constants.DataKubun.Header)
                {
                    account = null;
                    if (fields.Length < 13)
                    {
                        parseResult = ImportResult.FileFormatError;
                        break;
                    }
                    var sakuseibi     = fields[3];
                    var bankCode      = fields[6];
                    var bankName      = fields[7];
                    var branchCode    = fields[8];
                    var branchName    = fields[9];
                    var yokinsyumoku  = fields[10];
                    var accountNumber = fields[11];
                    var accountName   = fields[12];

                    if (!Helper.ValidateBankCode(ref bankCode) ||
                        !Helper.ValidateBranchCode(ref branchCode) ||
                        !Helper.ValidateAccountNumber(ref accountNumber))
                    {
                        parseResult = ImportResult.BankAccountFormatError;
                        break;
                    }

                    bankName    = Helper.ConvertToValidEbCharacter(bankName).Left(30);
                    branchName  = Helper.ConvertToValidEbCharacter(branchName).Left(30);
                    accountName = Helper.ConvertToValidEbCharacter(accountName).Left(30);

                    var accountTypeId = 0;
                    if (!int.TryParse(yokinsyumoku, out accountTypeId) ||
                        !(Constants.ImportableAccountTypeIds.Contains(accountTypeId)))
                    {
                        parseResult = ImportResult.BankAccountFormatError;
                        break;
                    }
                    if (!Helper.TryParseJpDateTime(sakuseibi, out workDay))
                    {
                        parseResult = ImportResult.FileFormatError;
                        break;
                    }

                    account = Helper.IsAsync ?
                              await Helper.GetBankAccountAsync(bankCode, branchCode, accountTypeId, accountNumber, token) :
                              Helper.GetBankAccount(bankCode, branchCode, accountTypeId, accountNumber);

                    var defaultReceiptCategroyId = Helper.DefaultReceiptCategory?.Id;
                    if (account != null && !account.ReceiptCategoryId.HasValue ||
                        !defaultReceiptCategroyId.HasValue)
                    {
                        parseResult = ImportResult.FileReadError;
                        break;
                    }

                    receiptCategoryId = (account != null && account.ReceiptCategoryId.HasValue)
                        ? account.ReceiptCategoryId.Value
                        : defaultReceiptCategroyId.Value;
                    if (account?.ImportSkipping == 1)
                    {
                        parseSkipping = true;
                        header        = null;
                        continue;
                    }
                    header = new ReceiptHeader();
                    fileLog.ReceiptHeaders.Add(header);
                    header.Id              = fileLog.ReceiptHeaders.Count;
                    header.CompanyId       = Helper.CompanyId;
                    header.CurrencyId      = Helper.DefaultCurrency.Id;
                    header.ImportFileLogId = fileLog.Id; /* 採番後に置き換え */
                    header.Workday         = workDay;
                    header.BankCode        = bankCode;
                    header.BankName        = bankName;
                    header.BranchCode      = branchCode;
                    header.BranchName      = branchName;
                    header.AccountTypeId   = accountTypeId;
                    header.AccountNumber   = accountNumber;
                    header.AccountName     = accountName;
                    header.CreateBy        = Helper.LoginUserId;
                    header.UpdateBy        = Helper.LoginUserId;
                }
                if (datakubun == Constants.DataKubun.Data)
                {
                    if (fields.Length < 12)
                    {
                        parseResult = ImportResult.FileFormatError;
                        break;
                    }
                    if (parseSkipping)
                    {
                        continue;
                    }

                    fileLog.ReadCount++;

                    var kanjyoubi        = fields[2];
                    var kisanbi          = fields[3];
                    var kingaku1         = fields[4];
                    var payerCode        = fields[6];
                    var payerName        = fields[7];
                    var sourceBankName   = fields[8];
                    var sourceBranchName = fields[9];
                    var torikeshikubun   = fields[10];
                    var kingaku2         = fields[11];

                    if (torikeshikubun == "1")
                    {
                        continue;
                    }

                    DateTime recordedAt;
                    if (!Helper.TryParseJpDateTime(FileInformation.UseValueDate ? kisanbi : kanjyoubi, out recordedAt))
                    {
                        parseResult = ImportResult.FileFormatError;
                        break;
                    }

                    decimal receiptAmount;
                    if ((!decimal.TryParse(kingaku1, out receiptAmount) ||
                         receiptAmount == 0M && !decimal.TryParse(kingaku2, out receiptAmount) ||
                         receiptAmount == 0M) ||
                        Constants.MaxAmount < Math.Abs(receiptAmount))
                    {
                        parseResult = ImportResult.FileFormatError;
                        break;
                    }

                    if (!Helper.ValidatePayerCode(ref payerCode))
                    {
                        parseResult = ImportResult.PayerCodeFormatError;
                        break;
                    }

                    if (ebExcludeAccountList // EBデータ取込対象外口座設定
                        .Any(x => x.BankCode == header.BankCode &&
                             x.BranchCode == header.BranchCode &&
                             x.AccountTypeId == header.AccountTypeId &&
                             x.PayerCode == payerCode
                             ))
                    {
                        continue;
                    }

                    payerName        = Helper.ConvertToValidEbCharacter(payerName).Left(140);
                    sourceBankName   = Helper.ConvertToValidEbCharacter(sourceBankName).Left(140);
                    sourceBranchName = Helper.ConvertToValidEbCharacter(sourceBranchName).Left(15);

                    if (!Helper.IsValidEBChars(payerName))
                    {
                        parseResult = ImportResult.FileFormatError;
                        break;
                    }

                    int?customerId = Helper.IsAsync ?
                                     await Helper.GetCustomerIdByExclusiveInfoAsync(header.BankCode, header.BranchCode, payerCode, token) :
                                     Helper.GetCustomerIdByExclusiveInfo(header.BankCode, header.BranchCode, payerCode);

                    int?sectionId = (Helper.IsAsync ?
                                     await Helper.GetSectionIdByPayerCodeAsync(payerCode, token) :
                                     Helper.GetSectionIdByPayerCode(payerCode)) ?? account?.SectionId;

                    int?excludeCategoryId = Helper.UseApportion ? null : Helper.IsAsync ?
                                            await Helper.GetExcludeCategoryIdAsync(payerName, token) :
                                            Helper.GetExcludeCategoryId(payerName);

                    var receipt = new Receipt();
                    header.Receipts.Add(receipt);
                    receipt.Id                = header.Receipts.Count(); /* 自動採番 */
                    receipt.CompanyId         = Helper.CompanyId;
                    receipt.CurrencyId        = Helper.DefaultCurrency.Id;
                    receipt.ReceiptHeaderId   = header.Id; /* 自動採番後に置き換え */
                    receipt.ReceiptCategoryId = receiptCategoryId;
                    receipt.CustomerId        = customerId;
                    receipt.SectionId         = sectionId;
                    receipt.InputType         = Constants.InputTypeEbImporter;
                    receipt.Apportioned       = Helper.UseApportion ? 0 : 1;
                    receipt.Approved          = 1;
                    receipt.Workday           = workDay;
                    receipt.RecordedAt        = recordedAt;
                    receipt.ReceiptAmount     = receiptAmount;
                    receipt.RemainAmount      = receiptAmount;
                    receipt.PayerCode         = payerCode;
                    receipt.PayerName         = Helper.RemoveLegalPersonality(payerName);
                    receipt.PayerNameRaw      = payerName;
                    receipt.SourceBankName    = sourceBankName;
                    receipt.SourceBranchName  = sourceBranchName;

                    receipt.ExcludeFlag       = excludeCategoryId.HasValue ? 1 : 0;
                    receipt.ExcludeCategoryId = excludeCategoryId;
                    if (excludeCategoryId.HasValue)
                    {
                        receipt.ExcludeAmount  = receiptAmount;
                        receipt.RemainAmount   = 0M;
                        receipt.AssignmentFlag = 2;

                        var receiptExclude = new ReceiptExclude();
                        receiptExclude.Id                = receipt.Id;
                        receiptExclude.ReceiptId         = receipt.Id;
                        receiptExclude.ExcludeCategoryId = excludeCategoryId.Value;
                        receiptExclude.ExcludeAmount     = receiptAmount;
                        receiptExclude.CreateBy          = Helper.LoginUserId;
                        receiptExclude.UpdateBy          = Helper.LoginUserId;
                        header.ReceiptExcludes.Add(receiptExclude);
                    }
                    receipt.CreateBy = Helper.LoginUserId;
                    receipt.UpdateBy = Helper.LoginUserId;

                    header.ImportCount++;
                    header.ImportAmount += receiptAmount;
                    fileLog.ImportCount++;
                    fileLog.ImportAmount += receiptAmount;
                }
                if (datakubun == Constants.DataKubun.Trailer)
                {
                }
                if (datakubun == Constants.DataKubun.End)
                {
                }
            }

            if (parseResult == ImportResult.Success && fileLog?.ImportCount == 0)
            {
                parseResult = ImportResult.ImportDataNotFound;
            }

            return(Tuple.Create(fileLog, parseResult));
        }
Пример #26
0
        public async Task <Tuple <ImportFileLog, ImportResult> > ParseAsync(IEnumerable <string[]> fields, CancellationToken token = default(CancellationToken))
        {
            var fileLog = new ImportFileLog
            {
                Id        = FileInformation.Index,
                CompanyId = Helper.CompanyId,
                FileName  = FileInformation.Path,
                FileSize  = FileInformation.Size,
                CreateBy  = Helper.LoginUserId,
            };
            var parseResult = ImportResult.Success;

            ReceiptHeader header            = null;
            var           receiptCategoryId = 0;
            var           parseSkipping     = false;
            DateTime      workDay           = new DateTime(0);
            BankAccount   account           = null;

            var ebExcludeAccountList = Helper.IsAsync ?
                                       await Helper.GetEBExcludeAccountSettingListAsync(token) :
                                       Helper.GetEBExcludeAccountSettingList();

            if (ebExcludeAccountList == null)
            {
                return(Tuple.Create(fileLog, ImportResult.FileReadError)); // UNDONE: ひとまず FileReadError を返す
            }

            foreach (var field in fields)
            {
                if (field.Length < 1)
                {
                    parseResult = ImportResult.FileFormatError;
                    break;
                }
                var datakubun = field[0];
                if (datakubun == Constants.DataKubun.Header)
                {
                    account = null;
                    if (field.Length < 11)
                    {
                        parseResult = ImportResult.FileFormatError;
                        break;
                    }
                    var bankCode      = BankCode;
                    var branchCode    = field[1];
                    var bankName      = string.Empty;
                    var branchName    = field[2];
                    var kamokucode    = field[3];
                    var accountNumber = field[6];
                    var accountName   = field[7];
                    var sousabi       = field[10];

                    var accountTypeId = 0;
                    if (!int.TryParse(kamokucode, out accountTypeId) ||
                        !Constants.ImportableAccountTypeIds.Contains(accountTypeId) ||
                        !Helper.ValidateBranchCode(ref branchCode) ||
                        !Helper.ValidateAccountNumber(ref accountNumber))
                    {
                        parseResult = ImportResult.BankAccountFormatError;
                        break;
                    }

                    if (!Helper.TryParseDateTime(sousabi, out workDay))
                    {
                        parseResult = ImportResult.FileFormatError;
                        break;
                    }

                    branchCode    = Helper.ConvertToValidEbCharacter(branchCode).Right(3, '0', true);
                    accountNumber = Helper.ConvertToValidEbCharacter(accountNumber).Right(7, '0', true);

                    account = Helper.IsAsync ?
                              await Helper.GetBankAccountAsync(bankCode, branchCode, accountTypeId, accountNumber, token) :
                              Helper.GetBankAccount(bankCode, branchCode, accountTypeId, accountNumber);

                    if (account == null || !account.ReceiptCategoryId.HasValue)
                    {
                        parseResult = ImportResult.BankAccountMasterError;
                        FileInformation.BankInformation
                            = $"銀行コード:{bankCode}, 支店コード:{branchCode}, 預金種別:{Helper.GetAccountTypeNameById(accountTypeId)}, 口座番号:{accountNumber}";
                        break;
                    }

                    receiptCategoryId = account.ReceiptCategoryId.Value;

                    if (account.ImportSkipping == 1)
                    {
                        parseSkipping = true;
                        header        = null;
                        continue;
                    }

                    bankName    = Helper.ConvertToValidEbCharacter(account.BankName).Left(30);
                    branchName  = Helper.ConvertToValidEbCharacter(branchName).Left(30);
                    accountName = Helper.ConvertToValidEbCharacter(accountName).Left(30);

                    header = new ReceiptHeader();
                    fileLog.ReceiptHeaders.Add(header);
                    header.Id              = fileLog.ReceiptHeaders.Count;
                    header.CompanyId       = Helper.CompanyId;
                    header.CurrencyId      = Helper.DefaultCurrency.Id;
                    header.ImportFileLogId = fileLog.Id; /* 採番後に置き換え */
                    header.Workday         = workDay;
                    header.BankCode        = bankCode;
                    header.BankName        = bankName;
                    header.BranchCode      = branchCode;
                    header.BranchName      = branchName;
                    header.AccountTypeId   = accountTypeId;
                    header.AccountNumber   = accountNumber;
                    header.AccountName     = accountName;
                    header.CreateBy        = Helper.LoginUserId;
                    header.UpdateBy        = Helper.LoginUserId;
                }
                if (datakubun == Constants.DataKubun.Data)
                {
                    fileLog.ReadCount++;

                    if (parseSkipping)
                    {
                        continue;
                    }

                    if (field.Length < 10)
                    {
                        parseResult = ImportResult.FileFormatError;
                        break;
                    }

                    var torihikibi       = field[1];
                    var shiteibi         = field[2];
                    var payerName        = field[4];
                    var sourceBankName   = field[5];
                    var sourceBranchName = field[6];
                    var payerCode        = field[7];
                    var kingaku          = field[9 - Offset];

                    var symd = FileInformation.UseValueDate  ? shiteibi : torihikibi;
                    if (string.IsNullOrEmpty(symd))
                    {
                        symd = torihikibi;
                    }
                    DateTime recordedAt;
                    if (!Helper.TryParseDateTime(symd, out recordedAt))
                    {
                        parseResult = ImportResult.FileFormatError;
                        break;
                    }

                    decimal receiptAmount;
                    if (!decimal.TryParse(kingaku, out receiptAmount) ||
                        receiptAmount == 0M ||
                        Constants.MaxAmount < Math.Abs(receiptAmount))
                    {
                        parseResult = ImportResult.FileFormatError;
                        break;
                    }

                    if (!Helper.ValidatePayerCode(ref payerCode))
                    {
                        parseResult = ImportResult.PayerCodeFormatError;
                        break;
                    }

                    if (ebExcludeAccountList // EBデータ取込対象外口座設定
                        .Any(setting =>
                    {
                        return(header.BankCode == setting.BankCode &&
                               header.BranchCode == setting.BranchCode &&
                               header.AccountTypeId == setting.AccountTypeId &&
                               payerCode == setting.PayerCode);
                    }))
                    {
                        continue;
                    }

                    payerName        = Helper.ConvertToValidEbCharacter(payerName).Left(140);
                    sourceBankName   = Helper.ConvertToValidEbCharacter(sourceBankName).Left(140);
                    sourceBranchName = Helper.ConvertToValidEbCharacter(sourceBranchName).Left(15);

                    if (!Helper.IsValidEBChars(payerName))
                    {
                        parseResult = ImportResult.FileFormatError;
                        break;
                    }

                    int?customerId = Helper.IsAsync ?
                                     await Helper.GetCustomerIdByExclusiveInfoAsync(header.BankCode, header.BranchCode, payerCode, token) :
                                     Helper.GetCustomerIdByExclusiveInfo(header.BankCode, header.BranchCode, payerCode);

                    int?sectionId = (Helper.IsAsync ?
                                     await Helper.GetSectionIdByPayerCodeAsync(payerCode, token) :
                                     Helper.GetSectionIdByPayerCode(payerCode)) ?? account?.SectionId;

                    int?excludeCategoryId = Helper.UseApportion ? null : Helper.IsAsync ?
                                            await Helper.GetExcludeCategoryIdAsync(payerName, token) :
                                            Helper.GetExcludeCategoryId(payerName);

                    var receipt = new Receipt();
                    header.Receipts.Add(receipt);
                    receipt.Id                = header.Receipts.Count(); /* 自動採番 */
                    receipt.CompanyId         = Helper.CompanyId;
                    receipt.CurrencyId        = Helper.DefaultCurrency.Id;
                    receipt.ReceiptHeaderId   = header.Id; /* 自動採番後に置き換え */
                    receipt.ReceiptCategoryId = receiptCategoryId;
                    receipt.CustomerId        = customerId;
                    receipt.SectionId         = sectionId;
                    receipt.InputType         = Constants.InputTypeEbImporter;
                    receipt.Apportioned       = Helper.UseApportion ? 0 : 1;
                    receipt.Approved          = 1;
                    receipt.Workday           = workDay;
                    receipt.RecordedAt        = recordedAt;
                    receipt.ReceiptAmount     = receiptAmount;
                    receipt.RemainAmount      = receiptAmount;
                    receipt.PayerCode         = payerCode;
                    receipt.PayerName         = Helper.RemoveLegalPersonality(payerName);
                    receipt.PayerNameRaw      = payerName;
                    receipt.SourceBankName    = sourceBankName;
                    receipt.SourceBranchName  = sourceBranchName;

                    receipt.ExcludeFlag       = excludeCategoryId.HasValue ? 1 : 0;
                    receipt.ExcludeCategoryId = excludeCategoryId;
                    if (excludeCategoryId.HasValue)
                    {
                        receipt.ExcludeAmount  = receiptAmount;
                        receipt.RemainAmount   = 0M;
                        receipt.AssignmentFlag = 2;

                        var receiptExclude = new ReceiptExclude();
                        receiptExclude.Id                = receipt.Id;
                        receiptExclude.ReceiptId         = receipt.Id;
                        receiptExclude.ExcludeCategoryId = excludeCategoryId.Value;
                        receiptExclude.ExcludeAmount     = receiptAmount;
                        receiptExclude.CreateBy          = Helper.LoginUserId;
                        receiptExclude.UpdateBy          = Helper.LoginUserId;
                        header.ReceiptExcludes.Add(receiptExclude);
                    }
                    receipt.CreateBy = Helper.LoginUserId;
                    receipt.UpdateBy = Helper.LoginUserId;

                    header.ImportCount++;
                    header.ImportAmount += receiptAmount;
                    fileLog.ImportCount++;
                    fileLog.ImportAmount += receiptAmount;
                }
                if (datakubun == Constants.DataKubun.Trailer)
                {
                }
                if (datakubun == Constants.DataKubun.End)
                {
                }
            }

            if (parseResult == ImportResult.Success && fileLog?.ImportCount == 0)
            {
                parseResult = ImportResult.ImportDataNotFound;
            }

            return(Tuple.Create(fileLog, parseResult));
        }
Пример #27
0
        public static string PrintManaulInvoice(ReceiptHeader header, ReceiptItemTotal itemTotals, ReceiptDetails details, List <ReceiptItemDetails> itemDetail, bool isRePrint = true)
        {
            try
            {
                string fName    = "MInvoiceNo_" + details.BillNo.Substring(9) + ".pdf";
                string fileName = Path.Combine("wwwroot", fName);


                using PdfWriter pdfWriter = new PdfWriter(fileName);
                using PdfDocument pdf     = new PdfDocument(pdfWriter);

                Document pdfDoc = new Document(pdf, new PageSize(240, 1170));

                pdfDoc.SetMargins(10, 5, 10, 5);

                Style   code       = new Style();
                PdfFont timesRoman = PdfFontFactory.CreateFont(iText.IO.Font.Constants.StandardFonts.TIMES_ROMAN);
                code.SetFont(timesRoman).SetFontSize(12);

                //Header
                Paragraph p = new Paragraph(header.StoreName + "\n").SetFontSize(12);
                p.SetTextAlignment(iText.Layout.Properties.TextAlignment.CENTER);
                p.Add(header.StoreAddress + "\n");
                p.Add(header.StoreCity + "\n");
                p.Add("Ph No: " + header.StorePhoneNo + "\n");
                p.Add(header.StoreGST + "\n");

                pdfDoc.Add(p);

                //Details
                Paragraph ip = new Paragraph().SetFontSize(12);

                ip.Add(PrintInvoiceLine.DotedLine);
                ip.AddTabStops(new TabStop(50));
                ip.Add(" " + PrintInvoiceLine.InvoiceTitle + "\n");
                ip.Add(PrintInvoiceLine.DotedLine);
                ip.Add(ReceiptDetails.Employee + "\n");
                ip.Add(details.BillNo + "\n");
                ip.AddTabStops(new TabStop(30));
                ip.Add("  " + details.BillDate + "\n");
                ip.AddTabStops(new TabStop(30));
                ip.Add("  " + details.BillTime + "\n");


                ip.Add(details.CustomerName + "\n");
                ip.Add(PrintInvoiceLine.DotedLine);

                ip.Add(PrintInvoiceLine.ItemLineHeader1 + "\n");
                ip.Add(PrintInvoiceLine.ItemLineHeader2 + "\n");

                ip.Add(PrintInvoiceLine.DotedLine);


                double gstPrice   = 0.00;
                double basicPrice = 0.00;
                string tab        = "    ";

                foreach (ReceiptItemDetails itemDetails in itemDetail)
                {
                    if (itemDetails != null)
                    {
                        ip.Add(itemDetails.SKUDescription + itemDetails.HSN + "/\n");
                        ip.Add(itemDetails.MRP + tab + tab);
                        ip.Add(itemDetails.QTY + tab + tab + itemDetails.Discount + tab + tab + itemDetails.Amount);
                        //ip.Add(itemDetails.GSTPercentage + "%" + tab + tab + itemDetails.GSTAmount + tab + tab);
                        //ip.Add(itemDetails.GSTPercentage + "%" + tab + tab + itemDetails.GSTAmount + "\n");
                        gstPrice   += Double.Parse(itemDetails.GSTAmount);
                        basicPrice += Double.Parse(itemDetails.BasicPrice);
                    }
                }

                ip.Add("\n" + PrintInvoiceLine.DotedLine);

                ip.Add("Total: " + itemTotals.TotalItem + tab + tab + tab + tab + tab + itemTotals.NetAmount + "\n");
                ip.Add("item(s): " + itemTotals.ItemCount + tab + "Net Amount:" + tab + itemTotals.NetAmount + "\n");
                ip.Add(PrintInvoiceLine.DotedLine);

                ip.Add("Tender(s)\n Paid Amount:\t\t Rs. " + itemTotals.CashAmount); //TODO: cash/Card option can be changed here

                // ip.Add("\n" + PrintInvoiceLine.DotedLine);
                //ip.Add("Basic Price:\t\t" + basicPrice.ToString("0.##"));
                //ip.Add("\nCGST:\t\t" + gstPrice.ToString("0.##"));
                //ip.Add("\nSGST:\t\t" + gstPrice.ToString("0.##") + "\n");
                //ip.Add (PrintLine.DotedLine);
                pdfDoc.Add(ip);

                //Footer
                Paragraph foot = new Paragraph().SetFontSize(12);
                //foot.SetTextAlignment(iText.Layout.Properties.TextAlignment.CENTER);
                foot.Add(PrintInvoiceLine.FooterFirstMessage + "\n");
                foot.Add(PrintInvoiceLine.DotedLine);
                foot.Add(PrintInvoiceLine.FooterThanksMessage + "\n");
                foot.Add(PrintInvoiceLine.FooterLastMessage + "\n");
                foot.Add(PrintInvoiceLine.DotedLine);
                foot.Add("\n");// Just to Check;
                if (isRePrint)
                {
                    foot.Add("(Reprinted)\n");
                }
                foot.Add("Printed on: " + DateTime.Now + "\n");
                pdfDoc.Add(foot);
                pdfDoc.Close();

                //Print to Default Local Added Printer
                // PrintPDFLocal(fileName);
                return(fName);
            }
            catch (Exception exp)
            {
                return(exp.Message);
            }
        }
Пример #28
0
        public HttpResponseMessage Post(HttpRequestMessage request, ExpenseListViewCriteria criteria)
        {
            return(CreateHttpResponse(request, () =>
            {
                HttpResponseMessage response = null;
                // Force params
                // Approved SyncStatusId
                criteria.SyncStatusId = 3;
                // Not exported
                criteria.Exported = 2;

                // GetAll
                criteria.Size = -1;

                SearchResultViewModel <ExpenseDto> expenseList = this.expenseAppService.Search(criteria);
                SearchResultViewModel <ExportExpenseDto> exportExpenseList = Mapper.Map <SearchResultViewModel <ExpenseDto>, SearchResultViewModel <ExportExpenseDto> >(expenseList);


                string connectionStringsConfigPath = HttpContext.Current.Server.MapPath("~/ConnectionStrings.config");

                XElement doc = XElement.Load($"{connectionStringsConfigPath}");

                string reportsContextConnectionString = doc.Descendants("add")
                                                        .Where(x => (string)x.Attribute("name") == "ReportsContext")
                                                        .Select(x => (string)x.Attribute("connectionString"))
                                                        .FirstOrDefault();
                using (SqlConnection connection =
                           new SqlConnection(reportsContextConnectionString ?? throw new InvalidOperationException("No se pudo establecer la conexión a la base de datos.")))
                {
                    const string ProviderAccountNumberQuery = @"SELECT CONVERT(int,PVMPRH_NROCTA) from PVMPRH where @ProveedorId = PVMPRH_NRODOC";

                    List <long> providersNotExported = new List <long>();
                    List <KeyValuePair <long, int> > existingProviders = new List <KeyValuePair <long, int> >();
                    long expensesExported = 0;
                    long expensesNotExported = 0;
                    DateTime CurrentDate = DateTime.Today;

                    foreach (ExportExpenseDto expense in exportExpenseList.Results)
                    {
                        Int32 providerAccountNumber = 0;
                        if (existingProviders.All(x => x.Key != expense.Provider.Cuit))
                        {
                            SqlCommand command = new SqlCommand(ProviderAccountNumberQuery, connection);
                            command.Parameters.AddWithValue("@ProveedorId", expense.Provider.Cuit);
                            connection.Open();
                            SqlDataReader reader = command.ExecuteReader();
                            try
                            {
                                if (reader.Read())
                                {
                                    providerAccountNumber = reader.GetInt32(0);
                                    if (providerAccountNumber != 0)
                                    {
                                        existingProviders.Insert(0, new KeyValuePair <long, int>(expense.Provider.Cuit, providerAccountNumber));
                                    }
                                }
                            }
                            catch (Exception e)
                            {
                                Console.WriteLine(e.Message);
                            }
                            finally
                            {
                                reader.Close();
                                command.Dispose();
                                connection.Close();
                            }
                        }
                        else
                        {
                            providerAccountNumber = existingProviders.Where(x => x.Key == expense.Provider.Cuit).Select(x => x.Value).FirstOrDefault();
                        }

                        if (providerAccountNumber != 0)
                        {
                            bool SIN_IVA = expense.Aliquot.Description == "SIN IVA";
                            string userCompanyGroupForExpense = expense.User.UserCompanyGroups.Where(x => x.Company.Id == expense.CompanyId).
                                                                Select(x => x.UserGroup.Code + x.Company.Id).
                                                                FirstOrDefault();
                            var stringifiedproviderAccountNumber = providerAccountNumber.ToString();
                            ReceiptHeader header = new ReceiptHeader()
                            {
                                SAR_CORMVH_IDENTI = expense.Id.ToString(),
                                SAR_CORMVH_CIRCOM = SIN_IVA ? CIRCOM.SIN_IVA : CIRCOM.IVA,
                                SAR_CORMVH_CIRAPL = SIN_IVA ? CIRCOM.SIN_IVA : CIRCOM.IVA,
                                SAR_CORMVH_CODEMP = "AL0" + expense.CompanyId,
                                SAR_CORMVH_CODORI = expense.Receipt,
                                SAR_CORMVH_CMPRAD = "N/A",
                                SAR_CORMVH_STATUS = 'N',
                                SAR_CORMVH_FCHMOV = CurrentDate,
                                SAR_CORMVH_NROCTA = stringifiedproviderAccountNumber.PadLeft(6)
                            };

                            receiptHeaderContext.Add(header);

                            var hasNotTaxesConcepts = Math.Abs(double.Parse(expense.NotTaxedConcepts)) > 0;

                            ReceiptItem itemDefault = new ReceiptItem()
                            {
                                SAR_CORMVI_IDENTI = expense.Id.ToString(),
                                SAR_CORMVI_TIPORI = expense.Category.Code,
                                SAR_CORMVI_CANTID = 1,
                                SAR_CORMVI_ARTORI = expense.CompanyId + expense.Category.Code + userCompanyGroupForExpense + "G",
                                SAR_CORMVI_NROITM = 1,
                                SAR_CORMVI_PRECIO = SIN_IVA ? expense.Total : expense.NetValue,
                                SAR_CORMVI_NROAPL = null,
                                SAR_CORMVI_ITMAPL = null
                            };

                            receiptItemContext.Add(itemDefault);

                            CreateDistribution(expense.Id, itemDefault.SAR_CORMVI_NROITM, expense.CompanyId, expense.User.Id_Erp);

                            D_Concepts Debe_concepts_default = new D_Concepts()
                            {
                                SAR_CORMVI08_IDENTI = expense.Id,
                                SAR_CORMVI08_IMPORT = expense.Total
                            };

                            debeConceptsRepository.Add(Debe_concepts_default);

                            H_Concepts Haber_concepts_default = new H_Concepts()
                            {
                                SAR_CORMVI09_IDENTI = expense.Id,
                                SAR_CORMVI09_CODCPT = expense.CompanyId + (expense.Payment.Description == "Efectivo" ? "E" : "T"),
                                SAR_CORMVI09_IMPORT = expense.Total
                            };

                            haberConceptsRepository.Add(Haber_concepts_default);

                            if (hasNotTaxesConcepts)
                            {
                                ReceiptItem secondLine = itemDefault.Clone();
                                secondLine.SAR_CORMVI_NROITM = 2;
                                secondLine.SAR_CORMVI_PRECIO = expense.NotTaxedConcepts;
                                secondLine.SAR_CORMVI_ARTORI = secondLine.SAR_CORMVI_ARTORI.Remove(secondLine.SAR_CORMVI_ARTORI.Length - 1, 1) + "N";
                                receiptItemContext.Add(secondLine);
                                CreateDistribution(expense.Id, secondLine.SAR_CORMVI_NROITM, expense.CompanyId, expense.User.Id_Erp);
                            }

                            string aliquotValue = expense.Aliquot.Value.ToString(CultureInfo.InvariantCulture);

                            if (!SIN_IVA)
                            {
                                TaxesDetails taxDetails = new TaxesDetails()
                                {
                                    SAR_CORMVI07_IDENTI = expense.Id.ToString(),
                                    SAR_CORMVI07_CODCPT = GetCODPT(aliquotValue),
                                    SAR_CORMVI07_INGRES = expense.NetValue,
                                    SAR_CORMVI07_IMPGRA = expense.NetValue,
                                    SAR_CORMVI07_PORCEN = aliquotValue,
                                    SAR_CORMVI07_NROITM = 1
                                };

                                taxesDetailsRepository.Add(taxDetails);
                            }


                            DistDimTesoH distDimTesoH = new DistDimTesoH()
                            {
                                SAR_CJRMVD10_IDENTI = expense.Id,
                                SAR_CJRMVD10_CODDIS = $"AL0{expense.CompanyId.ToString()}|{expense.User.Id_Erp}"
                            };

                            distDimTesoHRepository.Add(distDimTesoH);

                            this.reportsUnitOfWork.Commit();

                            expensesExported++;
                        }
                        else
                        {
                            expensesNotExported++;
                            if (!providersNotExported.Contains(expense.Provider.Cuit))
                            {
                                providersNotExported.Add(expense.Provider.Cuit);
                            }
                        }
                    }
                    foreach (var expense in expenseList.Results)
                    {
                        if (!providersNotExported.Contains(expense.Provider.Cuit))
                        {
                            expense.Exported = true;
                            expense.ExportedDateTime = DateTime.Now;
                            this.expenseRepository.Edit(Mapper.Map <ExpenseDto, Expense>(expense));
                            this.unitOfWork.Commit();
                        }
                    }

                    int notExportedProviders = providersNotExported.Count();
                    string providersPath = null;

                    if (notExportedProviders > 0)
                    {
                        ProviderListViewCriteria providersCriteria = new ProviderListViewCriteria()
                        {
                            Size = -1,
                            FileName = "Proveedores_inexistentes_exportacion_gastos"
                        };
                        SearchResultViewModel <ProviderDto> providersList = this.providerAppService.ExportData(providersCriteria, null, providersNotExported);
                        providersPath = this.SaveCsv <ProviderDto, ProviderListViewCriteria>(providersList,
                                                                                             providersCriteria,
                                                                                             providersCriteria.FileName + "_" + long.Parse(DateTime.Now.ToString("yyyyMMddHHmmss")),
                                                                                             false, null);
                    }
                    response = request.CreateResponse(HttpStatusCode.Created, new
                    {
                        success = true,
                        exported = expensesExported,
                        not_exported = expensesNotExported,
                        inexistent_providers = notExportedProviders,
                        error_providers_path = providersPath
                    });
                }
                return response;
            }));
Пример #29
0
        public async Task <Tuple <ImportFileLog, ImportResult> > ParseAsync(IEnumerable <string[]> lines, CancellationToken token = default(CancellationToken))
        {
            var torihikiKubuns = FileInformation.GetImportableValues();

            if (torihikiKubuns.Any())
            {
                ImportableTorihikiKubun = torihikiKubuns;
            }

            var fileLog = new ImportFileLog {
                Id        = FileInformation.Index,
                CompanyId = Helper.CompanyId,
                FileName  = FileInformation.Path,
                FileSize  = FileInformation.Size,
                CreateBy  = Helper.LoginUserId,
            };
            var parseResult = ImportResult.Success;

            ReceiptHeader header            = null;
            var           receiptCategoryId = 0;
            var           parseSkipping     = false;
            DateTime      workDay           = DateTime.MinValue;
            BankAccount   account           = null;

            foreach (var fields in lines)
            {
                if (fields.Length < 1)
                {
                    parseResult = ImportResult.FileFormatError;
                    break;
                }
                var datakubun = fields.First();
                if (datakubun == Constants.DataKubun.Header)
                {
                    if (fields.Length < 14)
                    {
                        parseResult = ImportResult.FileFormatError;
                        break;
                    }
                    if (header != null && header.Receipts.Any())
                    {
                        fileLog.ReceiptHeaders.Add(header);
                    }

                    var sakuseibi     = fields[2];
                    var bankCode      = fields[8];
                    var bankName      = fields[9];
                    var branchCode    = fields[10];
                    var branchName    = fields[11];
                    var accountType   = fields[12];
                    var accountNumber = fields[13];

                    if (!Helper.ValidateBankCode(ref bankCode) ||
                        !Helper.ValidateBranchCode(ref branchCode) ||
                        !Helper.ValidateAccountNumber(ref accountNumber))
                    {
                        parseResult = ImportResult.BankAccountFormatError;
                        break;
                    }
                    var accountTypeId = 0;
                    if (!int.TryParse(accountType, out accountTypeId) ||
                        !Constants.ImportableAccountTypeIds.Contains(accountTypeId))
                    {
                        parseResult = ImportResult.BankAccountFormatError;
                        break;
                    }
                    if (!Helper.TryParseDateTime(sakuseibi, out workDay))
                    {
                        parseResult = ImportResult.FileFormatError;
                        break;
                    }

                    account = Helper.IsAsync ?
                              await Helper.GetBankAccountAsync(bankCode, branchCode, accountTypeId, accountNumber, token) :
                              Helper.GetBankAccount(bankCode, branchCode, accountTypeId, accountNumber);

                    if (account == null || !account.ReceiptCategoryId.HasValue)
                    {
                        parseResult = ImportResult.BankAccountMasterError;
                        FileInformation.BankInformation
                            = $"銀行コード:{bankCode}, 支店コード:{branchCode}, 預金種別:{accountType}, 口座番号:{accountNumber}";
                        break;
                    }

                    if (account.ImportSkipping == 1)
                    {
                        parseSkipping = true;
                        header        = null;
                        continue;
                    }

                    parseSkipping     = false;
                    receiptCategoryId = account.ReceiptCategoryId.Value;

                    bankName   = Helper.ConvertToValidEbCharacter(bankName).Left(30);
                    branchName = Helper.ConvertToValidEbCharacter(branchName).Left(30);

                    header = new ReceiptHeader {
                        CompanyId       = Helper.CompanyId,
                        CurrencyId      = Helper.DefaultCurrency.Id,
                        ImportFileLogId = fileLog.ReceiptHeaders.Count,
                        Workday         = workDay,
                        BankCode        = bankCode,
                        BankName        = bankName,
                        BranchCode      = branchCode,
                        BranchName      = branchName,
                        AccountTypeId   = accountTypeId,
                        AccountNumber   = accountNumber,
                        AccountName     = string.Empty,
                        CreateBy        = Helper.LoginUserId,
                        UpdateBy        = Helper.LoginUserId,
                    };
                }
                if (datakubun == Constants.DataKubun.Data)
                {
                    if (fields.Length < 19)
                    {
                        parseResult = ImportResult.FileFormatError;
                        break;
                    }
                    if (parseSkipping)
                    {
                        continue;
                    }
                    fileLog.ReadCount++;

                    var torikeshikubun       = fields[6];
                    var kanjyoubi            = fields[8];
                    var kisanbi              = fields[9];
                    var torihikikubun        = fields[10];
                    var torihikikingakukubun = fields[11];
                    var torihikikingaku      = fields[12];
                    var tekiyo1              = fields[15];
                    var tekiyo2              = fields[16];
                    var sourceBankName       = fields[17];
                    var sourceBranchName     = fields[18];

                    if (!ImportableTorikeshiKubun.Contains(torikeshikubun) ||
                        !ImportableTorihikiKubun.Contains(torihikikubun))
                    {
                        continue;
                    }

                    var monthday = FileInformation.UseValueDate ? kisanbi : kanjyoubi;
                    monthday = monthday.Left(4, '0', true);
                    var month      = monthday.Substring(0, 2);
                    var day        = monthday.Substring(2);
                    var recordedAt = DateTime.MinValue;
                    if (!Helper.TryParseDateTimeAnser(month, day, out recordedAt))
                    {
                        parseResult = ImportResult.FileFormatError;
                        break;
                    }
                    var sign = GetSign(torihikikingakukubun);
                    if (sign == 0M)
                    {
                        parseResult = ImportResult.FileFormatError;
                        break;
                    }
                    var receiptAmount = 0M;
                    if (!decimal.TryParse(torihikikingaku, out receiptAmount) ||
                        Constants.MaxAmount < Math.Abs(receiptAmount))
                    {
                        parseResult = ImportResult.FileFormatError;
                        break;
                    }
                    receiptAmount = sign * receiptAmount;

                    var payerNameRaw = Helper.ConvertToValidEbCharacter((tekiyo1 + tekiyo2).Trim()).Left(140);
                    var payerName    = Helper.RemoveLegalPersonality(payerNameRaw);
                    sourceBankName   = Helper.ConvertToValidEbCharacter(sourceBankName).Left(140);
                    sourceBranchName = Helper.ConvertToValidEbCharacter(sourceBranchName).Left(140);

                    int?customerId = null; // Helper.GetCustomerIdByExclusiveInfo(account.BankCode, account.BranchCode, "");

                    int?sectionId = null;  // Helper.GetSectionIdByPayerCode(payerCode: "");

                    int?excludeCategoryId = Helper.UseApportion ? null : Helper.IsAsync ?
                                            await Helper.GetExcludeCategoryIdAsync(payerName, token) :
                                            Helper.GetExcludeCategoryId(payerName);

                    var receipt = new Receipt {
                        Id                = header.Receipts.Count() + 1,
                        CompanyId         = Helper.CompanyId,
                        CurrencyId        = Helper.DefaultCurrency.Id,
                        ReceiptHeaderId   = header.Id,
                        ReceiptCategoryId = receiptCategoryId,
                        CustomerId        = customerId,
                        SectionId         = sectionId,
                        InputType         = Constants.InputTypeEbImporter,
                        Apportioned       = Helper.UseApportion ? 0 : 1,
                        Approved          = 1,
                        Workday           = workDay,
                        RecordedAt        = recordedAt,
                        ReceiptAmount     = receiptAmount,
                        RemainAmount      = receiptAmount,
                        PayerCode         = string.Empty,
                        PayerName         = payerName,
                        PayerNameRaw      = payerNameRaw,
                        SourceBankName    = sourceBankName,
                        SourceBranchName  = sourceBranchName,
                        ExcludeFlag       = excludeCategoryId.HasValue ? 1 : 0,
                        ExcludeCategoryId = excludeCategoryId,
                        CreateBy          = Helper.LoginUserId,
                        UpdateBy          = Helper.LoginUserId,
                    };
                    if (excludeCategoryId.HasValue)
                    {
                        receipt.ExcludeAmount  = receiptAmount;
                        receipt.RemainAmount   = 0M;
                        receipt.AssignmentFlag = 2;
                        var exclude = new ReceiptExclude {
                            Id                = receipt.Id,
                            ReceiptId         = receipt.Id,
                            ExcludeCategoryId = excludeCategoryId,
                            ExcludeAmount     = receiptAmount,
                            CreateBy          = Helper.LoginUserId,
                            UpdateBy          = Helper.LoginUserId,
                        };
                        header.ReceiptExcludes.Add(exclude);
                    }
                    header.Receipts.Add(receipt);

                    header.ImportCount++;
                    header.ImportAmount += receiptAmount;
                    fileLog.ImportCount++;
                    fileLog.ImportAmount += receiptAmount;
                }
                if (datakubun == Constants.DataKubun.Trailer)
                {
                }
                if (datakubun == Constants.DataKubun.End)
                {
                }
            }
            if (header != null && header.Receipts.Any())
            {
                fileLog.ReceiptHeaders.Add(header);
            }

            if (parseResult == ImportResult.Success && !fileLog.ReceiptHeaders.Any())
            {
                parseResult = ImportResult.ImportDataNotFound;
            }

            return(Tuple.Create(fileLog, parseResult));
        }
Пример #30
0
 public virtual JsonNetResult GetPagedReceiptDetails(int pageNumber, int pageSize, ReceiptHeader model, IList <IList <Sage.CA.SBS.ERP.Sage300.Common.Models.Filter> > filters)
 {
     try
     {
         var receiptDetail = ControllerInternal.GetPagedDetail(pageNumber, pageSize, model, filters);
         return(JsonNet(receiptDetail));
     }
     catch (BusinessException businessException)
     {
         return(JsonNet(BuildErrorModelBase(CommonResx.GetFailedMessage, businessException, ReceiptHeaderResx.Receipt)));
     }
 }