示例#1
0
        public FacturaDB_ToMensajeReceptor Convertir(Factura_Resolucion facturaResolucion)
        {
            MensajeReceptor documento = new MensajeReceptor()
            {
                DetalleMensaje            = facturaResolucion.DetalleResolucion,
                FechaEmisionDoc           = facturaResolucion.Fecha_Documento,
                Mensaje                   = EnumUtils.SetTypeString <MensajeReceptorMensaje>(facturaResolucion.Resolucion.ToString()),
                TotalFactura              = facturaResolucion.TotalComprobante,
                Clave                     = facturaResolucion.Clave,
                NumeroCedulaEmisor        = facturaResolucion.Emisor_Identificacion_Numero.PadLeft(12).Replace(" ", "0"),
                NumeroCedulaReceptor      = Contribuyente.Identificacion_Numero.PadLeft(12).Replace(" ", "0"),
                NumeroConsecutivoReceptor = facturaResolucion.NumeroConsecutivo
            };

            if (facturaResolucion.TotalImpuesto.HasValue)
            {
                documento.MontoTotalImpuestoSpecified = true;
                documento.MontoTotalImpuesto          = facturaResolucion.TotalImpuesto.Value;
            }


            requestData = new FacturaRequest()
            {
                clave  = facturaResolucion.Clave,
                emisor = new FacturaClient()
                {
                    numeroIdentificacion = Contribuyente.Identificacion_Numero,
                    tipoIdentificacion   = EnumUtils.SetTypeString <FacturaElectronica_V_4_3.IdentificacionTypeTipo>(Contribuyente.Identificacion_Tipo).ToString()
                },
                fecha = facturaResolucion.Fecha_Documento.ToString("yyyy-MM-ddTHH:mm:ss"),
            };

            DocumentoElectronico = documento;
            return(this);
        }
        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 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;
     }
 }
        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;
                }
            }
        }
        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);
        }
        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();
        }