Example #1
0
        public void GenerateDetails(ChileSystems.DTE.Engine.Documento.DTE dte)
        {
            //DOCUMENTO - DETALLES
            dte.Documento.Detalles = new List <ChileSystems.DTE.Engine.Documento.Detalle>();
            var detalle = new ChileSystems.DTE.Engine.Documento.Detalle();

            detalle.NumeroLinea = 1;
            /*IndicadorExento = Sólo aplica si el producto es exento de IVA*/
            //detalle.IndicadorExento = ChileSystems.DTE.Engine.Enum.IndicadorFacturacionExencion.IndicadorFacturacionExencionEnum.NoAfectoOExento;

            detalle.Nombre   = "SERVICIO DE FACTURACION ELECT";
            detalle.Cantidad = 12;
            detalle.Precio   = 170;
            /*Monto del item*/
            /*Recordar que debe restarse el descuento del detalle y sumarse el recargo*/
            detalle.MontoItem = 2040;
            dte.Documento.Detalles.Add(detalle);

            detalle             = new ChileSystems.DTE.Engine.Documento.Detalle();
            detalle.NumeroLinea = 2;
            //detalle.IndicadorExento = ChileSystems.DTE.Engine.Enum.IndicadorFacturacionExencion.IndicadorFacturacionExencionEnum.NoAfectoOExento;
            detalle.Nombre    = "DESARROLLO DE ETL";
            detalle.Cantidad  = 20;
            detalle.Precio    = 1050;
            detalle.MontoItem = 21000;
            dte.Documento.Detalles.Add(detalle);

            //DOCUMENTO - ENCABEZADO - TOTALES - CAMPOS OBLIGATORIOS

            GenerateTotals(dte);
        }
Example #2
0
        public void GenerateDetails(ChileSystems.DTE.Engine.Documento.DTE dte, List <ItemBoleta> detalles)
        {
            //DOCUMENTO - DETALLES
            dte.Documento.Detalles = new List <ChileSystems.DTE.Engine.Documento.Detalle>();

            int contador = 1;

            foreach (var det in detalles)
            {
                var detalle = new ChileSystems.DTE.Engine.Documento.Detalle();
                detalle.NumeroLinea = contador;
                /*IndicadorExento = Sólo aplica si el producto es exento de IVA*/
                detalle.IndicadorExento = det.Afecto ? ChileSystems.DTE.Engine.Enum.IndicadorFacturacionExencion.IndicadorFacturacionExencionEnum.NotSet : ChileSystems.DTE.Engine.Enum.IndicadorFacturacionExencion.IndicadorFacturacionExencionEnum.NoAfectoOExento;

                detalle.Nombre   = det.Nombre;
                detalle.Cantidad = (double)det.Cantidad;
                detalle.Precio   = det.Precio;
                if (!string.IsNullOrEmpty(det.UnidadMedida))
                {
                    detalle.UnidadMedida = det.UnidadMedida;
                }
                /*Monto del item*/
                /*Recordar que debe restarse el descuento del detalle y sumarse el recargo*/
                detalle.MontoItem = det.Total;
                dte.Documento.Detalles.Add(detalle);
                contador++;
            }
            GenerateTotals(dte);
        }
