예제 #1
0
        public void CheckBoletosPagos()
        {
            ThreadPool.QueueUserWorkItem(x =>
            {
                while (true)
                {
                    try
                    {
                        // Buscar todos os clientes no banco de dados.
                        var boletos = this.DbUtils.GetClientesEmAberto();

                        using (var cmd = new KingHostCommands())
                        {
                            foreach (var boleto in boletos)
                            {
                                // Verifica se o boleto já foi pago, caso sim,
                                // atualiza a flag no banco de dados.
                                var boletoAberto = cmd.CheckBoletoPago(
                                    new DadosCliente()
                                {
                                    IdCliente = boleto.CodigoCliente
                                },
                                    new DadosBoleto()
                                {
                                    Numero = boleto.CodigoBoleto
                                });

                                boletoAberto.Wait();


                                if (boletoAberto.Result)
                                {
                                    // Atualiza falando que o boleto foi pago.
                                    this.DbUtils.AtualizaBoletoPago(boleto.CodigoHistorico);

                                    // Envia um e-mail para o cliente que pagou.
                                    var subject = string.Format("Pagamento do domínio: {0}", boleto.Dominio);
                                    var body    = string.Format("Foi realizado o pagamento do domínio: {0}", boleto.Dominio);
                                    Email.Send("*****@*****.**", subject, body);
                                }
                            }
                        }

                        Thread.Sleep(600000);
                    }
                    catch (Exception ex)
                    {
                        this.SaveError(ex);
                        Thread.Sleep(600000);
                    }
                }
            });
        }
예제 #2
0
        public void EnviaBoletos()
        {
            ThreadPool.QueueUserWorkItem(x =>
            {
                while (true)
                {
                    try
                    {
                        // Busca os clientes que devem enviar boletos.
                        var clientesEnvioBoleto = this.DbUtils.GetClientesParaEnvio();

                        foreach (var cliente in clientesEnvioBoleto)
                        {
                            // Se o boleto já foi enviado no dia atual, não deve ser enviado novamente.
                            if (cliente.DtHrUltimoEnvio != null && cliente.DtHrUltimoEnvio.Value.Date.Equals(DateTime.Now.Date))
                            {
                                continue;
                            }

                            // Verifica se a data de envio já passou e verifica se o boleto não foi enviado no mês atual.
                            if ((cliente.DiaEnvio <= DateTime.Now.Day) && (cliente.DtHrUltimoEnvio == null || cliente.DtHrUltimoEnvio.Value.Month != DateTime.Now.Month))
                            {
                                // Gera o boleto.
                                using (var cmd = new KingHostCommands())
                                {
                                    var dadosCliente = new DadosCliente()
                                    {
                                        IdCliente = cliente.CodigoCliente
                                    };
                                    var dadosDominio = new DadosDominio()
                                    {
                                        Id = cliente.CodigoDominio
                                    };

                                    var resultBoleto = cmd.CreateNewBoleto(
                                        dadosCliente,
                                        dadosDominio,
                                        DateTime.Now.AddDays(7),
                                        cliente.Valor,
                                        "Instrução de teste",
                                        "Descrição de teste");

                                    // Espera o boleto ser gerado.
                                    resultBoleto.Wait();

                                    if (!resultBoleto.Result.Success)
                                    {
                                        throw new Exception("Algum problema aconteceu ao gerar o boleto.");
                                    }

                                    // Envia o e-mail.
                                    {
                                        string subject = string.Format(
                                            "Boleto para pagamento da hospedagem do domínio: {0}",
                                            cliente.Dominio);

                                        string body = string.Format(@"
                                            Prezado(a) {0},
                                            <br><br>
                                            Seguem os dados para pagamento de sua fatura. Boleto bancário disponível para impressão em:<br>
                                            <a href='{1}'>{1}</a>
                                            <br><br>
                                            VALOR A PAGAR: R$ {2}<br>
                                            DOMÍNIO: {3}
                                            <br><br>
                                            Atenciosamente,<br>
                                            Financeiro Agência WD7
                                            <br><br>
                                            [email protected]<br>
                                            www.agenciawd7.com.br", cliente.Nome, resultBoleto.Result.Body.Url, cliente.Valor, cliente.Dominio);

                                        string to = string.Format("{0}; [email protected]", cliente.Email);

                                        Email.Send(to, subject, body);
                                    }

                                    // Atualiza a data de envio.
                                    this.DbUtils.AtualizaDataEnvio(cliente.IdBoleto);

                                    // Salva no histórico que o boleto foi enviado.
                                    this.DbUtils.InsereHistorico(cliente.IdBoleto, resultBoleto.Result.Body);
                                }
                            }
                        }

                        Thread.Sleep(600000);
                    }
                    catch (Exception ex)
                    {
                        this.SaveError(ex);
                        Thread.Sleep(600000);
                    }
                }
            });
        }