Ejemplo n.º 1
0
        public static async void UpdateCampanhas()
        {
            var camps = new List <CampanhaModel>()
            {
            };
            var camp = new CampanhaModel()
            {
            };

            await Task.Factory.StartNew(() =>
                                        Observable.Interval(TimeSpan.FromSeconds(30)).Subscribe(async x =>
            {
                foreach (var item in Colecoes.CampanhasEnviadas.Values)
                {
                    Colecoes.CampanhasEnviadas.TryRemove(item.CampanhaID, out camp);
                    camps.Add(camp);
                }
                if (camps.Any())
                {
                    Console.WriteLine("atualizando campanhas");

                    await new DALCampanha().CampanhasLoteNovo(camps);
                    camps.Clear();
                }
            })
                                        , TaskCreationOptions.LongRunning);
        }
Ejemplo n.º 2
0
        public int SaveCliente(CampanhaModel model)
        {
            if (model.Id > 0)
            {
                return(this.Update(model));
            }

            return(this.Add(model));
        }
Ejemplo n.º 3
0
 private void MapAndSave(Campanha campanhaEntity, CampanhaModel campanha)
 {
     this.SaveCampanha(campanhaEntity, campanha);
     this.SaveImagens(campanhaEntity.Id, campanha.Imagens, campanha.UpdatedById);
     if (!campanha.Nacional)
     {
         this.SaveEstados(campanhaEntity.Id, campanha.Estados, campanha.UpdatedById);
         this.SaveCidades(campanhaEntity.Id, campanha.Cidades, campanha.UpdatedById);
     }
 }
Ejemplo n.º 4
0
        public void WriteSMS(CampanhaModel c)
        {
            Thread.Sleep(rnd.Next(2000, 2000));
            c.StatusEnvio = 2;
            c.DataEnviar  = DateTime.Now;

            Colecoes.CampanhasEnviadas.TryAdd(c.CampanhaID, c);
            this.Wait.Set();
            Console.WriteLine($"Sucesso {this.ToString()} CampanhaID {c.CampanhaID}");
        }
Ejemplo n.º 5
0
        public async Task <IActionResult> Upload(Guid id)
        {
            try
            {
                CampanhaModel campanha = await LocalizarCampanha(id);

                ViewBag.Prioridade = CarregarPrioridades(campanha.Prioridade);
                return(View("Upload", campanha));
            }
            catch (SessaoExpiradaException) { return(RedirectToAction("Logout", "Account")); }
        }
Ejemplo n.º 6
0
        protected async Task <SimpleResponseObj> EditarRegistro(CampanhaModel model)
        {
            _client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", ObterToken());
            var resultApi = await _client.PutAsJsonAsync("/api/v1/Campanha", model);

            if (resultApi.StatusCode.Equals(HttpStatusCode.Unauthorized))
            {
                throw new SessaoExpiradaException();
            }
            string conteudo = await resultApi.Content.ReadAsStringAsync();

            return(JsonConvert.DeserializeObject <SimpleResponseObj>(conteudo));
        }
Ejemplo n.º 7
0
 public IActionResult SaveCampanha([FromBody] CampanhaModel model)
 {
     try
     {
         model.UpdatedById = this.GetLoggedInUserId();
         _campanhaDao.SaveCliente(model);
         return(Ok());
     }
     catch (Exception ex)
     {
         _logger.ErrorAsync(ex, this.GetLoggedInUserId());
         throw ex;
     }
 }
