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); }
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)); }