Example #3
0
        public ChileSystems.DTE.Engine.Envio.EnvioDTE GenerarEnvioCliente(ChileSystems.DTE.Engine.Documento.DTE dte, string dteXML)
        {
            var EnvioCustomer = new ChileSystems.DTE.Engine.Envio.EnvioDTE();

            EnvioCustomer.SetDTE = new ChileSystems.DTE.Engine.Envio.SetDTE();
            EnvioCustomer.SetDTE.DTEs.Add(dte);
            EnvioCustomer.SetDTE.dteXmls.Add(dteXML);
            EnvioCustomer.SetDTE.Caratula            = new ChileSystems.DTE.Engine.Envio.Caratula();
            EnvioCustomer.SetDTE.Caratula.FechaEnvio = DateTime.Now;
            /*Fecha de Resolución y Número de Resolución se averiguan en el sitio del SII según ambiente de producción o certificación*/
            EnvioCustomer.SetDTE.Caratula.FechaResolucion  = DateTime.Now;
            EnvioCustomer.SetDTE.Caratula.NumeroResolucion = 80;

            EnvioCustomer.SetDTE.Caratula.RutEmisor   = rutEmpresa;
            EnvioCustomer.SetDTE.Caratula.RutEnvia    = rutCertificado;
            EnvioCustomer.SetDTE.Caratula.RutReceptor = dte.Documento.Encabezado.Receptor.Rut;

            /*Generalmente al cliente se le envía una sola factura, sin embargo si no es el caso,
             * se pueden agregar varias tal cual como está el método GenerarEnvioDTEToSII()*/
            EnvioCustomer.SetDTE.Caratula.SubTotalesDTE = new List <ChileSystems.DTE.Engine.Envio.SubTotalesDTE>()
            {
                new ChileSystems.DTE.Engine.Envio.SubTotalesDTE()
                {
                    Cantidad = 1,
                    TipoDTE  = dte.Documento.Encabezado.IdentificacionDTE.TipoDTE
                }
            };

            return(EnvioCustomer);
        }
Example #4
0
        public ChileSystems.DTE.Engine.Documento.DTE GenerateDTE()
        {
            // DOCUMENTO
            var dte = new ChileSystems.DTE.Engine.Documento.DTE();

            //
            // DOCUMENTO - ENCABEZADO - CAMPO OBLIGATORIO
            //Id = puede ser compuesto según tus propios requerimientos pero debe ser único
            dte.Documento.Id = idDte;

            // DOCUMENTO - ENCABEZADO - IDENTIFICADOR DEL DOCUMENTO - CAMPOS OBLIGATORIOS
            //TipoDTE = Se indica el tipo de documento. Este SDK soporta:
            dte.Documento.Encabezado.IdentificacionDTE.TipoDTE      = tipoDTE;
            dte.Documento.Encabezado.IdentificacionDTE.FechaEmision = DateTime.Now;
            dte.Documento.Encabezado.IdentificacionDTE.Folio        = Folio;

            //DOCUMENTO - ENCABEZADO - EMISOR - CAMPOS OBLIGATORIOS
            dte.Documento.Encabezado.Emisor.Rut = rutEmpresa;
            dte.Documento.Encabezado.Emisor.RazonSocialBoleta = "TRANSPORTE DISTRIBUCION Y COMERCIALIZACION DE PRODUCTOS D&V LIMITADA";
            dte.Documento.Encabezado.Emisor.GiroBoleta        = "VENTA AL POR MAYOR DE CONFITES";

            dte.Documento.Encabezado.Emisor.ActividadEconomica.Add(512250);
            dte.Documento.Encabezado.Emisor.ActividadEconomica.Add(519000);

            //DOCUMENTO - ENCABEZADO - RECEPTOR - CAMPOS OBLIGATORIOS

            dte.Documento.Encabezado.Receptor.Rut         = "66666666-6";
            dte.Documento.Encabezado.Receptor.RazonSocial = "Razon Social de Cliente";
            dte.Documento.Encabezado.Receptor.Direccion   = "Dirección de cliente";
            dte.Documento.Encabezado.Receptor.Comuna      = "Comuna de cliente";
            dte.Documento.Encabezado.Receptor.Ciudad      = "Ciudad de cliente";

            return(dte);
        }
