コード例 #1
0
        public List <DocumentoRelacionado> Read_DocumentoRelacionado()
        {
            List <DocumentoRelacionado> documentoRelacionados = new List <DocumentoRelacionado>();
            DataTable dataTable = readGeneralData.GetDataTable("[dbo].[Read_DocumentoRelacionado]", "@IdCabeceraDocumento", IdCabeceraDocumento);
            DataRow   row;

            DocumentoRelacionado documentoRelacionado;

            for (int i = 0; i < dataTable.Rows.Count; i++)
            {
                row = dataTable.Rows[i];
                documentoRelacionado = new DocumentoRelacionado();
                documentoRelacionado.IdDocumentoRelacionado = Convert.ToInt32(row["IdDocumentoRelacionado"].ToString());
                documentoRelacionado.NroDocumento           = row["NroDocumento"].ToString();

                if (string.IsNullOrEmpty(row["IdCat_DocRelacionados"].ToString()))
                {
                    documentoRelacionado.TipoDocumentoRelacionado = "00";
                }
                else
                {
                    documentoRelacionado.TipoDocumentoRelacionado = readGeneralData.GetScalarValueSTRING("[dbo].[Query_Scalar_GetValue_TipoDocumentoRelacionado]",
                                                                                                         "@IdCat_DocRelacionados", Convert.ToInt32(row["IdCat_DocRelacionados"].ToString()));
                }

                documentoRelacionado.TipoOperacion = row["IdTipoOperacion"].ToString() ?? string.Empty;

                string temp = row["IdTipoDocumento"].ToString();

                if (string.IsNullOrEmpty(row["IdTipoDocumento"].ToString()))
                {
                    documentoRelacionado.TipoDocumento = "00";
                }
                else
                {
                    documentoRelacionado.TipoDocumento = readGeneralData.GetScalarValueSTRING("[dbo].[Query_Scalar_GetValue_TipoDocumento]",
                                                                                              "@IdTipoDocumento", Convert.ToInt32(row["IdTipoDocumento"].ToString()));
                }

                documentoRelacionados.Add(documentoRelacionado);
            }

            return(documentoRelacionados);
        }
コード例 #2
0
        public FrmDocumentoRelacionado(DocumentoRelacionado documentoRelacionado)
        {
            InitializeComponent();
            documentoRelacionadoBindingSource.DataSource = documentoRelacionado;
            documentoRelacionadoBindingSource.ResetBindings(false);

            Load += (s, e) =>
            {
                using (var ctx = new OpenInvoicePeruDb())
                {
                    tipoDocumentoRelacionadoBindingSource.DataSource = ctx.TipoDocumentoRelacionados.ToList();
                    tipoDocumentoRelacionadoBindingSource.ResetBindings(false);
                }
            };

            toolOk.Click += (s, e) =>
            {
                documentoRelacionadoBindingSource.EndEdit();
                DialogResult = DialogResult.OK;
            };

            toolCancel.Click += (s, e) => DialogResult = DialogResult.Cancel;
        }
コード例 #3
0
        public PartialViewResult AgregarFacturaComplementoPago(int pagoId, int facturaEmitidaId, int numeroParcialidad, string moneda, double tipoCambio, double importeSaldoAnterior, double importePagado, double importeSaldoInsoluto)
        {
            var facturaEmitida = _db.FacturasEmitidas.Find(facturaEmitidaId);

            var documentoRelacionado = new DocumentoRelacionado
            {
                FacturaEmitidaId     = facturaEmitida.Id,
                FacturaEmitida       = facturaEmitida,
                ImportePagado        = importePagado,
                ImporteSaldoAnterior = importeSaldoAnterior,
                ImporteSaldoInsoluto = importeSaldoInsoluto,
                NumeroParcialidad    = numeroParcialidad,
                Moneda     = (c_Moneda)Enum.Parse(typeof(c_Moneda), moneda, true),
                TipoCambio = tipoCambio,
                PagoId     = pagoId,

                IdDocumento = facturaEmitida.Uuid,
                Folio       = facturaEmitida.Folio.ToString(),
                MetodoPago  = c_MetodoPago.PPD,
                Serie       = facturaEmitida.Serie
            };

            return(PartialView("~/Views/ComplementosPagos/FacturasDetalles.cshtml", documentoRelacionado));
        }
