Beispiel #1
0
        private async void EnviarParaContabilidadeCmd_Execute(Window window)
        {
            var    periodo = DateTime.ParseExact(Ano + Mes, "yyyyMM", CultureInfo.InvariantCulture);
            string path    = await _geradorZip.GerarZipEnvioContabilidadeAsync(periodo);

            if (!string.IsNullOrWhiteSpace(path))
            {
                MessageBox.Show("Arquivos gerados com sucesso!", "Sucesso!", MessageBoxButton.OK, MessageBoxImage.Information);
            }
            else
            {
                MessageBox.Show("Houve um erro ao tentar gerar os arquivos para envio. Tente novamente e, se o erro persistir, contate o suporte.", "Erro!", MessageBoxButton.OK, MessageBoxImage.Information);
            }

            window.Close();
        }
Beispiel #2
0
        public Task EnviarNotasParaContabilidade(int diaParaEnvio)
        {
            return(Task.Run(async() =>
            {
                var historicoPeriodoCount =
                    await _historicoEnvioContabilidadeRepository.GetHistoricoByPeriodoAsync(DateTime.Now.AddMonths(-1));

                if (DateTime.Now.Day >= diaParaEnvio && historicoPeriodoCount == 0)
                {
                    var periodo = DateTime.Now.AddMonths(-1);
                    var periodoStr = periodo.ToString("MM/yyyy");
                    var path = await _geradorZip.GerarZipEnvioContabilidadeAsync(periodo);

                    if (string.IsNullOrWhiteSpace(path))
                    {
                        throw new Exception("Ocorreu um erro ao gerar os arquivos das notas fiscais!");
                    }

                    try
                    {
                        var emissor = _emitenteRepository.GetEmitente();

                        string fromAccount = ConfigurationManager.AppSettings["fromMailAccount"];
                        string fromMail = ConfigurationManager.AppSettings["fromMailName"];

                        var fromAddress = new MailAddress(fromAccount, fromMail);
                        var toAddress = new MailAddress(ConfigurationManager.AppSettings["toMailAccount"], ConfigurationManager.AppSettings["toMailName"]);
                        string fromPassword = ConfigurationManager.AppSettings["fromMailPassword"];
                        var subject = string.Concat("Notas Fiscais " + periodoStr, " - ", emissor.RazaoSocial, " - ",
                                                    emissor.CNPJ);
                        const string body = "Notas fiscais em anexo a esse e-mail. \n\nEsta é uma mensagem automática.";

                        var smtp = new SmtpClient
                        {
                            Host = "smtp.outlook.com",
                            Port = 587,
                            EnableSsl = true,
                            DeliveryMethod = SmtpDeliveryMethod.Network,
                            UseDefaultCredentials = false,
                            Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
                        };

                        var data = new Attachment(path, MediaTypeNames.Application.Octet);

                        using (var message = new MailMessage(fromAddress, toAddress)
                        {
                            Subject = subject,
                            Body = body
                        })
                        {
                            message.Attachments.Add(data);
                            smtp.Send(message);
                        }

                        _historicoEnvioContabilidadeRepository.Salvar(new HistoricoEnvioContabilidade
                        {
                            DataEnvio = DateTime.Now, Periodo = periodoStr
                        });
                    }
                    catch (Exception e)
                    {
                        log.Error(e);
                        if (e.GetType() == typeof(SmtpException))
                        {
                            throw new Exception(
                                "Não foi possível enviar o e-mail para a contabilidade, verifique sua conexão com a internet.",
                                e);
                        }

                        if (!_hasAlreadyTried)
                        {
                            await EnviarNotasParaContabilidade(diaParaEnvio);
                        }
                        else
                        {
                            historicoPeriodoCount =
                                await _historicoEnvioContabilidadeRepository.GetHistoricoByPeriodoAsync(
                                    DateTime.Now.AddMonths(-1));

                            if (historicoPeriodoCount == 0)
                            {
                                throw new Exception("Ocorreu um erro ao tentar enviar as notas para a contabilidade.");
                            }
                        }

                        _hasAlreadyTried = true;
                    }
                }
            }));
        }