public string EnviarFacturaApiHacienda(FacturaElectronica _factura)
        {
            try
            {
                Settings values  = new Settings();
                var      request = new RestRequest("/", Method.POST);
                var      client  = new RestClient();
                //  client = new RestClient(idp_uriTest);
                client.BaseUrl = new Uri(values.IdP_Uri);
                // agregar parametros del form
                // request.AddParameter("grant_type", "refresh_token");
                // request.AddParameter("client_id", values.IdP_Client_Id);
                // request.AddParameter("refresh_token", SessionToken.refresh_token);

                // HTTP Headers
                request.AddHeader("Authorization ", SessionToken.token_type + " " + SessionToken.access_token);
                // execute the request
                IRestResponse response = client.Execute(request);
                SessionToken = JsonConvert.DeserializeObject <Token>(response.Content);
                return(null);
            }
            catch (Exception _ex)
            {
                Errores = new ManejoErrores();
                Errores.RegistrarErrorLog((int)ModuloSistema.MantenimientoFacturaElectronica, _ex.Message, _ex.Source + " : " + _ex.InnerException.Message);
                return(null);
            }
        }
示例#2
0
        public PartialViewResult indexErrores(int idPeriodo)
        {
            FacturaElectronica emp = new FacturaElectronica();
            var empleados          = emp.EmpleadosErrorTimbrado(idPeriodo);

            return(PartialView(empleados));
        }
