private void bckIniciarComponetes_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
 {
     rptFactura informeFactura = new rptFactura(tblIVA, tblCliente, tblRazonSocial, strNroCbte, strFechaEmision, strTipo);
     informeFactura.Show();
     this.Close();
 }
Ejemplo n.º 2
0
        private void ImprimirFactura()
        {
            DataTable tblIVA = new DataTable();
            tblIVA.Columns.Add("Articulo", typeof(string));
            tblIVA.Columns.Add("Descripcion", typeof(string));
            tblIVA.Columns.Add("Cantidad", typeof(int));
            tblIVA.Columns.Add("IdAlicuota", typeof(int));
            tblIVA.Columns.Add("PorcentajeIva", typeof(decimal));
            tblIVA.Columns.Add("Precio", typeof(decimal));
            tblIVA.Columns.Add("SubtotalSinIva", typeof(decimal));
            tblIVA.Columns.Add("SubtotalIva", typeof(decimal));
            foreach (DataGridViewRow rowGrid in dgvDatos.Rows)
            {
                string articulo = rowGrid.Cells["IdArticuloDVEN"].Value.ToString();
                DataRow[] foundRow = tblArticulos.Select("IdArticuloART = '" + articulo + "'");
                string descripcion = foundRow[0]["DescripcionART"].ToString();
                int cantidad = Convert.ToInt32(rowGrid.Cells["CantidadDVEN"].Value.ToString());
                int idAlicuota = Convert.ToInt16(foundRow[0]["IdAliculotaIvaART"].ToString());
                decimal porcentajeIva = Convert.ToDecimal(foundRow[0]["PorcentajeALI"].ToString()) / 100 + 1;
                decimal precio = decimal.Round(Convert.ToDecimal(foundRow[0]["PrecioPublicoART"].ToString()) / porcentajeIva, 2);
                decimal ivaImporte = decimal.Round(Convert.ToDecimal(foundRow[0]["PrecioPublicoART"].ToString()) - precio, 2);
                DataRow fila = tblIVA.NewRow();
                fila["Articulo"] = articulo;
                fila["Descripcion"] = descripcion;
                fila["Cantidad"] = cantidad;
                fila["IdAlicuota"] = idAlicuota;
                fila["PorcentajeIva"] = porcentajeIva;
                fila["Precio"] = precio;
                fila["SubtotalSinIva"] = cantidad * precio;
                fila["SubtotalIva"] = cantidad * ivaImporte;
                tblIVA.Rows.Add(fila);
            }

            string idCliente = cmbCliente.SelectedValue.ToString();
            DataRow[] foundCliente = tblClientes.Select("IdClienteCLI = '" + idCliente + "'");
            string condicionIva = foundCliente[0]["CondicionIvaCLI"].ToString();
            int cabeceraCbteTipo = 0;
            int detalleDocTipo;
            string detalleDocNro;
            if (condicionIva == "RESPONSABLE INSCRIPTO")
            {
                detalleDocTipo = 80;
                detalleDocNro = foundCliente[0]["CUIT"].ToString();
                switch (strTipo)
                {
                    case "factura":
                        cabeceraCbteTipo = 1;
                        this.strTipo = "FACTURA";
                        break;
                    case "debito":
                        cabeceraCbteTipo = 2;
                        this.strTipo = "NOTA DE DÉBITO";
                        break;
                    case "credito":
                        cabeceraCbteTipo = 3;
                        this.strTipo = "NOTA DE CRÉDITO";
                        break;
                }
            }
            else
            {
                detalleDocTipo = 99;
                detalleDocNro = "0";
                switch (strTipo)
                {
                    case "factura":
                        cabeceraCbteTipo = 6;
                        this.strTipo = "FACTURA";
                        break;
                    case "debito":
                        cabeceraCbteTipo = 7;
                        this.strTipo = "NOTA DE DÉBITO";
                        break;
                    case "credito":
                        this.strTipo = "NOTA DE CRÉDITO";
                        cabeceraCbteTipo = 8;
                        break;
                }
            }

            // Ver WSFEv1 Fallos conexión en Camuzzo
            WSAFIPFE.Factura fe = new WSAFIPFE.Factura();
            Boolean bResultado = false;
            DataTable tblRazonSocial = BL.RazonSocialBLL.GetRazonSocial();
            string cuit = tblRazonSocial.Rows[0]["CuitRAZ"].ToString();
            bResultado = fe.iniciar(WSAFIPFE.Factura.modoFiscal.Test, cuit, @"C:\Trend\Factura-electronica\Carolina Navarro\pedido.pfx", @" ");
            if (bResultado)
            {
                fe.ArchivoCertificadoPassword = "";
                bResultado = fe.f1ObtenerTicketAcceso();
                if (bResultado)
                {
                    fe.F1CabeceraCantReg = 1;
                    fe.F1CabeceraPtoVta = 1;

                    /*Según el manual del desarrollador (pagina 15), el error 10007 se da por que no informas alguno de los
                     * tipos validos son 01 02 03 04 05 34 39 60 63 para comprobantes A y 06 07 08 09 10 35 40 64 y 61 para los B.*/
                    fe.F1CabeceraCbteTipo = cabeceraCbteTipo;
                    int nroComp = fe.F1CompUltimoAutorizado(1, cabeceraCbteTipo) + 1;
                    fe.f1Indice = 0;
                    fe.F1DetalleConcepto = 1;  //Concepto del comprobante.  01-Productos, 02-Servicios, 03-Productos y Servicios
                    fe.F1DetalleDocTipo = detalleDocTipo;    // 96: DNI, 80: CUIT, 99: Consumidor Final
                    fe.F1DetalleDocNro = detalleDocNro;
                    //   fe.F1DetalleDocNro = "30570135585";
                    fe.F1DetalleCbteDesde = nroComp;
                    fe.F1DetalleCbteHasta = nroComp; // Número de comprobante hasta. En caso de ser un solo comprobante, este dato coincide con el anterior.

                    /* F1DetalleCbteFch: Fecha del comprobante, cuyo formato es "aaaammdd". Para un concepto de factura igual a 1,
                        la fecha de emisión puede ser hasta 5 días posteriores a la de generación.
                        Si el concepto es 2 o 3, puede ser hasta 10 días anteriores o posteriores a la fecha de generación.
                        Al ser un dato opcional, si no se asigna fecha, por defecto se asignará la fecha del proceso.*/
                    string fecha = DateTime.Now.ToString("yyyyMMdd");
                    fe.F1DetalleCbteFch = fecha;

                    /*  fe.F1DetalleTributoItemCantidad = 1;  //preguntar Ariel Cantidad de Tributos relacionados al comprobante
                      fe.f1IndiceItem = 0;
                      fe.F1DetalleTributoId = 3;
                      fe.F1DetalleTributoDesc = "Impuesto Municipal Matanza";
                      fe.F1DetalleTributoBaseImp = 0;
                      fe.F1DetalleTributoAlic = 5.2;
                      fe.F1DetalleTributoImporte = 0;*/
                    var groupedData = from b in tblIVA.AsEnumerable()
                                      group b by b.Field<int>("IdAlicuota") into g
                                      select new
                                      {
                                          DetalleIvaId = g.Key,
                                          Count = g.Count(),
                                          DetalleIvaBaseImp = g.Sum(x => x.Field<decimal>("SubtotalSinIva")),
                                          DetalleIvaImporte = g.Sum(x => x.Field<decimal>("SubtotalIva"))
                                      };
                    int DetalleIvaItemCantidad = groupedData.Count();
                    fe.F1DetalleIvaItemCantidad = DetalleIvaItemCantidad;
                    int indiceItem = 0;
                    foreach (var registro in groupedData)
                    {
                        fe.f1IndiceItem = indiceItem;
                        //En F1DetalleIvaId va el código de la alícuota o tasa (obtenido de una lista de AFIP: 5 para 21% 4 para 10.50%, etc).
                        fe.F1DetalleIvaId = registro.DetalleIvaId;
                        fe.F1DetalleIvaBaseImp = Convert.ToDouble(registro.DetalleIvaBaseImp);  //El precio del producto
                        fe.F1DetalleIvaImporte = Convert.ToDouble(registro.DetalleIvaImporte);  //El importe del impuesto.
                        indiceItem++;
                    }

                    /*     fe.f1IndiceItem = 0;
                         fe.F1DetalleIvaId = 5;  //El código de la alícuota o tasa (obtenido de una lista de AFIP: 5 para 21% 4 para 10.50%, etc).
                         fe.F1DetalleIvaBaseImp = 100;  //El precio del producto
                         fe.F1DetalleIvaImporte = 21;  //El importe del impuesto.

                         fe.f1IndiceItem = 1;
                         fe.F1DetalleIvaId = 4;
                         fe.F1DetalleIvaBaseImp = 50;
                         fe.F1DetalleIvaImporte = 5.25;*/

                    var detalleImpNeto = tblIVA.AsEnumerable().Sum(x => x.Field<decimal>("SubtotalSinIva"));
                    var detalleImpIva = tblIVA.AsEnumerable().Sum(x => x.Field<decimal>("SubtotalIva"));
                    double detalleImpTotal = Convert.ToDouble(detalleImpNeto + detalleImpIva);

                    fe.F1DetalleImpTotal = detalleImpTotal; // total factura
                    fe.F1DetalleImpTotalConc = 0; // preguntar Ariel  Importe Neto No Grabado, debe ser mayor a cero y menor o igual al importe total (F1DetalleImpTotal).
                    fe.F1DetalleImpNeto = Convert.ToDouble(detalleImpNeto); // total bases imponibles
                    fe.F1DetalleImpOpEx = 0; // preguntar Ariel
                    fe.F1DetalleImpTrib = 0; // preguntar Ariel
                    fe.F1DetalleImpIva = Convert.ToDouble(detalleImpIva);  // total ivas
                    fe.F1DetalleFchServDesde = ""; // se debe poner fecha para servicios o para productos y servicios. Para productos solos puede ser vacío
                    fe.F1DetalleFchServHasta = ""; // Idem anterior completar si F1DetalleConcepto > 1
                    fe.F1DetalleFchVtoPago = ""; // Idem anterior completar si F1DetalleConcepto > 1
                    fe.F1DetalleMonId = "PES";
                    fe.F1DetalleMonCotiz = 1;

                    fe.F1DetalleCbtesAsocItemCantidad = 0;
                    fe.F1DetalleOpcionalItemCantidad = 0;

                    fe.ArchivoXMLRecibido = @"c:\recibido.xml";
                    fe.ArchivoXMLEnviado = @"c:\enviado.xml";
                    bResultado = fe.F1CAESolicitar();
                    if (bResultado)
                    {
                        MessageBox.Show("resultado verdadero ");
                    }
                    else
                    {
                        MessageBox.Show("resultado falso ");
                    }
                    MessageBox.Show("resultado global AFIP: " + fe.F1RespuestaResultado);
                    MessageBox.Show("es reproceso? " + fe.F1RespuestaReProceso);
                    MessageBox.Show("registros procesados por AFIP: " + fe.F1RespuestaCantidadReg.ToString());
                    MessageBox.Show("error genérico global:" + fe.f1ErrorMsg1);
                    if (fe.F1RespuestaCantidadReg > 0)
                    {
                        fe.f1Indice = 0;
                        MessageBox.Show("resultado detallado comprobante: " + fe.F1RespuestaDetalleResultado);
                        MessageBox.Show("cae comprobante: " + fe.F1RespuestaDetalleCae);
                        MessageBox.Show("número comprobante:" + fe.F1RespuestaDetalleCbteDesdeS);
                        MessageBox.Show("error detallado comprobante: " + fe.F1RespuestaDetalleObservacionMsg1);
                    }
                    DataTable tblCliente = tblClientes.Clone();
                    tblCliente.ImportRow(foundCliente[0]);
                    string strNroCbte = nroComp.ToString();
                    string strFechaEmision = dateTimePicker1.Value.ToString("dd/MM/yyyy");
                    rptFactura informeFactura = new rptFactura(tblIVA, tblCliente, tblRazonSocial, strNroCbte, strFechaEmision, strTipo);

                    informeFactura.Show();
                }
                else
                {
                    MessageBox.Show("fallo acceso " + fe.UltimoMensajeError);
                }
            }
            else
            {
                MessageBox.Show("error inicio " + fe.UltimoMensajeError);
            }
        }