void Button6Click(object sender, EventArgs e) { VariablesPropias.VariablesPropias.vpFactura reci = new VariablesPropias.VariablesPropias.vpFactura(); reci = Modulos.Documentos_Fiscales.CargarFCA(Convert.ToInt32(txtNumFactura.Text)); // MessageBox.Show (reci.Cliente.strDireccion); Imprimir.Imprimir_Factura(reci); }
/// <summary> /// Envia una Factura a la AFIP /// </summary> /// <param name="Factura"></param> /// <param name="strToken"></param> /// <param name="strSign"></param> /// <returns></returns> public static servicios1.afip.gov.ar.FECAEResponse EnviarFacturaAFIP(VariablesPropias.VariablesPropias.vpFactura Factura, string strToken, string strSign) { //web service de Facturacion Electronica servicios1.afip.gov.ar.Service objWSFE = new servicios1.afip.gov.ar.Service(); //Crea el objeto de respuesta de la factura servicios1.afip.gov.ar.FECAEResponse objFECAEResponse = new servicios1.afip.gov.ar.FECAEResponse(); servicios1.afip.gov.ar.FECAEDetResponse objFECAEDetResponse = new servicios1.afip.gov.ar.FECAEDetResponse(); //Crea el objeto para Armar la factura //Request General servicios1.afip.gov.ar.FECAERequest objFECAERequest = new servicios1.afip.gov.ar.FECAERequest(); //Request de la Cabecera servicios1.afip.gov.ar.FECAECabRequest objFECAECabRequest = new servicios1.afip.gov.ar.FECAECabRequest(); //Request del Detalle int indice = 0; //Cantidad de documentos a enviar int indIVA = 0; servicios1.afip.gov.ar.FECAEDetRequest[] objFECAEDetRequestArray = new servicios1.afip.gov.ar.FECAEDetRequest[indice + 1]; servicios1.afip.gov.ar.FECAEDetRequest objFECAEDetRequest = new servicios1.afip.gov.ar.FECAEDetRequest(); servicios1.afip.gov.ar.AlicIva[] objFECAEDetIVAArray = new servicios1.afip.gov.ar.AlicIva[indIVA + 1]; servicios1.afip.gov.ar.AlicIva objFECAEDetIVA = new servicios1.afip.gov.ar.AlicIva(); //Armar la Cabecera de la factura int cantregistros = 1; var _with1 = objFECAECabRequest; _with1.CantReg = cantregistros; _with1.PtoVta = Convert.ToInt32(Factura.intSucursal); _with1.CbteTipo = Convert.ToInt32(Factura.strCodFc); var _with2 = objFECAEDetIVA; /* * El Id tiene varios tipos * 0% = 3 * 10,5% = ?? * 21% = 5 * */ _with2.Id = Factura.IdIVA; _with2.BaseImp = Convert.ToDouble(Factura.curSubTotal); _with2.Importe = Convert.ToDouble(Factura.curIVA); objFECAEDetIVAArray[0] = objFECAEDetIVA; //Armar el detalle de la factura var _with3 = objFECAEDetRequest; //este es el Request para la unica factura //Ingreso los datos del cliente _with3.Concepto = 1; // Esto es productos _with3.DocTipo = 80; // Esto es Cuit _with3.DocNro = Convert.ToInt64(Factura.Cliente.dblCUIT); // El CUIT del cliente //.CbteDesde = CLng(cmbSucursal.Text & "-" & txtNumFact.Text) _with3.CbteDesde = Convert.ToInt64(Factura.dblNumFact); //.CbteHasta = CLng(cmbSucursal.Text & "-" & txtNumFact.Text) _with3.CbteHasta = Convert.ToInt64(Factura.dblNumFact); //.ImpTotal = CDbl(lblTotalUSD.Text) _with3.ImpTotal = Convert.ToDouble(Factura.curTotal); _with3.ImpTotConc = 0; //No se que es //.ImpNeto = CDbl(lblSubtotalUSD.Text) _with3.ImpNeto = Convert.ToDouble(Factura.curSubTotal); _with3.ImpOpEx = 0; //.ImpIVA = CDbl(lblIvaUSD.Text) _with3.ImpIVA = Convert.ToDouble(Factura.curIVA); _with3.ImpTrib = _with3.ImpTotConc + _with3.ImpOpEx; //+ .ImpIVA //.MonId = "DOL" //.MonCotiz = CDbl(FormatNumber(lblDolar.Text, 6)) _with3.MonId = "PES"; _with3.MonCotiz = Convert.ToDouble("1"); //Utiliza la funcion de FechaInversa para darle el formato correcto _with3.CbteFch = FechaInversa(DateTime.Today); _with3.Iva = objFECAEDetIVAArray; //.Iva = CDbl(lblIvaUSD.Text) objFECAEDetRequestArray[0] = objFECAEDetRequest; // Carga el Request en un array (de un solo item) //Arma el Request para todas las facturas que se manden var _with4 = objFECAERequest; //Cabecera _with4.FeCabReq = objFECAECabRequest; //Cuerpo _with4.FeDetReq = objFECAEDetRequestArray; //Facturacion Electronica Requerimiento de Autorizacion servicios1.afip.gov.ar.FEAuthRequest objFEAuthRequest = new servicios1.afip.gov.ar.FEAuthRequest(); objFEAuthRequest.Cuit = Convert.ToInt64("30708466200"); //TODO Cambiar //este es el CUIT guardado en la compu objFEAuthRequest.Token = strToken; objFEAuthRequest.Sign = strSign; // Invoco al método FECAESolicitar try { objFECAEResponse = objWSFE.FECAESolicitar(objFEAuthRequest, objFECAERequest); MessageBox.Show("***CONTENIDO DE RESPUESTA:" + System.Environment.NewLine + " CUIT:" + Convert.ToString(objFECAEResponse.FeCabResp.Cuit) + System.Environment.NewLine + " Pto Vta:" + Convert.ToString(objFECAEResponse.FeCabResp.PtoVta) + System.Environment.NewLine + " Fch Proceso:" + objFECAEResponse.FeCabResp.FchProceso + System.Environment.NewLine + " Cant reg:" + Convert.ToString(objFECAEResponse.FeCabResp.CantReg) + System.Environment.NewLine + " Resultado:" + objFECAEResponse.FeCabResp.Resultado + System.Environment.NewLine + " Reproceso:" + objFECAEResponse.FeCabResp.Reproceso + System.Environment.NewLine); } catch (Exception ex) { MessageBox.Show(ex.Message); return(objFECAEResponse); } // Obtengo los XML de request/response y los escribo en el disco XmlSerializer writer1 = new XmlSerializer(typeof(servicios1.afip.gov.ar.FECAERequest)); StreamWriter file1 = new StreamWriter("C:\\" + Factura.intSucursal + "-" + Factura.dblNumFact + " - " + Factura.Cliente.strNombre + " - wsfe_FERequest.xml"); writer1.Serialize(file1, objFECAERequest); file1.Close(); XmlSerializer writer2 = new XmlSerializer(typeof(servicios1.afip.gov.ar.FECAEResponse)); StreamWriter file2 = new StreamWriter("C:\\" + Factura.intSucursal + "-" + Factura.dblNumFact + " - " + Factura.Cliente.strNombre + " - wsfe_FEResponse.xml"); writer2.Serialize(file2, objFECAEResponse); file2.Close(); return(objFECAEResponse); }
/// <summary> /// Carga una Factura desde el formulario actual /// </summary> /// <returns>Una Variable propia vpFactura </returns> public VariablesPropias.VariablesPropias.vpFactura CargarFactura() { #region Variables VariablesPropias.VariablesPropias.vpFactura Fact = new VariablesPropias.VariablesPropias.vpFactura(); #endregion //Cabecera Fact.strTipoFc = lblTipoFC.Text; Fact.strCodFc = lblCod_cbe.Text; Fact.intSucursal = Convert.ToInt16(cmbSucursal.Text); Fact.dblNumFact = Convert.ToDouble(txtNumFact.Text); Fact.dtFecha = dtFecha.Value; Fact.dblTipoCambio = Convert.ToDouble(lblDolar.Text); switch (Convert.ToInt32(lblCod_cbe.Text)) { case 1: //Factura A Fact.strComprobante = "FC " + lblTipoFC.Text + " " + cmbSucursal.Text + "-0000" + txtNumFact.Text; break; case 6: //Factura B Fact.strComprobante = "FC " + lblTipoFC.Text + " " + cmbSucursal.Text + "-0000" + txtNumFact.Text; break; case 2: //ND Fact.strComprobante = "ND " + lblTipoFC.Text + " " + cmbSucursal.Text + "-0000" + txtNumFact.Text; break; case 3: //NC Fact.strComprobante = "NC " + lblTipoFC.Text + " " + cmbSucursal.Text + "-0000" + txtNumFact.Text; break; //default: // lblCod_cbe.Text // break; } //Cliente Fact.Cliente = OperacionesComunes.ObtenerCliente(cmbRazonSocial.Text); //Remitos Fact.intRemito1 = Convert.ToInt16(cmbRemito1.Text); Fact.intRemito2 = Convert.ToInt16(cmbRemito2.Text); Fact.intRemito3 = Convert.ToInt16(cmbRemito3.Text); Fact.intRemito4 = Convert.ToInt16(cmbRemito4.Text); //Crea el array de los productos directamente segun la cantidad de lineas del grid Fact.Productos = new VariablesPropias.VariablesPropias.vpProducto[gridDatos.Rows.Count + 5]; for (int i = 0; i < gridDatos.Rows.Count; i++) { if (gridDatos[2, i].Value != null) { Fact.Productos[i].intCantidad = Convert.ToInt16(gridDatos[2, i].Value); Fact.Productos[i].strDescripcion = gridDatos[1, i].Value.ToString(); Fact.Productos[i].curPrecioNeto = Convert.ToDecimal(gridDatos[4, i].Value); Fact.Productos[i].curPrecioSubTotal = Convert.ToDecimal(gridDatos[6, i].Value); Fact.Productos[i].dblTipoIVA = Convert.ToDouble(gridDatos[7, i].Value); Fact.Productos[i].curIVAProdu = Convert.ToDecimal(gridDatos[6, i].Value) * Convert.ToDecimal(gridDatos[7, i].Value) / 100; Fact.Productos[i].curPrecioTotal = Convert.ToDecimal(gridDatos[8, i].Value); } } //Producto /*TODO Esto se deber reemplazar con arrays de prductos * if (gridDatos[2,0].Value != null) { * Fact.Producto1.intCantidad = Convert.ToInt16(gridDatos[2,0].Value); * Fact.Producto1.strDescripcion = gridDatos[1,0].Value.ToString(); * Fact.Producto1.curPrecioNeto = Convert.ToDecimal(gridDatos[4,0].Value); * Fact.Producto1.curPrecioSubTotal= Convert.ToDecimal(gridDatos[6,0].Value); * Fact.Producto1.dblTipoIVA = Convert.ToDouble(gridDatos[7,0].Value); * Fact.Producto1.curIVAProdu = Convert.ToDecimal(gridDatos[6,0].Value) * Convert.ToDecimal(gridDatos[7,0].Value)/100; * Fact.Producto1.curPrecioTotal =Convert.ToDecimal(gridDatos[8,0].Value); * gridDatos[2,i].Value} * * if (gridDatos.Rows.Count >= 1 ) { * if (gridDatos[2,1].Value != null) { * Fact.Producto2.intCantidad = Convert.ToInt16(gridDatos[2,1].Value); * Fact.Producto2.strDescripcion = gridDatos[1,1].Value.ToString(); * Fact.Producto2.curPrecioNeto = Convert.ToDecimal(gridDatos[4,1].Value); * Fact.Producto2.curPrecioSubTotal= Convert.ToDecimal(gridDatos[6,1].Value); * Fact.Producto2.dblTipoIVA = Convert.ToDouble(gridDatos[7,1].Value); * Fact.Producto2.curIVAProdu = Convert.ToDecimal(gridDatos[6,1].Value) * Convert.ToDecimal(gridDatos[7,1].Value)/100; * Fact.Producto2.curPrecioTotal =Convert.ToDecimal(gridDatos[8,1].Value); * } * } * if (gridDatos.Rows.Count >= 2) { * if (gridDatos[2,2].Value != null) { * Fact.Producto3.intCantidad = Convert.ToInt16(gridDatos[2,2].Value); * Fact.Producto3.strDescripcion = gridDatos[1,2].Value.ToString(); * Fact.Producto3.curPrecioNeto = Convert.ToDecimal(gridDatos[4,2].Value); * Fact.Producto3.dblTipoIVA = Convert.ToDouble(gridDatos[7,2].Value); * Fact.Producto3.curIVAProdu = Convert.ToDecimal(gridDatos[6,2].Value) * Convert.ToDecimal(gridDatos[7,2].Value)/100; * Fact.Producto3.curPrecioTotal =Convert.ToDecimal(gridDatos[8,2].Value); * } * } * if (gridDatos.Rows.Count >= 3) { * if (gridDatos[2,3].Value != null) { * Fact.Producto4.intCantidad = Convert.ToInt16(gridDatos[2,3].Value); * Fact.Producto4.strDescripcion = gridDatos[1,3].Value.ToString(); * Fact.Producto4.curPrecioNeto = Convert.ToDecimal(gridDatos[4,3].Value); * Fact.Producto4.dblTipoIVA = Convert.ToDouble(gridDatos[7,3].Value); * Fact.Producto4.curIVAProdu = Convert.ToDecimal(gridDatos[6,3].Value) * Convert.ToDecimal(gridDatos[7,3].Value)/100; * Fact.Producto4.curPrecioTotal =Convert.ToDecimal(gridDatos[8,3].Value); * } * } */ //Impuestos Fact.curSubTotalUSD = Convert.ToDecimal(Math.Round(Convert.ToDouble(lblSubTotalUSD.Text), 2)); Fact.curIVAUSD = Convert.ToDecimal(Math.Round(Convert.ToDouble(lblIVA21USD.Text), 2)); Fact.curTotalUSD = Convert.ToDecimal(Math.Round(Convert.ToDouble(lblTotalUSD.Text), 2)); Fact.curSubTotal = Convert.ToDecimal(Math.Round(Convert.ToDouble(lblSubTotal.Text), 2)); Fact.curIVA = Convert.ToDecimal(Math.Round(Convert.ToDouble(lblIVA21.Text), 2)); if (Fact.curIVA == 0) { Fact.IdIVA = 3; } else { Fact.IdIVA = 5; } Fact.curTotal = Convert.ToDecimal(Math.Round(Convert.ToDouble(lblTotal.Text), 2)); //Valores Fact.strCAE = lblCAE.Text; Fact.strFechVtoCAE = lblFechVtoCAE.Text; Fact.strCodBarrasNum = txtCodBarNum.Text; Fact.picCodBarras = this.PictureBox1.Image; return(Fact); }
void TlbGuardarClick(object sender, EventArgs e) { miFactura = CargarFactura(); //Si esta habilitado para facturar a la AFIP Informa de la factura if (Convert.ToBoolean(ConfigurationManager.AppSettings["FacturarAFIP"])) { //Crea el objeto de respuesta de la factura servicios1.afip.gov.ar.FECAEResponse objFECAEResponse = new servicios1.afip.gov.ar.FECAEResponse(); objFECAEResponse = AFIP.AFIP.EnviarFacturaAFIP(miFactura, lblToken.Text, lblSign.Text); lblCAE.Text = objFECAEResponse.FeDetResp[0].CAE; lblFechVtoCAE.Text = objFECAEResponse.FeDetResp[0].CAEFchVto; miFactura.strCAE = lblCAE.Text; miFactura.strFechVtoCAE = lblFechVtoCAE.Text; //Esto asegura de que si no esta aprobado por AFIP no tome ninguna factura if (objFECAEResponse.FeDetResp[0].Resultado == "A") { OperacionesComunes.Guardar(miFactura); } } else // Esto deja guardar la FC sin Permiso de la AFIP { miFactura.strCAE = lblCAE.Text; miFactura.strFechVtoCAE = lblFechVtoCAE.Text; OperacionesComunes.Guardar(miFactura); } #region Remitos if (cmbRemito1.Text != "0") { ModificarUnRemito(Convert.ToInt32(cmbRemito1.Text)); } if (cmbRemito2.Text != "0") { ModificarUnRemito(Convert.ToInt32(cmbRemito2.Text)); } if (cmbRemito3.Text != "0") { ModificarUnRemito(Convert.ToInt32(cmbRemito3.Text)); } if (cmbRemito4.Text != "0") { ModificarUnRemito(Convert.ToInt32(cmbRemito4.Text)); } #endregion //Permite imprimir. tbImprimir.Enabled = true; tlbGuardar.Enabled = false; cmbRazonSocial.Enabled = false; }
/// <summary> /// /// </summary> /// <param name="intNumeroFactura"></param> /// <returns></returns> public static VariablesPropias.VariablesPropias.vpFactura CargarFCA(int intNumeroFactura) { #region Cultura CultureInfo cultura = new CultureInfo("es-AR"); CultureInfo culture = new CultureInfo("en-US"); #endregion #region Variables VariablesPropias.VariablesPropias.vpFactura Fact = new VariablesPropias.VariablesPropias.vpFactura(); #endregion #region DB ConexionAccess2007.Conectar(ConfigurationManager.AppSettings["BaseDeDatos"].ToString()); //tener en cuenta que primero va la condicion y luego el Order by ConexionAccess2007.Consultar("Facturas", "*", "NumFact = " + intNumeroFactura + "AND Sucursal = 3", "NumFact"); //Nueva Tabla DataTable Factura = new DataTable(); //Cargo la tabla con los datos de la Base de Datos Factura = ConexionAccess2007.Table; #endregion //Cabecera Fact.strTipoFc = "01"; Fact.strCodFc = "A"; Fact.intSucursal = Convert.ToInt16(Factura.Rows[0]["Sucursal"].ToString()); Fact.dblNumFact = Convert.ToDouble(Factura.Rows[0]["NumFact"].ToString()); Fact.dtFecha = Convert.ToDateTime(Factura.Rows[0]["Fecha"].ToString()); Fact.dblTipoCambio = Convert.ToDouble(Factura.Rows[0]["Tipodecambio"].ToString()); Fact.strComprobante = Factura.Rows[0]["Documento"].ToString(); //Cliente Fact.Cliente = OperacionesComunes.ObtenerCliente(Factura.Rows[0]["Nombre"].ToString()); //Remitos Fact.intRemito1 = Convert.ToInt16(Factura.Rows[0]["Remito1"].ToString()); Fact.intRemito2 = Convert.ToInt16(Factura.Rows[0]["Remito2"].ToString()); Fact.intRemito3 = Convert.ToInt16(Factura.Rows[0]["Remito3"].ToString()); Fact.intRemito4 = Convert.ToInt16(Factura.Rows[0]["Remito4"].ToString()); //Crea el array de los productos directamente segun la cantidad de lineas del grid Fact.Productos = new VariablesPropias.VariablesPropias.vpProducto[10]; //Producto //Productos 1 Fact.Productos[0].intCantidad = Convert.ToInt16(Factura.Rows[0]["Cant1"].ToString()); Fact.Productos[0].strDescripcion = Factura.Rows[0]["Detalle1"].ToString(); Fact.Productos[0].curPrecioNeto = Convert.ToDecimal(Factura.Rows[0]["PrecioUnitario1"].ToString()); Fact.Productos[0].curPrecioSubTotal = Convert.ToDecimal(Convert.ToDouble(Factura.Rows[0]["PrecioUnitario1"].ToString()) * Convert.ToInt16(Factura.Rows[0]["Cant1"].ToString())); Fact.Productos[0].dblTipoIVA = Convert.ToDouble("21"); Fact.Productos[0].curIVAProdu = Convert.ToDecimal(Convert.ToDouble(Factura.Rows[0]["PrecioFinal1"].ToString()) * 0.21); Fact.Productos[0].curPrecioTotal = Convert.ToDecimal(Factura.Rows[0]["PrecioFinal1"].ToString()); //Productos 2 if (Factura.Rows[0]["Detalle2"].ToString() != "") { Fact.Productos[1].intCantidad = Convert.ToInt16(Factura.Rows[0]["Cant2"].ToString()); Fact.Productos[1].strDescripcion = Factura.Rows[0]["Detalle2"].ToString(); Fact.Productos[1].curPrecioNeto = Convert.ToDecimal(Factura.Rows[0]["PrecioUnitario2"].ToString()); Fact.Productos[1].curPrecioSubTotal = Convert.ToDecimal(Convert.ToDouble(Factura.Rows[0]["PrecioUnitario2"].ToString()) * Convert.ToInt16(Factura.Rows[0]["Cant2"].ToString())); Fact.Productos[1].dblTipoIVA = Convert.ToDouble("21"); Fact.Productos[1].curIVAProdu = Convert.ToDecimal(Convert.ToDouble(Factura.Rows[0]["PrecioFinal2"].ToString()) * 0.21); Fact.Productos[1].curPrecioTotal = Convert.ToDecimal(Convert.ToDouble(Factura.Rows[0]["PrecioFinal2"].ToString())); } //Productos 3 if (Factura.Rows[0]["Detalle3"].ToString() != "") { Fact.Productos[2].intCantidad = Convert.ToInt16(Factura.Rows[0]["Cant3"].ToString()); Fact.Productos[2].strDescripcion = Factura.Rows[0]["Detalle3"].ToString(); Fact.Productos[2].curPrecioNeto = Convert.ToDecimal(Factura.Rows[0]["PrecioUnitario3"].ToString()); Fact.Productos[2].curPrecioSubTotal = Convert.ToDecimal(Convert.ToDouble(Factura.Rows[0]["PrecioUnitario3"].ToString()) * Convert.ToInt16(Factura.Rows[0]["Cant3"].ToString())); Fact.Productos[2].dblTipoIVA = Convert.ToDouble("21"); Fact.Productos[2].curIVAProdu = Convert.ToDecimal(Convert.ToDouble(Factura.Rows[0]["PrecioFinal3"].ToString()) * 0.21); Fact.Productos[2].curPrecioTotal = Convert.ToDecimal(Convert.ToDouble(Factura.Rows[0]["PrecioFinal3"].ToString())); } //Productos 4 if (Factura.Rows[0]["Detalle4"].ToString() != "") { Fact.Productos[3].intCantidad = Convert.ToInt16(Factura.Rows[0]["Cant4"].ToString()); Fact.Productos[3].strDescripcion = Factura.Rows[0]["Detalle4"].ToString(); Fact.Productos[3].curPrecioNeto = Convert.ToDecimal(Factura.Rows[0]["PrecioUnitario4"].ToString()); Fact.Productos[3].curPrecioSubTotal = Convert.ToDecimal(Convert.ToDouble(Factura.Rows[0]["PrecioUnitario4"].ToString()) * Convert.ToInt16(Factura.Rows[0]["Cant4"].ToString())); Fact.Productos[3].dblTipoIVA = Convert.ToDouble("21"); Fact.Productos[3].curIVAProdu = Convert.ToDecimal(Convert.ToDouble(Factura.Rows[0]["PrecioFinal4"].ToString()) * 0.21); Fact.Productos[3].curPrecioTotal = Convert.ToDecimal(Convert.ToDouble(Factura.Rows[0]["PrecioFinal4"].ToString()) * 1.21); } //Impuestos Fact.curSubTotalUSD = Convert.ToDecimal(Math.Round(Convert.ToDouble(Factura.Rows[0]["SubTotalUSS"].ToString()), 2)); Fact.curIVAUSD = Convert.ToDecimal(Math.Round(Convert.ToDouble(Factura.Rows[0]["IVAUSS"].ToString()), 2)); Fact.curTotalUSD = Convert.ToDecimal(Math.Round(Convert.ToDouble(Factura.Rows[0]["ImporteFinalUSS"].ToString()), 2)); Fact.curSubTotal = Convert.ToDecimal(Math.Round(Convert.ToDouble(Factura.Rows[0]["SubTotal"].ToString()), 2)); Fact.curIVA = Convert.ToDecimal(Math.Round(Convert.ToDouble(Factura.Rows[0]["IVA"].ToString()), 2)); Fact.curTotal = Convert.ToDecimal(Math.Round(Convert.ToDouble(Factura.Rows[0]["ImporteFinal"].ToString()), 2)); //Valores Fact.strCAE = Factura.Rows[0]["CAE"].ToString(); Fact.strFechVtoCAE = Factura.Rows[0]["FechaVencCAE"].ToString(); Fact.strCodBarrasNum = "30708466200" + "01" + "03" + Fact.strCAE + Fact.strFechVtoCAE; Fact.strCodBarrasNum += CodigoDeBarras.CodigoBarras.CodVerificador(Fact.strCodBarrasNum).ToString(); Fact.picCodBarras = CodigoDeBarras.CodigoBarras.Print2of5Interleaved(Fact.strCodBarrasNum); return(Fact); }