private static int?Import(CsvReader csv, int?fundid, DateTime date) { csv.Configuration.HasHeaderRecord = false; csv.Configuration.Delimiter = "\t"; var bundleHeader = BatchImportContributions.GetBundleHeader(date, DateTime.Now); var fid = fundid ?? BatchImportContributions.FirstFundId(); var list = new List <DepositRecord>(); var n = 0; // this is a peculiar file, no headers and all rows are included twice. while (csv.Read()) { if (csv[3] == "C") // C is the marker beginning each section { continue; // skip over C records } var r = new DepositRecord() { Row = n++, Valid = true }; r.Account = csv[5]; r.Amount = (csv[7].ToDecimal() / 100).ToString(); r.CheckNo = csv[8]; r.Routing = csv[9]; list.Add(r); } for (var i = 0; i < n / 2; i++) { var r = list[i]; var bd = BatchImportContributions.AddContributionDetail(date, fid, r.Amount, r.CheckNo, r.Routing, r.Account); bundleHeader.BundleDetails.Add(bd); } BatchImportContributions.FinishBundle(bundleHeader); return(bundleHeader.BundleHeaderId); }
private static int?Import(CsvReader csv, DateTime date) { var bundleHeader = BatchImportContributions.GetBundleHeader(date, DateTime.Now); var list = new List <DepositRecord>(); var n = 0; csv.Read(); csv.ReadHeader(); while (csv.Read()) { var r = new DepositRecord() { Row = ++n, Valid = true }; r.Date = csv["Date"].ToDate(); r.PeopleId = csv["PeopleId"].ToInt(); r.CheckNo = csv["Check#"]; var typ = csv["Type"]; r.FundId = csv["Fund"].ToInt2(); r.Amount = csv["Amount"]; r.Description = csv["Notes"]; if (!r.Date.HasValue) { r.AddError("Missing Date"); } if (!r.FundId.HasValue) { r.AddError("Missing Fund"); } if (r.PeopleId == 0) { r.AddError("Missing PeopleId"); } if (0 == DbUtil.Db.Connection.ExecuteScalar <int>( "SELECT IIF(EXISTS(SELECT NULL FROM dbo.People WHERE PeopleId = @pid), 1, 0)", new { pid = r.PeopleId })) { r.AddError("Cannot Find Person"); } if (0 == DbUtil.Db.Connection.ExecuteScalar <int>( "SELECT IIF(EXISTS(SELECT NULL FROM dbo.ContributionFund WHERE FundId = @fid), 1, 0)", new { fid = r.FundId })) { r.AddError("Cannot Find Fund"); } switch (typ) { case "PL": r.TypeId = ContributionTypeCode.Pledge; break; case "NT": r.TypeId = ContributionTypeCode.NonTaxDed; break; case "GK": r.TypeId = ContributionTypeCode.GiftInKind; break; case "SK": r.TypeId = ContributionTypeCode.Stock; break; case "CN": r.TypeId = ContributionTypeCode.CheckCash; break; default: r.AddError("missing/unknown type"); break; } list.Add(r); } if (list.Any(vv => vv.Valid == false)) { throw new Exception("The following errors were found<br>\n" + string.Join("<br>\n", list.Where(vv => vv.Valid == false).Select(vv => vv.RowError()).ToArray())); } foreach (var r in list) { if (!r.Date.HasValue || !r.FundId.HasValue) { continue; } var bd = BatchImportContributions.AddContributionDetail(r.Date.Value, r.FundId.Value, r.Amount, r.PeopleId); var c = bd.Contribution; c.ContributionDesc = r.Description; c.CheckNo = r.CheckNo; bundleHeader.BundleDetails.Add(bd); } BatchImportContributions.FinishBundle(bundleHeader); return(bundleHeader.BundleHeaderId); }