Ejemplo n.º 1
0
        public async Task <IActionResult> ConsultarFacturaElectronicaAsync(int transID)
        {
            var dbContext = this._context.TransaccionHeaders.Include(d => d.TransDetails).Where(t => t.TransID == transID);

            if (dbContext == null)
            {
                return(NotFound());
            }
            var transaccion = dbContext.ToList().FirstOrDefault();

            if (transaccion == null)
            {
                return(NotFound());
            }
            if (transaccion != null && transaccion.EnviadaHacienda && !string.IsNullOrEmpty(transaccion.ClaveHacienda))
            {
                EmisorModel.Emisor emi = this._context.Emisor.FirstOrDefault(emisor => emisor.ID > 0);
                if (emi != null)
                {
                    FacturaElectronicaCR fact = new FacturaElectronicaCR();
                    string rutaCertificado    = emi.RutaArchivoCertificado;
                    string rutaOutput         = emi.OutputFolder;
                    Emisor emisor             = new Emisor(emi.NombreCompleto, emi.TipoIdentificacion, emi.NumeroIdentificacion, emi.Provincia, emi.Canton, emi.Distrito, emi.Barrio,
                                                           emi.OtrasSenas, emi.CodigoPaisTelefono, emi.NumeroTelefono, emi.CorreoElectronico, rutaCertificado, emi.PinCertificado, emi.UsuarioApi.Trim(), emi.ClaveApi.Trim(), emi.OutputFolder);
                    emisor.OutputFolder = emi.OutputFolder;
                    fact.Emisor         = emisor;
                    string message = string.Empty;
                    try
                    {
                        message = fact.ConsultaFactura(transaccion.ClaveHacienda, emisor.OutputFolder);
                    }
                    catch (Exception)
                    {
                        this.TempData["ErrorMessage"] = "Hubo un error consultando la factura. Intente mas tarde.";
                    }
                    if (message.ToLower().Equals("aceptada"))
                    {
                        transaccion.AceptadaHacienda = "true";
                        this.TempData["OKMessage"]   = message;
                    }
                    else
                    {
                        transaccion.AceptadaHacienda  = "false";
                        this.TempData["ErrorMessage"] = message;
                    }
                    this._context.TransaccionHeaders.Update(transaccion);
                    await _context.SaveChangesAsync();
                }
            }
            return(this.RedirectToAction(nameof(Edit), new { id = transID }));
        }
Ejemplo n.º 2
0
        public async Task <IActionResult> EnviarFacturaElectronicaAsync(int transID)
        {
            var dbContext = this._context.TransaccionHeaders.Include(d => d.TransDetails).Where(t => t.TransID == transID);

            if (dbContext == null)
            {
                return(NotFound());
            }
            var transaccion = dbContext.ToList().FirstOrDefault();

            if (transaccion == null)
            {
                return(NotFound());
            }
            if (transaccion != null && !transaccion.EnviadaHacienda)
            {
                Datos  datos       = new Datos();
                string consecutivo = datos.CreaNumeroSecuencia("1", "1", "01", "00000019");
                //string consecutivo = datos.CreaNumeroSecuencia("1", "1", "01", transaccion.TransIdStr);
                DateTime date = DateTime.Now;
                //string codigoSeguridad = datos.CreaCodigoSeguridad("01", "1", "1", date, transaccion.TransIdStr);
                string codigoSeguridad = datos.CreaCodigoSeguridad("01", "1", "1", date, "00000019");
                string clave           = datos.CreaClave("506", date.Day.ToString(), date.Month.ToString(), date.Year.ToString(), "207030159", consecutivo, "1", codigoSeguridad);

                Cliente            client = this._context.Clientes.FirstOrDefault(cliente => cliente.ID == transaccion.ClienteID);
                EmisorModel.Emisor emi    = this._context.Emisor.FirstOrDefault(emisor => emisor.ID > 0);
                if (client != null && emi != null)
                {
                    //string rutaCertificado = "C:\\ATV Alexis\\Llave Criptografica (firma) stag\\020703015917.p12";
                    string rutaCertificado = emi.RutaArchivoCertificado;
                    //string rutaOutput = "C:\\OutputFiles\\";
                    string   rutaOutput = emi.OutputFolder;
                    Receptor receptor   = new Receptor(client.NombreCompleto, "01", client.CedulaSinGuiones, "506", client.Telefono.Replace("-", string.Empty), client.Email);
                    Emisor   emisor     = new Emisor(emi.NombreCompleto, emi.TipoIdentificacion, emi.NumeroIdentificacion, emi.Provincia, emi.Canton, emi.Distrito, emi.Barrio,
                                                     emi.OtrasSenas, emi.CodigoPaisTelefono, emi.NumeroTelefono, emi.CorreoElectronico, rutaCertificado, emi.PinCertificado, emi.UsuarioApi.Trim(), emi.ClaveApi.Trim(), emi.OutputFolder);
                    int numeroLinea = 0;
                    List <LineaDetalle> listaDetalles = new List <LineaDetalle>();
                    foreach (TransaccionDetail det in transaccion.TransDetails)
                    {
                        LineaDetalle detalle = new LineaDetalle();
                        detalle.NumeroLinea         = ++numeroLinea;
                        detalle.ArticuloTipo        = "03";
                        detalle.ArticuloCodigo      = det.VINVehiculo;
                        detalle.Cantidad            = 1;
                        detalle.UnidadMedida        = "Sp";
                        detalle.DetalleArticulo     = "venta de vehiculo " + det.VINVehiculo;
                        detalle.PrecioUnitario      = Convert.ToDouble(det.PrecioAcordado);
                        detalle.MontoDescuento      = 0;
                        detalle.NaturalezaDescuento = "0";
                        detalle.ImpuestoCodigo      = "07";
                        detalle.ImpuestoTarifa      = 0;
                        detalle.isGravado           = false;
                        detalle.isServicio          = true;
                        listaDetalles.Add(detalle);
                    }
                    CustomFacturaElectronicaCR fact = new CustomFacturaElectronicaCR(consecutivo, clave, emisor, receptor, "01", string.Empty, "01", listaDetalles, "CRC", 1);
                    XmlDocument xmlSinFirmar        = fact.CreaXMLFacturaElectronica();
                    emisor.OutputFolder = rutaOutput;
                    try
                    {
                        await fact.ProcesaAsync(xmlSinFirmar.OuterXml, emisor.OutputFolder, consecutivo);
                    }
                    catch (Exception)
                    {
                        transaccion.EnviadaHacienda = false;
                        ///throw;
                        this.TempData["ErrorMessage"] = "Error al enviar a Hacienda. Intente de nuevo más tarde.";
                    }
                    transaccion.ClaveHacienda       = clave;
                    transaccion.EnviadaHacienda     = true;
                    transaccion.ConsecutivoHacienda = consecutivo;
                    this._context.TransaccionHeaders.Update(transaccion);
                    await _context.SaveChangesAsync();
                }
            }
            return(this.RedirectToAction(nameof(Edit), new { id = transID }));
        }