private void CreateField(LineFieldsModel content, EnumFileFieldsType type, string name, string value = "") { switch (type) { case EnumFileFieldsType.Header: content.Fields.Add(name, new Field(ProcessType, Configuration.HeaderFields[name]) { Value = value.isNullOrEmpty()?Configuration.HeaderFields[name].DefaultValue:value }); return; case EnumFileFieldsType.Body: content.Fields.Add(name, new Field(ProcessType, Configuration.BodyFields[name]) { Value = value.isNullOrEmpty() ? Configuration.BodyFields[name].DefaultValue : value }); return; case EnumFileFieldsType.Footer: content.Fields.Add(name, new Field(ProcessType, Configuration.FooterFields[name]) { Value = value.isNullOrEmpty() ? Configuration.FooterFields[name].DefaultValue : value }); return; default: throw new Exception("Tipo do registro não contemplado."); } }
public static Dictionary <int?, string> PrepareSequenceFileFields(this LineFieldsModel model) { Dictionary <int?, string> dic = new Dictionary <int?, string>(); foreach (var field in model.Fields.Values) { dic.Add(field.InitialPosition, field.Value); } return(dic.OrderBy(key => key.Key).ToDictionary(keyItem => keyItem.Key, valueItem => valueItem.Value)); }
private Dictionary <string, LineFieldsModel> ReadVehiclesInformation(string[] file) { if (Configuration.BodyVehicleInformation == null || !Configuration.BodyVehicleInformation.Any()) { return(null); } var bodyVehiclesInformationLines = file.Select((text, index) => new { LineText = text, LineNumber = index + 1 }) .Where(p => { var initialPosition = Configuration.BodyVehicleInformation["TIPO_REGISTRO"].InitialPosition; var length = Configuration.BodyVehicleInformation["TIPO_REGISTRO"].Length; return(length != null && (initialPosition != null && p.LineText.Substrings(initialPosition.Value, length.Value) == Configuration.BusinessSettings.BodyVehicleInformationIdentification)); }).ToList(); if (!bodyVehiclesInformationLines.Any()) { throw new Exception($"Não foi encontrado nenhum registro(s) do tipo:[{Configuration.BusinessSettings.BodyVehicleInformationIdentification}]"); } var vehiclesInformation = new Dictionary <string, LineFieldsModel>(); foreach (var vehiclesInformationLine in bodyVehiclesInformationLines) { var line = new LineFieldsModel() { LineNumber = vehiclesInformationLine.LineNumber }; foreach (var key in Configuration.BodyVehicleInformation.Keys) { var fieldConfiguration = Configuration.BodyVehicleInformation[key]; var fileField = new Field(ProcessType, fieldConfiguration) { Value = vehiclesInformationLine.LineText.Substrings(fieldConfiguration.InitialPosition.Value, fieldConfiguration.Length.Value) }; line.Fields.Add(key, fileField); } if (!vehiclesInformation.ContainsKey(line.Fields["DS_PROPOSTA"].Value)) { vehiclesInformation.Add(line.Fields["DS_PROPOSTA"].Value, line); } } if (!vehiclesInformation.Any()) { throw new Exception($"Não foi possível converter nenhuma linha de informações de veiculo para o modelo."); } return(vehiclesInformation); }
protected override FileBodyModel ReadBody(string[] file) { if (Configuration.BodyFields == null || !Configuration.BodyFields.Any()) { return(null); } var bodyLines = file.Select((text, index) => new { LineText = text, LineNumber = index + 1 }) .Where(p => { var initialPosition = Configuration.BodyFields["TIPO_REGISTRO"].InitialPosition; var length = Configuration.BodyFields["TIPO_REGISTRO"].Length; return(length != null && (initialPosition != null && p.LineText.Substrings(initialPosition.Value, length.Value) == Configuration.BusinessSettings.BodyIdentification)); }) .ToList(); if (!bodyLines.Any()) { throw new Exception($"Não foi encontrado nenhum registro(s) do tipo:[{Configuration.BusinessSettings.BodyIdentification}]"); } var bodyModel = new FileBodyModel(); foreach (var bodyLine in bodyLines) { var line = new LineFieldsModel() { LineNumber = bodyLine.LineNumber }; foreach (var key in Configuration.BodyFields.Keys) { var fieldConfiguration = Configuration.BodyFields[key]; var fileField = new Field(ProcessType, fieldConfiguration) { Value = bodyLine.LineText.Substrings(fieldConfiguration.InitialPosition.Value, fieldConfiguration.Length.Value) }; line.Fields.Add(key, fileField); } bodyModel.Content.Add(line); } if (!bodyModel.Content.Any() && bodyLines.Any()) { throw new Exception($"Não foi possível converter nenhuma linha do body para o modelo."); } return(bodyModel); }
internal bool ValidateIssuanceRules(LineFieldsModel issuance) { var dsProposal = issuance.Fields["DS_PROPOSTA"]; if (dsProposal.Value.isNullOrEmpty()) { Logs.Add($"A Linha:{issuance.LineNumber} não atende as regras para processamento como Emissão." + $"O campo da posição inicial:{dsProposal.InitialPosition} até a Posição: {dsProposal.InitialPosition + dsProposal.Length} não pode estar vazio!"); return(false); } if (!ValidateProposalLength(dsProposal.Value)) { Logs.Add($"A Linha:{issuance.LineNumber} não atende as regras para processamento como Emissão." + $"O campo da posição inicial:{dsProposal.InitialPosition} " + $"até a Posição: {dsProposal.InitialPosition + dsProposal.Length} tem que conter no mínimo {HdiProcessConfigurations.ProposalMinimunValidLength} caracteres!"); return(false); } return(true); }
public FileHeaderModel() { Content = new LineFieldsModel(); }
public FileFooterModel() { Content = new LineFieldsModel(); }
private List <string> CreateBodyLines(List <CancelationModel> population) { var bodyModel = new FileBodyModel(); var lineNumber = 1; foreach (var data in population) { if (data.PolicyInsurerIdentifier.isNullOrEmpty()) { _logs.Add($"A apólice {data.PolicyIdentifier} foi listada pra cancelamento, porém não pode ser cancelada, pois não possui um número de apólice"); continue; } var line = new LineFieldsModel() { LineNumber = lineNumber++ }; foreach (var key in Configuration.BusinessSettings.DefaultValues.Keys) { if (Configuration.BodyFields.ContainsKey(key)) { var fieldConfiguration = Configuration.BodyFields[key]; var fileField = new Field(ProcessType, fieldConfiguration) { Value = Configuration.BusinessSettings.DefaultValues[key] }; line.Fields.Add(key, fileField); } } CreateField(line, EnumFileFieldsType.Body, "TIPO_REGISTRO", Configuration.BusinessSettings.BodyIdentification); CreateField(line, EnumFileFieldsType.Body, "REGISTRO_SEQUENCIAL", line.LineNumber.ToString()); CreateField(line, EnumFileFieldsType.Body, "DOCUMENTO", data.PolicyInsurerIdentifier.RemoveHdiDocumentFormat()); CreateField(line, EnumFileFieldsType.Body, "ENDOSSO"); CreateField(line, EnumFileFieldsType.Body, "NUMERO_CONTROLE_ITURAN", data.PolicyIdentifier.ToString()); CreateField(line, EnumFileFieldsType.Body, "CODIGO_EQUIPAMENTO"); CreateField(line, EnumFileFieldsType.Body, "DATA_CANCELAMENTO", $"{data.CancelationDate:yyyyMMdd}"); CreateField(line, EnumFileFieldsType.Body, "DATA_PROCESSAMENTO"); CreateField(line, EnumFileFieldsType.Body, "STATUS_CANCELAMENTO"); CreateField(line, EnumFileFieldsType.Body, "CODIGO_OBSERVACAO"); CreateField(line, EnumFileFieldsType.Body, "OBSERVACAO"); CreateField(line, EnumFileFieldsType.Body, "VALOR_PREMIO"); if (!ValidateCustomerDocument(data)) { continue; } CreateField(line, EnumFileFieldsType.Body, "TIPO_DOCUMENTO", data.DocumentType == null ? BusinessExtensions.GetDocumentType(data.CustomerDocument)?.ToInt().ToString() : data.DocumentType?.ToInt().ToString()); CreateField(line, EnumFileFieldsType.Body, "NR_CNPJ_CPF", data.CustomerDocument.RemoveDocumentSpecialCharacters()); bodyModel.Content.Add(line); } var bodyContent = new List <string>(); foreach (var line in bodyModel.Content) { var body = new StringBuilder(); foreach (var bodyField in line.PrepareSequenceFileFields()) { body.Append(bodyField.Value); } bodyContent.Add(body.Append(Environment.NewLine).ToString()); } return(bodyContent); }