Ejemplo n.º 8
0
        public async Task <IActionResult> Editar(Guid id, CampanhaModel model)
        {
            try
            {
                ViewBag.Prioridade = CarregarPrioridades(model.Prioridade);

                if (!ModelState.IsValid)
                {
                    return(View("Editar", model));
                }

                if (model.Prioridade.Value < 0 || model.Prioridade.Value > 3)
                {
                    ModelState.AddModelError("Prioridade", "A prioridade de estar dentro da lista de escolha");
                }

                if (model.ImgCampanha != null && model.ImgCampanha.Length > 524288)
                {
                    ModelState.AddModelError("ImgCampanha", "Tamanho máximo de arquivo excedido (500KBytes)");
                }

                if (ModelState.ErrorCount > 0)
                {
                    return(View("Editar", model));
                }

                SimpleResponseObj resposta = await EditarRegistro(model);

                if (resposta.Sucesso)
                {
                    if (model.ImgCampanha != null)
                    {
                        SimpleResponse respImg = await CarregarArquivo(model.Id.Value, model.ImgCampanha);

                        if (!respImg.Sucesso)
                        {
                            ViewBag.Prioridade = CarregarPrioridades(model.Prioridade);
                            model.Criticas     = "Falha ao carregar arquivo";
                            return(View("Editar", model));
                        }
                    }

                    return(RedirectToAction("Index"));
                }

                ModelState.AddModelError(string.Empty, $"Ops, algo deu errado, {resposta.Mensagem.ToString()}");
                return(View("Editar", model));
            }
            catch (SessaoExpiradaException) { return(RedirectToAction("Logout", "Account")); }
        }
Ejemplo n.º 9
0
        protected async Task <SimpleResponseObj> AdicionarRegistro(CampanhaModel model)
        {
            model.DataInicial = new DateTime(model.DataInicial.Value.Year, model.DataInicial.Value.Month, model.DataInicial.Value.Day, 0, 0, 0);
            model.DataFinal   = new DateTime(model.DataFinal.Value.Year, model.DataFinal.Value.Month, model.DataFinal.Value.Day, 23, 59, 59);

            _client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", ObterToken());
            var resultApi = await _client.PostAsJsonAsync("/api/v1/Campanha", model);

            if (resultApi.StatusCode.Equals(HttpStatusCode.Unauthorized))
            {
                throw new SessaoExpiradaException();
            }
            string conteudo = await resultApi.Content.ReadAsStringAsync();

            return(JsonConvert.DeserializeObject <SimpleResponseObj>(conteudo));
        }
Ejemplo n.º 10
0
        public async Task <IActionResult> Editar(Guid id)
        {
            try
            {
                int?          prioridade = 1;
                CampanhaModel campanha   = await LocalizarCampanha(id);

                if (campanha != null)
                {
                    prioridade = campanha.Prioridade;
                }
                ViewBag.Prioridade = CarregarPrioridades(prioridade);

                return(View("Editar", campanha));
            }
            catch (SessaoExpiradaException) { return(RedirectToAction("Logout", "Account")); }
        }
Ejemplo n.º 11
0
 Task Porta(int _porta)
 {
     return(Task.Factory.StartNew((k) =>
     {
         PortaCOMModel porta = new PortaCOMModel(_porta, "COM", FornecedorID);
         var camp = new CampanhaModel();
         while (true)
         {
             Thread.Sleep(Rnd.Next(3000, 5000));
             if (Campanhas.TryDequeue(out camp))
             {
                 porta.Wait.Reset();
                 porta.WriteSMS(camp);
                 porta.Wait.Wait();
             }
         }
     }, CancellationToken.None, TaskCreationOptions.LongRunning));
 }
Ejemplo n.º 12
0
        /// <summary>
        /// Localizar uma campanha pelo Id
        /// </summary>
        /// <param name="id">Id da campanha</param>
        protected async Task <CampanhaModel> LocalizarCampanha(Guid id)
        {
            _client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", ObterToken());
            HttpResponseMessage resultApi = await _client.GetAsync($"/api/v1/Campanha/{id.ToString()}");

            if (resultApi.StatusCode.Equals(HttpStatusCode.Unauthorized))
            {
                throw new SessaoExpiradaException();
            }
            string conteudo = await resultApi.Content.ReadAsStringAsync();

            CampanhaModel campanha = JsonConvert.DeserializeObject <CampanhaModel>(conteudo);

            if (!string.IsNullOrWhiteSpace(campanha.Imagem))
            {
                campanha.Imagem = $"{_url}{campanha.Imagem}";
            }
            return(campanha);
        }