Example #5
0
        public void Referencias(ChileSystems.DTE.Engine.Documento.DTE dte)
        {
            dte.Documento.Referencias = new List <ChileSystems.DTE.Engine.Documento.Referencia>();
            var c = 1;

            /*Si estás en modo certificación, necesitas agregar esta referencia*/
            //REFERENCIA A SET DE PRUEBAS
            dte.Documento.Referencias.Add(new ChileSystems.DTE.Engine.Documento.Referencia()
            {
                CodigoReferencia         = ChileSystems.DTE.Engine.Enum.TipoReferencia.TipoReferenciaEnum.NotSet,
                FechaDocumentoReferencia = DateTime.Now,
                FolioReferencia          = idDte,
                IndicadorGlobal          = 0,
                Numero          = c,
                RazonReferencia = casoPruebas,
                TipoDocumento   = ChileSystems.DTE.Engine.Enum.TipoDTE.TipoReferencia.SetPruebas
            });

            /*Ejemplo de referencia a una orden de compra*/
            if (usaReferencia)
            {
                //c++;
                dte.Documento.Referencias.Add(new ChileSystems.DTE.Engine.Documento.Referencia()
                {
                    CodigoReferencia         = ChileSystems.DTE.Engine.Enum.TipoReferencia.TipoReferenciaEnum.CorrigeMontos,
                    FechaDocumentoReferencia = DateTime.Now,
                    //Folio de Referencia = Debe ir el folio de la factura o documento que estás refenciando
                    FolioReferencia = "39",
                    IndicadorGlobal = 0,
                    Numero          = c,
                    RazonReferencia = "FACTURA EXENTA ELECTRÓNICA N° 39 del " + dte.Documento.Encabezado.IdentificacionDTE.FechaEmisionString + " - CORRIGE MONTOS",
                    TipoDocumento   = ChileSystems.DTE.Engine.Enum.TipoDTE.TipoReferencia.FacturaExentaElectronica
                });
            }
        }
Example #6
0
        public void ReferenciasBoleta(ChileSystems.DTE.Engine.Documento.DTE dte)
        {
            dte.Documento.Referencias = new List <ChileSystems.DTE.Engine.Documento.Referencia>();
            var c = 1;

            /*Si estás en modo certificación, necesitas agregar esta referencia*/
            // REFERENCIA A SET DE PRUEBAS
            dte.Documento.Referencias.Add(new ChileSystems.DTE.Engine.Documento.Referencia()
            {
                CodigoReferencia = ChileSystems.DTE.Engine.Enum.TipoReferencia.TipoReferenciaEnum.NotSet,
                Numero           = c,
                RazonReferencia  = casoPruebas,
            });
        }
Example #7
0
        private void GenerateTotals(ChileSystems.DTE.Engine.Documento.DTE dte)
        {
            calculosTotales(dte);

            //DOCUMENTO - ENCABEZADO - TOTALES - CAMPOS OBLIGATORIOS
            dte.Documento.Encabezado.Totales.MontoNeto   = (int)Math.Round(neto, 0);
            dte.Documento.Encabezado.Totales.MontoExento = (int)Math.Round(netoExento, 0);
            if (neto != 0)
            {
                /*Las boletas no llevan TasaIVA*/
                //dte.Documento.Encabezado.Totales.TasaIVA = Convert.ToDouble(19);
                dte.Documento.Encabezado.Totales.IVA = (int)Math.Round(iva, 0);;
            }
            dte.Documento.Encabezado.Totales.MontoTotal = (int)Math.Round(total, 0);
        }
Example #8
0
        public string TimbrarYFirmarXMLDTE(ChileSystems.DTE.Engine.Documento.DTE dte, string pathResult, string pathCaf)
        {
            /*En primer lugar, el documento debe timbrarse con el CAF que descargas desde el SII, es simular
             * cuando antes debías ir con las facturas en papel para que te las timbraran */
            string messageOut = string.Empty;

            dte.Documento.Timbrar(
                EnsureExists
                    ((int)dte.Documento.Encabezado.IdentificacionDTE.TipoDTE,
                    dte.Documento.Encabezado.IdentificacionDTE.Folio,
                    pathCaf), pathResult, serialKEY, out messageOut);
            /*Finalmente, el documento timbrado debe firmarse con el certificado digital*/
            /*Se debe entregar en el argumento del método Firmar, el "FriendlyName" o Nombre descriptivo del certificado*/
            /*Retorna el filePath donde estará el archivo XML timbrado y firmado, listo para ser enviado al SII*/
            return(dte.Firmar(nombreCertificado, serialKEY, "out\\temp\\"));
        }
