private void Imprimir(DataRow dtr) { dtr.ClearErrors(); FiscalPrinter.DatosImpresion objDatos = new FiscalPrinter.DatosImpresion(); var lista = TablaDetalles.AsEnumerable().Where(s => Convert.ToInt32(s["invoice_id"]) == Convert.ToInt32(dtr["id"])).ToList(); string tipo = dtr["refund_type"].ToString().Trim(); objDatos.TipoDocFiscal = tipo == "credit" || dtr["type"].ToString().Contains("refund") ? FiscalPrinter.TIPO_DOC_FISCAL.NC : tipo == "debit" ? FiscalPrinter.TIPO_DOC_FISCAL.ND : FiscalPrinter.TIPO_DOC_FISCAL.Factura; objDatos.ListaDetalles = new List <FiscalPrinter.DatosImpresionDetalle>(); objDatos.RUC = dtr["ruc"].ToString(); objDatos.RazonSocial = dtr["partner_id"].ToString(); objDatos.NumeroOdoo = dtr["number"].ToString(); if (objDatos.TipoDocFiscal == FiscalPrinter.TIPO_DOC_FISCAL.NC || objDatos.TipoDocFiscal == FiscalPrinter.TIPO_DOC_FISCAL.ND) { DataRow dtrRef = TablaGrilla.AsEnumerable().Where(s => s["number"].ToString() == dtr["origin"].ToString()).FirstOrDefault(); if (dtrRef != null) { DataRow dtrNumeroRef = TablaImpresora.AsEnumerable().Where(s => !s.IsNull("account_id") && Convert.ToInt32(s["account_id"]) == Convert.ToInt32(dtrRef["id"])).OrderBy(s => Convert.ToInt32(s["id"])).ToList().FirstOrDefault(); if (dtrNumeroRef != null) { objDatos.DocReferencia = string.Format("{0}-{1}", dtrNumeroRef["serial_equipo_fiscal"], dtrNumeroRef["numero_comprobante"].ToString().PadLeft(22 - (dtrNumeroRef["serial_equipo_fiscal"].ToString().Length + 1), '0')); } } } DataRow dtrReimpresion = TablaImpresora.AsEnumerable().Where(s => !s.IsNull("account_id") && Convert.ToInt32(s["account_id"]) == Convert.ToInt32(dtr["id"])).OrderBy(s => Convert.ToInt32(s["id"])).ToList().FirstOrDefault(); ManejadorLog.Log.Info("*************************************************"); ManejadorLog.Log.InfoFormat("Se imprimiran los siguientes datos:"); ManejadorLog.Log.InfoFormat("RUC: {0}", objDatos.RUC); ManejadorLog.Log.InfoFormat("RazonSocial: {0}", objDatos.RazonSocial); ManejadorLog.Log.InfoFormat("TipoDocFiscal: {0}", objDatos.TipoDocFiscal); if (dtrReimpresion != null) { objDatos.Reimpresion = true; objDatos.Numero = dtrReimpresion["numero_comprobante"].ToString(); } else { foreach (DataRow item in lista) { FiscalPrinter.DatosImpresionDetalle det = new FiscalPrinter.DatosImpresionDetalle(); det.Cantidad = Convert.ToDecimal(item["quantity"]); det.Precio = Convert.ToDecimal(item["price_unit"]); det.Descripcion = item["name"].ToString(); if (item.IsNull("invoice_line_tax_ids")) { det.TipoImpuesto = FiscalPrinter.DatosImpresionDetalle.IMPUESTO.Exento; } else { DataRow dtrImp = TablaImpuestos.AsEnumerable().Where(s => Convert.ToInt32(s["id"]) == Convert.ToInt32(item["invoice_line_tax_ids"])).SingleOrDefault(); if (dtrImp == null) { det.TipoImpuesto = FiscalPrinter.DatosImpresionDetalle.IMPUESTO.Exento; } else { if (dtrImp["name"].ToString().Contains("7")) { det.TipoImpuesto = FiscalPrinter.DatosImpresionDetalle.IMPUESTO.ITBMS7; } else if (dtrImp["name"].ToString().Contains("10")) { det.TipoImpuesto = FiscalPrinter.DatosImpresionDetalle.IMPUESTO.ITBMS10; } else if (dtrImp["name"].ToString().Contains("15")) { det.TipoImpuesto = FiscalPrinter.DatosImpresionDetalle.IMPUESTO.ITBMS15; } } } objDatos.ListaDetalles.Add(det); } } ManejadorLog.Log.InfoFormat("Cantidad Detalles : {0}", objDatos.ListaDetalles.Count); var res = Global.Impresora.Imprimir(objDatos); dtr.RowError = res.MensajeError; if (!dtr.HasErrors) { res.Fecha = DateTime.Now; MarcarComoImpresa(dtr, res); dtr["printer_list_ids"] = 1; dtr["Marca"] = false; dtr.AcceptChanges(); } }
private void InicializarTablas() { Cursor = Cursors.WaitCursor; TablaGrilla.Clear(); TablaDetalles.Clear(); TablaImpresora.Clear(); TablaImpuestos.Clear(); #region Facturas object[] filter = new object[] { new object[] { "state", "!=", "proforma" }, new object[] { "state", "!=", "proforma2" }, new object[] { "state", "!=", "cancel" }, new object[] { "state", "!=", "draft" }, new object[] { "type", "like", "out" }, new object[] { "date_invoice", ">=", dtpFiltroFecha.Value.ToString("yyyy-MM-dd HH:mm:ss") }, new object[] { "date_invoice", "<", dtpFechaHasta.Value.AddDays(1).ToString("yyyy-MM-dd HH:mm:ss") } }; //Inicializar Tablas /*****************************************/ string[] str = Properties.Resources.Campos_Factura.Replace("\r", "").Split('\n'); List <OdooRecord> records = FacturaModel.Search(filter); List <List <object> > lista = new List <List <object> >(); foreach (OdooRecord record in records) { int intIdPartner = 0; List <object> listaInterna = new List <object>(); listaInterna.Add(false); foreach (string strDato in str) { string[] strValores = strDato.Split('|'); string strValor = strValores[0]; object objDato = record.GetValue(strValor); if (objDato is object[]) { object[] objValArr = objDato as object[]; if (objValArr.Length == 0) { listaInterna.Add(DBNull.Value); } else { int intIndex = Convert.ToInt32(strValores[1]); listaInterna.Add(objValArr[intIndex]); if (strValor == "partner_id") { intIdPartner = Convert.ToInt32(objValArr[0]); } } } else { if (strDato == "date_invoice") { DateTime dt = DateTime.MinValue; DateTime.TryParse(objDato.ToString(), out dt); objDato = dt.ToString("dd/MM/yyyy"); } else if (strDato == "amount_total") { decimal dec = decimal.MinValue; decimal.TryParse(objDato.ToString(), out dec); objDato = dec.ToString("$#,##0.00"); } listaInterna.Add(objDato); } } listaInterna.Add(TomarRUCPartner(intIdPartner)); listaInterna.Add(record); lista.Add(listaInterna); } //dtgPrincipal.Columns.Add(new DataGridViewCheckBoxColumn() { HeaderText = "Marca", DataPropertyName = "Marca", Width = 50 }); lista.ForEach(s => TablaGrilla.Rows.Add(s.ToArray())); TablaGrilla.AsEnumerable().ToList().ForEach(s => s["tipo_doc"] = s["refund_type"].ToString() == "credit" || s["type"].ToString().Contains("refund") ? "Nota de Crédito" : s["refund_type"].ToString() == "debit" ? "Nota de Débito" : "Factura"); dtgPrincipal.DataSource = new DataView(TablaGrilla, "printer_list_ids is null", "Id", DataViewRowState.CurrentRows); ColFecha.DefaultCellStyle.Format = "dd/MM/yyyy"; dtgTodas.DataSource = new DataView(TablaGrilla, "printer_list_ids is not null", "Id Desc", DataViewRowState.CurrentRows); tsbImprimir.Enabled = dtgPrincipal.Rows.Count > 0; #endregion #region Referencias de la factura foreach (DataRow dtr in TablaGrilla.Rows) { str = Properties.Resources.Campos_Linea_Impresora.Replace("\r", "").Split('\n'); filter = new object[] { new object[] { "account_id.id", "=", dtr["Id"].ToString() }, }; records = ImpresoraModel.Search(filter); List <List <object> > listaImpresora = new List <List <object> >(); List <List <object> > listaDetalle = new List <List <object> >(); foreach (OdooRecord record in records) { List <object> listaInterna = new List <object>(); foreach (string strDato in str) { string[] strValores = strDato.Split('|'); string strValor = strValores[0]; object objDato = record.GetValue(strValor); if (objDato is object[]) { object[] objValArr = objDato as object[]; if (objValArr.Length == 0) { listaInterna.Add(DBNull.Value); } else { int intIndex = Convert.ToInt32(strValores[1]); listaInterna.Add(objValArr[intIndex]); } } else { listaInterna.Add(objDato); } } listaInterna.Add(record); listaImpresora.Add(listaInterna); } listaImpresora.ForEach(s => TablaImpresora.Rows.Add(s.ToArray())); str = Properties.Resources.Campos_Detalles.Replace("\r", "").Split('\n'); filter = new object[] { new object[] { "invoice_id.id", "=", dtr["Id"].ToString() }, }; records = DetalleModel.Search(filter); foreach (OdooRecord record in records) { List <object> listaInterna = new List <object>(); foreach (string strDato in str) { string[] strValores = strDato.Split('|'); string strValor = strValores[0]; object objDato = record.GetValue(strValor); if (objDato is object[] || objDato is int[]) { dynamic objValArr = objDato; if (objValArr.Length == 0) { listaInterna.Add(DBNull.Value); } else { if (strValores.Length > 1) { int intIndex = Convert.ToInt32(strValores[1]); listaInterna.Add(objValArr[intIndex]); } else { listaInterna.Add(objValArr[0]); } } } else { listaInterna.Add(objDato); } } listaDetalle.Add(listaInterna); } listaDetalle.ForEach(s => TablaDetalles.Rows.Add(s.ToArray())); } #endregion #region Impuestos str = Properties.Resources.Campos_Impuestos.Replace("\r", "").Split('\n'); foreach (DataRow dtrDet in TablaDetalles.Rows) { if (string.IsNullOrEmpty(dtrDet["invoice_line_tax_ids"].ToString())) { continue; } int intIdTax = Convert.ToInt32(dtrDet["invoice_line_tax_ids"]); if (TablaImpuestos.AsEnumerable().ToList().Exists(s => Convert.ToInt32(s["id"]) == intIdTax)) { continue; } filter = new object[] { new object[] { "id", "=", intIdTax.ToString() } }; records = ImpuestosModel.Search(filter); lista = new List <List <object> >(); foreach (OdooRecord record in records) { List <object> listaInterna = new List <object>(); foreach (string strDato in str) { string[] strValores = strDato.Split('|'); string strValor = strValores[0]; object objDato = record.GetValue(strValor); if (objDato is object[]) { object[] objValArr = objDato as object[]; if (objValArr.Length == 0) { listaInterna.Add(DBNull.Value); } else { int intIndex = Convert.ToInt32(strValores[1]); listaInterna.Add(objValArr[intIndex]); } } else { listaInterna.Add(objDato); } } lista.Add(listaInterna); } //dtgPrincipal.Columns.Add(new DataGridViewCheckBoxColumn() { HeaderText = "Marca", DataPropertyName = "Marca", Width = 50 }); lista.ForEach(s => TablaImpuestos.Rows.Add(s.ToArray())); } //Inicializar Tablas /*****************************************/ #endregion Cursor = Cursors.Default; }