Ejemplo n.º 13
0
        public async Task <IActionResult> AdicionaRatinhos([FromBody] CampanhaModel c)
        {
            try
            {
                if (string.IsNullOrEmpty(c.Token))
                {
                    throw new Exception("Token não presente");
                }

                ClaimsByToken(c.Token, "RatinhoAPI");

                if (c.Celular == 0)
                {
                    throw new Exception("O celular deve conter um valor");
                }
                else
                {
                    if (c.Celular.ToString().Length != 11)
                    {
                        throw new Exception("Tamanho do celular inválido");
                    }
                }
                await new CampanhaRepository().AdicionaRatinho(c);

                return(Ok());
            }
            catch (Exception err)
            {
                var _err = (err.InnerException ?? err).Message;

                if (_err.Contains("IX_RATINHOS_CELULAR"))
                {
                    _err = $"{c.Celular} já está cadastrado no sistema";
                }
                else if (_err.Contains("Signature validation failed"))
                {
                    _err = "Falha na validação do Token";
                }

                return(BadRequest(new { erro = _err }));
            }
        }
Ejemplo n.º 14
0
        public async Task <IActionResult> GravaRetornoRatinhos([FromBody] CampanhaModel c)
        {
            try
            {
                var validator = await Util.ValidaRequisicao(new CampanhaModelValidatorApiRatinho(), c);

                if (!validator.Item1)
                {
                    throw new Exception(validator.Item2);
                }

                await new CampanhaRepository().GravaRetornoRatinhos(c);

                return(Ok());
            }
            catch (Exception err)
            {
                return(BadRequest(new { erro = (err.InnerException ?? err).Message }));
            }
        }
Ejemplo n.º 15
0
        public int Update(CampanhaModel campanha)
        {
            using (var transaction = _testersContext.Database.BeginTransaction())
            {
                try
                {
                    var cm = this.GetById(campanha.Id);

                    this.MapAndSave(cm, campanha);

                    transaction.Commit();
                    return(cm.Id);
                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    throw ex;
                }
            }
        }
Ejemplo n.º 16
0
        private void SaveCampanha(Campanha campanhaEntity, CampanhaModel campanha)
        {
            if (campanha.Anunciante.Id <= 0)
            {
                campanhaEntity.AnuncianteId = this.InsertNovoAnunciante(campanha.Anunciante, campanha.UpdatedById);
            }
            else
            {
                campanhaEntity.AnuncianteId = campanha.Anunciante.Id;
            }

            campanhaEntity.Chave          = campanha.Chave;
            campanhaEntity.Titulo         = campanha.Titulo;
            campanhaEntity.Texto          = campanha.Texto;
            campanhaEntity.TipoCampanhaId = campanha.TipoCampanhaId;
            campanhaEntity.DataInicio     = campanha.DataInicio;
            campanhaEntity.DataFim        = campanha.DataFim;
            campanhaEntity.IsActive       = true;
            campanhaEntity.LinkTrackeado  = campanha.LinkTrackeado;
            campanhaEntity.Cupom          = campanha.Cupom;
            campanhaEntity.ClienteId      = campanha.ClienteId;
            campanhaEntity.UpdateDate     = DateTime.UtcNow;
            campanhaEntity.UpdatedById    = campanha.UpdatedById;

            if (campanhaEntity.Id > 0)
            {
                _testersContext.Campanhas.Update(campanhaEntity);
            }
            else
            {
                campanhaEntity.CreatedById = campanha.UpdatedById;
                campanhaEntity.CreatedDate = DateTime.UtcNow;
                _testersContext.Campanhas.Add(campanhaEntity);
            }

            _testersContext.SaveChanges();
        }