Example #9
0
        private void calculosTotales(ChileSystems.DTE.Engine.Documento.DTE dte)
        {
            try
            {
                foreach (var det in dte.Documento.Detalles)
                {
                    double div          = 1.19;
                    var    NetoUnitario = (det.Precio / div);
                    var    Neto         = (NetoUnitario * det.Cantidad);
                    double iva_aux      = Neto * 0.19;
                    var    IVA          = Convert.ToInt32(Math.Round(iva_aux, 0));
                    var    Total        = (int)Math.Round(Neto + iva_aux, 0);
                    if (Total != det.MontoItem)
                    {
                        throw new Exception("Los totales no cuadran");
                    }
                    if (!(det.IndicadorExento == ChileSystems.DTE.Engine.Enum.IndicadorFacturacionExencion.IndicadorFacturacionExencionEnum.NoAfectoOExento))
                    {
                        neto += Neto;
                    }
                    else
                    {
                        netoExento += det.Precio;
                    }
                }

                neto  = Math.Round(neto, 0);
                iva   = Math.Round(neto * 0.19, 0);
                total = netoExento + neto + iva;

                int nuevoNeto   = (int)Math.Round(neto, 0);
                int nuevoExento = (int)Math.Round(netoExento, 0);
                int nuevoIVA    = (int)Math.Round(iva, 0);
                int nuevoTotal  = (int)Math.Round(total, 0);
            }
            catch { /*MessageBox.Show("Error. Hay una línea que debe ser borrada", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);*/ }
        }
Example #10
0
        private void cargaDataSet(ChileSystems.DTE.Engine.Documento.DTE dte)
        {
            Reports.dataFacturaElectronica ds = new Reports.dataFacturaElectronica();
            Reports.dataFacturaElectronica.ENCABEZADORow encabezado = ds.ENCABEZADO.NewENCABEZADORow();
            encabezado.FECHA_EMISION = dte.Documento.Encabezado.IdentificacionDTE.FechaEmision;
            encabezado.FOLIO         = dte.Documento.Encabezado.IdentificacionDTE.Folio;
            encabezado.RUT_EMISOR    = dte.Documento.Encabezado.Emisor.Rut;
            encabezado.TIPO          = Handler.TipoDTEString(dte.Documento.Encabezado.IdentificacionDTE.TipoDTE);
            encabezado.UNIDAD_SII    = "IQUIQUE";
            encabezado.CODIGO_BARRA  = Handler.imageToByteArray(dte.Documento.TimbrePDF417(out string mensajeSalida));
            if (encabezado.CODIGO_BARRA == null)
            {
                throw new Exception("No hay timbre");
            }

            encabezado.CONDICION = "CONDICION DE PAGO";
            string refe = string.Empty;

            foreach (var referencia in dte.Documento.Referencias)
            {
                refe += referencia.RazonReferencia + "<br>";
            }
            encabezado.REFERENCIA_TEXTO = refe;

            ds.ENCABEZADO.AddENCABEZADORow(encabezado);

            Reports.dataFacturaElectronica.EMISORRow emisor = ds.EMISOR.NewEMISORRow();
            emisor.DIRECCION_MATRIZ = dte.Documento.Encabezado.Emisor.DireccionOrigen;
            emisor.GIRO             = dte.Documento.Encabezado.Emisor.Giro;
            emisor.RAZON_SOCIAL     = dte.Documento.Encabezado.Emisor.RazonSocial;
            ds.EMISOR.AddEMISORRow(emisor);

            Reports.dataFacturaElectronica.RECEPTORRow receptor = ds.RECEPTOR.NewRECEPTORRow();
            var recep = dte.Documento.Encabezado.Receptor;

            receptor.COMUNA       = recep.Comuna;
            receptor.DIRECCION    = recep.Direccion;
            receptor.GIRO         = recep.Giro;
            receptor.RAZON_SOCIAL = recep.RazonSocial;
            receptor.RUT          = recep.Rut;
            receptor.CONTACTO     = recep.Contacto;
            ds.RECEPTOR.AddRECEPTORRow(receptor);

            Reports.dataFacturaElectronica.TOTALESRow totales = ds.TOTALES.NewTOTALESRow();

            var impuestos = dte.Documento.Encabezado.Totales.ImpuestosRetenciones;

            try { totales.IABA_10 = impuestos.Where(x => x.TasaImpuesto == 10).Sum(x => x.MontoImpuesto); }
            catch { totales.IABA_10 = 0; }
            try { totales.IABA_18 = impuestos.Where(x => x.TasaImpuesto == 18).Sum(x => x.MontoImpuesto); }
            catch { totales.IABA_18 = 0; }
            try { totales._IABA_20_5 = impuestos.Where(x => x.TasaImpuesto == 20.5).Sum(x => x.MontoImpuesto); }
            catch { totales._IABA_20_5 = 0; }
            try { totales._IABA_31_5 = impuestos.Where(x => x.TasaImpuesto == 31.5).Sum(x => x.MontoImpuesto); }
            catch { totales._IABA_31_5 = 0; }
            try { totales.IABA_12 = impuestos.Where(x => x.TasaImpuesto == 12).Sum(x => x.MontoImpuesto); }
            catch { }

            totales.ILA       = dte.Documento.Encabezado.Totales.ImpuestosRetenciones.Sum(x => x.MontoImpuesto);
            totales.IVA       = dte.Documento.Encabezado.Totales.IVA;
            totales.NETO      = dte.Documento.Encabezado.Totales.MontoNeto;
            totales.TOTAL     = dte.Documento.Encabezado.Totales.MontoTotal;
            totales.DESCUENTO = dte.Documento.DescuentosRecargos.Where(x => x.TipoMovimiento == ChileSystems.DTE.Engine.Enum.TipoMovimiento.TipoMovimientoEnum.Descuento).Sum(y => y.Valor) + "%";
            totales.EXENTO    = dte.Documento.Encabezado.Totales.MontoExento;

            ds.TOTALES.AddTOTALESRow(totales);

            foreach (var a in dte.Documento.Detalles)
            {
                Reports.dataFacturaElectronica.DETALLESRow det = ds.DETALLES.NewDETALLESRow();
                det.CANTIDAD         = (decimal)a.Cantidad;
                det._DESC_           = (decimal)a.Descuento;
                det.DESCRIPCION      = a.Nombre;
                det.DESCUENTO_STRING = a.DescuentoPorcentaje.ToString() + "%";
                det.UNIDAD           = a.UnidadMedida.ToString();

                det.NETOUNITARIO = a.IndicadorExento == ChileSystems.DTE.Engine.Enum.IndicadorFacturacionExencion.IndicadorFacturacionExencionEnum.NoAfectoOExento ? 0 : (decimal)a.Precio;
                //en don omar aparecen en 0 este campo (TOTAL_NETO). con algunos clientes
                det.EXENTO = a.IndicadorExento == ChileSystems.DTE.Engine.Enum.IndicadorFacturacionExencion.IndicadorFacturacionExencionEnum.NoAfectoOExento ? (decimal)a.Precio : 0;
                det.TOTAL  = a.MontoItem;
                ds.DETALLES.Rows.Add(det);
            }

            try
            {
                if (radioCedible.Checked)
                {
                    crystalReportViewer1.ReportSource = FacturaElectronicaPlantillaCedible1;
                    FacturaElectronicaPlantillaCedible1.SetDataSource(ds);
                }
                else
                {
                    crystalReportViewer1.ReportSource = FacturaElectronicaPlantilla1;
                    FacturaElectronicaPlantilla1.SetDataSource(ds);
                }
            }
            catch (Exception ex)
            {
            }
        }
