public NachaFile(NachaFileInfo info, List<NachaFileAppraiserEntry> listOfEntry) : this() { ValidateParams(info, listOfEntry); double totalAmount = 0; long entryHash = 0; _fileHeaderSection = new FileHeaderSection(info.CreationDate, info.CreationDate, info.FileIdModifier); _companyBatchHeaderSection = new CompanyBatchHeaderSection(info.CompanyDescriptiveDate, info.EffectiveEntryDate, info.BatchNumber); foreach (var entry in listOfEntry) { var parsedRoutingNumber = GetParsedRoutingNumber(entry.RoutingNumber); totalAmount += (double)entry.Amount; entryHash = (entryHash + parsedRoutingNumber.ReceivingDfiIdentification) % MaxEntryhashLength; int typeOfAccount = entry.TypeOfAccount == AccountType.Savings ? SavingTypeOfAccount : CheckingOrMoneymarketTypeOfAccount; _listOfEntryDetailSection.Add(new EntryDetailSection(typeOfAccount, parsedRoutingNumber.ReceivingDfiIdentification, parsedRoutingNumber.CheckDigit, entry.AccountNumber, (double)entry.Amount, entry.AppraiserOrCompanyId, entry.AppraiserOrCompanyName, entry.UniqueTraceNumber, entry.IsAppraiserWithCompany)); } _companyBatchControlSection = new CompanyBatchControlSection(_listOfEntryDetailSection.Count, entryHash, totalAmount, info.BatchNumber); _fileTrailerSection = new FileTrailerSection(GetBlockCount(), _listOfEntryDetailSection.Count, entryHash, totalAmount); }
private void ValidateParams(NachaFileInfo info, List<NachaFileAppraiserEntry> listOfEntry) { if (info == null) { throw new ArgumentNullException(); } if (info.BatchNumber < BatchMinValue || info.BatchNumber > BatchMaxValue) { throw new ArgumentException("Batch number should be 1..9999999"); } if (info.FileIdModifier.Length != 1) { throw new ArgumentException("FileIdModifier should be 1 character"); } if (listOfEntry == null) { throw new ArgumentNullException(); } for (int el = 0; el < listOfEntry.Count; el++) { if (listOfEntry[el].RoutingNumber.Length != RoutingnumberLength) { throw new ArgumentException("Routing Number length should be 9"); } if (el + 1 < listOfEntry.Count && (listOfEntry[el + 1].UniqueTraceNumber - 1) != listOfEntry[el].UniqueTraceNumber) { throw new ArgumentException("Unique Trace Number should have correct increment"); } } }