Ejemplo n.º 17
0
        public async Task <IActionResult> GenericCallBack([FromBody] object c, string token)
        {
            try
            {
                if (string.IsNullOrEmpty(token))
                {
                    throw new Exception("Token não presente");
                }

                var dados = ClaimsByToken(token, "FornecedorAPI");

                if (dados.Claims.Any(a => a.Type == "fornecedorid"))
                {
                    FornecedorID = int.Parse(dados.Claims.SingleOrDefault(a => a.Type == "fornecedorid").Value);
                }

                var fornecedor = new FornecedorModel()
                {
                    FornecedorID = FornecedorID,
                    ApiKey       = dados.Claims.SingleOrDefault(a => a.Type == JwtRegisteredClaimNames.Jti).Value
                };

                var campanha = new CampanhaModel();

                var retornos = new List <RetornoModel>()
                {
                };

                if (await new FornecedorRepository().IsApiKeyFornecedor(fornecedor))
                {
                    switch (fornecedor.FornecedorID)
                    {
                    case (int)FornecedorEnum.Zenvia:
                        var zenvia = JsonConvert.DeserializeObject <ZenviaJson>(c.ToString());

                        if (zenvia.CallbackMtRequest != null)                                //confirmação de entrega
                        {
                            campanha.CampanhaID   = long.Parse(zenvia.CallbackMtRequest.id);
                            campanha.StatusReport = StatusReport(zenvia.CallbackMtRequest.status, fornecedor.FornecedorID);
                            campanha.DataReport   = zenvia.CallbackMtRequest.received;
                        }
                        else if (zenvia.CallBackMoRequest != null)                                //retorno de cliente
                        {
                            retornos.Add(new RetornoModel()
                            {
                                CampanhaID     = long.Parse(zenvia.CallBackMoRequest.id),
                                RetornoCliente = zenvia.CallBackMoRequest.body,
                                DataRetorno    = zenvia.CallBackMoRequest.received
                            });
                        }

                        break;

                    case (int)FornecedorEnum.Conectta:
                        var conectta = JsonConvert.DeserializeObject <RetornoConectta>(c.ToString());

                        if (string.IsNullOrEmpty(conectta.retorno))
                        {
                            campanha.CampanhaID   = long.Parse(conectta.id);
                            campanha.StatusReport = StatusReport(conectta.statuscode, fornecedor.FornecedorID);
                            campanha.DataReport   = conectta.datareport;
                        }
                        else
                        {
                            retornos.Add(new RetornoModel()
                            {
                                CampanhaID     = long.Parse(conectta.id),
                                RetornoCliente = conectta.retorno,
                                DataRetorno    = conectta.dataretorno
                            });
                        }
                        break;

                    case (int)FornecedorEnum.Pontal:

                        var pontal = JsonConvert.DeserializeObject <PontalModel>(c.ToString());

                        if (pontal.type == "api_message")                                //confirmação de entrega
                        {
                            switch (pontal.status)
                            {
                            case 4:
                            case 14:
                            case 10:
                                campanha.StatusEnvio = 3;
                                break;

                            case 5:
                            case 7:
                            case 13:
                            case 6:
                                campanha.StatusReport = StatusReport(pontal.status, fornecedor.FornecedorID);
                                break;
                            }
                            campanha.CampanhaID = long.Parse(pontal.reference);
                            campanha.DataReport = DateTime.Now;
                        }
                        else if (pontal.type == "api_reply")                                 //retorno de cliente
                        {
                            retornos.AddRange(JsonConvert.DeserializeObject <retorno>(c.ToString())
                                              .replies
                                              .Select(a => new RetornoModel()
                            {
                                CampanhaID     = long.Parse(a.reference),
                                RetornoCliente = a.message,
                                DataRetorno    = a.received
                            }));
                        }
                        break;
                    }
                }

                if (campanha.CampanhaID > 0)                //MT
                {
                    await new CampanhaRepository().AtualizaItensStatusReport(new CampanhaModel[] { campanha });
                }
                else                 //MO
                {
                    await new RetornoRepository().AddByApi(retornos);

                    #region IOPeople Disparos Retornos
#pragma warning disable 4014

                    foreach (var retornoModel in retornos)
                    {
                        PostaRetornoIoPeople(new ReplyGenericModel()
                        {
                            received        = retornoModel.DataRetorno,
                            messageOriginal = retornoModel.RetornoCliente,
                            reference       = retornoModel.CampanhaID.ToString()
                        }, fornecedor.FornecedorID);
                    }


#pragma warning restore 4014
                    #endregion
                }

                return(Ok());
            }
            catch (Exception err)
            {
                return(BadRequest($"Erro {(err.InnerException ?? err).Message}"));
            }
        }