Example #11
0
        public ChileSystems.DTE.Engine.Documento.DTE GenerateRandomDTE(int folio, ChileSystems.DTE.Engine.Enum.TipoDTE.DTEType tipo)
        {
            // DOCUMENTO
            Random r   = new Random();
            var    dte = new ChileSystems.DTE.Engine.Documento.DTE();

            dte.Documento.Id = "TEST" + folio.ToString();
            dte.Documento.Encabezado.IdentificacionDTE.TipoDTE      = tipo;
            dte.Documento.Encabezado.IdentificacionDTE.FechaEmision = DateTime.Now;
            dte.Documento.Encabezado.IdentificacionDTE.Folio        = folio;
            dte.Documento.Encabezado.IdentificacionDTE.TipoDespacho = ChileSystems.DTE.Engine.Enum.TipoDespacho.TipoDespachoEnum.EmisorACliente;
            dte.Documento.Encabezado.IdentificacionDTE.TipoTraslado = ChileSystems.DTE.Engine.Enum.TipoTraslado.TipoTrasladoEnum.OperacionConstituyeVenta;

            //DOCUMENTO - ENCABEZADO - EMISOR - CAMPOS OBLIGATORIOS
            dte.Documento.Encabezado.Emisor.Rut         = handler.rutEmpresa;
            dte.Documento.Encabezado.Emisor.RazonSocial = "TRANSPORTE DISTRIBUCION Y COMERCIALIZACION DE PRODUCTOS D&V LIMITADA";
            dte.Documento.Encabezado.Emisor.Giro        = "VENTA AL POR MAYOR DE CONFITES";

            dte.Documento.Encabezado.Emisor.ActividadEconomica.Add(512250);
            dte.Documento.Encabezado.Emisor.ActividadEconomica.Add(519000);

            //DOCUMENTO - ENCABEZADO - EMISOR - SUCURSAL ORIGEN
            dte.Documento.Encabezado.Emisor.CodigoSucursal  = 0;
            dte.Documento.Encabezado.Emisor.DireccionOrigen = "TOESCA 2023";
            dte.Documento.Encabezado.Emisor.ComunaOrigen    = "SANTIAGO";
            dte.Documento.Encabezado.Emisor.CiudadOrigen    = "SANTIAGO";

            //DOCUMENTO - ENCABEZADO - RECEPTOR - CAMPOS OBLIGATORIOS

            dte.Documento.Encabezado.Receptor.Rut         = "66666666-6";
            dte.Documento.Encabezado.Receptor.RazonSocial = "Razon Social de Cliente";
            dte.Documento.Encabezado.Receptor.Giro        = "Giro de cliente";
            dte.Documento.Encabezado.Receptor.Direccion   = "Direccion de cliente";
            dte.Documento.Encabezado.Receptor.Comuna      = "Comuna de cliente";
            dte.Documento.Encabezado.Receptor.Ciudad      = "Ciudad";

            //DOCUMENTO - DETALLES
            dte.Documento.Detalles = new List <ChileSystems.DTE.Engine.Documento.Detalle>();
            int           max_detalles   = r.Next(1, 5);
            List <string> detallesRandom = new List <string>();

            detallesRandom.Add("SERVICIO DE FACTURACION ELECT");
            detallesRandom.Add("ASESORIA COMPUTACIONAL");
            detallesRandom.Add("CAPACITACION AL PERSONAL");
            detallesRandom.Add("IMPLEMENTACION DE ERP");
            detallesRandom.Add("SERVICIO DE LIMPIEZA");
            detallesRandom.Add("SERVICIO DE ASESORIA INFORMATICA");
            detallesRandom.Add("DESARROLLO DE SITIOS WEB");
            detallesRandom.Add("QA DE DESARROLLOS EXTERNOS");
            detallesRandom.Add("LIMPIEZA DE COMPUTADORES");
            detallesRandom.Add("AUTOMATIZACION DE DATOS");
            detallesRandom.Add("DESARROLLO DE ETL");

            for (int i = 1; i <= max_detalles; i++)
            {
                var detalle = new ChileSystems.DTE.Engine.Documento.Detalle();
                detalle.NumeroLinea     = i;
                detalle.IndicadorExento = ChileSystems.DTE.Engine.Enum.IndicadorFacturacionExencion.IndicadorFacturacionExencionEnum.NoAfectoOExento;
                detalle.Nombre          = detallesRandom[r.Next(0, detallesRandom.Count - 1)];
                detalle.Cantidad        = r.Next(1, 5);
                detalle.Precio          = r.Next(1, 150000);
                detalle.MontoItem       = (int)detalle.Cantidad * (int)detalle.Precio;
                dte.Documento.Detalles.Add(detalle);
            }

            //DOCUMENTO - ENCABEZADO - TOTALES - CAMPOS OBLIGATORIOS
            //dte.Documento.Encabezado.Totales.MontoNeto = 0;
            dte.Documento.Encabezado.Totales.MontoExento = dte.Documento.Detalles.Sum(x => x.MontoItem);
            //dte.Documento.Encabezado.Totales.TasaIVA = Convert.ToDouble(19);
            //dte.Documento.Encabezado.Totales.IVA = 0;
            dte.Documento.Encabezado.Totales.MontoTotal = dte.Documento.Detalles.Sum(x => x.MontoItem);

            return(dte);
        }