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)); }
public async Task <Tuple <ImportFileLog, ImportResult> > ParseAsync(IEnumerable <string[]> records, CancellationToken token = default(CancellationToken)) { var settingKubun = FileInformation.GetImportableValues(); if (settingKubun.Any()) { ImportTorihikiKubun = 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; var parseSkipping = false; DateTime workDay = new DateTime(0); BankAccount bank = null; var ebExcludeAccountList = Helper.IsAsync ? await Helper.GetEBExcludeAccountSettingListAsync(token) : Helper.GetEBExcludeAccountSettingList(); if (ebExcludeAccountList == null) { return(Tuple.Create(fileLog, ImportResult.DBError)); } foreach (var fields in records) { if (fields.Length < 1) { parseResult = ImportResult.FileFormatError; break; } var datakubun = fields[0]; if (datakubun == Constants.DataKubun.Header) { parseSkipping = false; bank = null; if (fields.Length < 14) { 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 accountTypeIdBuf = fields[11]; var accountNumber = fields[12]; var accountName = fields[13]; var accountTypeId = 0; if (!int.TryParse(accountTypeIdBuf, out accountTypeId) || !(Constants.ImportableAccountTypeIds).Contains(accountTypeId)) { parseResult = ImportResult.BankAccountFormatError; break; } if (!Helper.TryParseJpDateTime(sakuseibi, out workDay)) { parseResult = ImportResult.FileFormatError; break; } 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); accountNumber = Helper.ConvertToValidEbCharacter(accountNumber).Left(7); accountName = Helper.ConvertToValidEbCharacter(accountName).Left(140); bank = Helper.IsAsync ? await Helper.GetBankAccountAsync(bankCode, branchCode, accountTypeId, accountNumber, token) : Helper.GetBankAccount(bankCode, branchCode, accountTypeId, accountNumber); var defaultReceiptCategoryId = Helper.DefaultReceiptCategory?.Id; if (bank != null && !bank.ReceiptCategoryId.HasValue || !defaultReceiptCategoryId.HasValue) { parseResult = ImportResult.FileReadError; break; } receiptCategoryId = bank != null && bank.ReceiptCategoryId.HasValue ? bank.ReceiptCategoryId.Value : defaultReceiptCategoryId.Value; // skip する場合は、別のheader になるまで skip if (bank != null && bank.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 < 17) { parseResult = ImportResult.FileFormatError; break; } if (parseSkipping) { continue; } fileLog.ReadCount++; var kanjyoubi = fields[2]; var azukeirebi = fields[3]; var iriharaikubun = fields[4]; var torihikikubun = fields[5]; var torihikikingaku = fields[6]; var payerCode = fields[13]; var payerName = fields[14]; var sourceBankName = fields[15]; var sourceBranchName = fields[16]; if (!ImportIriharaiKubun.Contains(iriharaikubun) || !ImportTorihikiKubun.Contains(torihikikubun)) { continue; } DateTime recordedAt; if (!Helper.TryParseJpDateTime(FileInformation.UseValueDate ? azukeirebi : kanjyoubi, out recordedAt)) { parseResult = ImportResult.FileFormatError; break; } decimal receiptAmount; if (!decimal.TryParse(torihikikingaku, 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)) ?? bank?.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)); }
public async Task <Tuple <ImportFileLog, ImportResult> > ParseAsync(IEnumerable <string[]> fields, CancellationToken token = default(CancellationToken)) { var settingKubun = FileInformation.GetImportableValues(); if (settingKubun.Any()) { ImportableTorihikiName = 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 = new DateTime(0); BankAccount bankBuf = null; DateTime workDayBuf = new DateTime(0); foreach (var field in fields) { if (field.Length < 1) { parseResult = ImportResult.FileFormatError; break; } var recordKubun = field[0]; if (!ImportableRecordKubun.Contains(recordKubun)) { continue; } if (field.Length < 27) { parseResult = ImportResult.FileFormatError; break; } var torihikimei = field[12]; if (!ImportableTorihikiName.Contains(torihikimei)) { continue; } var headerMonth = field[1]; var headerday = field[2]; var accountName = field[5]; var bankName = field[6]; var branchName = field[7]; var kouzasyubetsu = field[9]; var accountNumber = field[10]; var toriatsukaiMonth = field[15]; var toriatsukaiDay = field[16]; var kisanbiMonth = field[17]; var kisanbiDay = field[18]; var kingaku = field[19]; var payerName = field[21]; var sourceBankName = field[25]; var sourceBranchName = field[26]; var accountTypeId = Helper.GetAccountTypeIdByName(kouzasyubetsu); if (!Constants.ImportableAccountTypeIds.Contains(accountTypeId) || !Helper.ValidateAccountNumber(ref accountNumber)) { parseResult = ImportResult.BankAccountFormatError; break; } bankName = bankName.Left(30); branchName = branchName.Left(30); accountName = accountName.Left(30); var account = Helper.IsAsync ? await Helper.GetBankAccountByBankNameAsync(bankName, branchName, accountTypeId, accountNumber, token) : Helper.GetBankAccountByBankName(bankName, branchName, accountTypeId, accountNumber); if (account == null || !account.ReceiptCategoryId.HasValue) { parseResult = ImportResult.BankAccountMasterError; FileInformation.BankInformation = $"銀行名:{bankName} 支店名:{branchName}, 預金種別:{Helper.GetAccountTypeNameById(accountTypeId)}, 口座番号:{accountNumber}"; break; } fileLog.ReadCount++; if (account.ImportSkipping == 1) { continue; } if (!Helper.TryParseDateTimeAnser(headerMonth, headerday, out workDay)) { parseResult = ImportResult.FileFormatError; break; } var bankCode = Helper.ConvertToValidEbCharacter(account.BankCode).Right(4, '0', true); var branchCode = Helper.ConvertToValidEbCharacter(account.BranchCode).Right(3, '0', true); receiptCategoryId = account.ReceiptCategoryId.Value; if (!(bankBuf?.Id == account.Id && workDayBuf == workDay)) { 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; bankBuf = account; workDayBuf = workDay; } DateTime recordedAt; var smonth = FileInformation.UseValueDate ? kisanbiMonth : toriatsukaiMonth; if (string.IsNullOrEmpty(smonth)) { smonth = toriatsukaiMonth; } var sday = FileInformation.UseValueDate ? kisanbiDay : toriatsukaiDay; if (string.IsNullOrEmpty(sday)) { sday = toriatsukaiDay; } if (!Helper.TryParseDateTimeAnser(smonth, sday, 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; } var payerCode = string.Empty; 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 = null; // Helper.GetCustomerIdByExclusiveInfo(header.BankCode, header.BranchCode, header.AccountType, payerCode); int?sectionId = account.SectionId; // Helper.GetSectionIdByPayerCode(payerCode); 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 (parseResult == ImportResult.Success && fileLog?.ImportCount == 0) { parseResult = ImportResult.ImportDataNotFound; } return(Tuple.Create(fileLog, parseResult)); }
public async Task <Tuple <ImportFileLog, ImportResult> > ParseAsync(IEnumerable <string[]> fields, 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; DateTime workDay = DateTime.Today; BankAccount bankBuf = null; foreach (var field in fields) { if (field.Length < 13) { parseResult = ImportResult.FileFormatError; break; } var syoukaikouza = field[0]; var kanjyoubi = field[2]; var kisanbi = field[3]; var kingaku = field[5]; var torihikikubun = field[8]; var sourceBankName = field[10]; var sourceBranchName = field[11]; var payerName = field[12]; if (syoukaikouza == SkipWord) { continue; } var bankCode = BankCode; var branchCode = GetBranchCode(syoukaikouza).Right(3, '0', true); var accountTypeId = Helper.GetAccountTypeIdByName(syoukaikouza); if (!Constants.ImportableAccountTypeIds.Contains(accountTypeId)) { parseResult = ImportResult.FileFormatError; break; } var accountNumber = GetAccountNumber(syoukaikouza); 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}, 預金種別:{Helper.GetAccountTypeNameById(accountTypeId)}, 口座番号:{accountNumber}"; break; } if (account.ImportSkipping == 1) { // parameter continue; } fileLog.ReadCount++; if (!ImportableTorihikiKubun.Contains(torihikikubun)) { continue; } var bankName = account.BankName.Left(30); var branchName = account.BranchName.Left(30); receiptCategoryId = account.ReceiptCategoryId.Value; if (!(bankBuf?.Id == account.Id)) { 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 = string.Empty; header.CreateBy = Helper.LoginUserId; header.UpdateBy = Helper.LoginUserId; bankBuf = account; } kisanbi = kisanbi.Replace("(", "").Replace(")", ""); var symd = FileInformation.UseValueDate ? kisanbi : kanjyoubi; if (string.IsNullOrEmpty(symd)) { symd = kanjyoubi; } DateTime recordedAt; if (!Helper.TryParseDateTime(symd, out recordedAt, DateFormat)) { parseResult = ImportResult.FileFormatError; break; } decimal receiptAmount; if (!decimal.TryParse(kingaku, out receiptAmount) || receiptAmount == 0M || Constants.MaxAmount < Math.Abs(receiptAmount)) { parseResult = ImportResult.FileFormatError; break; } var payerCode = string.Empty; 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 = null; // Helper.GetCustomerIdByExclusiveInfo(header.BankCode, header.BranchCode, header.AccountType, payerCode); int?sectionId = account.SectionId; // Helper.GetSectionIdByPayerCode(payerCode); 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 (parseResult == ImportResult.Success && fileLog?.ImportCount == 0) { parseResult = ImportResult.ImportDataNotFound; } return(Tuple.Create(fileLog, parseResult)); }
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)); }