Ejemplo n.º 18
0
        public async Task <IActionResult> ConfirmacoesEntrega([FromBody] CampanhaModel c)
        {
            try
            {
                var validator = await Util.ValidaRequisicao(new CampanhaModelValidatorApi(), c);

                if (!validator.Item1)
                {
                    throw new Exception(validator.Item2);
                }

                var dados = ClaimsByToken(c.Token, "ClienteAPI");

                ClienteID = int.Parse(dados.Claims.SingleOrDefault(a => a.Type == "clienteid").Value);

                if (ClienteID == 0)
                {
                    throw new Exception("ClienteID sem valor no token");
                }

                if (dados.Claims.Any(a => a.Type == "usuarioid"))
                {
                    UsuarioID = int.Parse(dados.Claims.SingleOrDefault(a => a.Type == "usuarioid").Value);
                }

                c.Cliente = new ClienteModel()
                {
                    ClienteID = ClienteID
                };
                if (UsuarioID.HasValue)
                {
                    c.Usuario = new UsuarioModel()
                    {
                        UsuarioID = UsuarioID.Value
                    }
                }
                ;

                var result = await new CampanhaRepository().DetalhadoCampanhas(c, ClienteID, UsuarioID);

                if (result.Any())
                {
                    return(Ok(result.Select(a => new
                    {
                        texto = a.Texto,
                        celular = a.Celular,
                        dataenviar = a.DataEnviar,
                        carteira = a.Carteira.Carteira,
                        arquivo = a.Arquivo != null ? a.Arquivo.Arquivo : string.Empty,
                        tipocampanha = a.TipoCampanha.TipoCampanha,
                        operadora = a.Operadora.ToString(),
                        uf = a.UF,
                        regiao = a.Regiao,
                        fornecedor = a.Fornecedor.Nome,
                        statusreport = a.StatusReport.ToString()
                    })));
                }
                else
                {
                    throw new Exception($"Sem dados para a pesquisa do dia {c.DataInicial} a {c.DataFinal}");
                }
            }
            catch (Exception err)
            {
                return(BadRequest(new { error = (err.InnerException ?? err).Message }));
            }
        }
Ejemplo n.º 19
0
        public async Task <IActionResult> Adicionar(Guid id, CampanhaModel model)
        {
            try
            {
                ViewBag.Prioridade = CarregarPrioridades(model.Prioridade);

                if (!ModelState.IsValid)
                {
                    return(View("Adicionar", model));
                }

                if (model.Prioridade.Value < 0 || model.Prioridade.Value > 3)
                {
                    ModelState.AddModelError("Prioridade", "A prioridade de estar dentro da lista de escolha");
                }

                if (model.ImgCampanha == null || model.ImgCampanha.Length.Equals(0))
                {
                    ModelState.AddModelError("ImgCampanha", "Arquivo de imagem inválido ou não informado");
                }
                else if (model.ImgCampanha.Length > 524288)
                {
                    ModelState.AddModelError("ImgCampanha", "Tamanho máximo de arquivo excedido (500KBytes)");
                }
                else
                {
                    if (!(ValidarArquivo(model.ImgCampanha)))
                    {
                        ModelState.AddModelError("ImgCampanha", "Formato de arquivo inválido");
                    }
                }

                if (ModelState.ErrorCount > 0)
                {
                    return(View("Adicionar", model));
                }

                SimpleResponseObj resposta = await AdicionarRegistro(model);

                if (resposta.Sucesso)
                {
                    CampanhaModel  campanha = JsonConvert.DeserializeObject <CampanhaModel>(resposta.Mensagem.ToString());
                    SimpleResponse respImg  = await CarregarArquivo(campanha.Id.Value, model.ImgCampanha);

                    if (respImg.Sucesso)
                    {
                        return(RedirectToAction("Index"));
                    }

                    campanha = await LocalizarCampanha(campanha.Id.Value);

                    ViewBag.Prioridade = CarregarPrioridades(campanha.Prioridade);
                    model.Criticas     = "Falha ao carregar arquivo";

                    return(View("Editar", model));
                }

                ModelState.AddModelError(string.Empty, $"Ops, algo deu errado, {resposta.Mensagem.ToString()}");
                return(View("Adicionar", model));
            }
            catch (SessaoExpiradaException) { return(RedirectToAction("Logout", "Account")); }
        }