示例#3
0
        public string GetPDFInvoice(FacturaElectronica payload, string accountId)
        {
            DataBase.Account accountData;
            IAccount         accountImp;
            string           imageQR, htmlInvoice, pdfInvoice;

            try
            {
                accountImp  = new AccountImp();
                accountData = accountImp.GetAccountById(accountId);
                if (accountData != null)
                {
                    imageQR     = Utils.BuildLinkAndQRCode(payload.Clave, payload.Emisor.Identificacion.Numero);
                    htmlInvoice = BuildHtmlInvoice(payload, imageQR, accountData.logoImage);
                    pdfInvoice  = BuildPDFInvoice(htmlInvoice);
                }
                else
                {
                    throw new Exception(Constants.Constants.fail_Get_account_data);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return(pdfInvoice);
        }
示例#4
0
        public async Task <FileResult> GetRecibos33(int idFiniquito = 0)
        {
            if (idFiniquito == 0)
            {
                return(null);
            }

            // int[] nominas = new[] {1,2,3,4,5,6};

            //Random random = new Random();
            //int randomNumber = random.Next(0, 1000);//A

            var ruta        = Server.MapPath("~/Files/DownloadRecibos");
            var idusuario   = SessionHelpers.GetIdUsuario();
            var periodoPago = Session["periodo"] as NOM_PeriodosPago;

            if (periodoPago != null)
            {
                //Genera el xml
                var xml = await FacturaElectronica.GenerarXMLFiniquitoSintimbre(idFiniquito, periodoPago, periodoPago.IdEjercicio, periodoPago.IdPeriodoPago, idusuario, isCfdi33 : true);

                //Crear el pdf con el xml generado
                var recibo = await ProcesoNomina.GetRecibosFiniquitoSinTimbre(idFiniquito, periodoPago, idusuario, ruta, isCfdi33 : true);

                var file = System.IO.File.ReadAllBytes(recibo);

                var nombreArchivo = periodoPago.Descripcion + ".pdf";

                return(File(file, System.Net.Mime.MediaTypeNames.Application.Octet, nombreArchivo));
            }
            else
            {
                return(null);
            }
        }
示例#5
0
        public PartialViewResult listadoErrores(int idNomima = 0)
        {
            //if (idNomima == 0) return null;

            FacturaElectronica emp = new FacturaElectronica();
            var errores            = emp.ListadoMensajePac(idNomima);

            return(PartialView(errores));
        }
        private void enviadoc(string tipodoc, int numero)
        {
            FacturaElectronica fe = new FacturaElectronica();

            var respuesta = fe.EnviarFactura(tipodoc, numero);

            //cargar encabezado

            //cargar detalles

            //cargar formapago
        }
        private void LoadResumenFactura(ref Factura_Resolucion fac, FacturaElectronica factura)
        {
            FacturaElectronicaResumenFactura Resumen = factura.ResumenFactura;

            if (Resumen != null)
            {
                if (Resumen.CodigoTipoMoneda != null)
                {
                    fac.Codigo_Moneda = Resumen.CodigoTipoMoneda.CodigoMoneda.ToString();
                    fac.TipoCambio    = Resumen.CodigoTipoMoneda.TipoCambio;
                }

                if (Resumen.TotalDescuentosSpecified)
                {
                    fac.TotalDescuentos = Resumen.TotalDescuentos;
                }

                if (Resumen.TotalExentoSpecified)
                {
                    fac.TotalExento = Resumen.TotalExento;
                }

                if (Resumen.TotalGravadoSpecified)
                {
                    fac.TotalGravado = Resumen.TotalGravado;
                }

                if (Resumen.TotalImpuestoSpecified)
                {
                    fac.TotalImpuesto = Resumen.TotalImpuesto;
                }

                if (Resumen.TotalMercanciasExentasSpecified)
                {
                    fac.TotalMercanciasExentas = Resumen.TotalMercanciasExentas;
                }

                if (Resumen.TotalMercanciasGravadasSpecified)
                {
                    fac.TotalMercanciasGravadas = Resumen.TotalMercanciasGravadas;
                }

                if (Resumen.TotalServExentosSpecified)
                {
                    fac.TotalServExentos = Resumen.TotalServExentos;
                }

                fac.TotalVenta       = Resumen.TotalVenta;
                fac.TotalVentaNeta   = Resumen.TotalVentaNeta;
                fac.TotalComprobante = Resumen.TotalComprobante;
            }
        }
        private void btnXml_Click(object sender, EventArgs e)
        {
            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                if (Convert.ToBoolean(row.Cells[0].Value) == true)
                {
                    var tipo   = row.Cells[1].Value.ToString().Trim();
                    var numero = Convert.ToInt32(row.Cells[2].Value);


                    FacturaElectronica fe = new FacturaElectronica();
                    var data = fe.DescargarXML_PDF(tipo, numero, "XML");


                    try
                    {
                        SaveFileDialog SaveFileDialog1 = new SaveFileDialog();

                        SaveFileDialog1.Title = "Browse XML Files";

                        SaveFileDialog1.DefaultExt  = ".xml";
                        SaveFileDialog1.Filter      = "XML files (*.xml)|*.xml|All files (*.*)|*.*";
                        SaveFileDialog1.FilterIndex = 1;

                        if (SaveFileDialog1.ShowDialog() == DialogResult.OK)
                        {
                            var filename = SaveFileDialog1.FileName;


                            File.WriteAllBytes(filename, data);
                            //FileStream fs = File.Create(filename);
                            //BinaryWriter bw = new BinaryWriter(fs);

                            System.Diagnostics.Process.Start(filename);

                            MessageBox.Show("Archivo null.");
                        }
                    }
                    catch
                    {
                        MessageBox.Show("Archivo null.");

                        LogText(tipo.ToString(), numero.ToString(), "Archivo vacio");

                        // LogResult(tipo.ToString(), numero.ToString(), "Archivo vacio");
                    }
                }
            }
        }
 private void LoadDatosReceptor(ref Factura_Resolucion fac, FacturaElectronica factura)
 {
     if (factura.Receptor != null)
     {
         fac.Receptor__Nombre = factura.Receptor.Nombre;
         if (factura.Receptor.Identificacion != null)
         {
             fac.Receptor_Identificacion = factura.Receptor.Identificacion.Numero;
         }
         else
         {
             fac.Receptor_Identificacion = factura.Receptor.IdentificacionExtranjero;
         }
     }
 }
 private void LoadBody(ref Factura_Resolucion fac, FacturaElectronica factura)
 {
     FacturaElectronicaLineaDetalle[] DetallesServicios = factura.DetalleServicio;
     if (DetallesServicios != null && DetallesServicios.Length > 0)
     {
         List <Factura_Resolucion_Detalle> Detalles = new List <Factura_Resolucion_Detalle>();
         foreach (FacturaElectronicaLineaDetalle nodo in DetallesServicios)
         {
             Factura_Resolucion_Detalle result = CargarLinea(nodo);
             if (result != null)
             {
                 Detalles.Add(result);
             }
         }
         fac.Factura_Resolucion_Detalle = Detalles;
     }
 }
示例#11
0
        public async Task <FileResult> GetRecibos(int[] idNominas = null)
        {
            try
            {
                if (idNominas == null)
                {
                    return(null);
                }

                Random random       = new Random();
                int    randomNumber = random.Next(0, 1000);//A

                var ruta        = Server.MapPath("~/Files/DownloadRecibos");
                var idusuario   = SessionHelpers.GetIdUsuario();
                var periodoPago = Session["periodo"] as NOM_PeriodosPago;
                if (periodoPago != null)
                {
                    //Genera el xml
                    var xml = await FacturaElectronica.GenerarXMLSintimbre(idNominas, periodoPago, periodoPago.IdEjercicio, periodoPago.IdPeriodoPago, idusuario);

                    //Crear el pdf con el xml generado
                    var recibo = await ProcesoNomina.GetRecibosSinTimbre(idNominas, periodoPago, idusuario, ruta);

                    var file = System.IO.File.ReadAllBytes(recibo);

                    var nombreArchivo = periodoPago.Descripcion + ".pdf";

                    return(File(file, System.Net.Mime.MediaTypeNames.Application.Octet, nombreArchivo));
                }
                else
                {
                    return(null);
                }
            }
            catch (Exception)
            {
                return(null);
            }
            finally
            {
            }
        }
        private void LoadEmisor(ref Factura_Resolucion fac, FacturaElectronica factura)
        {
            if (factura.Emisor != null)
            {
                EmisorType Emi = factura.Emisor;
                fac.Emisor_CorreoElectronico = Emi.CorreoElectronico;
                if (Emi.Identificacion != null)
                {
                    fac.Emisor_Identificacion_Tipo   = Emi.Identificacion.Tipo.GetXmlValue();
                    fac.Emisor_Identificacion_Numero = Emi.Identificacion.Numero;
                }

                fac.Emisor_Nombre          = Emi.Nombre;
                fac.Emisor_NombreComercial = Emi.NombreComercial;
                if (Emi.Telefono != null)
                {
                    fac.Emisor_Telefono_Numero = Emi.Telefono.NumTelefono;
                }
            }
        }
        private void btnEstado_Click(object sender, EventArgs e)
        {
            if (dataGridView1.SelectedRows.Count > 0)
            {
                var tipo   = dataGridView1.SelectedRows[0].Cells[1].Value.ToString().Trim();
                var numero = Convert.ToInt32(dataGridView1.SelectedRows[0].Cells[2].Value);

                Regex reg = new Regex("[*'\",_&#^@]");
                tipo = reg.Replace(tipo, string.Empty);

                FacturaElectronica fe = new FacturaElectronica();

                var data = fe.EstadoDocumento(tipo, numero);

                MessageBox.Show(tipo + "-" + numero.ToString() + "cufe:" + data.cufe);



                LogResult(tipo.ToString(), numero.ToString(), data);

                if (data.codigo == 200 || data.codigo == 201)
                {
                    FbData fb = new FbData();

                    string clase = Getclasefactura(tipo);

                    var sql = "update oe set cufe = '" + data.cufe + "', procesadoDian ='S' where tipo='" + clase.Trim() + "' and number=" + numero.ToString();


                    var rowsaffect = fb.ExecuteNonQuery(sql);
                }

                GetFacturas();
            }
            else
            {
                MessageBox.Show("Seleccione una fila");
            }
        }
        public Factura_Resolucion Convertir(FacturaElectronica factura, string XMl = null)
        {
            Factura_Resolucion fac = new Factura_Resolucion()
            {
                Clave                  = factura.Clave,
                CondicionVenta         = factura.CondicionVenta.GetXmlValue(),
                Email_Enviado          = false,
                TipoDocumentoOrigen    = (int)Tipo_documento.Factura_electrónica,
                Estado                 = (int)EstadoComprobante.Enviado,
                Fecha_Documento_Origen = factura.FechaEmision
            };

            if (factura.MedioPago != null && factura.MedioPago.Length > 0)
            {
                fac.MedioPago = factura.MedioPago[0].GetXmlValue();
            }

            LoadEmisor(ref fac, factura);
            LoadResumenFactura(ref fac, factura);
            LoadDatosReceptor(ref fac, factura);
            LoadBody(ref fac, factura);
            return(fac);
        }
示例#15
0
        /// <summary>
        /// envia documento a hacienda, requiere de una factura en xml y firmada , codebase64
        /// </summary>
        public static void enviarDocumento(OAuth2Token token)
        {
            WSRecepcionPOST post = new WSRecepcionPOST();

            post.clave = "50613021800060354097400100002010000000003188888888";
            post.emisor.tipoIdentificacion     = "01";
            post.emisor.numeroIdentificacion   = "603540974";
            post.receptor.tipoIdentificacion   = "01";
            post.receptor.numeroIdentificacion = "601230863";

            FacturaElectronica fact = new FacturaElectronica();

            fact.iniciarParametros();

            string path = Path.Combine(Path.GetFullPath("fact.xml"));

            string xmlData = File.ReadAllText(path);
            //string xmlData = XMLUtilsgetXMLFromObject(fact);

            //XMLUtilsvalidadXMLXSD(xmlData);

            string xmlDataSigned = FirmaXML.getXMLFirmado(xmlData);



            // guarda xml firmado para pruebas
            File.WriteAllText(Path.GetFullPath("fact_firma.xml"), xmlDataSigned);

            post.comprobanteXml = EncodeXML.XMLUtils.base64Encode(xmlDataSigned);

            string jsonTrama = JsonConvert.SerializeObject(post);

            string responsePost = postRecepcion(token, jsonTrama)
                                  .GetAwaiter()
                                  .GetResult();
        }
示例#16
0
        public FacturaDB_ToFacturaElectronica Convertir(Factura facturaDB)
        {
            FacturaElectronica FacturaElectronica = new FacturaElectronica()
            {
                Clave          = facturaDB.Clave,
                CondicionVenta = EnumUtils.SetTypeString <FacturaElectronicaCondicionVenta>(facturaDB.CondicionVenta),
                MedioPago      = new FacturaElectronicaMedioPago[] {
                    EnumUtils.SetTypeString <FacturaElectronicaMedioPago>(facturaDB.MedioPago)
                },
                FechaEmision      = facturaDB.Fecha_Emision_Documento,
                NumeroConsecutivo = new ConsecutivoHacienda()
                {
                    CasaMatriz            = facturaDB.CasaMatriz,
                    PuntoVenta            = facturaDB.PuntoVenta,
                    NumeracionConsecutiva = facturaDB.NumeroConsecutivo,
                    TipoDocumento         = (Tipo_documento)facturaDB.Id_TipoDocumento
                }.ToString(),
                               Emisor = new EmisorType()
                {
                    CorreoElectronico = facturaDB.Emisor_CorreoElectronico,
                    Identificacion    = new IdentificacionType()
                    {
                        Tipo   = EnumUtils.SetTypeString <IdentificacionTypeTipo>(facturaDB.Emisor_Identificacion_Tipo),
                        Numero = facturaDB.Emisor_Identificacion_Numero
                    },
                    Nombre          = facturaDB.Emisor_Nombre,
                    NombreComercial = facturaDB.Emisor_NombreComercial,
                    Telefono        = new TelefonoType()
                    {
                        CodigoPais  = facturaDB.Emisor_Telefono_Codigo.Value.ToString(),
                        NumTelefono = facturaDB.Emisor_Telefono_Numero.Value.ToString()
                    },
                    Ubicacion = new UbicacionType()
                    {
                        Barrio     = facturaDB.Emisor_Ubicacion_Barrio.Value.ToString("00"),
                        Provincia  = facturaDB.Emisor_Ubicacion_Provincia.Value.ToString(),
                        Canton     = facturaDB.Emisor_Ubicacion_Canton.Value.ToString("00"),
                        Distrito   = facturaDB.Emisor_Ubicacion_Distrito.Value.ToString("00"),
                        OtrasSenas = facturaDB.Emisor_Ubicacion_OtrasSenas ?? "No indicado"
                    }
                },
                               DetalleServicio = GetDetalleFromFacturaDB(facturaDB.Factura_Detalle).ToArray(),
                               Receptor        = GetReceptorFromFacturaDB(facturaDB),
                               ResumenFactura  = GetResumenFactura(facturaDB)
            };

            DocumentoElectronico = FacturaElectronica;



            requestData = new FacturaRequest()
            {
                clave  = FacturaElectronica.Clave,
                emisor = new FacturaClient()
                {
                    numeroIdentificacion = FacturaElectronica.Emisor.Identificacion.Numero,
                    tipoIdentificacion   = FacturaElectronica.Emisor.Identificacion.Tipo.GetXmlValue()
                },
                fecha = FacturaElectronica.FechaEmision.ToString("yyyy-MM-ddTHH:mm:ss"),
            };

            if (FacturaElectronica.Receptor != null && FacturaElectronica.Receptor.Identificacion != null)
            {
                requestData.receptor = new FacturaClient()
                {
                    tipoIdentificacion   = FacturaElectronica.Receptor.Identificacion.Tipo.GetXmlValue(),
                    numeroIdentificacion = FacturaElectronica.Receptor.Identificacion.Numero,
                };
            }

            return(this);
        }
        private void BuscarXML(object sender, RoutedEventArgs e)
        {
            string FileUrl = null;

            try
            {
                OpenFileDialog openFileDialog = new OpenFileDialog
                {
                    Multiselect = false,
                    DefaultExt  = "*.xml",
                    Filter      = "Documentos Electronicos (*.xml) | *.xml;"
                };
                if (openFileDialog.ShowDialog() == true)
                {
                    FileUrl = openFileDialog.FileName;
                }
                else
                {
                    return;
                }
            }
            catch (Exception ex)
            {
                FileUrl = null;
                this.LogError(ex);
            }


            if (string.IsNullOrEmpty(FileUrl))
            {
                MessageBox.Show("Error al obtener la direccion del archivo de XML", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }


            try
            {
                Tipo_documento typeDocument = Tipo_documento.Factura_electrónica;
                XmlDocument    xml          = new XmlDocument();
                xml.Load(FileUrl);
                string NS_String = xml.DocumentElement.NamespaceURI;

                if (NS_String != "https://tribunet.hacienda.go.cr/docs/esquemas/2017/v4.2/facturaElectronica" && NS_String != "https://tribunet.hacienda.go.cr/docs/esquemas/2017/v4.2/tiqueteElectronico")
                {
                    MessageBox.Show("El tipo de xml seleccionado es incorrecto", "Validacion", MessageBoxButton.OK, MessageBoxImage.Stop);
                    return;
                }

                if (NS_String == "https://tribunet.hacienda.go.cr/docs/esquemas/2017/v4.2/tiqueteElectronico")
                {
                    typeDocument = Tipo_documento.Tiquete_Electrónico;
                }

                if (typeDocument == Tipo_documento.Factura_electrónica)
                {
                    XmlSerializer      serializer = new XmlSerializer(typeof(FacturaElectronica));
                    FacturaElectronica Factura    = null;
                    using (XmlReader reader = new XmlNodeReader(xml))
                    {
                        Factura = (FacturaElectronica)serializer.Deserialize(reader);
                    }

                    FacturaResolucion = new ConvertirFacturaXml_FacturaDB().Convertir(Factura, xml.InnerXml);
                }
            }
            catch (Exception ex)
            {
                this.LogError(ex);
                MessageBox.Show("Error al abrir el archivo de XML", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }

            bool Encontrada = false;

            using (db_FacturaDigital db = new db_FacturaDigital())
            {
                Encontrada = db.Factura_Resolucion.Any(q => q.Clave == FacturaResolucion.Clave);
            }

            if (Encontrada)
            {
                MessageBox.Show("La factura seleccionada ya se encuentra en el sistema", "Validacion", MessageBoxButton.OK, MessageBoxImage.Stop);
                return;
            }

            DataModel.EF.Contribuyente con = Recursos.RecursosSistema.Contribuyente;
            if (con.Identificacion_Numero != FacturaResolucion.Receptor_Identificacion)
            {
                MessageBoxResult result = MessageBox.Show("El  numero de identicacion de la factura no concuerda con el numero de identificacion del actual contribuyente Identificacion receptor factura[" + FacturaResolucion.Receptor_Identificacion + "] Identificacion del contribuyente actual [" + con.Identificacion_Numero + "] La factura esta a nombre de [" + FacturaResolucion.Receptor__Nombre + "]. Sabiendo lo anterior desea continuar ?", "Validacion", MessageBoxButton.YesNo, MessageBoxImage.Question);
                if (result != MessageBoxResult.Yes)
                {
                    return;
                }
            }

            RenderFactura();
        }
示例#18
0
        /// <summary>
        /// Genera el hmtl que se utilizará para formar la factura
        /// </summary>
        /// <param name="payload"></param>
        /// <param name="base64QrImage"></param>
        /// <param name="base64LogoImage"></param>
        /// <returns></returns>
        public string BuildHtmlInvoice(FacturaElectronica payload, string base64QrImage, string base64LogoImage)
        {
            StringBuilder lineasDetalle;
            List <object> argsLinea, argsDocument;
            string        htmlInvoice;

            try
            {
                #region Crear HTML

                argsDocument = new List <object>();
                argsDocument.Add(payload.NumeroConsecutivo);

                #region Datos Emisor
                lineasDetalle = new StringBuilder();
                argsLinea     = new List <object>();
                htmlInvoice   = File.ReadAllText(string.Format(Constants.Constants.RequestApiFormat_2, AppDomain.CurrentDomain.BaseDirectory, ConfigurationManager.AppSettings[Constants.Constants.invoiceEmisor]));

                argsLinea.Add(payload.Emisor.Nombre);
                argsLinea.Add(payload.Emisor.Identificacion.Numero);
                argsLinea.Add(payload.Emisor.Ubicacion.Provincia + payload.Emisor.Ubicacion.Canton + payload.Emisor.Ubicacion.Distrito + payload.Emisor.Ubicacion.OtrasSenas);
                argsLinea.Add(string.Format(Constants.Constants.RequestApiFormat_2, payload.Emisor.Telefono.CodigoPais, payload.Emisor.Telefono.NumTelefono));
                argsLinea.Add(payload.Emisor.CorreoElectronico);

                lineasDetalle.Append(string.Format(htmlInvoice, argsLinea.ToArray()));

                #endregion

                #region Datos Factura

                argsLinea   = new List <object>();
                htmlInvoice = File.ReadAllText(string.Format(Constants.Constants.RequestApiFormat_2, AppDomain.CurrentDomain.BaseDirectory, ConfigurationManager.AppSettings[Constants.Constants.invoiceInfo]));

                argsLinea.Add(payload.NumeroConsecutivo);
                if (!base64LogoImage.Contains("data:image"))
                {
                    base64LogoImage = "data:image/png;base64," + base64LogoImage;
                }
                argsLinea.Add(base64LogoImage);
                argsLinea.Add(Convert.ToDateTime(payload.FechaEmision).ToString("dd/mm/yyyy"));
                argsLinea.Add(Convert.ToDateTime(payload.FechaEmision).ToString("hh:mm:ss tt"));
                argsLinea.Add(lineasDetalle.ToString());

                argsDocument.Add(string.Format(htmlInvoice, argsLinea.ToArray()));

                #endregion

                #region Datos Receptor

                argsLinea   = new List <object>();
                htmlInvoice = File.ReadAllText(string.Format(Constants.Constants.RequestApiFormat_2, AppDomain.CurrentDomain.BaseDirectory, ConfigurationManager.AppSettings[Constants.Constants.invoiceReceptor]));

                argsLinea.Add(payload.Receptor.Nombre);
                argsLinea.Add(string.IsNullOrEmpty(payload.Receptor.Identificacion.Numero) ? string.Empty : payload.Receptor.Identificacion.Numero);
                argsLinea.Add(string.Format(Constants.Constants.RequestApiFormat_2,
                                            (string.IsNullOrEmpty(payload.Receptor.Telefono.CodigoPais) ? string.Empty : payload.Receptor.Telefono.CodigoPais),
                                            (string.IsNullOrEmpty(payload.Receptor.Telefono.NumTelefono) ? string.Empty : payload.Receptor.Telefono.NumTelefono)));

                argsLinea.Add(payload.Receptor.CorreoElectronico);
                argsLinea.Add(payload.Receptor.Ubicacion.Provincia + payload.Receptor.Ubicacion.Canton + payload.Receptor.Ubicacion.Distrito + payload.Receptor.Ubicacion.OtrasSenas);
                argsDocument.Add(string.Format(htmlInvoice, argsLinea.ToArray()));

                #endregion

                #region Lineas Detalle

                lineasDetalle = new StringBuilder();
                htmlInvoice   = File.ReadAllText(string.Format(Constants.Constants.RequestApiFormat_2, AppDomain.CurrentDomain.BaseDirectory, ConfigurationManager.AppSettings[Constants.Constants.invoiceLines]));

                foreach (var item in payload.DetalleServicio.LineaDetalle)
                {
                    argsLinea = new List <object>();
                    argsLinea.Add(item.Codigo.Count == 0 ? string.Empty : item.Codigo[0].Codigo);
                    argsLinea.Add(item.Detalle);
                    argsLinea.Add(item.PrecioUnitario);
                    argsLinea.Add(item.Cantidad);
                    argsLinea.Add(item.MontoTotal);

                    lineasDetalle.Append(string.Format(htmlInvoice, argsLinea.ToArray()));
                }
                argsDocument.Add(lineasDetalle.ToString());

                #endregion

                #region Totales

                lineasDetalle = new StringBuilder();
                htmlInvoice   = File.ReadAllText(string.Format(Constants.Constants.RequestApiFormat_2, AppDomain.CurrentDomain.BaseDirectory, ConfigurationManager.AppSettings[Constants.Constants.invoiceTotals]));

                lineasDetalle.Append(Utils.BuildInvoiceTotalLine(nameof(payload.ResumenFactura.TotalServGravados), payload.ResumenFactura.TotalServGravados, htmlInvoice));
                lineasDetalle.Append(Utils.BuildInvoiceTotalLine(nameof(payload.ResumenFactura.TotalServExentos), payload.ResumenFactura.TotalServExentos, htmlInvoice));
                lineasDetalle.Append(Utils.BuildInvoiceTotalLine(nameof(payload.ResumenFactura.TotalMercanciasGravadas), payload.ResumenFactura.TotalMercanciasGravadas, htmlInvoice));
                lineasDetalle.Append(Utils.BuildInvoiceTotalLine(nameof(payload.ResumenFactura.TotalMercanciasExentas), payload.ResumenFactura.TotalMercanciasExentas, htmlInvoice));
                lineasDetalle.Append(Utils.BuildInvoiceTotalLine(nameof(payload.ResumenFactura.TotalGravado), payload.ResumenFactura.TotalGravado, htmlInvoice));
                lineasDetalle.Append(Utils.BuildInvoiceTotalLine(nameof(payload.ResumenFactura.TotalExento), payload.ResumenFactura.TotalExento, htmlInvoice));
                lineasDetalle.Append(Utils.BuildInvoiceTotalLine(nameof(payload.ResumenFactura.TotalVenta), payload.ResumenFactura.TotalVenta, htmlInvoice));
                lineasDetalle.Append(Utils.BuildInvoiceTotalLine(nameof(payload.ResumenFactura.TotalDescuentos), payload.ResumenFactura.TotalDescuentos, htmlInvoice));
                lineasDetalle.Append(Utils.BuildInvoiceTotalLine(nameof(payload.ResumenFactura.TotalVentaNeta), payload.ResumenFactura.TotalVentaNeta, htmlInvoice));
                lineasDetalle.Append(Utils.BuildInvoiceTotalLine(nameof(payload.ResumenFactura.TotalImpuesto), payload.ResumenFactura.TotalImpuesto, htmlInvoice));
                lineasDetalle.Append(Utils.BuildInvoiceTotalLine(nameof(payload.ResumenFactura.TotalComprobante), payload.ResumenFactura.TotalComprobante, htmlInvoice));

                argsDocument.Add(lineasDetalle.ToString());
                #endregion

                #region Notas

                argsLinea   = new List <object>();
                htmlInvoice = File.ReadAllText(string.Format(Constants.Constants.RequestApiFormat_2, AppDomain.CurrentDomain.BaseDirectory, ConfigurationManager.AppSettings[Constants.Constants.invoiceNotes]));

                argsLinea.Add(string.IsNullOrEmpty(payload.Otros.OtroContenido.codigo) ? string.Empty : payload.Otros.OtroContenido.codigo);
                argsLinea.Add(string.IsNullOrEmpty(payload.Otros.OtroTexto.text) ? string.Empty : payload.Otros.OtroTexto.text);
                argsLinea.Add(base64QrImage);

                argsDocument.Add(string.Format(htmlInvoice, argsLinea.ToArray()));

                argsDocument.Add(string.Format(htmlInvoice, argsDocument.ToArray()));
                #endregion

                htmlInvoice = File.ReadAllText(string.Format(Constants.Constants.RequestApiFormat_2, AppDomain.CurrentDomain.BaseDirectory, ConfigurationManager.AppSettings[Constants.Constants.invoiceTemplate]));
                htmlInvoice = string.Format(htmlInvoice, argsDocument.ToArray());

                #endregion
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return(htmlInvoice);
        }
        private void btnEmitir_Click(object sender, EventArgs e)
        {
            FbData fb = new FbData();

            string sql   = "";
            string clase = "";

            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                if (Convert.ToBoolean(row.Cells[0].Value) == true)
                {
                    var tipo   = row.Cells[1].Value;
                    var numero = row.Cells[2].Value;


                    #region aplicaredondeoimpuesto

                    clase = Getclasefactura(tipo);

                    if (chkImpuesto.Checked)
                    {
                        sql = "update oedet set vlr_iva = (((price*qtyship)-totaldct) * porc_iva / 100) where tipo = '" + clase + "' and number = " + numero.ToString();

                        fb.ExecuteNonQuery(sql);



                        sql = "update oe set salestax = (select sum(vlr_iva) from oedet where oedet.tipo = oe.tipo and oedet.number = oe.number) " +
                              " where oe.tipo = '" + clase + "' and number = " + numero.ToString();

                        fb.ExecuteNonQuery(sql);

                        sql = "update oe set total = subtotal + salestax - coalesce(disc1,0) - coalesce(disc2,0) - coalesce(disc3,0) " +
                              " where oe.tipo = '" + clase + "' and number = " + numero.ToString();

                        fb.ExecuteNonQuery(sql);
                    }


                    #endregion

                    FacturaElectronica fe = new FacturaElectronica();


                    #region validar datos

                    var f = new FacturaEnc();

                    FbData db = new FbData();

                    var sqlciiu = "select FIRST 1 actividad_eco_enc.cod_internacional " +
                                  " from actividad_eco_enc, actividad_eco_det " +
                                  " where actividad_eco_enc.codact = actividad_eco_det.codact " +
                                  " and actividad_eco_det.principal = 'S' " +
                                  " and actividad_eco_det.id_n = OE.ID_N";


                    sql = "SELECT OE.ID_EMPRESA, " +
                          "OE.ID_SUCURSAL, TIPDOC.SIGLA AS TIPO,OE.NUMBER, OE.FECHA, OE.DUEDATE FECHAVENC, CUST.ID_N, CUST.CV,CUST.COMPANY, CUST.ADDR1 direccion,CUST.PHONE1 telefono1, " +
                          " CIUDADES.CODIGO COD_CIUDAD,SHIPTO.CITY,SHIPTO.COD_DPTO,SHIPTO.DEPARTAMENTO,SHIPTO.EMAIL,OE.OCNUMERO,OE.NROREMISION,OE.COMMENTS, " +
                          " TRIBUTARIA_TIPODOCUMENTO.TDOC CODTIPOIDENTIFICACION,TRIBUTARIA_TIPODOCUMENTO.DESCRIPCION DESCTIPOIDENTIFICACION, " +
                          " TRIBUTARIA_TIPOCONTRIBUYENTE.CODIGO CODTIPOPERSONA,TRIBUTARIA_TIPOCONTRIBUYENTE.DESCRIPCION DESCRIPCIONTIPOPERSONA, " +
                          "(OE.SUBTOTAL - OE.DESTOTAL) VLRBRUTO,OE.SUBTOTAL,OE.SALESTAX IMPUESTO,OE.TOTAL,coalesce(OE.PORCRTFTE,0) PORCRTFTE,coalesce(OE.DISC1,0) retefuente, " +
                          " coalesce(OE.DISC3,0) RETEIVA,coalesce(OE.DISC2,0) RETEICA,OE.DESTOTAL,coalesce((" + sqlciiu + "),'') CODIGOCIIU,OE.DEV_FACTURA CRUCENUMERO, OE.DEV_TIPOFAC CRUCETIPO,OE.CUFE " +
                          " FROM CUST,OE,SHIPTO,TRIBUTARIA,TRIBUTARIA_TIPOCONTRIBUYENTE,TRIBUTARIA_TIPODOCUMENTO,TIPDOC,CIUDADES " +
                          " WHERE((CUST.ID_N = OE.ID_N) " +
                          " AND(CUST.ID_N = SHIPTO.ID_N) " +
                          " AND(OE.ID_N = TRIBUTARIA.ID_N) " +
                          " AND(OE.SHIPTO = SHIPTO.SUCCLIENTE) " +
                          " AND(SHIPTO.CITY = CIUDADES.CIUDAD AND CIUDADES.ID_DEPTO = SHIPTO.COD_DPTO) " +
                          " AND (OE.TIPO = TIPDOC.CLASE) " +
                          " AND(TRIBUTARIA.TDOC = TRIBUTARIA_TIPODOCUMENTO.TDOC) " +
                          " AND(TRIBUTARIA.TIPO_CONTRIBUYENTE = TRIBUTARIA_TIPOCONTRIBUYENTE.CODIGO OR TRIBUTARIA.TIPO_CONTRIBUYENTE = 0 )) " +
                          " AND(((OE.ID_EMPRESA = 1) " +
                          " AND(TIPDOC.SIGLA = '" + tipo + "') " +
                          " AND(OE.NUMBER = " + numero + ")))";


                    var da = db.DataReader(sql);

                    DataTable dt = new DataTable();

                    da.Fill(dt);

                    try
                    {
                        var r = dt.Rows[0];

                        var correoe = r["email"].ToString().Trim();

                        if (correoe == "")
                        {
                            MessageBox.Show("Verificar correo electronico " + numero.ToString());
                            LogText(tipo.ToString(), numero.ToString(), "Verificar correo electronico ");
                        }

                        var tipodoident = r["CODTIPOIDENTIFICACION"].ToString();
                        var ciiu        = r["CODIGOCIIU"].ToString();

                        if (tipodoident == "31" && ciiu == "")
                        {
                            MessageBox.Show("Verificar codigo ciiu tercero con nit " + numero.ToString());
                            LogText(tipo.ToString(), numero.ToString(), "Verificar codigo ciiu tercero con nit ");
                        }
                    }
                    catch (Exception error)
                    {
                        MessageBox.Show("Verificar datos tributarios/direccion de envio " + numero.ToString());
                        LogText(tipo.ToString(), numero.ToString(), "Verificar datos tributarios/direccion de envio ");
                    }

                    #endregion



                    var data = fe.EnviarFactura(tipo.ToString().Trim(), Convert.ToInt32(numero));

                    //MessageBox.Show(tipo + "-" + numero.ToString() + data.mensaje);

                    if (data.codigo == 200 || data.codigo == 201)
                    {
                        //string clase =   Getclasefactura(tipo);

                        sql = "update oe set cufe = '" + data.cufe + "', procesadoDian ='S' where tipo='" + clase + "' and number=" + numero.ToString();

                        fb.ExecuteNonQuery(sql);
                    }

                    LogResult(tipo.ToString(), numero.ToString(), data);
                }
            }



            GetFacturas();
        }
        public FacturaElectronica CrearEstructuraFactura(ComprobanteElectronicoCRI value)
        {
            FacturaElectronica FacturaElectronica = new FacturaElectronica()
            {
                Clave             = value.Clave,
                NumeroConsecutivo = value.NumeroConsecutivo,
                FechaEmision      = value.FechaEmision,

                Emisor = new EmisorType
                {
                    Nombre         = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.Nombre,
                    Identificacion = new IdentificacionType
                    {
                        Numero = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.Identificacion,
                        Tipo   = (IdentificacionTypeTipo)Enum.Parse(typeof(IdentificacionTypeTipo), value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.TipoIdentificacion)
                    },
                    NombreComercial = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.NombreComercial,
                    Ubicacion       = new UbicacionType
                    {
                        Provincia  = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.CodigoProvincia,
                        Canton     = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.CodigoCanton,
                        Distrito   = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.CodigoDistrito,
                        Barrio     = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.CodigoBarrio,
                        OtrasSenas = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.OtrasSennas
                    },
                    Telefono = new TelefonoType
                    {
                        CodigoPais  = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.CodigoPaisTelefono,
                        NumTelefono = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.NumeroTelefono
                    },
                    Fax = new TelefonoType
                    {
                        CodigoPais  = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.CodigoPaisFax,
                        NumTelefono = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.NumeroFax
                    },
                    CorreoElectronico = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.CorreoElectronico
                },
                // FIN EMISOR

                Receptor = new ReceptorType
                {
                    Nombre         = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.Nombre,
                    Identificacion = new IdentificacionType
                    {
                        Numero = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.Identificacion,
                        Tipo   = (IdentificacionTypeTipo)Enum.Parse(typeof(IdentificacionTypeTipo), value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.TipoIdentificacion)
                    },
                    IdentificacionExtranjero = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.IdentificacionExtranjero,
                    NombreComercial          = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.NombreComercial,
                    Ubicacion = new UbicacionType
                    {
                        Provincia  = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.CodigoProvincia,
                        Canton     = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.CodigoCanton,
                        Distrito   = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.CodigoDistrito,
                        Barrio     = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.CodigoBarrio,
                        OtrasSenas = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.OtrasSennas
                    },
                    Telefono = new TelefonoType
                    {
                        CodigoPais  = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.CodigoPaisTelefono,
                        NumTelefono = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.NumeroTelefono
                    },
                    Fax = new TelefonoType
                    {
                        CodigoPais  = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.CodigoPaisFax,
                        NumTelefono = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.NumeroFax
                    },
                    CorreoElectronico = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.CorreoElectronico
                },
                // FIN RECEPTOR

                CondicionVenta = (FacturaElectronicaCondicionVenta)Enum.Parse(typeof(FacturaElectronicaCondicionVenta), value.CondicionVenta),
                PlazoCredito   = value.PlazoCredito,
                MedioPago      = new FacturaElectronicaMedioPago[] { (FacturaElectronicaMedioPago)Enum.Parse(typeof(FacturaElectronicaMedioPago), value.MedioPago) },
                // FIN INFORMACON DE LA VENTA

                DetalleServicio = DetalleFactura(value).ToArray(), //DETALLE DE LA FACTURA

                ResumenFactura = new FacturaElectronicaResumenFactura()
                {
                    CodigoMoneda                     = (FacturaElectronicaResumenFacturaCodigoMoneda)Enum.Parse(typeof(FacturaElectronicaResumenFacturaCodigoMoneda), value.CodigoMoneda),
                    CodigoMonedaSpecified            = EngineDocumento.InsertFieldBoolCadena(value.CodigoMoneda),
                    TipoCambio                       = value.TipoCambio.ToString(EngineData.decimalFormat5, CultureInfo.InvariantCulture),
                    TipoCambioSpecified              = EngineDocumento.InsertFieldBoolCantidad(value.TipoCambio),
                    TotalServGravados                = value.TotalServGravados.ToString(EngineData.decimalFormat5, CultureInfo.InvariantCulture),
                    TotalServGravadosSpecified       = EngineDocumento.InsertFieldBoolCantidad(value.TotalServGravados),
                    TotalServExentos                 = value.TotalServExentos.ToString(EngineData.decimalFormat5, CultureInfo.InvariantCulture),
                    TotalServExentosSpecified        = EngineDocumento.InsertFieldBoolCantidad(value.TotalServExentos),
                    TotalMercanciasGravadas          = value.TotalMercanciasGravadas.ToString(EngineData.decimalFormat5, CultureInfo.InvariantCulture),
                    TotalMercanciasGravadasSpecified = EngineDocumento.InsertFieldBoolCantidad(value.TotalMercanciasGravadas),
                    TotalMercanciasExentas           = value.TotalMercanciasExentas.ToString(EngineData.decimalFormat5, CultureInfo.InvariantCulture),
                    TotalMercanciasExentasSpecified  = EngineDocumento.InsertFieldBoolCantidad(value.TotalMercanciasExentas),
                    TotalGravado                     = value.TotalGravado.ToString(EngineData.decimalFormat5, CultureInfo.InvariantCulture),     //TotalServGravados + TotalMercanciasgravadas
                    TotalGravadoSpecified            = EngineDocumento.InsertFieldBoolCantidad(value.TotalGravado),
                    TotalExento                      = value.TotalExento.ToString(EngineData.decimalFormat5, CultureInfo.InvariantCulture),      //totalServExcento + totalMercanciasexentas
                    TotalExentoSpecified             = EngineDocumento.InsertFieldBoolCantidad(value.TotalExento),
                    TotalVenta                       = value.TotalVenta.ToString(EngineData.decimalFormat5, CultureInfo.InvariantCulture),       //totalGravado + totalExento
                    TotalDescuentos                  = value.TotalDescuentos.ToString(EngineData.decimalFormat5, CultureInfo.InvariantCulture),  // suma de todos los campos de “monto dedescuentos concedidos
                    TotalDescuentosSpecified         = EngineDocumento.InsertFieldBoolCantidad(value.TotalDescuentos),
                    TotalVentaNeta                   = value.TotalVentaNeta.ToString(EngineData.decimalFormat5, CultureInfo.InvariantCulture),   //totalVenta - totaDescuentos
                    TotalImpuesto                    = value.TotalImpuesto.ToString(EngineData.decimalFormat5, CultureInfo.InvariantCulture),    //suma  de  todos los campos denominados Monto del impuesto.
                    TotalImpuestoSpecified           = EngineDocumento.InsertFieldBoolCantidad(value.TotalImpuesto),
                    TotalComprobante                 = value.TotalComprobante.ToString(EngineData.decimalFormat5, CultureInfo.InvariantCulture), //totalVentaNeta + totalImpuesto
                },                                                                                                                               //FIN RESUMEN DE LA FACTURA

                /* InformacionReferencia = new FacturaElectronicaInformacionReferencia[]
                 * {
                 *  new FacturaElectronicaInformacionReferencia
                 *  {
                 *    TipoDoc = (FacturaElectronicaInformacionReferenciaTipoDoc)Enum.Parse(typeof(FacturaElectronicaInformacionReferenciaTipoDoc), value.InformacionReferenciaTipoDocumento),
                 *    Numero = value.InformacionReferenciaNumero,
                 *    FechaEmision = value.InformacionReferenciaFechaEmision,
                 *    Codigo = (FacturaElectronicaInformacionReferenciaCodigo)Enum.Parse(typeof(FacturaElectronicaInformacionReferenciaCodigo), value.InformacionReferenciaCodigo),
                 *    Razon = value.InformacionReferenciaRazon
                 *  }
                 * },*/
                //FIN REFERENCIA DE LA FACTURA

                Normativa = new FacturaElectronicaNormativa
                {
                    NumeroResolucion = value.NumeroResolucion,
                    FechaResolucion  = value.FechaResolucion
                },
                //FIN NORMATIVA DE LA FACTURA

                Otros = new FacturaElectronicaOtros
                {
                    OtroTexto = new FacturaElectronicaOtrosOtroTexto[]
                    {
                        new FacturaElectronicaOtrosOtroTexto
                        {
                            codigo = value.OtrosCodigo,
                            Value  = value.OtrosOtroTexto
                        }
                    },

                    /*OtroContenido = new FacturaElectronicaOtrosOtroContenido[]
                     * {
                     *    new FacturaElectronicaOtrosOtroContenido
                     *    {
                     *      codigo ="obs",
                     *    }
                     * }*/
                } // FIN OTROS CONTENIDOS
            };// FIN DE LA FACTURA

            return(FacturaElectronica);
        }
示例#21
0
        public async Task <ReceivedDigitalDocument> SendElectronicInvoiceToMH(FacturaElectronica payload, string accountId)
        {
            ReceivedDigitalDocument InvoiceResponse = new ReceivedDigitalDocument();
            IRequestRecordLog       requestRecordLog;
            BuildFiles          buildFiles;
            HttpResponseMessage responseMessage;
            XmlDocument         xmlDocInvoice;
            string pdfInvoice;
            object newRequest = null;

            try
            {
                buildFiles       = new BuildFiles();
                xmlDocInvoice    = new XmlDocument();
                requestRecordLog = new RequestRecordLog();

                xmlDocInvoice = Utils.GetXmlFromObject(payload);

                #region Sign XML and Validate against XSD

                CustomSignature.SignXML(payload.FechaEmision, ref xmlDocInvoice, accountId);

                //IList<IError> listErros = DataValidator.Instance().ValidateXML(xmlDocInvoice.OuterXml, xsdDocument.FacturaElectronica);
                //if(listErros.Count > 0)
                //{
                //    throw new Exception(string.Format(Constants.Constants.RequestApiFormat_2, Constants.Constants.xml_has_errors, Utils.ConcatElements(listErros)) );
                //}

                #endregion

                #region Crear PDF
                pdfInvoice = buildFiles.GetPDFInvoice(payload, accountId);
                #endregion

                #region Crea el request de Factura Digital para Hacienda

                if (payload.Receptor != null)
                {
                    newRequest = new
                    {
                        clave  = payload.Clave,
                        fecha  = payload.FechaEmision,
                        emisor = new
                        {
                            tipoIdentificacion   = payload.Emisor.Identificacion.Tipo,
                            numeroIdentificacion = payload.Emisor.Identificacion.Numero
                        },
                        comprobanteXml = Convert.ToBase64String(Encoding.UTF8.GetBytes(xmlDocInvoice.OuterXml)),
                        callbackUrl    = string.Format(Constants.Constants.RequestApiFormat_2,
                                                       ConfigurationManager.AppSettings[Constants.Constants.serverDomain],
                                                       ConfigurationManager.AppSettings[Constants.Constants.CallBackUrl])
                    };
                }
                else
                {
                    newRequest = new
                    {
                        clave  = payload.Clave,
                        fecha  = payload.FechaEmision,
                        emisor = new
                        {
                            tipoIdentificacion   = payload.Emisor.Identificacion.Tipo,
                            numeroIdentificacion = payload.Emisor.Identificacion.Numero
                        },
                        receptor = new
                        {
                            tipoIdentificacion   = payload.Receptor.Identificacion.Tipo,
                            numeroIdentificacion = payload.Receptor.Identificacion.Tipo
                        },
                        comprobanteXml = Convert.ToBase64String(Encoding.UTF8.GetBytes(xmlDocInvoice.OuterXml)),
                        callbackUrl    = string.Format(Constants.Constants.RequestApiFormat_2,
                                                       ConfigurationManager.AppSettings[Constants.Constants.serverDomain],
                                                       ConfigurationManager.AppSettings[Constants.Constants.CallBackUrl])
                    };
                }

                #endregion

                try
                {
                    HttpCustomClient client = new HttpCustomClient();
                    InvoiceResponse = await client.Post(newRequest, Constants.Constants.mhActionRecepcion, Constants.Constants.mhEndpoint, accountId);

                    InvoiceResponse.xmlInvoice = Convert.ToBase64String(Encoding.UTF8.GetBytes(xmlDocInvoice.OuterXml));
                    InvoiceResponse.pdfInvoice = pdfInvoice;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
            catch (CryptographicException e)
            {
                throw e;
            }

            return(InvoiceResponse);
        }
        public XmlDocument  CrearDocumentoXml(ComprobanteElectronicoCRI objComprobanteElectronicoCRI, string tipoDocumento)
        {
            XmlDocument    documentoXml   = new XmlDocument();
            XmlDeclaration xmlDeclaracion = documentoXml.CreateXmlDeclaration("1.0", "UTF-8", null);
            XmlElement     root           = documentoXml.DocumentElement;

            documentoXml.InsertBefore(xmlDeclaracion, root);

            switch (tipoDocumento)
            {
            case EngineData.facturaElectronica:
                CreadorFactura     XmlFactura = new CreadorFactura();
                FacturaElectronica Factura    = new FacturaElectronica();
                Factura = XmlFactura.CrearEstructuraFactura(objComprobanteElectronicoCRI);
                var navFactura = documentoXml.CreateNavigator();
                using (writer = navFactura.AppendChild())
                {
                    var serializer = new XmlSerializer(typeof(FacturaElectronica));
                    serializer.Serialize(writer, Factura);
                }
                break;

            case EngineData.notaCreditoElectronica:
                CreadorNotaCredito     XmlNotaCredito = new CreadorNotaCredito();
                NotaCreditoElectronica NotaCredito    = new NotaCreditoElectronica();
                NotaCredito = XmlNotaCredito.CrearEstructuraNotaCredito(objComprobanteElectronicoCRI);
                var navNotaCredito = documentoXml.CreateNavigator();
                using (writer = navNotaCredito.AppendChild())
                {
                    var serializer = new XmlSerializer(typeof(NotaCreditoElectronica));
                    serializer.Serialize(writer, NotaCredito);
                }
                break;

            case EngineData.notaDebitoElectronica:
                CreadorNotaDebito     XmlNotaDebito = new CreadorNotaDebito();
                NotaDebitoElectronica NotaDebito    = new NotaDebitoElectronica();
                NotaDebito = XmlNotaDebito.CrearEstructuraNotaDebito(objComprobanteElectronicoCRI);
                var navNotaDebito = documentoXml.CreateNavigator();
                using (writer = navNotaDebito.AppendChild())
                {
                    var serializer = new XmlSerializer(typeof(NotaDebitoElectronica));
                    serializer.Serialize(writer, NotaDebito);
                }
                break;

            case EngineData.tiqueteElectronico:
                CreadorTiquete     XmlTiquete         = new CreadorTiquete();
                TiqueteElectronico TiqueteElectronico = new TiqueteElectronico();
                TiqueteElectronico = XmlTiquete.CrearEstructuraTiquete(objComprobanteElectronicoCRI);
                var navTiquete = documentoXml.CreateNavigator();
                using (writer = navTiquete.AppendChild())
                {
                    var serializer = new XmlSerializer(typeof(TiqueteElectronico));
                    serializer.Serialize(writer, TiqueteElectronico);
                }
                break;
            }

            return(documentoXml);
        }
示例#23
0
        public static int UpdateComprobanteAfip(Factura factura)
        {
            string CAE = string.Empty;
            string FchVencimiento = string.Empty;
            DateTime fechavencimientocae = factura.fecha;
            long numero_comp = 0;
            int ptovta = 0;

            try
            {

                factura.tipocomprobante = TiposComprobante.FindById(factura.tipocomprobante_id);
                FacturaElectronica Fe = new FacturaElectronica("C:\\Certificados\\bonechi\\Desarrollo.p12", 20107618725, "H**O");

                var respuesta = Fe.FECompUltimoAutorizado(3, factura.tipocomprobante.codigo_afip);
                int proximocomprobante = respuesta.CbteNro + 1;

                factura.alicuotas = FacturasAlicuotas.FindAllByIdFactura(factura.id).ToList();

                var query = factura.alicuotas.GroupBy(x => x.alicuota_id)
                    .Select(item => new FacturaAlicuota
                    {
                        alicuota_id = item.First().alicuota_id,
                        base_imponible = item.Sum(x => x.base_imponible),
                        importe = item.Sum(x => x.importe)

                    }).ToList();

                int i = 0;
                AlicIva[] ivas = new AlicIva[query.ToList().Count];
                foreach (var row in query)
                {

                    Alicuota alicuota = Alicuotas.FindById(row.alicuota_id);

                    Afip.FE.Wsfe.AlicIva alic = new Afip.FE.Wsfe.AlicIva();
                    alic.Id = alicuota.codigo_afip;
                    alic.BaseImp = row.base_imponible;
                    alic.Importe = row.importe;
                    ivas[i] = alic;

                    i += 1;
                }

                var response = Fe.FECAESolicitar(1, 3, factura.tipocomprobante.codigo_afip,
                    factura.concepto, factura.cliente.tipodocumento.codigo_afip, factura.cliente.documento,
                    proximocomprobante, proximocomprobante, factura.fecha.ToString("yyyyMMdd"), factura.total,
                    0, factura.subtotal, 0, factura.otros_tributos, factura.iva, "", "", "", "PES", 1, null, null,
                    ivas, null);

                string resultado = response.FeCabResp.Resultado;

                if (resultado != "R")
                {
                    //Obtengo el CAE y su vencimiento
                    CAE = response.FeDetResp[0].CAE;
                    FchVencimiento = response.FeDetResp[0].CAEFchVto;
                    fechavencimientocae = DateTime.ParseExact(FchVencimiento, "yyyyMMdd", null);
                    numero_comp = response.FeDetResp[0].CbteDesde;
                    ptovta = response.FeCabResp.PtoVta;
                }

                string obsafip = string.Empty;
                //Obtengo las observaciones y las muestro en el textbox
                var observaciones = response.FeDetResp[0].Observaciones;

                if (observaciones != null)
                {
                    foreach (var Obs in observaciones)
                    {
                        obsafip += " * " + Obs.Code + " : " + Obs.Msg + Environment.NewLine;
                    }
                }

                string erroresafip = string.Empty;
                //Obtengo los errores y los muestro si los hubiese
                var Errors = response.Errors;
                if (Errors != null)
                {
                    foreach (var Error in Errors)
                    {
                        erroresafip += " * " + Error.Code + " : " + Error.Msg + Environment.NewLine;
                    }
                }

                string CB = "20107618725" + String.Format("{0:00}", factura.tipocomprobante.codigo_afip) +
                    String.Format("{0:0000}", 3) + CAE + FchVencimiento;

                factura.cae = CAE;
                factura.fecha_vencimiento_cae = fechavencimientocae;
                factura.codigo_barras = CB;
                factura.estado_afip = resultado;
                factura.numero = String.Format("{0:00000000}", numero_comp);
                factura.estado = "A";
                factura.observacionesafip = obsafip;
                factura.erroresafip = erroresafip;

                IFacturaRepository _repository = new FacturaRepository();
                return _repository.UpdateComprobanteAfip(factura);

            }
            catch (Exception e)
            {
                throw e;
            }
        }
示例#24
0
        protected async void btnCrearNota_Click(object sender, EventArgs e)
        {
            try
            {
                Thread.CurrentThread.CurrentCulture = Utilidades.getCulture();


                List <string> cc        = new List <string>();
                Regex         validator = new Regex(@"\s*\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*\s*");

                foreach (var correo in this.txtCorreoReceptor.Tokens)
                {
                    if (validator.IsMatch(correo))
                    {
                        cc.Add(correo);
                    }
                    else
                    {
                        this.alertMessages.Attributes["class"] = "alert alert-danger";
                        this.alertMessages.InnerText           = String.Format("Favor verifique el formato de la dirección {0}", correo);
                        return;
                    }
                }
                cc.RemoveAt(0);


                DetalleServicio detalle = (DetalleServicio)Session["detalleServicio"];
                if (detalle.lineaDetalle.Count == 0)
                {
                    this.alertMessages.Attributes["class"] = "alert alert-danger";
                    this.alertMessages.InnerText           = "Debe agregar almenos una linea de detalle a la factura";
                    return;
                }

                // datos de la factura original
                FacturaElectronica factura = new FacturaElectronica();
                string             clave   = Session["clave"].ToString();
                using (var conexion = new DataModelFE())
                {
                    WSRecepcionPOST datoPost   = conexion.WSRecepcionPOST.Find(clave);
                    string          xmlFactura = datoPost.comprobanteXml;
                    factura = (FacturaElectronica)EncodeXML.XMLUtils.getObjetcFromXML(xmlFactura, typeof(FacturaElectronica));

                    DocumentoElectronico dato = null;
                    if (TipoDocumento.NOTA_CREDITO.Equals(Session["tipoNota"].ToString()))
                    {
                        dato = new NotaCreditoElectronica();
                    }
                    else
                    {
                        dato = new NotaDebitoElectronica();
                    }


                    /* ENCABEZADO */
                    dato.medioPago      = factura.medioPago;
                    dato.plazoCredito   = factura.plazoCredito;
                    dato.condicionVenta = factura.condicionVenta;
                    dato.fechaEmision   = Date.DateTimeNow().ToString("yyyy-MM-ddTHH:mm:ss") + "-06:00";
                    /* DETALLE */
                    dato.detalleServicio = detalle;

                    /* EMISOR */
                    dato.emisor = factura.emisor;


                    /* RECEPTOR */
                    dato.receptor = factura.receptor;


                    /* INFORMACION DE REFERENCIA */
                    InformacionReferencia informacionReferencia = new InformacionReferencia();
                    informacionReferencia.numero        = factura.clave;
                    informacionReferencia.fechaEmision  = factura.fechaEmision;
                    informacionReferencia.codigo        = this.cmbCodigoReferencia.Value.ToString();
                    informacionReferencia.razon         = this.txtRazón.Text;
                    informacionReferencia.tipoDocumento = TipoDocumento.FACTURA_ELECTRONICA;
                    dato.informacionReferencia.Add(informacionReferencia);

                    /* RESUMEN */
                    dato.resumenFactura.tipoCambio   = factura.resumenFactura.tipoCambio;
                    dato.resumenFactura.codigoMoneda = factura.resumenFactura.codigoMoneda;
                    foreach (var item in dato.detalleServicio.lineaDetalle)
                    {
                        if (item.tipoServMerc == null)
                        {
                            Producto producto = conexion.Producto.Where(x => x.codigo == item.codigo.codigo && x.emisor == dato.emisor.identificacion.numero).FirstOrDefault();
                            item.tipoServMerc = producto.tipoServMerc;
                            item.producto     = producto.codigo;
                        }
                    }
                    dato.resumenFactura.calcularResumenFactura(dato.detalleServicio.lineaDetalle);

                    /* VERIFICA VACIOS PARA XML */
                    dato.verificaDatosParaXML();

                    //genera el consecutivo del documento
                    string   sucursal = this.cmbSucursalCaja.Value.ToString().Substring(0, 3);
                    string   caja     = this.cmbSucursalCaja.Value.ToString().Substring(3, 5);
                    object[] key      = new object[] { dato.emisor.identificacion.numero, sucursal, caja, this.cmbTipoDocumento.Value.ToString() };
                    ConsecutivoDocElectronico consecutivo = conexion.ConsecutivoDocElectronico.Find(key);
                    if (consecutivo != null)
                    {
                        dato.clave             = consecutivo.getClave(Date.DateTimeNow().ToString("yyyyMMdd"));
                        dato.numeroConsecutivo = consecutivo.getConsecutivo();

                        consecutivo.consecutivo          += 1;
                        conexion.Entry(consecutivo).State = EntityState.Modified;
                    }
                    else
                    {
                        consecutivo                   = new ConsecutivoDocElectronico();
                        consecutivo.sucursal          = ConsecutivoDocElectronico.DEFAULT_SUCURSAL;
                        consecutivo.caja              = ConsecutivoDocElectronico.DEFAULT_CAJA;
                        consecutivo.digitoVerificador = ConsecutivoDocElectronico.DEFAULT_DIGITO_VERIFICADOR;
                        consecutivo.emisor            = dato.emisor.identificacion.numero;
                        consecutivo.tipoDocumento     = this.cmbTipoDocumento.Value.ToString();
                        consecutivo.consecutivo       = 1;
                        consecutivo.estado            = Estado.ACTIVO.ToString();
                        consecutivo.fechaCreacion     = Date.DateTimeNow();

                        dato.clave             = consecutivo.getClave(Date.DateTimeNow().ToString("yyyyMMdd"));
                        dato.numeroConsecutivo = consecutivo.getConsecutivo();

                        consecutivo.consecutivo += 1;
                        conexion.ConsecutivoDocElectronico.Add(consecutivo);
                    }

                    EmisorReceptorIMEC elEmisor     = (EmisorReceptorIMEC)Session["elEmisor"];
                    string             responsePost = await Services.enviarDocumentoElectronico(false, dato, elEmisor, this.cmbTipoDocumento.Value.ToString(), Session["usuario"].ToString());

                    if (responsePost.Equals("Success"))
                    {
                        this.alertMessages.Attributes["class"] = "alert alert-info";
                        this.alertMessages.InnerText           = String.Format("Documento #{0} enviada.", dato.numeroConsecutivo);

                        if (!string.IsNullOrWhiteSpace(dato.receptor.correoElectronico) || this.txtCorreoReceptor.Tokens.Count > 0)
                        {
                            string xml = EncodeXML.XMLUtils.getXMLFromObject(dato);

                            Utilidades.sendMail(Session["emisor"].ToString(), dato.receptor.correoElectronico,
                                                string.Format("{0} - {1}", dato.numeroConsecutivo, elEmisor.nombre),
                                                Utilidades.mensageGenerico(), "Documento Electrónico", xml, dato.numeroConsecutivo, dato.clave, cc);
                        }
                    }
                    else if (responsePost.Equals("Error"))
                    {
                        this.alertMessages.Attributes["class"] = "alert alert-danger";
                        this.alertMessages.InnerText           = String.Format("Documento #{0} con errores.", dato.numeroConsecutivo);
                        return;
                    }
                    else
                    {
                        this.alertMessages.Attributes["class"] = "alert alert-warning";
                        this.alertMessages.InnerText           = String.Format("Documento #{0} pendiente de envío", dato.numeroConsecutivo);
                    }

                    conexion.SaveChanges();


                    Response.Redirect("~/Pages/Consulta/" + dato.clave);
                }
            }
            catch (Exception ex)
            {
                this.alertMessages.Attributes["class"] = "alert alert-danger";
                this.alertMessages.InnerText           = Utilidades.validarExepcionSQL(ex);
            }
            finally
            {
                //refescar los datos
                this.refreshData();
            }
        }
示例#25
0
        private void cargarDatosDocumento()
        {
            if (Session["clave"] != null)
            {
                string clave = Session["clave"].ToString();
                using (var conexion = new DataModelFE())
                {
                    WSRecepcionPOST dato = conexion.WSRecepcionPOST.Find(clave);
                    this.txtClave.Text          = dato.clave;
                    this.txtConsecutivo.Text    = dato.numeroConsecutivo;
                    this.txtFechaEmisor.Text    = dato.fecha.ToString();
                    this.cmbTipoDocumento.Value = Session["tipoNota"].ToString();

                    /* SUCURSAL CAJA */
                    string emisor = Session["emisor"].ToString();
                    List <ConsecutivoDocElectronico> lista = conexion.ConsecutivoDocElectronico.Where(x => x.emisor == emisor &&
                                                                                                      x.tipoDocumento == this.cmbTipoDocumento.Value.ToString() && x.estado == Estado.ACTIVO.ToString()).ToList();
                    if (lista.Count == 0)
                    {
                        ConsecutivoDocElectronico consecutivo = new ConsecutivoDocElectronico();
                        consecutivo.sucursal          = ConsecutivoDocElectronico.DEFAULT_SUCURSAL;
                        consecutivo.caja              = ConsecutivoDocElectronico.DEFAULT_CAJA;
                        consecutivo.digitoVerificador = ConsecutivoDocElectronico.DEFAULT_DIGITO_VERIFICADOR;
                        consecutivo.emisor            = emisor;
                        consecutivo.tipoDocumento     = this.cmbTipoDocumento.Value.ToString();
                        consecutivo.consecutivo       = 1;
                        consecutivo.estado            = Estado.ACTIVO.ToString();
                        consecutivo.fechaCreacion     = Date.DateTimeNow();
                        conexion.ConsecutivoDocElectronico.Add(consecutivo);
                        conexion.SaveChanges();

                        lista = conexion.ConsecutivoDocElectronico.Where(x => x.emisor == emisor &&
                                                                         x.tipoDocumento == this.cmbTipoDocumento.Value.ToString() && x.estado == Estado.ACTIVO.ToString()).ToList();
                    }

                    this.cmbSucursalCaja.Items.Clear();
                    foreach (var item in lista)
                    {
                        this.cmbSucursalCaja.Items.Add(item.ToString(), string.Format("{0}{1}", item.sucursal, item.caja));
                    }
                    this.cmbSucursalCaja.IncrementalFilteringMode = IncrementalFilteringMode.Contains;


                    string xml = dato.comprobanteXml;

                    FacturaElectronica factura = (FacturaElectronica)EncodeXML.XMLUtils.getObjetcFromXML(xml, typeof(FacturaElectronica));

                    txtNombreEmisor.Text   = string.Format("{0} - {1}", factura.emisor.identificacion.numero, factura.emisor.nombre);
                    txtNombreReceptor.Text = string.Format("{0} - {1}", factura.receptor.identificacion.numero, factura.receptor.nombre);

                    txtCorreoReceptor.Text = factura.receptor.correoElectronico;

                    // deja el monto neto facturado
                    foreach (var item in factura.detalleServicio.lineaDetalle)
                    {
                        item.precioUnitario = item.precioUnitario - item.montoDescuento;
                        item.montoDescuento = 0;
                        item.calcularMontos();
                    }

                    Session["detalleServicio"] = factura.detalleServicio;

                    this.refreshData();
                }
            }
        }