コード例 #1
0
        public ActionResult CargaGeneral(CargasCfdisModel cargasCfdisModel)
        {
            PopulaForma(cargasCfdisModel.DepartamentoId, cargasCfdisModel.CentroCostoId);
            ModelState.Remove("Archivos");

            var sucursalId = ObtenerSucursal();
            var sucursal   = _db.Sucursales.Find(sucursalId);

            if (ModelState.IsValid)
            {
                if (Request.Files.Count == 0)
                {
                    ModelState.AddModelError("", "Sin archivos para procesar");
                    return(View());
                }

                try
                {
                    var facturaRecibida = new FacturaRecibida();

                    PopularArchivos(ref facturaRecibida);
                    var pathFactura = Path.Combine(Server.MapPath("~/Archivos/Validaciones/"), facturaRecibida.NombreArchivoXml);
                    _operacionesStreams.ByteArrayArchivo(facturaRecibida.ArchivoFisicoXml, pathFactura);

                    _decodificaFacturas.DecodificarFactura(ref facturaRecibida, pathFactura);

                    var rfcReceptor = facturaRecibida.Receptor.Rfc;
                    facturaRecibida.Receptor       = _db.Sucursales.FirstOrDefault(s => s.Rfc == rfcReceptor);
                    facturaRecibida.DepartamentoId = cargasCfdisModel.DepartamentoId;
                    facturaRecibida.CentroCostoId  = cargasCfdisModel.CentroCostoId;
                    facturaRecibida.UsuarioId      = ObtenerUsuario();

                    //Validaciones
                    _validacionesFacturas.Negocios(facturaRecibida, ObtenerSucursal());
                    facturaRecibida.Validacion = _validacionesFacturas.Sat(pathFactura, facturaRecibida.Receptor.Rfc);

                    //Guardar factura
                    try
                    {
                        _guardaFacturas.GuardarFacturaRecibida(facturaRecibida, ObtenerSucursal(), TiposGastos.Personal);
                        _db.SaveChanges();
                    }
                    catch (Exception ex)
                    {
                        ModelState.AddModelError("", String.Format("No se pudo guardar la factura {0}", ex.Message));
                        return(View());
                    }
                }
                catch (Exception ex)
                {
                    ModelState.AddModelError("", ex.Message);
                    return(View());
                }
            }

            return(View());
        }
コード例 #2
0
        public ActionResult Validaciones(FacturasModel facturasModel)
        {
            ModelState.Remove("Archivos");

            var sucursalId = ObtenerSucursal();
            var sucursal   = _db.Sucursales.Find(sucursalId);

            facturasModel = new FacturasModel
            {
                FacturasRecibidas = _db.FacturasRecibidas.Where(fp => fp.ReceptorId == sucursalId).OrderBy(fp => fp.Emisor.RazonSocial).ThenByDescending(vf => vf.Fecha).ToList()
            };

            if (ModelState.IsValid)
            {
                if (Request.Files.Count == 0)
                {
                    ModelState.AddModelError("", "Sin archivos para procesar");
                    return(View(facturasModel));
                }

                try
                {
                    var facturaRecibida = new FacturaRecibida();

                    PopularArchivos(ref facturaRecibida);
                    var pathFactura = Path.Combine(Server.MapPath("~/Archivos/Validaciones/"), facturaRecibida.NombreArchivoXml);
                    _operacionesStreams.ByteArrayArchivo(facturaRecibida.ArchivoFisicoXml, pathFactura);

                    _decodificaFacturas.DecodificarFactura(ref facturaRecibida, pathFactura);

                    var rfcReceptor = facturaRecibida.Receptor.Rfc;
                    facturaRecibida.Receptor = _db.Sucursales.FirstOrDefault(s => s.Rfc == rfcReceptor);

                    //Validaciones
                    _validacionesFacturas.Negocios(facturaRecibida, ObtenerSucursal());
                    facturaRecibida.Validacion = _validacionesFacturas.Sat(pathFactura, facturaRecibida.Receptor.Rfc);

                    //Guardar factura
                    try
                    {
                        _guarda.GuardarFacturaRecibida(facturaRecibida, ObtenerSucursal(), API.Enums.TiposGastos.Proveedores);
                        _db.SaveChanges();
                    }
                    catch (Exception ex)
                    {
                        ModelState.AddModelError("", String.Format("No se pudo guardar la factura {0}", ex.Message));
                        return(View(facturasModel));
                    }
                }
                catch (Exception ex)
                {
                    ModelState.AddModelError("", ex.Message);
                    return(View(facturasModel));
                }

                return(RedirectToAction("Validaciones"));
            }

            return(View(facturasModel));
        }
コード例 #3
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);
            }
        }