Ejemplo n.º 20
0
        public async Task <IActionResult> Upload(Guid id, IFormFile arquivo)
        {
            try
            {
                CampanhaModel campanha = await LocalizarCampanha(id);

                ViewBag.Prioridade = CarregarPrioridades(campanha.Prioridade);

                if (arquivo == null || arquivo.Length.Equals(0))
                {
                    campanha.Criticas = "Arquivo inválido ou vazio";
                    return(View("Upload", campanha));
                }

                // Salvar em pasta temporária
                string nomeArquivoBase = ContentDispositionHeaderValue.Parse(arquivo.ContentDisposition).FileName.Trim('"');

                string hashId      = $"{(DateTime.Now.Ticks * (new Random().Next(2, 16))).ToString().Substring(0, 6)}".Replace("-", string.Empty);
                string dataArquivo = DateTime.Now.ToString("yyyyMMddhhmmss");

                string nomeArquivoFileServer = $"{hashId}-{dataArquivo}_{id.ToString()}.jpg";

                string nomeCompleto = sys.Path.Combine(_caminho, nomeArquivoFileServer);

                // Validando tipo de arquivo pela extenção
                string extensao = nomeArquivoBase.Split('.').LastOrDefault().ToLower();
                if (string.IsNullOrWhiteSpace(extensao) || !"jpg|jpeg|png".Contains(extensao.ToLower()))
                {
                    campanha.Criticas = "Formato de arquivo inválido";
                    return(View("Upload", campanha));
                }

                // Validando tamanho do arquivo
                using (sys.FileStream stream = new sys.FileStream(nomeCompleto, sys.FileMode.Create))
                {
                    arquivo.CopyTo(stream);
                }

                // Converter em Base64
                byte[] bytes = sys.File.ReadAllBytes(nomeCompleto);
                string arquivoImagemBase64 = Convert.ToBase64String(bytes);

                try { System.IO.File.Delete(nomeCompleto); }
                finally { /* Nada a fazer */ }

                // Enviar para Api
                _client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", ObterToken());
                HttpResponseMessage resultApi = await _client.PostAsJsonAsync($"/api/v1/Campanha/Imagem", new { CampanhaId = id.ToString(), ImagemBase64 = arquivoImagemBase64 });

                if (resultApi.StatusCode.Equals(HttpStatusCode.Unauthorized))
                {
                    throw new SessaoExpiradaException();
                }
                string conteudo = await resultApi.Content.ReadAsStringAsync();

                SimpleResponse response = JsonConvert.DeserializeObject <SimpleResponse>(conteudo);
                if (!response.Sucesso)
                {
                    campanha.Criticas = response.Mensagem;
                    return(View("Upload", campanha));
                }

                // Redirecionar para Listagem
                return(View("List", await CarregarCampanhas()));
            }
            catch (SessaoExpiradaException) { return(RedirectToAction("Logout", "Account")); }
        }