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); }
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); }
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); }
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); }
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 }); } }
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, }); }
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); }
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\\")); }
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);*/ } }
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) { } }
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); }