Пример #1
0
        private IParser CreateParser(FileInformation info)
        {
            IParser parser = null;
            var     format = info.Format;

            if (format == EbFileFormat.ZenginNyukinMeisai)
            {
                parser = new ParserZenginNyukinMeisai();
            }
            if (format == EbFileFormat.ZenginNyusyukkin)
            {
                parser = new ParserZenginNyusyukkin();
            }
            if (format == EbFileFormat.Anser)
            {
                parser = new ParserAnser();
            }
            if (format == EbFileFormat.BizStationZenmeisai)
            {
                parser = new ParserBizStationZenmeisai    {
                    BankCode = info.BankCode
                }
            }
            ;
            if (format == EbFileFormat.BizStationNyukinMeisai)
            {
                parser = new ParserBizStationNyukinMeisai {
                    BankCode = info.BankCode
                }
            }
            ;
            if (format == EbFileFormat.JPBank)
            {
                parser = new ParserJPBank();
            }
            if (format == EbFileFormat.RegionalBank)
            {
                parser = new ParserRegionalBankNyusyukkin {
                    BankCode = info.BankCode
                }
            }
            ;
            if (format == EbFileFormat.MoneyShooterNyusyukkin)
            {
                parser = new ParserMoneyShooterNyusyukkin();
            }
            if (format == EbFileFormat.ULineXtraVer2)
            {
                parser = new ParserULineXtraVer2();
            }
            if (format == EbFileFormat.KitaNipponBankBiznetNyusyukkin)
            {
                parser = new ParserKitaNipponBankNyusyukkin();
            }
            if (format == EbFileFormat.DaishBank)
            {
                parser = new ParserDaishiBank();
            }
            if (format == EbFileFormat.JyouyouBankNyusyukkin)
            {
                parser = new ParserBizStationNyukinMeisai {
                    BankCode = info.BankCode, Offset = 1
                }
            }
            ;
            if (format == EbFileFormat.KewpieNetNyusyukkin)
            {
                parser = new ParserKewpieNetNyusyukkin();
            }

            if (parser == null)
            {
                throw new ArgumentException();
            }
            parser.Helper          = this.Helper;
            parser.FileInformation = info;
            return(parser);
        }
Пример #2
0
        public async Task <Tuple <ImportFileLog, ImportResult> > ParseAsync(IEnumerable <string[]> lines, CancellationToken token = default(CancellationToken))
        {
            var settingKubun = FileInformation.GetImportableValues().Select(x => int.Parse(x)).ToArray();

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

            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;
            DateTime      workDay           = DateTime.MinValue;

            BankAccount bankBuf    = null;
            DateTime    workDayBuf = new DateTime(0);

            foreach (var fields in lines)
            {
                if (fields.Length < 25)
                {
                    parseResult = ImportResult.FileFormatError;
                    break;
                }

                var sakuseibi = fields[KewpieNetItemIndex.Sakuseibi];

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

                var bankCode      = fields[KewpieNetItemIndex.BankCode];
                var bankName      = fields[KewpieNetItemIndex.BankName];
                var branchCode    = fields[KewpieNetItemIndex.BranchCode];
                var branchName    = fields[KewpieNetItemIndex.BranchName];
                var accountType   = fields[KewpieNetItemIndex.AccountType];
                var accountNumber = fields[KewpieNetItemIndex.AccountNumber];
                var accountName   = fields[KewpieNetItemIndex.AccountName];

                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;
                }
                var 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)
                {
                    continue;
                }
                fileLog.ReadCount++;
                receiptCategoryId = account.ReceiptCategoryId.Value;

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

                if (!(bankBuf?.Id == account.Id &&
                      workDayBuf == workDay))
                {
                    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     = accountName,
                        CreateBy        = Helper.LoginUserId,
                        UpdateBy        = Helper.LoginUserId,
                    };

                    fileLog.ReceiptHeaders.Add(header);

                    bankBuf    = account;
                    workDayBuf = workDay;
                }

                var kanjyoubi        = fields[KewpieNetItemIndex.Kanjobi];
                var kisanbi          = fields[KewpieNetItemIndex.Kisanbi];
                var iribaraiKubun    = fields[KewpieNetItemIndex.IribaraiKubun];
                var torihikikubun    = fields[KewpieNetItemIndex.TorihikiKubun];
                var torihikikingaku  = fields[KewpieNetItemIndex.TorihikiKingaku];
                var sourceBankName   = fields[KewpieNetItemIndex.SourceBankName];
                var sourceBranchName = fields[KewpieNetItemIndex.SourceBranchName];
                var sourcePayerName  = fields[KewpieNetItemIndex.PayerName];

                var torihikikubunInt = 0;
                if (!int.TryParse(torihikikubun, out torihikikubunInt))
                {
                    parseResult = ImportResult.FileFormatError;
                    break;
                }
                if (!ImportableIribaraiKubun.Contains(iribaraiKubun) ||
                    !ImportableTorihikiKubun.Contains(torihikikubunInt))
                {
                    continue;
                }

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

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

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

                int?customerId = null;

                int?sectionId = account?.SectionId;

                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 (parseResult == ImportResult.Success && !fileLog.ReceiptHeaders.Any())
            {
                parseResult = ImportResult.ImportDataNotFound;
            }

            return(Tuple.Create(fileLog, parseResult));
        }