Exemplo n.º 1
0
        /// <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, "");
        }
Exemplo n.º 2
0
        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!");
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }