private Int32 GenerateAutomaticDebitFileHeader(StringBuilder strBuilderHeader, Company company, Account account, Int32 sequentialNumber) { /* Função responsavel pela configuração do documento de débito automatico.Modelo definido pela FEBRABAN * * O modelo/Código é dividido por blocos definidos por letras * * Os campos alfanuméricos são representados por letras A e os numéricos por 0 * Sendo que os campos default estão preenchidos com seus valores corretos * * * O modelo de comentário é: Tamanho do campo - descrição do campo * */ /// A - Header Int32 totalRows = 0; String A_registerCode = "A"; //1 - Default String A_deliveryCode = "1"; //1 - Default String A_conveneCode = "00000000000000000000"; //20 -Definido pelo banco String A_companyName = company.LegalEntityProfile.CompanyName.PadRight(20, ' ').Substring(0, 20); //20- String A_bankCode = account.Bank.BankNumber.PadLeft(3, '0').Substring(0, 3); //3-Código do banco na câmara de compensação String A_BankName = account.Bank.ShortName.PadRight(20, ' '); String A_createdDate = DateTime.Now.ToShortDateString(); //8 String A_SequentialNumber = sequentialNumber.ToString().PadLeft(6, '0'); //6- String A_layoutVersion = "04"; //2 String A_serviceIdentification = "DÉBITO AUTOMÁTICO"; //17 String A_reservedSpace = String.Empty.PadLeft(52, ' '); //52 strBuilderHeader.Append(A_registerCode).Append(A_deliveryCode).Append(A_conveneCode).Append(A_companyName); strBuilderHeader.Append(A_BankName).Append(A_createdDate).Append(A_SequentialNumber).Append(A_layoutVersion) .Append(A_serviceIdentification).Append(A_reservedSpace); strBuilderHeader.AppendLine(); totalRows++; return totalRows; }
private Int32 GenerateAutomaticDebitFileContent(StringBuilder strBuilderContent, Company company, Account account, List<Parcel> parcels) { /* Função responsavel pela configuração do documento de débito automatico.Modelo definido pela FEBRABAN * * O modelo/Código é dividido por blocos definidos por letras * * Os campos alfanuméricos são representados por letras A e os numéricos por 0 * Sendo que os campos default estão preenchidos com seus valores corretos * * * O modelo de comentário é: Tamanho do campo - descrição do campo * */ Int32 totalRows = 0; foreach (Parcel parcel in parcels) { if (!parcel.InvoiceId.HasValue || !parcel.Invoice.CustomerId.HasValue) continue; /// B { String B_registerCode = "B"; //1 String B_customerIdentificationAtCompany = parcel.Invoice.Customer.LegalEntityProfile != null ? parcel.Invoice.Customer.LegalEntityProfile. CompanyName : parcel.Invoice.Customer.Profile.Name; //25 - Identificação única do cliente B_customerIdentificationAtCompany.PadRight(20, ' ').Substring(0, 20); if (parcel.Invoice.Customer.Agency == null) parcel.Invoice.Customer.Agency = String.Empty; String B_debitAgency = parcel.Invoice.Customer.Agency.PadRight(4, ' ').Substring(0, 4); //4 if (parcel.Invoice.Customer.AccountNumber == null) parcel.Invoice.Customer.AccountNumber = String.Empty; String B_customerIdentificationAtBank = parcel.Invoice.Customer.AccountNumber.PadRight(14, ' ').Substring(0, 14); //14 -Identificação única utilizada pelo banco String B_optionDate = DateTime.Now.ToShortDateString(); //8 String B_reservedSpace = String.Empty.PadLeft(97, ' '); //97 String B_operationCode = "1"; //1 strBuilderContent.Append(B_registerCode).Append(B_customerIdentificationAtCompany).Append( B_debitAgency); strBuilderContent.Append(B_customerIdentificationAtCompany).Append(B_optionDate).Append( B_reservedSpace).Append(B_operationCode); strBuilderContent.AppendLine(); totalRows++; } /// C { String C_registerCode = "C"; //1 String C_customerIdentificationAtCompany = parcel.Invoice.Customer.CustomerId.ToString().PadRight(25, ' ').Substring(0, 25); //25 String C_debitAgency = parcel.Invoice.Customer.Agency.PadRight(4, ' ').Substring(0, 4); //4 String C_customerIdentificationAtBank = parcel.Invoice.Customer.AccountNumber.PadRight(14, ' ').Substring(0, 14); //14 -Identificação única utilizada pelo banco String C_firstOcurrence = String.Empty.PadLeft(40, ' '); //40 String C_secondOcurrence = String.Empty.PadLeft(40, ' '); //40 String C_reservedSpace = String.Empty.PadLeft(40, ' '); //40 String C_operationCode = "2"; //1 strBuilderContent.Append(C_registerCode).Append(C_customerIdentificationAtBank).Append(C_debitAgency) .Append(C_customerIdentificationAtBank); strBuilderContent.Append(C_firstOcurrence).Append(C_secondOcurrence).Append(C_reservedSpace).Append( C_operationCode); strBuilderContent.AppendLine(); totalRows++; } ///D { String D_registerCode = "C"; //1 String D_customerIdentificationAtOriginalCompany = String.Empty.PadLeft(25, ' '); //25 - Identificação do cliente na empresa antiga String D_debitAgency = String.Empty.PadLeft(4, ' '); //4 String D_customerIdentificationAtBank = String.Empty.PadLeft(14, ' '); //14 -Identificação única utilizada pelo banco String D_customerIdentificationAtNewCompany = String.Empty.PadLeft(25, ' '); //25 - Identificação do cliente na empresa nova String D_Ocurrence = String.Empty.PadLeft(60, ' '); //60 String D_reservedSpace = String.Empty.PadLeft(20, ' '); //20 String D_operationCode = "0"; //1 strBuilderContent.Append(D_registerCode).Append(D_customerIdentificationAtOriginalCompany).Append( D_debitAgency); strBuilderContent.Append(D_customerIdentificationAtBank).Append(D_customerIdentificationAtNewCompany) .Append(D_Ocurrence); strBuilderContent.Append(D_reservedSpace).Append(D_operationCode); strBuilderContent.AppendLine(); totalRows++; } ///E { String E_registerCode = "E"; //1 String E_customerIdentificationAtCompany = parcel.Invoice.Customer.CustomerId.ToString().PadRight(25, ' ').Substring(0, 25); //25 String E_debitAgency = String.Empty.PadLeft(4, ' '); //4 String E_customerIdentificationAtBank = parcel.Invoice.Customer.AccountNumber.PadRight(14, ' ').Substring(0, 14); //14 -Identificação única utilizada pelo banco String E_dueDate = parcel.DueDate.ToShortDateString(); //8 String E_debitValue = "000000000000000".PadLeft(15, '0'); //15 String E_currencyCode = "03"; //2 String E_spaceForCompanyUse = String.Empty.PadLeft(60, ' '); //60 String E_reservedSpace = String.Empty.PadLeft(20, ' '); //20 String E_operationCode = "0"; //1 strBuilderContent.Append(E_registerCode).Append(E_customerIdentificationAtCompany).Append( E_debitAgency); strBuilderContent.Append(E_customerIdentificationAtCompany).Append(E_dueDate).Append(E_debitValue). Append(E_currencyCode); strBuilderContent.Append(E_spaceForCompanyUse).Append(E_reservedSpace).Append(E_operationCode); strBuilderContent.AppendLine(); totalRows++; } } return totalRows; }
public String GenerateAutomaticDebitFile(Company company, Account account, List<Parcel> parcels, Int32 sequentialNumber) { var strBuilderAutomaticDebitFile = new StringBuilder(); Int32 totalRows = 0; totalRows = GenerateAutomaticDebitFileHeader(strBuilderAutomaticDebitFile, company, account, sequentialNumber); totalRows += GenerateAutomaticDebitFileContent(strBuilderAutomaticDebitFile, company, account, parcels); GenerateAutomaticDebitFileTrailler(strBuilderAutomaticDebitFile, parcels, totalRows); return strBuilderAutomaticDebitFile.ToString(0, strBuilderAutomaticDebitFile.Length); }