コード例 #4
0
        private void btnAgregar_Click(object sender, EventArgs e)
        {
            try
            {
                Cursor.Current = Cursors.WaitCursor;

                switch (tbPaginas.SelectedIndex)
                {
                case 0:
                    var detalle = new DetalleDocumento();

                    using (var frm = new FrmDetalleDocumento(detalle, _documento))
                    {
                        if (frm.ShowDialog(this) != DialogResult.OK)
                        {
                            return;
                        }

                        _documento.Items.Add(detalle);

                        CalcularTotales();
                    }
                    break;

                case 1:
                    var datoAdicional = new DatoAdicional();
                    using (var frm = new FrmDatosAdicionales(datoAdicional))
                    {
                        if (frm.ShowDialog(this) != DialogResult.OK)
                        {
                            return;
                        }

                        _documento.DatoAdicionales.Add(datoAdicional);
                    }
                    break;

                case 2:
                    var documentoRelacionado = new DocumentoRelacionado();
                    using (var frm = new FrmDocumentoRelacionado(documentoRelacionado))
                    {
                        if (frm.ShowDialog(this) != DialogResult.OK)
                        {
                            return;
                        }

                        _documento.Relacionados.Add(documentoRelacionado);
                    }
                    break;

                case 3:
                    var discrepancia = new Discrepancia();
                    using (var frm = new FrmDiscrepancia(discrepancia, _documento.TipoDocumento))
                    {
                        if (frm.ShowDialog(this) != DialogResult.OK)
                        {
                            return;
                        }

                        _documento.Discrepancias.Add(discrepancia);
                    }
                    break;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            finally
            {
                documentoElectronicoBindingSource.ResetBindings(false);
                Cursor.Current = Cursors.Default;
            }
        }
コード例 #5
0
        private async void CrearXmlFacturas(int ii)
        {
            try
            {
                string idDoc = Convert.ToString(DtDocumentos.Rows[ii]["Seriedocumento"] + "-" +
                                                DtDocumentos.Rows[ii]["NumeroDocumento"]);
                string vletras = Convert.ToString(DtDocumentos.Rows[ii]["letras"]);

                decimal vDscto         = 0;
                string  vNroDocumento  = Convert.ToString(DtDocumentos.Rows[ii]["clienteID"]);
                string  vTipoDocumento = Convert.ToString(DtDocumentos.Rows[ii]["IdentidadID"]);
                string  vNombreLegal   = Convert.ToString(DtDocumentos.Rows[ii]["ClienterazonSocial"]);


                DocumentoElectronico _xDocumento = new DocumentoElectronico
                {
                    Emisor   = CrearEmisor(DtEmpresa),
                    Receptor = new Contribuyente
                    {
                        NroDocumento  = vNroDocumento,
                        TipoDocumento = vTipoDocumento,
                        NombreLegal   = vNombreLegal,
                    },
                };
                _xDocumento.IdDocumento  = idDoc;
                _xDocumento.FechaEmision = DtpFechaDoc.Value.ToString(FormatoFecha);

                _xDocumento.Moneda             = "PEN";
                _xDocumento.MontoEnLetras      = vletras;
                _xDocumento.CalculoIgv         = 18m;
                _xDocumento.CalculoIsc         = Convert.ToDecimal(DtDocumentos.Rows[ii]["porcentajeIsc"]);
                _xDocumento.CalculoDetraccion  = 0.00m;
                _xDocumento.TipoDocumento      = Convert.ToString(DtDocumentos.Rows[ii]["documentoID"]);
                _xDocumento.TotalGravadas      = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteGravado"]);
                _xDocumento.TotalInafectas     = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteinafecto"]);
                _xDocumento.TotalExoneradas    = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteexonerado"]);
                _xDocumento.TotalGratuitas     = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteGratuitas"]);
                _xDocumento.TotalOtrosTributos = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteOtros"]);
                _xDocumento.TotalIsc           = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteisc"]);
                _xDocumento.TotalIgv           = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteIgv"]);
                _xDocumento.DescuentoGlobal    = vDscto;
                _xDocumento.TotalVenta         = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteventa"]);
                _xDocumento.Items = new List <DetalleDocumento>();

                // nuevo 2.1
                //          _xDocumento.PorcentajeIgv = Convert.ToDecimal(DtDocumentos.Rows[ii]["PorcentajeIgv"]);
                _xDocumento.FechaRegistro = Convert.ToString(DtDocumentos.Rows[ii]["fechaRegistro"]);
                _xDocumento.AnexoSunat    = Convert.ToString(DtDocumentos.Rows[ii]["AnexoSunat"]);
                _xDocumento.NroPedido     = Convert.ToString(DtDocumentos.Rows[ii]["pedidonumero"]);


                DtArticulos         = DetalleArticulos(DtDocumentos, ii);
                _xDocumento.TotItem = DtArticulos.Rows.Count;
                for (int i3 = 0; i3 <= DtArticulos.Rows.Count - 1; i3++)
                {
                    _xDocumento.Items.Add(DetalleItem(DtArticulos, i3));
                }

                string vTipoDoc = Convert.ToString(DtDocumentos.Rows[ii]["DocumentoID"]);
                string vNroDocumentoModifica = Convert.ToString(DtDocumentos.Rows[ii]["SeriedocumentoModifica"]) + "-" + Convert.ToString(DtDocumentos.Rows[ii]["NumeroDocumentoModifica"]);

                if (vTipoDoc == "08")
                {
                    string vNroDocumentoModifica1 = Convert.ToString(DtDocumentos.Rows[ii]["SeriedocumentoModifica"]);
                }
                if (vTipoDoc == "07" || vTipoDoc == "08")
                {
                    // nota de credito
                    var vRelacionado = new DocumentoRelacionado
                    {
                        TipoDocumento = Convert.ToString(DtDocumentos.Rows[ii]["TipoDocumentoModifica"]),
                        NroDocumento  = vNroDocumentoModifica
                    };
                    _xDocumento.Relacionados.Add(vRelacionado);

                    // nota de debito
                    var vDiscrepancia = new Discrepancia
                    {
                        Tipo          = Convert.ToString(DtDocumentos.Rows[ii]["TipodocumentoModifica"]),
                        NroReferencia = vNroDocumentoModifica,
                        Descripcion   = Convert.ToString(DtDocumentos.Rows[ii]["DescripcionMotivoNota"])
                    };
                    _xDocumento.Discrepancias.Add(vDiscrepancia);
                }
                string _metodoApi = "";
                switch (vTipoDoc)
                {
                case "07":
                    _metodoApi = "api/GenerarNotaCredito";
                    break;

                case "08":
                    _metodoApi = "api/GenerarNotaDebito";
                    break;

                default:
                    _metodoApi = "api/GenerarFactura";
                    break;
                }

                var response = await _client.PostAsJsonAsync(_metodoApi, _xDocumento);

                var respuesta = await response.Content.ReadAsAsync <DocumentoResponse>();

                if (!respuesta.Exito)
                {
                    throw new ApplicationException(respuesta.MensajeError);
                }



                idDoc       = DtEmpresa.Rows[0]["EmpresaRuc"] + "-" + vTipoDoc;
                idDoc      += "-" + Convert.ToString(DtDocumentos.Rows[ii]["Seriedocumento"] + "-" + DtDocumentos.Rows[ii]["NumeroDocumento"]);
                vArchivoXML = Path.Combine(vRutaXml, $"{idDoc}.xml");
                //    File.WriteAllBytes(vArchivoXML, Convert.FromBase64String(respuesta.TramaXmlSinFirma));
                //    return;

                //        String vRutaXml = Convert.ToString(DtEmpresa.Rows[0]["CarpetaEnviosXml"]);

                var tramaXmlSinFirma = respuesta.TramaXmlSinFirma;


                String vRutaCertificado = Convert.ToString(DtEmpresa.Rows[0]["CarpetaCertificadoDigital"]) +
                                          Convert.ToString(DtEmpresa.Rows[0]["NombreCertificadoDigital"]);
                var firmadoRequest = new FirmadoRequest
                {
                    TramaXmlSinFirma    = tramaXmlSinFirma,
                    CertificadoDigital  = Convert.ToBase64String(File.ReadAllBytes(vRutaCertificado)),
                    PasswordCertificado = Convert.ToString(DtEmpresa.Rows[0]["PasswCertificadoDigital"]),
                    UnSoloNodoExtension = true
                };

                var jsonFirmado = await _client.PostAsJsonAsync("api/Firmar", firmadoRequest);

                var respuestaFirmado = await jsonFirmado.Content.ReadAsAsync <FirmadoResponse>();

                if (!respuestaFirmado.Exito)
                {
                    throw new ApplicationException(respuestaFirmado.MensajeError);
                }


                vArchivoXML = Path.Combine(vRutaXml, $"{idDoc}.xml");



                File.WriteAllBytes(vArchivoXML, Convert.FromBase64String(respuestaFirmado.TramaXmlFirmado));

                ReemplaCaracteres(Convert.ToString(vArchivoXML));
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                txtResult.Text = txtResult.Text + ex.Message + Environment.NewLine;
            }
        }
コード例 #6
0
        private void DatosNDebito()
        {
            var dtsEmisor = new Contribuyente()
            {
                NroDocumento    = "20525411401",
                TipoDocumento   = "6",
                Direccion       = "MZA. 228 LOTE. 06 ZONA INDUSTRIAL  PIURA - PIURA - PIURA",
                Departamento    = "PIURA",
                Provincia       = "PIURA",
                Distrito        = "PIURA",
                NombreLegal     = "PIURAMAQ S.R.L.",
                NombreComercial = "",
                Ubigeo          = "200101"
            };

            var dtsReceptor = new Contribuyente()
            {
                NroDocumento    = "10472308616",
                TipoDocumento   = "6",
                NombreLegal     = "MEJIA MOSCOL JUAN JOSE",
                NombreComercial = "",
                Direccion       = "JR. TUMBES NRO. 100 CENTRO PIURA (A 1 CUADRA DE AV. LIBERTAD CON BOLOGNESI)"
            };

            var dtsItems = new DetalleDocumento
            {
                Id                     = 1,
                Cantidad               = 2000,
                UnidadMedida           = "NIU",
                CodigoItem             = "COD001",
                ItemClassificationCode = "82141601",
                Descripcion            = "PRODUCTO PRUEBA",
                PrecioUnitario         = 21.92m,
                PrecioReferencial      = 25.86m,
                TipoPrecio             = "01",
                TipoImpuesto           = "10",
                OtroImpuesto           = 0,
                Descuento              = 0,
                Suma                   = 2000 * 21.92m,                           //_detalle.PrecioUnitario * _detalle.Cantidad
                Impuesto               = (2000 * 21.92m) * _documento.CalculoIgv, //_detalle.Suma * _documento.CalculoIgv
                ImpuestoSelectivo      = 0,                                       //_detalle.Suma * _documento.CalculoIsc;
                TotalVenta             = (2000 * 21.92m) - 0                      //_detalle.Suma - _detalle.Descuento
            };

            _documento.IdDocumento   = "FND1-00000001";
            _documento.TipoDocumento = "08";
            _documento.Emisor        = dtsEmisor;
            _documento.Receptor      = dtsReceptor;
            _documento.FechaEmision  = DateTime.Today.ToShortDateString();
            _documento.Moneda        = "PEN";
            _documento.TipoOperacion = "0101";
            //Agregamos Detalle
            _documento.Items.Add(dtsItems);
            CalcularTotales();

            //Nota de Credito
            var dtsDocumentoRelacionado = new DocumentoRelacionado
            {
                NroDocumento  = "F001-00000001",
                TipoDocumento = "01"
            };

            _documento.Relacionados.Add(dtsDocumentoRelacionado);

            var dtsDiscrepancia = new Discrepancia
            {
                NroReferencia = "F001-00000001",
                Tipo          = "01",
                Descripcion   = "Nota de Debito del usuario admin"
            };

            _documento.Discrepancias.Add(dtsDiscrepancia);
        }
コード例 #7
0
        private void DatosNCredito()
        {
            var dtsEmisor = new Contribuyente()
            {
                NroDocumento       = "20561278441",
                TipoDocumento      = "6",
                Direccion          = "AV. TACNA NRO. 516 LAMBAYEQUE - FERREÑAFE - FERREÑAFE",
                Departamento       = "LAMBAYEQUE",
                Provincia          = "FERREÑAFE",
                Distrito           = "FERREÑAFE",
                NombreLegal        = "INVERSIONES NANDO´S CHICKEN SAC",
                NombreComercial    = "",
                Ubigeo             = "140201",
                CodDomicilioFiscal = "0000" //Código de cuatro dígitos asignado por SUNAT
            };

            var dtsReceptor = new Contribuyente()
            {
                NroDocumento    = "-",
                TipoDocumento   = "0",
                NombreLegal     = "TORRES LEON ERWIN STALIN",
                NombreComercial = "",
                Direccion       = "PIURA - PIURA - PIURA"
            };

            _documento.Items.Clear();
            for (var i = 1; i < 3; i++)
            {
                _documento.CalculoIgv = 0.00m;
                var dtsItems = new DetalleDocumento
                {
                    Id           = i,
                    Cantidad     = 1m,
                    UnidadMedida = "NIU",
                    CodigoItem   = "COD001" + i,
                    //ItemClassificationCode = "82141601",// Este código será obligatorio para el 1-1-2019 - catálogo N° 15 del Anexo N° 8 - OBLIGATOIO PARA EXPORTACIONES DESDE NOVIEMBRE
                    Descripcion       = "PRODUCTO PRUEBA",
                    PrecioUnitario    = 42.3728m, //Consignar 0.00 siempre y cuando la factura sea gratuita - TipoImpuesto=21
                    PrecioReferencial = 50m,
                    TipoPrecio        = "01",     //Se usa 02 cuando el tipo de impuesto es gratuito - Valor referencial unitario en operaciones no onerosas
                    TipoImpuesto      = "40",
                    OtroImpuesto      = 0,
                    Descuento         = 0,
                    Suma              = 42.3728m * 1m,                           //_detalle.PrecioUnitario * _detalle.Cantidad
                    Impuesto          = (42.3728m * 1m) * _documento.CalculoIgv, //_detalle.Suma * _documento.CalculoIgv
                    ImpuestoSelectivo = 0,                                       //_detalle.Suma * _documento.CalculoIsc;
                    TotalVenta        = (42.3728m * 1m) - 0                      //_detalle.Suma - _detalle.Descuento
                };
                //Agregamos Detalle
                _documento.Items.Add(dtsItems);
            }

            _documento.Cargos        = 2.00m;
            _documento.IdDocumento   = "FC05-00000005";
            _documento.TipoDocumento = "07";
            _documento.Emisor        = dtsEmisor;
            _documento.Receptor      = dtsReceptor;
            _documento.FechaEmision  = DateTime.Today.ToShortDateString();
            _documento.Moneda        = "PEN";
            _documento.TipoOperacion = "0200";
            //_documento.Imcoterm = "FCA"; //Esto se usa para la factura de exportacion - ver listado de IMCOTERM


            CalcularTotales();

            //Nota de Credito
            _documento.Relacionados.Clear();
            var dtsDocumentoRelacionado = new DocumentoRelacionado
            {
                NroDocumento  = "F005-00000005",
                TipoDocumento = "01"
            };

            _documento.Relacionados.Add(dtsDocumentoRelacionado);
            _documento.Discrepancias.Clear();
            var dtsDiscrepancia = new Discrepancia
            {
                NroReferencia = "F005-00000005",
                Tipo          = "09",
                Descripcion   = "Nota de Credito del usuario admin"
            };

            _documento.Discrepancias.Add(dtsDiscrepancia);
        }
コード例 #8
0
        public List <ComplementoPago> Importar(string path, int sucursalId, Meses mes, bool previsualizacion)
        {
            var errores          = new List <String>();
            var complementosPago = new List <ComplementoPago>();

            using (StreamReader archivo = File.OpenText(path))
            {
                try
                {
                    var csv = new CsvReader(archivo);

                    var registros = new List <List <String> >();
                    var sucursal  = _db.Sucursales.Find(sucursalId);

                    while (csv.Read())
                    {
                        var registro = new List <String>();
                        for (int i = 0; csv.TryGetField(i, out string value); i++)
                        {
                            registro.Add(value);
                        }
                        registros.Add(registro);
                    }

                    var pagos = new List <Pago>();

                    //var facturasEmitidas = _db.FacturasEmitidas.Where(fe => fe.EmisorId == sucursalId).ToList();
                    for (int i = 1; i < registros.Count(); i++)
                    {
                        try
                        {
                            var fechaPago      = Convert.ToDateTime(registros[i][0]);
                            var formaPago      = ParseEnum <c_FormaPago>(registros[i][1], i);
                            var monto          = Convert.ToDouble(registros[i][2]);
                            var moneda         = ParseEnum <c_Moneda>(registros[i][3], i);
                            var tipoCambioPago = Convert.ToDouble(registros[i][4]);
                            var tipoCambioDocumentoRelacionado = Convert.ToDouble(registros[i][5]);
                            var numeroOperacion = registros[i][6];
                            if (String.IsNullOrEmpty(numeroOperacion))
                            {
                                numeroOperacion = null;
                            }


                            var serie = registros[i][10];
                            var folio = registros[i][11];

                            var facturaEmitida = _db.FacturasEmitidas.FirstOrDefault(fe => fe.EmisorId == sucursalId && fe.Serie == serie && fe.Folio == folio);
                            if (facturaEmitida == null)
                            {
                                errores.Add(String.Format("La factura {0} - {1} no fue encontrada para el registro {2}", serie, folio, i));
                                continue;
                            }

                            //Se desorganizaron los numeros por que necesito el cliente para determinar el banco
                            var          nombreBancoOrdenante = registros[i][7];
                            BancoCliente bancoOrdenante       = null;
                            if (!String.IsNullOrEmpty(nombreBancoOrdenante))
                            {
                                bancoOrdenante = _db.BancosClientes.FirstOrDefault(b => b.Nombre == nombreBancoOrdenante && b.Cliente.SucursalId == sucursalId && b.ClienteId == facturaEmitida.ReceptorId);
                                if (bancoOrdenante == null)
                                {
                                    errores.Add(String.Format("El banco {0} no fue encontrado para el registro {1}", nombreBancoOrdenante, i));
                                    continue;
                                }
                            }

                            var           nombreBancoBeneficiario = registros[i][8];
                            BancoSucursal bancoBeneficiario       = null;
                            if (!String.IsNullOrEmpty(nombreBancoBeneficiario))
                            {
                                bancoBeneficiario = _db.BancosSucursales.FirstOrDefault(b => b.Nombre == nombreBancoBeneficiario && b.SucursalId == sucursalId);
                                if (bancoBeneficiario == null)
                                {
                                    errores.Add(String.Format("El banco {0} no fue encontrado para el registro {1}", nombreBancoBeneficiario, i));
                                    continue;
                                }
                            }

                            var numeroParcialidad = registros[i][9];


                            var importePagado        = String.IsNullOrEmpty(registros[i][12]) ? facturaEmitida.Total : Convert.ToDouble(registros[i][12]);
                            var importeSaldoAnterior = String.IsNullOrEmpty(registros[i][13]) ? facturaEmitida.Total : Convert.ToDouble(registros[i][13]);
                            var importeSaldoInsoluto = String.IsNullOrEmpty(registros[i][14]) ? 0.0 : Convert.ToDouble(registros[i][14]);

                            #region Pagos

                            #region Documentos Relacionados

                            var documentoRelacionado = new DocumentoRelacionado
                            {
                                FacturaEmitidaId     = facturaEmitida.Id,
                                FacturaEmitida       = facturaEmitida,
                                Folio                = facturaEmitida.Folio,
                                IdDocumento          = facturaEmitida.Uuid,
                                ImportePagado        = importePagado,
                                ImporteSaldoAnterior = importeSaldoAnterior,
                                ImporteSaldoInsoluto = importeSaldoInsoluto,
                                MetodoPago           = facturaEmitida.MetodoPago,
                                Moneda               = facturaEmitida.Moneda,
                                NumeroParcialidad    = Convert.ToInt32(String.IsNullOrEmpty(numeroParcialidad) ? "1" : numeroParcialidad),
                                Serie                = facturaEmitida.Serie,
                                TipoCambio           = tipoCambioDocumentoRelacionado
                            };

                            #endregion

                            if (pagos.Any(p => p.NumeroOperacion == numeroOperacion && p.FechaPago == fechaPago && p.Monto == monto && p.DocumentosRelacionados.Any(dr => dr.FacturaEmitida.ReceptorId == documentoRelacionado.FacturaEmitida.ReceptorId)))
                            {
                                pagos.First(p => p.NumeroOperacion == numeroOperacion && p.FechaPago == fechaPago && p.Monto == monto && p.DocumentosRelacionados.Any(dr => dr.FacturaEmitida.ReceptorId == documentoRelacionado.FacturaEmitida.ReceptorId)).DocumentosRelacionados.Add(documentoRelacionado);
                            }
                            else
                            {
                                var pago = new Pago
                                {
                                    FechaPago       = fechaPago,
                                    FormaPago       = formaPago,
                                    Moneda          = moneda,
                                    Monto           = monto,
                                    NumeroOperacion = numeroOperacion,
                                    SucursalId      = sucursalId,
                                    TipoCambio      = tipoCambioPago
                                };

                                if (bancoOrdenante != null)
                                {
                                    pago.BancoOrdenante   = bancoOrdenante;
                                    pago.BancoOrdenanteId = bancoOrdenante.Id;
                                }

                                if (bancoBeneficiario != null)
                                {
                                    pago.BancoBeneficiario   = bancoBeneficiario;
                                    pago.BancoBeneficiarioId = bancoBeneficiario.Id;
                                }

                                if (pago.DocumentosRelacionados == null)
                                {
                                    pago.DocumentosRelacionados = new List <DocumentoRelacionado>();
                                }

                                pago.DocumentosRelacionados.Add(documentoRelacionado);

                                pagos.Add(pago);
                            }


                            #endregion
                        }
                        catch (Exception ex)
                        {
                            errores.Add(String.Format("No se pudo procesar el registro {0} el motivo reportado: {1} </br>", i, ex.Message));
                            continue;
                        }
                    }

                    foreach (var pago in pagos)
                    {
                        var receptor = pago.DocumentosRelacionados.FirstOrDefault().FacturaEmitida.Receptor;
                        if (receptor == null)
                        {
                            errores.Add(String.Format("El pago {0} no tiene documentos relacionados", pago.Desplegado));
                        }

                        var complementoPago = complementosPago.FirstOrDefault(cp => cp.ReceptorId == receptor.Id);
                        if (complementoPago == null)
                        {
                            complementoPago = new ComplementoPago
                            {
                                FechaDocumento = DateTime.Now,
                                Generado       = false,
                                ReceptorId     = receptor.Id,
                                Receptor       = receptor,
                                Status         = Status.Activo,
                                Mes            = mes,
                                SucursalId     = sucursal.Id,
                                Sucursal       = sucursal,
                                Version        = "1.0",
                                Pagos          = new List <Pago> {
                                    pago
                                }
                            };
                            complementosPago.Add(complementoPago);
                        }
                        else
                        {
                            complementoPago.Pagos.Add(pago);
                        }
                    }
                }
                catch (Exception ex)
                {
                    errores.Add(ex.Message);
                }
                finally
                {
                    archivo.Close();
                    archivo.Dispose();
                }
            }

            if (errores.Count > 0)
            {
                throw new Exception(String.Join("|", errores));
            }

            if (!previsualizacion)
            {
                foreach (var complementoPago in complementosPago)
                {
                    _db.ComplementosPago.Add(complementoPago);
                    try
                    {
                        _db.SaveChanges();
                    }
                    catch (DbEntityValidationException dbEx)
                    {
                        foreach (var validationErrors in dbEx.EntityValidationErrors)
                        {
                            foreach (var validationError in validationErrors.ValidationErrors)
                            {
                                errores.Add(String.Format("Propiedad: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage));
                            }
                        }
                    }
                }

                //foreach (var complementoPago in complementosPago)
                //{
                //    try
                //    {
                //        _pagosManager.GenerarComplementoPago(sucursalId, complementoPago.ReceptorId, complementoPago.Id);
                //        errores.Add(String.Format("Comando realizado con éxito del complemento del receptor {0} con total de montos {1:c}", complementoPago.Receptor.RazonSocial, complementoPago.Pagos.Sum(p => p.Monto)));
                //    }
                //    catch (Exception ex)
                //    {
                //        errores.Add(String.Format("Error de generación del complemento del receptor {0} con total de montos {1:c}: {2}", complementoPago.Receptor.RazonSocial, complementoPago.Pagos.Sum(p => p.Monto), ex.Message));
                //    }

                //}
            }

            return(complementosPago);
        }