public async Task <string> ProcesaConsultaStatusAsync(ICfdiMetodosWebService servicioTimbre) { string statusActual = string.Empty; try { String msj = String.Empty; trxVenta.Rewind(); //move to first record int errores = 0; int i = 0; cfdReglasFacturaXml LogComprobante = new cfdReglasFacturaXml(_Conex, _Param); //log de facturas xml emitidas y anuladas string tipoMEstados = "DOCVENTA-" + trxVenta.EstadoContabilizado; trxVenta.CicloDeVida = new Maquina(trxVenta.EstadoActual, trxVenta.Regimen, trxVenta.Voidstts, "emisor", tipoMEstados); OnProgreso(1, "INICIANDO CONSULTA DE STATUS..."); //Notifica al suscriptor do { msj = String.Empty; try { trxVenta.ArmarDocElectronico(string.Empty); statusActual = await servicioTimbre.ConsultaStatusAlOSEAsync(trxVenta.DocGP.DocVenta.consecutivoDocumento, trxVenta.Ruta_certificadoPac, trxVenta.Ruta_clavePac, trxVenta.DocGP.DocVenta.tipoDocumento, trxVenta.DocGP.DocVenta.prefijo, trxVenta.DocGP.DocVenta.consecutivoDocumento); String[] codigoYMensaje = statusActual.Split(new char[] { '-' }); int evento = Maquina.eventoNoHaceNada; //Determina evento en base al resultado del ws switch (codigoYMensaje[0]) { case "z01": evento = Maquina.eventoAcuseAceptado; break; case "z02": evento = Maquina.eventoAcuseRechazado; break; default: evento = Maquina.eventoNoHaceNada; break; } EjecutaEvento(evento, servicioTimbre, LogComprobante, 1); msj = "Status: " + statusActual; } catch (Exception lo) { string imsj = lo.InnerException == null ? "" : lo.InnerException.ToString(); msj = lo.Message + " " + imsj + Environment.NewLine + lo.StackTrace; errores++; } finally { OnProgreso(i * 100 / trxVenta.RowCount, "Doc:" + trxVenta.Sopnumbe + " " + msj.Trim() + Environment.NewLine); //Notifica al suscriptor i++; } } while (trxVenta.MoveNext() && errores < 10); } catch (Exception xw) { string imsj = xw.InnerException == null ? "" : xw.InnerException.ToString(); this.ultimoMensaje = xw.Message + " " + imsj + Environment.NewLine + xw.StackTrace; } finally { OnProgreso(100, ultimoMensaje); } OnProgreso(100, "PROCESO FINALIZADO!"); return(statusActual); }
public async Task <string> ProcesaConsultaStatusAsync(ICfdiMetodosWebService servicioTimbre) { string statusActual = string.Empty; String msj = String.Empty; try { trxVenta.Rewind(); //move to first record int usuarioConAcceso = 1; int numRegistros = trxVenta.RowCount; string extension = ".xml"; int errores = 0; int i = 0; cfdReglasFacturaXml LogComprobante = new cfdReglasFacturaXml(_Conex, _Param); //log de facturas xml emitidas y anuladas OnProgreso(1, "INICIANDO CONSULTA DE STATUS..."); //Notifica al suscriptor do { string tipoMEstados = "DOCVENTA-" + trxVenta.EstadoContabilizado; trxVenta.CicloDeVida = new Maquina(trxVenta.EstadoActual, trxVenta.Regimen, trxVenta.Voidstts, "emisor", tipoMEstados); msj = String.Empty; cfdReglasEmail dirCorreos = new cfdReglasEmail(_Conex, _Param); try { trxVenta.ArmarDocElectronico(string.Empty); statusActual = await servicioTimbre.ConsultaStatusAlOSEAsync(trxVenta.DocGP.DocVenta.consecutivoDocumento, trxVenta.Ruta_certificadoPac, trxVenta.Ruta_clavePac, trxVenta.DocGP.DocVenta.tipoDocumento, trxVenta.DocGP.DocVenta.prefijo, trxVenta.DocGP.DocVenta.consecutivoDocumento); String[] codigoYMensaje = statusActual.Split(new char[] { '-' }); int evento = Maquina.eventoNoHaceNada; //Determina evento en base al resultado del ws switch (codigoYMensaje[0]) { //case "z01": // evento = Maquina.eventoAcuseAceptado; // EjecutaEvento(evento, servicioTimbre, LogComprobante, 1); // break; //case "z02": // evento = Maquina.eventoAcuseRechazado; // EjecutaEvento(evento, servicioTimbre, LogComprobante, 1); // break; case "200": string nombreArchivo = ArmaNombreDeArchivo() + "_" + Maquina.eventoDIANAcepta.ToString(); string rutaYNombreArchivo = string.Empty; EjecutaEventoEmite(LogComprobante, nombreArchivo, extension, usuarioConAcceso); string xmlFactura = await EjecutaEventoServicioImpuestosAceptaAsync(servicioTimbre, LogComprobante, nombreArchivo, extension, usuarioConAcceso); rutaYNombreArchivo = await EjecutaEventoObtienePDFAsync(servicioTimbre, LogComprobante, nombreArchivo, usuarioConAcceso); EjecutaEvento(Maquina.eventoEnviaCorreo, servicioTimbre, LogComprobante, usuarioConAcceso, string.Empty); // msj = await EjecutaEventoEnviaCorreoAsync(servicioTimbre, LogComprobante, dirCorreos, usuarioConAcceso); break; default: evento = Maquina.eventoNoHaceNada; EjecutaEvento(evento, servicioTimbre, LogComprobante, 1, string.Empty); break; } msj = "Status: " + statusActual; } catch (Exception lo) { string imsj = lo.InnerException == null ? "" : lo.InnerException.ToString(); msj = lo.Message + " " + imsj + Environment.NewLine + lo.StackTrace; errores++; } finally { i++; OnProgreso(100 * i / numRegistros, "Doc:" + trxVenta.Sopnumbe + " " + msj.Trim() + Environment.NewLine); //Notifica al suscriptor } } while (trxVenta.MoveNext() && errores < 10); } catch (Exception xw) { msj = string.Concat(xw.Message, " ", xw?.InnerException?.Message, Environment.NewLine, xw.StackTrace); } finally { OnProgreso(100, msj); } OnProgreso(100, "PROCESO FINALIZADO!"); return(statusActual); }
public async Task <string> ProcesaConsultaStatusAsync(ICfdiMetodosWebService servicioTimbre) { string resultadoSunat = string.Empty; try { String msj = String.Empty; String eBinario = String.Empty; trxVenta.Rewind(); //move to first record int errores = 0; int i = 1; cfdReglasFacturaXml DocVenta = new cfdReglasFacturaXml(_Conex, _Param); //log de facturas xml emitidas y anuladas ReglasME maquina = new ReglasME(_Param); String accion = "CONSULTA STATUS"; OnProgreso(1, "INICIANDO CONSULTA DE STATUS..."); //Notifica al suscriptor do { msj = String.Empty; String claseDocumento = !trxVenta.Docid.Equals("RESUMEN") ? _Param.tipoDoc : trxVenta.Docid; try { String[] serieCorrelativo = trxVenta.Sopnumbe.Split(new char[] { '-' }); if (maquina.ValidaTransicion(claseDocumento, accion, trxVenta.EstadoActual)) { if (trxVenta.Voidstts == 0 && trxVenta.EstadoContabilizado.Equals("contabilizado")) //documento no anulado { string tipoDoc = string.Empty; string serie = string.Empty; string correlativo = string.Empty; trxVenta.ArmarDocElectronico(string.Empty); tipoDoc = trxVenta.DocGP.DocVenta.tipoDocumento; serie = serieCorrelativo[0]; correlativo = serieCorrelativo[1]; resultadoSunat = await servicioTimbre.ConsultaStatusAlOSEAsync(trxVenta.DocGP.DocVenta.consecutivoDocumento, trxVenta.Ruta_certificadoPac, trxVenta.Contrasenia_clavePac, tipoDoc, serie, correlativo); String[] codigoYMensaje = resultadoSunat.Split(new char[] { '-' }); maquina.DestinoAceptado = codigoYMensaje[0] == "0" ? true : false; maquina.ActualizarNodoDestinoStatusBase(); DocVenta.RegistraLogDeArchivoXML(trxVenta.Soptype, trxVenta.Sopnumbe, codigoYMensaje[1], codigoYMensaje[0], _Conex.Usuario, accion, maquina.DestinoStatusBase, maquina.DestinoEBinario, accion + ":" + codigoYMensaje[0]); if (codigoYMensaje[0].Equals("0") || int.Parse(codigoYMensaje[0]) > 1000) { DocVenta.ActualizaFacturaEmitida(trxVenta.Soptype, trxVenta.Sopnumbe, _Conex.Usuario, "emitido", "emitido", maquina.DestinoEBinario, maquina.DestinoMensaje, codigoYMensaje[0]); } msj = "Mensaje del OCE: " + resultadoSunat; } } } catch (Exception lo) { string imsj = lo.InnerException == null ? "" : lo.InnerException.ToString(); msj = lo.Message + " " + imsj + Environment.NewLine + lo.StackTrace; errores++; } finally { OnProgreso(i * 100 / trxVenta.RowCount, "Doc:" + trxVenta.Sopnumbe + " " + msj.Trim() + " " + maquina.ultimoMensaje + Environment.NewLine); //Notifica al suscriptor i++; } } while (trxVenta.MoveNext() && errores < 10); } catch (Exception xw) { string imsj = xw.InnerException == null ? "" : xw.InnerException.ToString(); this.ultimoMensaje = xw.Message + " " + imsj + Environment.NewLine + xw.StackTrace; } finally { OnProgreso(100, ultimoMensaje); } OnProgreso(100, "PROCESO FINALIZADO!"); return(resultadoSunat); }