public FileStream GetFile(ref string nombre, ref Modelo.Factura factura, int opcion, int facturaId, HttpContext contexto)
        {
            factura = GetId(facturaId);
            ServicioXml _servicio = new ServicioXml(this._logger);
            FileStream  _archivo  = null;
            string      _error    = string.Empty;
            Ruta        _ruta     = new Ruta(contexto, factura);

            new ServicioArchivo(_logger).CrearCarpeta(_ruta.RutaCarpetaFacturasClientes);
            switch (opcion)
            {
            case 1:
                if (!File.Exists(_ruta.RutaGuardadoXML))
                {
                    _servicio.RecuperarXML(factura.Sucursal.Rfc, factura.FolioFiscal, _ruta.RutaGuardadoXML);
                }
                _archivo = new FileStream(_ruta.RutaGuardadoXML, FileMode.Open, FileAccess.Read);
                nombre   = _ruta.NombreArchivoCompletoXml;
                break;

            case 2:
                if (!File.Exists(_ruta.RutaPDF))
                {
                    _servicio.GeneraCBB(ref _error, factura.Sucursal.Rfc, factura.Cliente.Rfc, factura.FolioFiscal, factura.Total, _ruta.RutaCBB);
                    GenerarPDF(factura, _ruta);
                }
                nombre = _ruta.NombreArchivoCompletoPDF;
                if (File.Exists(_ruta.RutaPDF))
                {
                    _archivo = new FileStream(_ruta.RutaPDF, FileMode.Open, FileAccess.Read);
                }
                break;
            }
            return(_archivo);
        }
        public Boolean Reenviar(ref string error, UsuarioDto usuario, int facturaId, HttpContext context)
        {
            Modelo.Factura _factura     = new Modelo.Factura();
            ServicioXml    _servicioXml = new ServicioXml(this._logger);
            string         _nombre      = "";

            GetFile(ref _nombre, ref _factura, 1, facturaId, context);
            GetFile(ref _nombre, ref _factura, 2, facturaId, context);
            Ruta _ruta = new Ruta(context, _factura);

            if (!File.Exists(_ruta.RutaGuardadoXML) || !File.Exists(_ruta.RutaPDF))
            {
                error = "No se recuperaron los archivos necesarios.";
                return(false);
            }
            ServicioCorreo.Enviar(_factura.Sucursal.Asunto, _factura.Sucursal.Mensaje, _factura.Cliente.Correo, _ruta.RutaPDF, _ruta.RutaGuardadoXML, this._logger);

            return(true);
        }
        public Boolean Post(ref string error, Modelo.Factura factura, UsuarioDto usuario, HttpContext context)
        {
            var _servicioRelacion = new ServicioRelaciones(this._logger, this._contexto);

            _servicioRelacion.ObtenerRelacionFactura(ref factura);
            Ruta ruta = new Ruta(context, factura);

            if (!ValidarFactura(ref error, ref factura))
            {
                return(false);
            }
            ServicioXml _servicioXml = new ServicioXml(this._logger);

            if (!_servicioXml.GeneraCFDI(ref error, factura, ruta.RutaGuardadoXML, ruta.RutaCertificado, ruta.RutaKey, ruta.RutaArchivosXSLT, ruta.RutaCarpetaFacturasClientes))
            {
                return(false);
            }
            XmlDocument _xmlDocument = new XmlDocument();

            if (!_servicioXml.Timbrar(ref error, ref _xmlDocument, ruta.RutaGuardadoXML, ruta.RutaGuardadoXML))
            {
                return(false);
            }
            Put(ref error, ref factura, _xmlDocument);
            try
            {
                factura.ImagenCbb = ruta.RutaImagenCBB;
                _servicioXml.GeneraCBB(ref error, factura.Sucursal.Rfc, factura.Cliente.Rfc, factura.FolioFiscal, factura.Total, ruta.RutaCBB);
                var correo = factura.Cliente.Correo;
                GenerarPDF(factura, ruta);
                ServicioCorreo.Enviar(factura.Sucursal.Asunto, factura.Sucursal.Mensaje, correo, ruta.RutaPDF, ruta.RutaGuardadoXML, this._logger);
                _servicioRelacion.SanitizarFactura(ref factura);
                Save(ref error, factura);
                return(true);
            }
            catch (Exception e)
            {
                this._logger.EscribirError(e.ToString());
                error = "Ocurrio un error al guardar la factura";
                return(false);
            }
        }
        public Boolean Cancelar(ref string error, int facturaId, UsuarioDto usuario, HttpContext contexto)
        {
            var _factura = GetId(facturaId);

            if (_factura == null)
            {
                error = "No existe la factura solicitada.";
                return(false);
            }
            Ruta _ruta = new Ruta(contexto, _factura);

            if (!File.Exists(_ruta.RutaKey) && !File.Exists(_ruta.RutaCertificado))
            {
                error = ("No existen Certificado o Llave Privada del sat");
                return(false);
            }
            var _servicioXml = new ServicioXml(this._logger);

            _servicioXml.Cancelar(ref error, ref _factura, _ruta.RutaCertificado, _ruta.RutaKey);
            Put(ref error, _factura);
            return(true);
        }