private void CargarComprobantesYaAutorizados(FEAuthRequest feAuthRequest, FECAERequest feCAERequest) { // Agregar comprobantes que fueron autorizados pero que no fueron cargados // por problemas en la comunicacion (devolucion de datos por parte de la AFIP) FERecuperaLastCbteResponse ultimoCbteAutorizadoAfip = this.ObtenerUltimoComprobanteAutorizado(feAuthRequest, feCAERequest); ComprobanteDto ultimoCbteCargado = this.ObtenerUltimoComprobanteCargado(feCAERequest); if (ultimoCbteCargado == null || ultimoCbteCargado.CbteHasta < ultimoCbteAutorizadoAfip.CbteNro) { // Cargarlo en la base los comprobantes faltantes long cbteNro = ultimoCbteCargado != null ? (long)ultimoCbteCargado.CbteHasta + 1 : 1; ComprobanteDto cbteDto = null; while (cbteNro <= ultimoCbteAutorizadoAfip.CbteNro) { FECompConsResponse cbteAfip = this.ObtenerComprobanteAfip(feAuthRequest, feCAERequest, cbteNro).ResultGet; if (cbteAfip == null) { break; } if (cbteAfip.EmisionTipo == "CAE") { cbteDto = new ComprobanteDto(); cbteDto.CAE = cbteAfip.CodAutorizacion; cbteDto.CAEFechaVencimiento = DateTimeHelper.ConvertyyyyMMddToDate(cbteAfip.FchVto); cbteDto.CbteDesde = cbteAfip.CbteDesde; cbteDto.CbteHasta = cbteAfip.CbteHasta; cbteDto.CbteFecha = DateTimeHelper.ConvertyyyyMMddToDate(cbteAfip.CbteFch); cbteDto.PtoVta = cbteAfip.PtoVta; cbteDto.TipoComprobanteId = cbteAfip.CbteTipo; TipoComprobanteDto tipoCbteDto = this.comprobanteSvc.ObtenerTipoComprobantePorCodigoAfip(cbteDto.TipoComprobanteId); if (tipoCbteDto != null) { cbteDto.TipoComprobanteId = tipoCbteDto.Id; } if (cbteAfip.DocTipo == 80) // CUIT { ClienteDto clienteDto = this.clienteSvc.ObtenerClientePorCuit(cbteAfip.DocNro); if (clienteDto != null) { cbteDto.ClienteId = clienteDto.Id; } } // #TODO: borrar //EstadoComprobanteDto estadoDto = this.comprobanteSvc.ObtenerEstado(CodigoEstadoCbte.NoVisualizado); //if (estadoDto != null) //{ // cbteDto.EstadoId = estadoDto.Id; //} this.comprobanteSvc.CrearComprobante(cbteDto); cbteNro = (long)cbteDto.CbteHasta + 1; } else { break; } } } }
private string RemoverComprobantesAutorizados(FEAuthRequest feAuthRequest, FECAERequest feCAERequest) { StringBuilder comprobanteAutorizados = new StringBuilder(); // Remover comprobantes que ya tienen CAE if (feCAERequest.FeDetReq.Length > 0) { FERecuperaLastCbteResponse ultimoCbteAutorizadoAfip = this.ObtenerUltimoComprobanteAutorizado(feAuthRequest, feCAERequest); List <FECAEDetRequest> feDetReqList = new List <FECAEDetRequest>(); TipoComprobanteDto tipoCbteDto = this.comprobanteSvc.ObtenerTipoComprobantePorCodigoAfip(feCAERequest.FeCabReq.CbteTipo); foreach (var cbte in feCAERequest.FeDetReq) { if (ultimoCbteAutorizadoAfip != null && cbte.CbteDesde <= ultimoCbteAutorizadoAfip.CbteNro) { // En el archivo hay comprobantes ya autorizados // se debe remover del pedido y reportar la advertencia comprobanteAutorizados.AppendFormat("ADVERTENCIA: {0} Pto Venta: {1} Nro Desde: {2} Hasta: {3} ya ha sido autorizado", tipoCbteDto.Descripcion , feCAERequest.FeCabReq.PtoVta , cbte.CbteDesde , cbte.CbteHasta); } else { feDetReqList.Add(cbte); } } feCAERequest.FeDetReq = feDetReqList.ToArray(); } return(comprobanteAutorizados.ToString()); }
private static string consultarAfip(int p_pv, int p_codigo, double p_importe, double p_iva, double p_total, DateTime p_fecha, long doc, int concepto, int tipo_doc, int tipo_iva, string moneda) { numero_comprobante = 0; cae_comprobante = ""; cae_vencimiento = ""; mensaje_afip = ""; mensaje_obs = ""; mensaje_error = ""; string m = ""; resultado = "R"; try { if (Main.authRequest == null) { Main.authRequest = new FEAuthRequest(); Main.authRequest.Cuit = Main.CUIT; Main.authRequest.Sign = Main.SING; Main.authRequest.Token = Main.TOKEN; } AFIP.TEST.WSFE.Service service = getServicio(); service.ClientCertificates.Add(Main.certificado); /* * if (Main.Testing == 1) * { * AFIP.TEST.WSFE.Service service = getServicioTest(); * service.ClientCertificates.Add(Main.certificado); * } * else * { * AFIP.WSFE.Service service = getServicioProducion(); * service.ClientCertificates.Add(Main.certificado); * }*/ //PtoVenta pvObj = ptos_venta_cm.SelectedItem; //int pv = p_pv;//pvObj.Nro; //CbteTipo cm = p_codigo;//TiposComprobantesCMB.SelectedItem; FECAERequest req = new FECAERequest(); FECAECabRequest cab = new FECAECabRequest(); FECAEDetRequest det = new FECAEDetRequest(); cab.CantReg = 1; cab.PtoVta = p_pv; cab.CbteTipo = p_codigo;//cm.Id; req.FeCabReq = cab; FECAEDetRequest bar = det; //ConceptoTipo concepto = TipoConcepto.SelectedItem; bar.Concepto = concepto; //concepto.ID; //DocTipo doctipo = TipoDocCMB.SelectedItem; bar.DocTipo = tipo_doc; //doctipo.Id bar.DocNro = doc; //long.Parse(DocTX.Text) //Buscar el ultimo numero try { FERecuperaLastCbteResponse lastRes = service.FECompUltimoAutorizado(Main.authRequest, p_pv, p_codigo); int last = lastRes.CbteNro; bar.CbteDesde = last + 1; bar.CbteHasta = last + 1; } catch { bar.CbteDesde = p_codigo; bar.CbteHasta = p_codigo; } bar.CbteFch = p_fecha.ToString("yyyyMMdd"); //FechaDTP.Value.ToString("yyyyMMdd"); bar.ImpNeto = Double.Parse(p_importe.ToString("0.00")); //NetoTX.Text; bar.ImpIVA = Double.Parse(p_iva.ToString("0.00")); // ImpIvaTx.Text; bar.ImpTotal = Double.Parse(p_total.ToString("0.00")); // TotalTx.Text; bar.ImpTotConc = 0; bar.ImpOpEx = 0; bar.ImpTrib = 0; //Moneda mon = MonedaCMB.SelectedItem; bar.MonId = moneda;// mon.Id bar.MonCotiz = 1; AlicIva alicuota = new AlicIva(); //IvaTipo ivat = TipoIVACmb.SelectedItem; alicuota.Id = tipo_iva; // ivat.Id alicuota.BaseImp = p_importe; // NetoTX.Text alicuota.Importe = Double.Parse(p_iva.ToString("0.00")); // ImpIvaTx.Text bar.Iva = new AlicIva[] { alicuota }; //bar.Iva.Append(alicuota); req.FeDetReq = new FECAEDetRequest[] { bar }; //req.FeDetReq.Append(bar); try { FECAEResponse r = service.FECAESolicitar(Main.authRequest, req); string vbCrLf = "\n"; resultado = r.FeDetResp[0].Resultado; m = "Estado Cabecera: " + r.FeCabResp.Resultado + vbCrLf; m += "Estado Detalle: " + r.FeDetResp[0].Resultado; m += vbCrLf; m += "CAE: " + r.FeDetResp[0].CAE; m += vbCrLf; m += "Vto: " + r.FeDetResp[0].CAEFchVto; m += vbCrLf; m += "Numero de comprobante: " + r.FeDetResp[0].CbteDesde; m += vbCrLf; numero_comprobante = r.FeDetResp[0].CbteDesde; cae_comprobante = r.FeDetResp[0].CAE; cae_vencimiento = r.FeDetResp[0].CAEFchVto; if (r.FeDetResp[0].Observaciones != null) { foreach (var o in r.FeDetResp[0].Observaciones) { mensaje_obs += string.Format("Obs: {0} ({1})", o.Msg, o.Code) + vbCrLf; m += mensaje_obs; } } if (r.Errors != null) { foreach (var er in r.Errors) { mensaje_error += string.Format("Er: {0}: {1}", er.Code, er.Msg) + vbCrLf; m += mensaje_error; } } if (r.Events != null) { foreach (var ev in r.Events) { mensaje_afip += string.Format("Ev: {0}: {1}", ev.Code, ev.Msg) + vbCrLf; m += mensaje_afip; } } } catch (Exception e) { LogHelper.Log(LogTarget.File, DateTime.Now.ToString() + " - ERROR COMPROBANTE AFIP: " + e.Message + " - " + e.StackTrace); m = "ERROR"; return(m); } //Resultado.Text = m LogHelper.Log(LogTarget.File, DateTime.Now.ToString() + " - Consultando en AFIP: " + resultado); } catch (Exception e) { LogHelper.Log(LogTarget.File, DateTime.Now.ToString() + " - ERROR COMPROBANTE AFIP: " + e.Message + " - " + e.StackTrace); //MessageBox.Show("ERROR: "+e.Message+"\n"+e.StackTrace); } return(m); }
private void btnConsultar_Click(object sender, EventArgs e) { this.txtResultados.Text = string.Empty; if (cbWebService.SelectedItem != null) { string selectedValue = (cbWebService.SelectedItem as WebServiceAfipDto).Nombre.Trim(); if (selectedValue == GetTiposMonedasNombre) { this.gridResultados.DataSource = this.client.GetTiposMonedas(this.ticket).ResultGet; } else if (selectedValue == GetTiposCbtesNombre) { this.gridResultados.DataSource = this.client.GetTiposCbte(this.ticket).ResultGet; } else if (selectedValue == GetTiposTributosNombre) { this.gridResultados.DataSource = this.client.GetTiposTributos(this.ticket).ResultGet; } else if (selectedValue == GetTiposIvaNombre) { this.gridResultados.DataSource = this.client.GetTiposIva(this.ticket).ResultGet; } else if (selectedValue == GetTiposOpcionalNombre) { this.gridResultados.DataSource = this.client.GetTiposOpcional(this.ticket).ResultGet; } else if (selectedValue == CompTotXRequestNombre) { this.txtResultados.Text = this.client.CompTotXRequest(this.ticket).RegXReq.ToString(); } else if (selectedValue == GetTiposDocNombre) { this.gridResultados.DataSource = this.client.GetTiposDoc(this.ticket).ResultGet; } else if (selectedValue == CompUltimoAutorizadoNombre) { if (string.IsNullOrEmpty(this.txtPtoVta.Text)) { MessageBox.Show("Debe ingresar un valor para el Punto de Venta", "Validación campos", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } int ptoVtaInt = int.Parse(this.txtPtoVta.Text); int cbteTipo = int.Parse(this.cbTiposCbte.SelectedValue.ToString()); FERecuperaLastCbteResponse result = this.client.CompUltimoAutorizado(this.ticket, ptoVtaInt, cbteTipo); var tiposDeComprobante = ComprobanteService.ObtenerTiposComprobantes(); string tipoComprobanteStr = result.CbteTipo.ToString(); var tipoDeComprobante = tiposDeComprobante.Where(t => t.CodigoAfip.HasValue && t.CodigoAfip.Value == result.CbteTipo).SingleOrDefault(); if (tipoDeComprobante != null) { tipoComprobanteStr = string.Format("{0}, AFIP {1} {2}", tipoDeComprobante.Codigo, tipoDeComprobante.CodigoAfip, tipoDeComprobante.Descripcion); } this.txtResultados.Text = string.Format(@"CbteNro: {0}{1}CbteTipo: {2}{3}PtoVta: {4}{5}", result.CbteNro, Environment.NewLine, tipoComprobanteStr, Environment.NewLine, result.PtoVta, Environment.NewLine); } else if (selectedValue == GetTiposConceptoNombre) { this.gridResultados.DataSource = this.client.GetTiposConcepto(this.ticket).ResultGet; } else if (selectedValue == GetCotizacionNombre) { string monId = this.cbMoneda.SelectedValue.ToString(); Cotizacion cotizacion = this.client.GetCotizacion(this.ticket, monId).ResultGet; if (cotizacion != null) { this.txtResultados.Text = string.Format(@"Fecha: {0}{1}Cotizacion: ${2}{3}", DateTime.ParseExact(cotizacion.FchCotiz, "yyyyMMdd", CultureInfo.InvariantCulture).ToString("dd/MM/yyyy"), Environment.NewLine, cotizacion.MonCotiz, Environment.NewLine); } else { this.txtResultados.Text = "No hay cotizacion disponible"; } } else if (selectedValue == FEXGetLast_ID) { this.gridResultados.DataSource = this.client.GetLastId(this.ticketFex).FEXResultGet; } else if (selectedValue == FEXGetPARAM_Cbte_Tipo) { this.gridResultados.DataSource = this.client.GetTiposComprobantes(this.ticketFex).FEXResultGet; } else if (selectedValue == FEXGetPARAM_DST_CUIT) { this.gridResultados.DataSource = this.client.GetCuits(this.ticketFex).FEXResultGet.OrderBy(c => c.DST_Ds).ToList(); } else if (selectedValue == FEXGetPARAM_DST_pais) { this.gridResultados.DataSource = this.client.GetPaises(this.ticketFex).FEXResultGet.OrderBy(p => p.DST_Ds).ToList(); } else if (selectedValue == FEXGetPARAM_Idiomas) { this.gridResultados.DataSource = this.client.GetIdiomas(this.ticketFex).FEXResultGet; } else if (selectedValue == FEXGetPARAM_Incoterms) { this.gridResultados.DataSource = this.client.GetIncoterms(this.ticketFex).FEXResultGet; } else if (selectedValue == FEXGetPARAM_MON) { this.gridResultados.DataSource = this.client.GetMonedas(this.ticketFex).FEXResultGet.OrderBy(m => m.Mon_Ds).ToList(); } else if (selectedValue == FEXGetPARAM_PtoVenta) { this.gridResultados.DataSource = this.client.GetPuntosDeVenta(this.ticketFex).FEXResultGet; } else if (selectedValue == FEXGetPARAM_Tipo_Expo) { this.gridResultados.DataSource = this.client.GetTiposDeExportacion(this.ticketFex).FEXResultGet; } else if (selectedValue == FEXGetPARAM_UMed) { this.gridResultados.DataSource = this.client.GetUnidadesDeMedida(this.ticketFex).FEXResultGet.Where(u => u != null).OrderBy(u => u.Umed_Ds).ToList(); } if (selectedValue == GetTiposMonedasNombre || selectedValue == GetTiposCbtesNombre || selectedValue == GetTiposTributosNombre || selectedValue == GetTiposIvaNombre || selectedValue == GetTiposOpcionalNombre || selectedValue == GetTiposDocNombre || selectedValue == GetTiposConceptoNombre) { this.lblResultados.Text = string.Format("Resultados: {0} registros", this.gridResultados.RowCount); } else if (selectedValue == FEXGetCMP) { if (string.IsNullOrEmpty(this.txtNroCbteFex.Text.Trim()) || string.IsNullOrEmpty(this.cbTiposCbteFex.SelectedValue.ToString()) || string.IsNullOrEmpty(this.cbPtosVtaFex.SelectedValue.ToString())) { MensajeValidarParametros(); return; } ClsFEXGetCMP fexGetCmp = new ClsFEXGetCMP(); fexGetCmp.Cbte_nro = long.Parse(this.txtNroCbteFex.Text.Trim()); fexGetCmp.Cbte_tipo = short.Parse(this.cbTiposCbteFex.SelectedValue.ToString()); fexGetCmp.Punto_vta = short.Parse(this.cbPtosVtaFex.SelectedValue.ToString()); FEXGetCMPResponse result = this.client.GetComprobante(this.ticketFex, fexGetCmp); // TODO: mostrar resultado } else if (selectedValue == FEXGetLast_CMP) { if (string.IsNullOrEmpty(this.cbTiposCbteFex.SelectedValue.ToString()) || string.IsNullOrEmpty(this.cbPtosVtaFex.SelectedValue.ToString())) { MensajeValidarParametros(); return; } ClsFEX_LastCMP fexLastCmp = new ClsFEX_LastCMP(); fexLastCmp.Cbte_Tipo = short.Parse(this.cbTiposCbteFex.SelectedValue.ToString()); fexLastCmp.Pto_venta = short.Parse(this.cbPtosVtaFex.SelectedValue.ToString()); fexLastCmp.Cuit = this.ticketFex.Cuit; fexLastCmp.Sign = this.ticketFex.Sign; fexLastCmp.Token = this.ticketFex.Token; FEXResponseLast_CMP result = this.client.GetUltimoComprobanteAutorizado(fexLastCmp); // TODO: mostrar resultado } else if (selectedValue == FEXGetLast_ID) { FEXResponse_LastID result = this.client.GetLastId(this.ticketFex); this.txtResultados.Text = result.FEXResultGet.Id.ToString(); } else if (selectedValue == FEXGetPARAM_Ctz) { if (string.IsNullOrEmpty(this.cbMoneda.SelectedValue.ToString())) { MensajeValidarParametros(); return; } string monId = this.cbMoneda.SelectedValue.ToString(); FEXResponse_Ctz cotizacion = this.client.GetFexCotizacion(this.ticketFex, monId); if (cotizacion != null) { this.txtResultados.Text = string.Format(@"Fecha: {0}{1}Cotizacion: ${2}{3}", DateTime.ParseExact(cotizacion.FEXResultGet.Mon_fecha, "yyyyMMdd", CultureInfo.InvariantCulture).ToString("dd/MM/yyyy"), Environment.NewLine, cotizacion.FEXResultGet.Mon_ctz, Environment.NewLine); } else { this.txtResultados.Text = "No hay cotizacion disponible"; } } } }
public string comprobante_electronico(int tipocomprobante, long nrodoc, double total, double neto21, double civa21, double neto105, double civa105, ref string cae, ref string fechavto, ref string tipofactura, ref string puntoventa) { try { LoginClass miloginclase = new LoginClass("wsfe", NegocioConfigEmpresa.urllogin, @"C:\CertificadodonVito\certificado.pfx", ""); miloginclase.hacerLogin(miloginclase); int doctipoid = 96; authRequest = new FEAuthRequest(); authRequest.Cuit = NegocioConfigEmpresa.emcuit; authRequest.Sign = miloginclase.Sing; authRequest.Token = miloginclase.Token; Service servicio = new Service(); servicio = getServicio(); servicio.Url = NegocioConfigEmpresa.urlservicio; //servicio.ClientCertificates.Add(certificado); //ver conceptoid int conceptoid = CONCEPTO_PRODUCTO; if (nrodoc.ToString().Length == 11) { doctipoid = 80; } // Service service = getServicio(); servicio.ClientCertificates.Add(miloginclase.Certificado); FECAERequest req = new FECAERequest(); FECAECabRequest cab = new FECAECabRequest(); FECAEDetRequest det = new FECAEDetRequest(); cab.CantReg = 1; cab.PtoVta = Convert.ToInt32(NegocioConfigEmpresa.puntoventa); cab.CbteTipo = tipocomprobante; req.FeCabReq = cab; det.Concepto = conceptoid; det.DocTipo = doctipoid; det.DocNro = nrodoc; // ultimo comprobante autorizado FERecuperaLastCbteResponse lastres = servicio.FECompUltimoAutorizado(authRequest, 3, tipocomprobante); int last = lastres.CbteNro; det.CbteDesde = last + 1; det.CbteHasta = last + 1; int nrocomprobante = last + 1; det.CbteFch = DateTime.Now.ToString("yyyyMMdd"); if (tipocomprobante == 1 || tipocomprobante == 6) { decimal totalneto = decimal.Round(Convert.ToDecimal(neto21 + neto105), 2); decimal totaliva = decimal.Round(Convert.ToDecimal(civa21 + civa105), 2); det.ImpNeto = Convert.ToDouble(totalneto); det.ImpIVA = Convert.ToDouble(totaliva); } else { det.ImpNeto = total; det.ImpIVA = 0; } det.ImpTotal = total; det.ImpTotConc = 0.00; det.ImpOpEx = 0.00; det.ImpTrib = 0.00; det.MonId = "PES"; det.MonCotiz = 1; int tipoalicuota = ID_TASA_IVA_NINGUNO; AlicIva alicuota = new AlicIva(); if (tipocomprobante == TIPOCOMPROBANTE_FACTURA_A || tipocomprobante == TIPOCOMPROBANTE_FACTURA_B) { tipoalicuota = ID_TASA_IVA_21_00; alicuota.Id = tipoalicuota; alicuota.BaseImp = neto21; alicuota.Importe = civa21; if (neto105 > 0) { AlicIva alicuota2 = new AlicIva(); tipoalicuota = ID_TASA_IVA_10_50; alicuota2.Id = tipoalicuota; alicuota2.BaseImp = neto105; alicuota2.Importe = civa105; det.Iva = new[] { alicuota, alicuota2 }; } else { det.Iva = new[] { alicuota }; } } else { alicuota.Id = tipoalicuota; alicuota.BaseImp = 0; alicuota.Importe = 0; det.Iva = new[] { alicuota }; } req.FeDetReq = new[] { det }; FECAEResponse r = servicio.FECAESolicitar(authRequest, req); cae = r.FeDetResp[0].CAE; //string CAE string ESTADO = r.FeCabResp.Resultado; string resultado = r.FeDetResp[0].Resultado; fechavto = r.FeDetResp[0].CAEFchVto;//string vto puntoventa = NegocioConfigEmpresa.puntoventa; tipofactura = tipocomprobante.ToString("00"); string m = "ok"; { if (r.FeDetResp[0].Observaciones is object) { foreach (var o in r.FeDetResp[0].Observaciones) { m += string.Format("Obs: {0} ({1})", o.Msg, o.Code) + Constants.vbCrLf; } } } { if (r.Errors is object) { foreach (var er in r.Errors) { m += string.Format("Er: {0}: {1}", er.Code, er.Msg) + Constants.vbCrLf; } } } { if (r.Events is object) { foreach (var ev in r.Events) { m += string.Format("Ev: {0}: {1}", ev.Code, ev.Msg) + Constants.vbCrLf; } } } if (m == "ok") { m = m + nrocomprobante.ToString(); } return(m); } catch (Exception) { throw; } // string error = r.error; // string desde = r.FeDetResp[0].CbteDesde; // string hasta = r.FeDetResp[0].CbteHasta; // string OBSERVACION = r.FeDetResp[0].Observaciones; }