Esempio n. 1
0
        public void Bancos(Cliente Cliente)
        {
            if (Cliente.Bancos != null)
            {
                var idsBorrar        = Cliente.Bancos.Select(e => e.Id);
                var bancosAnteriores = _db.BancosClientes.Where(es => es.ClienteId == Cliente.Id && !idsBorrar.Contains(es.Id)).ToList();

                _db.BancosClientes.RemoveRange(bancosAnteriores);
                _db.SaveChanges();

                foreach (var banco in Cliente.Bancos)
                {
                    banco.ClienteId = Cliente.Id;
                    banco.Banco     = null;
                    _db.BancosClientes.AddOrUpdate(banco);
                }

                _db.SaveChanges();
            }
            else
            {
                var bancosAnteriores = _db.BancosClientes.Where(es => es.ClienteId == Cliente.Id).ToList();

                _db.BancosClientes.RemoveRange(bancosAnteriores);
                _db.SaveChanges();
            }
        }
Esempio n. 2
0
        public void Sucursales(Usuario usuario)
        {
            if (usuario.Sucursales != null)
            {
                var idsBorrar            = usuario.Sucursales.Select(e => e.Id);
                var sucursalesAnteriores = _db.UsuariosSucursales.Where(es => es.UsuarioId == usuario.Id && !idsBorrar.Contains(es.Id)).ToList();

                _db.UsuariosSucursales.RemoveRange(sucursalesAnteriores);
                _db.SaveChanges();

                foreach (var sucursal in usuario.Sucursales)
                {
                    sucursal.UsuarioId = usuario.Id;
                    sucursal.Sucursal  = null;
                    _db.UsuariosSucursales.AddOrUpdate(sucursal);
                }

                _db.SaveChanges();
            }
            else
            {
                var sucursalesAnteriores = _db.UsuariosSucursales.Where(es => es.UsuarioId == usuario.Id).ToList();

                _db.UsuariosSucursales.RemoveRange(sucursalesAnteriores);
                _db.SaveChanges();
            }
        }
Esempio n. 3
0
        public void Pagos(ComplementoPago complementoPago)
        {
            if (complementoPago.Pagos != null)
            {
                var idsBorrar       = complementoPago.Pagos.Select(e => e.Id);
                var pagosAnteriores = _db.Pagos.Where(es => es.ComplementoPagoId == complementoPago.Id && !idsBorrar.Contains(es.Id)).ToList();

                _db.Pagos.RemoveRange(pagosAnteriores);
                _db.SaveChanges();

                foreach (var pago in complementoPago.Pagos.Except(pagosAnteriores))
                {
                    pago.ComplementoPagoId = complementoPago.Id;
                    pago.BancoOrdenante    = null;
                    pago.BancoBeneficiario = null;
                    pago.ComplementoPago   = null;

                    _db.Pagos.AddOrUpdate(pago);
                    try
                    {
                        _db.SaveChanges();
                    }
                    catch (System.Exception)
                    {
                    }
                }
            }
            else
            {
                var pagosAnteriores = _db.Pagos.Where(es => es.ComplementoPagoId == complementoPago.Id).ToList();

                _db.Pagos.RemoveRange(pagosAnteriores);
                _db.SaveChanges();
            }
        }
Esempio n. 4
0
        public void Bancos(Sucursal Sucursal)
        {
            if (Sucursal.Bancos != null)
            {
                var idsBorrar        = Sucursal.Bancos.Select(e => e.Id);
                var bancosAnteriores = _db.BancosSucursales.Where(es => es.SucursalId == Sucursal.Id && !idsBorrar.Contains(es.Id)).ToList();

                _db.BancosSucursales.RemoveRange(bancosAnteriores);
                _db.SaveChanges();

                foreach (var banco in Sucursal.Bancos)
                {
                    banco.SucursalId = Sucursal.Id;
                    banco.Sucursal   = null;
                    banco.Banco      = null;
                    _db.BancosSucursales.AddOrUpdate(banco);
                }

                _db.SaveChanges();
            }
            else
            {
                var bancosAnteriores = _db.BancosSucursales.Where(es => es.SucursalId == Sucursal.Id).ToList();

                _db.BancosSucursales.RemoveRange(bancosAnteriores);
                _db.SaveChanges();
            }
        }
