/// <summary> /// Ejecuta el envío de correos en un thread independiente /// </summary> /// <param name="e">trxVentas</param> protected override void OnDoWork(DoWorkEventArgs e) { int errores = 0; int i = 1; string asunto = ""; string cuerpo = ""; ReportProgress(0, "Iniciando proceso...\r\n"); object[] args = e.Argument as object[]; vwCfdTransaccionesDeVenta trxVenta = (vwCfdTransaccionesDeVenta)args[0]; cfdReglasEmail cliente = new cfdReglasEmail(_Conex, _Param); if (!cliente.SeccionesEmail(ref asunto, ref cuerpo)) { e.Result = "No puede enviar e-mails \r\n"; ReportProgress(100, cliente.ultimoMensaje + "\r\n"); return; } //log de facturas xml emitidas y anuladas cfdReglasFacturaXml doc = new cfdReglasFacturaXml(_Conex, _Param); EmailSmtp mail = new EmailSmtp(_Param.emailSmtp, _Param.emailPort, _Param.emailUser, _Param.emailPwd, _Param.emailSsl); ReglasME maquina = new ReglasME(_Param); string eBinario = ""; trxVenta.Rewind(); //move to first record do { if (CancellationPending) { e.Cancel = true; return; } if (trxVenta.Voidstts == 0) //documento no anulado { if (maquina.ValidaTransicion(_Param.tipoDoc, "ENVIA EMAIL", trxVenta.EstadoActual, "enviado")) { if (!cliente.ProcesaEnvioMail(mail, trxVenta.CUSTNMBR, trxVenta.Docid, trxVenta.Soptype, trxVenta.Sopnumbe, trxVenta.NombreCliente, trxVenta.EstadoActual, maquina.eBinarioNuevo, trxVenta.Mensaje, asunto, cuerpo)) { eBinario = maquina.eBinActualConError; errores++; } else { eBinario = maquina.eBinarioNuevo; } doc.ActualizaFacturaEmitida(trxVenta.Soptype, trxVenta.Sopnumbe, _Conex.Usuario, "emitido", "emitido", eBinario, maquina.EnLetras(eBinario) + cliente.ultimoMensaje); } } ReportProgress(i * 100 / trxVenta.RowCount, "Doc:" + trxVenta.Sopnumbe + " " + cliente.ultimoMensaje + maquina.ultimoMensaje + "\r\n"); i++; cliente.ultimoMensaje = ""; } while (trxVenta.MoveNext() && errores < 10); e.Result = "Envío de Emails finalizado! \r\n"; ReportProgress(100, ""); }
public async Task ProcesaEnviaCorreoAsync(ICfdiMetodosWebService servicioTimbre) { String msj = String.Empty; try { String eBinario = String.Empty; trxVenta.Rewind(); //move to first record int numRegistros = trxVenta.RowCount; int usuarioConAcceso = 1; int errores = 0; int i = 0; cfdReglasFacturaXml LogComprobante = new cfdReglasFacturaXml(_Conex, _Param); //log de facturas xml emitidas y anuladas cfdReglasEmail dirCorreos = new cfdReglasEmail(_Conex, _Param); OnProgreso(1, "INICIANDO ENVIO DE CORREOS..."); //Notifica al suscriptor do { string tipoMEstados = "DOCVENTA-" + trxVenta.EstadoContabilizado; trxVenta.CicloDeVida = new Maquina(trxVenta.EstadoActual, trxVenta.Regimen, trxVenta.Voidstts, "emisor", tipoMEstados); msj = String.Empty; try { trxVenta.ArmarDocElectronico(string.Empty); msj = await EjecutaEventoEnviaCorreoAsync(servicioTimbre, LogComprobante, dirCorreos, usuarioConAcceso); } 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!"); }
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); }
private async Task <string> EjecutaEventoEnviaCorreoAsync(ICfdiMetodosWebService servicioTimbre, cfdReglasFacturaXml LogComprobante, cfdReglasEmail dirCorreos, int usuarioConAcceso) { string resultado = string.Empty; if (trxVenta.CicloDeVida.Transiciona(Maquina.eventoEnviaCorreo, usuarioConAcceso)) { DireccionesEmail dir = dirCorreos.ObtieneDirecciones(trxVenta.CUSTNMBR); string correos = string.Concat(Utiles.Derecha(dir.mailTo, dir.mailTo.Length - 1), dir.mailCC, dir.mailCCO); String[] acorreos = correos.Split(new char[] { ',' }); if (acorreos.Count() > 0) { resultado = await servicioTimbre.EnviaCorreoAsync(trxVenta.DocGP.DocVenta.cliente_numeroIdentificacion, trxVenta.Ruta_certificadoPac, trxVenta.Ruta_clavePac, trxVenta.DocGP.DocVenta.prefijo, trxVenta.DocGP.DocVenta.consecutivoDocumento, acorreos[0]); LogComprobante.RegistraLogDeArchivoXML(trxVenta.Soptype, trxVenta.Sopnumbe, resultado, trxVenta.CicloDeVida.idxTargetSingleStatus.ToString(), _Conex.Usuario, string.Empty, trxVenta.CicloDeVida.targetSingleStatus, trxVenta.CicloDeVida.targetBinStatus, trxVenta.CicloDeVida.EstadoEnPalabras(trxVenta.CicloDeVida.targetBinStatus)); LogComprobante.ActualizaFacturaEmitida(trxVenta.Soptype, trxVenta.Sopnumbe, _Conex.Usuario, Maquina.estadoBaseEmisor, Maquina.estadoBaseEmisor, trxVenta.CicloDeVida.targetBinStatus, trxVenta.CicloDeVida.EstadoEnPalabras(trxVenta.CicloDeVida.targetBinStatus), trxVenta.CicloDeVida.idxTargetSingleStatus.ToString()); } else { resultado = "El cliente no tiene una dirección de correo configurada."; } } return(resultado); }