Esempio n. 5
0
        public void Sucursales(Proveedor proveedor)
        {
            if (proveedor.Sucursales != null)
            {
                var idsBorrar            = proveedor.Sucursales.Select(e => e.Id);
                var sucursalesAnteriores = _db.ProveedoresSucursales.Where(es => es.ProveedorId == proveedor.Id && !idsBorrar.Contains(es.Id)).ToList();

                _db.ProveedoresSucursales.RemoveRange(sucursalesAnteriores);
                _db.SaveChanges();

                foreach (var sucursal in proveedor.Sucursales)
                {
                    sucursal.ProveedorId = proveedor.Id;
                    sucursal.Sucursal    = null;
                    _db.ProveedoresSucursales.AddOrUpdate(sucursal);
                }

                _db.SaveChanges();
            }
            else
            {
                var sucursalesAnteriores = _db.ProveedoresSucursales.Where(es => es.ProveedorId == proveedor.Id).ToList();

                _db.ProveedoresSucursales.RemoveRange(sucursalesAnteriores);
                _db.SaveChanges();
            }
        }
Esempio n. 6
0
        public void Solicitar(int sucursalId, DateTime fecha)
        {
            var sucursal = _db.Sucursales.Find(sucursalId);
            var url      = String.Format("https://{0}/xsamanager/DownloadExpedidosBloqueServlet?rfcEmisor={1}&key={2}&fechaInicial={3}&fechaFinal={4}&tipo={5}", sucursal.Servidor, sucursal.Rfc, sucursal.KeyXsa, fecha.ToString("yyyy-MM-dd"), fecha.AddDays(1).ToString("yyyy-MM-dd"), "XML");

            ServicePointManager.ServerCertificateValidationCallback = delegate { return(true); };
            using (WebClient client = new WebClient())
            {
                var path          = Path.Combine(@"C:\inetpub\sftproot\ApBox\");
                var nombreArchivo = String.Format("{0}_{1:yyyy-MM-dd}.zip", sucursal.Rfc, fecha);
                var pathFinal     = Path.Combine(path, nombreArchivo);

                try
                {
                    client.DownloadFile(url, pathFinal);
                    ExtraerZip(pathFinal);

                    var pathTexto = Path.Combine(path, "leeme.txt");
                    File.Delete(pathFinal);
                    if (File.Exists(pathTexto))
                    {
                        File.Delete(pathTexto);
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception(String.Format("No se pudo descargar el archivo del web service {0}: {1}", url, ex.Message));
                }
            }

            sucursal.FechaInicial     = fecha;
            _db.Entry(sucursal).State = EntityState.Modified;
            _db.SaveChanges();
        }
Esempio n. 7
0
        public string Autorizar(int solicitudAccesoId)
        {
            var solicitudAcceso = _db.SolicitudesAccesos.Find(solicitudAccesoId);

            solicitudAcceso.Procesado        = true;
            _db.Entry(solicitudAcceso).State = EntityState.Modified;
            _db.SaveChanges();

            var proveedor = new Proveedor
            {
                CodigoPostal = solicitudAcceso.CodigoPostal,
                Email        = solicitudAcceso.Email,
                FechaAlta    = solicitudAcceso.FechaAlta,
                PaginaWeb    = solicitudAcceso.PaginaWeb,
                Pais         = solicitudAcceso.Pais,
                RazonSocial  = solicitudAcceso.RazonSocial,
                Rfc          = solicitudAcceso.Rfc,
                Saldo        = solicitudAcceso.Saldo,
                Status       = solicitudAcceso.Status,
                Telefono1    = solicitudAcceso.Telefono1,
                Telefono2    = solicitudAcceso.Telefono2,
                GrupoId      = solicitudAcceso.GrupoId
            };

            _db.Proveedores.Add(proveedor);
            _db.SaveChanges();

            //Asignar Sucursales
            var sucursalesGrupo = _db.Sucursales.Where(s => s.GrupoId == solicitudAcceso.GrupoId && s.Status == Status.Activo);

            foreach (var sucursalGrupo in sucursalesGrupo)
            {
                var proveedorSucursal = new ProveedorSucursal
                {
                    ProveedorId = proveedor.Id,
                    SucursalId  = sucursalGrupo.Id
                };
                _db.ProveedoresSucursales.Add(proveedorSucursal);
            }
            _db.SaveChanges();

            //TODO: Enviar Correo

            return(proveedor.Rfc);
        }
Esempio n. 8
0
        public void ChecarRfcReceptor(Comprobante comprobante)
        {
            var emisor = _db.Sucursales.FirstOrDefault(s => s.Rfc == comprobante.Emisor.Rfc);

            if (emisor == null)
            {
                throw new Exception(String.Format("El RFC del emisor {0} no fue encontrado en la base de datos", comprobante.Emisor.Rfc));
            }

            Cliente cliente;

            if (comprobante.Receptor.Rfc == "XEXX010101000" || comprobante.Receptor.Rfc == "XAXX010101000")
            {
                cliente = _db.Clientes.FirstOrDefault(s => s.Rfc == comprobante.Receptor.Rfc && s.RazonSocial == comprobante.Receptor.Nombre && s.SucursalId == emisor.Id);
            }
            else
            {
                cliente = _db.Clientes.FirstOrDefault(s => s.Rfc == comprobante.Receptor.Rfc && s.SucursalId == emisor.Id);
            }

            if (cliente == null)
            {
                cliente = new Cliente
                {
                    FechaAlta   = DateTime.Now,
                    SucursalId  = emisor.Id,
                    Pais        = c_Pais.MEX,
                    RazonSocial = comprobante.Receptor.Nombre,
                    Rfc         = comprobante.Receptor.Rfc,
                    Status      = API.Enums.Status.Activo
                };

                cliente.Banco = null;

                _db.Clientes.Add(cliente);

                try
                {
                    _db.SaveChanges();
                }
                catch (DbEntityValidationException dbEx)
                {
                    var errores = new List <String>();
                    foreach (var validationErrors in dbEx.EntityValidationErrors)
                    {
                        foreach (var validationError in validationErrors.ValidationErrors)
                        {
                            errores.Add(String.Format("Propiedad: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage));
                        }
                    }
                    throw new Exception(string.Join(",", errores.ToArray()));
                }
            }
        }
Esempio n. 9
0
        public void Autorizar(bool autorizar, int facturaRecibidaId, int usuarioId, String notasAutorizacion)
        {
            var facturaRecibida = _db.FacturasRecibidas.Find(facturaRecibidaId);

            facturaRecibida.Autorizada            = autorizar;
            facturaRecibida.UsuarioAutorizacionId = usuarioId;
            facturaRecibida.FechaAutorizacion     = DateTime.Now;
            facturaRecibida.NotasAutorizacion     = notasAutorizacion;

            _db.Entry(facturaRecibida).State = System.Data.Entity.EntityState.Modified;
            _db.SaveChanges();
        }
Esempio n. 10
0
 // Serializar significa convertir de JSON a objeto.
 // Hago SeedUsers statica para no tener que instanciarme.
 public static void SeedUsers(AplicacionContext context)
 {
     // Chequeo que no hayan usuarios en la base de datos.
     if (!context.Usuarios.Any())
     {
         var dataUsuario = System.IO.File.ReadAllText("DTOs/SeedDataUsuario.json");
         var usuarios    = JsonConvert.DeserializeObject <List <Usuario> >(dataUsuario);
         foreach (var usuario in usuarios)
         {
             byte[] passwordhash, passwordsalt;
             CrearPasswordHash("password", out passwordhash, out passwordsalt);
             usuario.PasswordHash  = passwordhash;
             usuario.PasswordSalt  = passwordsalt;
             usuario.NombreUsuario = usuario.NombreUsuario.ToLower();
             context.Usuarios.Add(usuario);
         }
         context.SaveChanges();
     }
 }
        public ActionResult ButtonSignUp(String nombre, String correo, String clave)
        {
            var optionsBuilder = new DbContextOptionsBuilder <AplicacionContext>();

            using (var DB = new AplicacionContext(optionsBuilder.Options))
            {
                var user = new Usuario {
                    Correo = correo,
                    Clave  = clave
                };
                var profile = new Perfil {
                    Nombre = nombre
                };
                DB.Add(user);
                DB.Add(profile);
                DB.SaveChanges();
                return(RedirectToAction("Entrar", "Login"));
            }
        }
Esempio n. 12
0
        public List <String> Importar(string path, int sucursalId)
        {
            var errores = new List <String>();

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

                var registros = new List <List <String> >();

                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);
                }

                for (int i = 1; i < registros.Count(); i++)
                {
                    try
                    {
                        var bancoSucursal = new BancoSucursal();

                        var razonSocialSucursal = registros[i][0];
                        var nombreBanco         = registros[i][1];
                        var nombre       = registros[i][2];
                        var numeroCuenta = registros[i][3];

                        var sucursal = _db.Sucursales.FirstOrDefault(p => p.RazonSocial == razonSocialSucursal);
                        if (sucursal == null)
                        {
                            throw new Exception(String.Format("El sucursal {0} no fue encontrado en el registro {1}", razonSocialSucursal, i));
                        }
                        bancoSucursal.SucursalId = sucursal.Id;

                        var banco = _db.Bancos.FirstOrDefault(p => p.NombreCorto == nombreBanco);
                        if (banco == null)
                        {
                            throw new Exception(String.Format("El banco {0} no fue encontrado en el registro {1}", nombreBanco, i));
                        }
                        bancoSucursal.BancoId = banco.Id;

                        bancoSucursal.Nombre       = nombre;
                        bancoSucursal.NumeroCuenta = numeroCuenta;

                        //Sustitucion de espacios en blanco por null
                        foreach (var propertyInfo in bancoSucursal.GetType().GetProperties())
                        {
                            if (propertyInfo.PropertyType == typeof(string))
                            {
                                if ((String)propertyInfo.GetValue(bancoSucursal, null) == string.Empty)
                                {
                                    propertyInfo.SetValue(bancoSucursal, null, null);
                                }
                            }
                        }

                        //Registro Existente
                        var registroAnterior = _db.BancosSucursales.FirstOrDefault(bc => bc.SucursalId == sucursal.Id && bc.BancoId == banco.Id && bc.NumeroCuenta == numeroCuenta);
                        if (registroAnterior != null)
                        {
                            bancoSucursal.Id = registroAnterior.Id;
                        }

                        //Actualizacion
                        _db.BancosSucursales.AddOrUpdate(bancoSucursal);

                        try
                        {
                            _db.SaveChanges();
                        }
                        catch (DbEntityValidationException dbEx)
                        {
                            var erroresDb = new List <String>();
                            foreach (var validationErrors in dbEx.EntityValidationErrors)
                            {
                                foreach (var validationError in validationErrors.ValidationErrors)
                                {
                                    erroresDb.Add(String.Format("Propiedad: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage));
                                }
                            }
                            throw new Exception(string.Join(",", erroresDb.ToArray()));
                        }
                        catch (Exception ex)
                        {
                            if (ex.InnerException != null)
                            {
                                throw new Exception(ex.InnerException.InnerException.Message);
                            }
                            throw ex;
                        }
                    }
                    catch (Exception ex)
                    {
                        errores.Add(ex.Message);
                    }
                    finally
                    {
                        archivo.Close();
                        archivo.Dispose();
                    }
                }
            }
            return(errores);
        }
Esempio n. 13
0
        public FacturaEmitida GuardarFacturaEmitida(Comprobante comprobante, byte[] xml)
        {
            var facturaEmitida = new FacturaEmitida
            {
                Fecha            = Convert.ToDateTime(comprobante.Fecha),
                Folio            = comprobante.Folio,
                FormaPago        = comprobante.FormaPago,
                MetodoPago       = comprobante.MetodoPago,
                Moneda           = comprobante.Moneda,
                Serie            = comprobante.Serie,
                Subtotal         = Convert.ToDouble(comprobante.SubTotal),
                TipoCambio       = Convert.ToDouble(comprobante.TipoCambio),
                TipoComprobante  = comprobante.TipoDeComprobante,
                Total            = Convert.ToDouble(comprobante.Total),
                Uuid             = _decodificar.DecodificarTimbre(comprobante).UUID,
                Version          = comprobante.Version,
                ArchivoFisicoXml = xml,

                //TODO: Arreglar esta fecha decodificando el TFD
                FechaTimbrado = DateTime.Now
            };

            if (comprobante.Impuestos != null)
            {
                facturaEmitida.TotalImpuestosRetenidos   = Convert.ToDouble(comprobante.Impuestos.TotalImpuestosRetenidos ?? "0.0");
                facturaEmitida.TotalImpuestosTrasladados = Convert.ToDouble(comprobante.Impuestos.TotalImpuestosTrasladados ?? "0.0");
            }

            var emisor = _db.Sucursales.FirstOrDefault(s => s.Rfc == comprobante.Emisor.Rfc);

            if (emisor == null)
            {
                throw new Exception(String.Format("No se encontró el RFC del emisor {0}", comprobante.Emisor.Rfc));
            }

            Cliente receptor;

            if (comprobante.Receptor.Rfc == "XEXX010101000" || comprobante.Receptor.Rfc == "XAXX010101000")
            {
                receptor = _db.Clientes.FirstOrDefault(s => s.Rfc == comprobante.Receptor.Rfc && s.RazonSocial == comprobante.Receptor.Nombre && s.SucursalId == emisor.Id);
                if (receptor == null)
                {
                    throw new Exception(String.Format("No se encontró receptor con RFC {0} y Razón Social {1}", comprobante.Emisor.Rfc, comprobante.Emisor.Nombre));
                }
            }
            else
            {
                receptor = _db.Clientes.FirstOrDefault(s => s.Rfc == comprobante.Receptor.Rfc && s.SucursalId == emisor.Id);
                if (receptor == null)
                {
                    throw new Exception(String.Format("No se encontró receptor con RFC {0}", comprobante.Emisor.Rfc));
                }
            }

            //Asignaciones Facturas
            facturaEmitida.EmisorId   = emisor.Id;
            facturaEmitida.ReceptorId = receptor.Id;

            facturaEmitida.Emisor   = null;
            facturaEmitida.Receptor = null;

            _db.FacturasEmitidas.Add(facturaEmitida);
            _db.SaveChanges();

            return(facturaEmitida);
        }
Esempio n. 14
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);
        }
Esempio n. 15
0
        public byte[] GenerarComplementoPago(int sucursalId, int complementoPagoId, string mailAlterno)
        {
            lock (obj)
            {
                var sucursal        = _db.Sucursales.Find(sucursalId);
                var complementoPago = _db.ComplementosPago.Find(complementoPagoId);
                var cliente         = _db.Clientes.Find(complementoPago.ReceptorId);

                //Generación del comprobante
                var facturaDto = _generarDto.GenerarFactura(sucursal, cliente);
                facturaDto.ComplementoPagoDto = _generarDto.GenerarComplemento(complementoPago);
                _generarDto.CfdisRelacionados(ref facturaDto, complementoPago);

                try
                {
                    _facturacionInfodextra.GenerarXml(ref facturaDto);
                }
                catch (Exception ex)
                {
                    throw ex;
                }

                var facturaId = GuardarComprobante(facturaDto, sucursalId, complementoPago.ReceptorId);

                try
                {
                    //Incrementar Folio de Sucursal
                    sucursal.Folio           += 1;
                    _db.Entry(sucursal).State = EntityState.Modified;

                    _db.SaveChanges();
                }
                catch (DbEntityValidationException dbEx)
                {
                    var errores = new List <String>();
                    foreach (var validationErrors in dbEx.EntityValidationErrors)
                    {
                        foreach (var validationError in validationErrors.ValidationErrors)
                        {
                            errores.Add(String.Format("Propiedad: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage));
                        }
                    }
                    throw new Exception(string.Join(",", errores.ToArray()));
                }

                MarcarFacturado(complementoPago.Id, facturaId);

                try
                {
                    var pathXml = String.Format(@"C:\Infodextra\Temp\{0} - {1} - {2}.xml", facturaDto.Serie, facturaDto.Folio, DateTime.Now.ToString("ddMMyyyyHHmmss"));
                    _operacionesStreams.ByteArrayArchivo(facturaDto.Xml, pathXml);
                    var pathPdf = GenerarPdf(facturaDto.Xml, complementoPago);
                    EnviarCorreo(cliente, new List <string> {
                        pathXml, pathPdf
                    }, mailAlterno);
                }
                catch (Exception ex)
                {
                    throw new Exception(String.Format("El comprobante se timbró de forma exitosa pero no fue posible mandarlo por correo electrónico, el motivo: {0}", ex.Message));
                }

                return(facturaDto.Xml);
            }
        }