public StatusAtendimentoViewModel Carregar(long atividadeId)
        {
            _statusAtendimentoViewModal.AtividadeId = atividadeId;
            var atividade = _atividadeServico.ObterPorId(atividadeId);

            _statusAtendimentoViewModal.StatusAtividade = _statusAtividadeServico.ObterStatusAtividadeTarefa();
            _statusAtendimentoViewModal.Descricao       =
                _statusAtividadeServico.ObterPorId(atividade.StatusAtividadeId).Descricao;
            return(_statusAtendimentoViewModal);
        }
Beispiel #2
0
        public _LigacaoViewModel Carregar(long?id, long?atividadiId)
        {
            var ligacao = _servicoLigacao.ObterPor(id, atividadiId);

            if (ligacao == null)
            {
                var retorno = new _LigacaoViewModel();
                retorno.ValidationResult.Add(
                    new ValidationError("Nenhuma Ligação Encontrada com os parametros fornecidos"));
                return(retorno);
            }

            if (ligacao.Atividade.Atendimento == null)
            {
                var atendimento = _servicoAtendimento.AdicionarNovoAtendimento(1, "f712efbb-4646-4870-8f37-a687cb2e8978",
                                                                               ligacao.Atividade.MidiasId);

                if (atendimento != null)
                {
                    ligacao.Atividade.Atendimento = atendimento;
                }
            }

            if (ligacao.TelefoneId.HasValue)
            {
                ligacao.Telefone = _servicoTelefone.ObterPorId(ligacao.TelefoneId.Value);
            }

            if (ligacao.Atividade.StatusAtividadeId > 0)
            {
                ligacao.Atividade.StatusAtividade =
                    _statusAtividadeServico.ObterPorId(ligacao.Atividade.StatusAtividadeId);
            }

            var midias           = _servicoMidia.ObterTodos();
            var statusAtividades = ligacao.Receptiva == null
                ? _statusAtividadeServico.ObterTodos()
                : (ligacao.Receptiva.Value
                    ? _statusAtividadeServico.ObterStatusAtividadeLigacaoReceptiva()
                    : _statusAtividadeServico.ObterStatusAtividadeLigacaoAtiva());

            return(new _LigacaoViewModel(ligacao, midias, statusAtividades));
        }
        public void AtualizarStatus(long atividadeId, int statusAtividadeId, string userId, int?midiaId)
        {
            var atividade       = _repositorio.ObterPorId(atividadeId);
            var statusAtividade = _servicoStatusAtividade.ObterPorId(statusAtividadeId);

            if (atividade == null || statusAtividade == null)
            {
                return;
            }

            atividade.StatusAtividadeId = statusAtividadeId;

            if (midiaId.HasValue && midiaId > 0)
            {
                atividade.MidiasId = midiaId;
            }

            if (statusAtividade.FinalizaAtividade)
            {
                atividade.FinalizadoEm        = DateTime.Now;
                atividade.FinalizadoPorUserId = userId;
            }

            _repositorio.Atualizar(atividade);

            if (atividade.AtividadeTipoId == 4)
            {
                var atividadeFilas = _servicoAtividadeFila.ObterPorAtividadeId(atividadeId);

                if (atividadeFilas == null)
                {
                    return;
                }

                foreach (var atividadeFila in atividadeFilas)
                {
                    if (!atividadeFila.SaiuDaFilaEm.HasValue)
                    {
                        _servicoAtividadeFila.AtualizaSaiuDaFilaEm(atividadeFila.Id);
                    }
                }
            }
        }
Beispiel #4
0
        public AtendimentoFormViewModel CarregarChat(long?chatId, long?atividadeId)
        {
            Chat chat = null;

            if (!chatId.HasValue)
            {
                if (atividadeId.HasValue)
                {
                    chat = _chatServico.ObterPorAtividadeId((long)atividadeId);

                    if (chat != null)
                    {
                        chatId = chat.Id;
                    }
                }
            }

            var model = new AtendimentoFormViewModel
            {
                CanalId         = (int)CanalValueObjects.Chat,
                NomeCanal       = "Chat",
                ChatId          = chatId,
                AtendimentoChat = true
            };

            if (chat == null)
            {
                chat = _chatServico.ObterPorId((long)chatId);
            }

            if (chat == null)
            {
                model.ValidationResult.Add(new ValidationError("Nenhum Chat encontrado com o Id Informado"));
                return(model);
            }

            var atividade = _atividadeServico.ObterPorId(chat.AtividadeId);

            if (atividade == null)
            {
                model.ValidationResult.Add(
                    new ValidationError("Nenhuma Atividade encontrado com o Id: " + chat.AtividadeId));
                return(model);
            }


            var statusAtividade = _statusAtividadeServico.ObterPorId(atividade.StatusAtividadeId);


            var atendimento = _atendimentoServico.ObterPorId(atividade.AtendimentoId.Value);

            if (atendimento == null)
            {
                model.ValidationResult.Add(
                    new ValidationError("Nenhum Atendimento encontrado com o Id: " + atividade.AtendimentoId));
                return(model);
            }

            var chatSolicitacao = _chatSolicitacaoServico.ObterPorId(chat.ChatSolicitacaoId);

            if (chatSolicitacao != null)
            {
                model.Documento = chatSolicitacao.Documento;
            }

            model.ListaStatus           = _statusAtividadeServico.ObterPor(model.CanalId, model.Sentido ?? "E", null).ToList();
            model.Midias                = new SelectList(_midiaServico.ObterPor(null, model.CanalId), "id", "nome");
            model.Procotolo             = atendimento.Protocolo;
            model.AtendimentoId         = atendimento.Id;
            model.AtividadeId           = atividade.Id;
            model.MidiaId               = atendimento.MidiasId;
            model.PessoaFisicaId        = atividade.PessoasFisicasId;
            model.PessoaJuridicaId      = atividade.PessoasJuridicasId;
            model.AtendimentoFinalizado = atividade.FinalizadoEm.HasValue;
            model.Status                = statusAtividade != null ? statusAtividade.Descricao : null;
            return(model);
        }
        //protected ICollection<StatusAtividade> ObterStatusAtividades(int canal, string sentido)
        //{
        //    var listaStatus = new List<StatusAtividade>();

        //    if (string.IsNullOrEmpty(sentido))
        //        sentido = "s"; //return listaStatus;

        //    sentido = sentido.ToLower();

        //    switch (canal)
        //    {
        //        case (int) CanalValueObjects.Telefone:

        //            listaStatus = sentido == "s"
        //                ? _statusAtividadeServico.ObterStatusAtividadeLigacaoAtiva().ToList()
        //                : _statusAtividadeServico.ObterStatusAtividadeLigacaoReceptiva().ToList();

        //            break;
        //        case (int) CanalValueObjects.Email:

        //            listaStatus = sentido == "s"
        //                ? _statusAtividadeServico.ObterStatusAtividadeEmail().ToList()
        //                : _statusAtividadeServico.ObterStatusAtividadeEmailRecebido().ToList();
        //            break;
        //        case (int) CanalValueObjects.Chat:
        //            // Vai ser preciso implementar o Chat
        //            break;
        //    }

        //    return listaStatus;
        //}

        public AtendimentoFormViewModel Atualizar(AtendimentoFormViewModel model)
        {
            switch (model.CanalId)
            {
            case (int)CanalValueObjects.Telefone:

                break;

            case (int)CanalValueObjects.Email:

                model.Email.Sentido   = model.Sentido;
                model.Email.UsuarioId = model.UsuarioId;
                model.Email.StatusId  = model.StatusId;
                model.Email           = TratarEmail(model.Email);

                if (!model.Email.ValidationResult.IsValid)
                {
                    model.ValidationResult = model.Email.ValidationResult;
                }

                model.AtividadeId = model.Email.AtividadeId;

                break;

            case (int)CanalValueObjects.Chat:

                break;

            default:
                model.ValidationResult.Add(new ValidationError("Canal informado inválido!"));
                return(model);
            }

            if (!model.ValidationResult.IsValid)
            {
                return(model);
            }

            var statusAtendimentos = _statusAtividadeServico.ObterPorId((int)model.StatusId);

            //Somente atualiza os dados de Atendimento
            if (!model.AtendimentoId.HasValue)
            {
                return(model);
            }

            var atendimento = _atendimento.ObterPorId((long)model.AtendimentoId);

            atendimento.MidiasId      = model.MidiaId;
            atendimento.CanalOrigemId = model.CanalId = model.CanalId;

            if (statusAtendimentos.FinalizaAtendimento)
            {
                atendimento.FinalizadoEm        = DateTime.Now;
                atendimento.FinalizadoPorUserId = model.UsuarioId;
            }

            if (atendimento.IsValid())
            {
                _atendimento.Atualizar(atendimento);
            }

            return(model);
        }
Beispiel #6
0
        protected void SalvarAtividadeLigacao(AtividadeNewViewModel model, string userId)
        {
            if (model.id == null) // Adicionar
            {
                if (model.statusAtividadeID == null)
                {
                    model.statusAtividadeID = _statusAtividadeServico.ObterStatusAtividadePadraoParaLigacao().Id;
                }

                int?canalId = null;
                var canal   = _canalServico.ObterCanalTelefone();
                if (canal.ValidationResult.IsValid)
                {
                    canalId = canal.Id;
                }

                if (model.atendimentoID == null)
                {
                    var atendimento = _atendimentoServico.AdicionarNovoAtendimento(canalId, userId, null);

                    if (atendimento.ValidationResult.IsValid)
                    {
                        model.atendimentoID = atendimento.Id;
                    }
                }

                var atividade = new Atividade(userId, (int)model.statusAtividadeID, model.atividadeTipoID, model.titulo,
                                              model.pessoaFisicaID, model.pessoaJuridicaID, model.potencialClienteID, model.ocorrenciaID,
                                              model.descricao, model.atendimentoID, model.midiaID, null, null, null, model.previsaoDeExecucao,
                                              canalId, userId)
                {
                    PrevisaoDeExecucao = model.previsaoDeExecucao
                };
                model.ValidationResult = _atividadeServico.Adicionar(atividade);

                if (model.ValidationResult.IsValid)
                {
                    model.id = atividade.Id;
                    var ligacao = new Ligacao(atividade.PessoasFisicasId, atividade.PessoasJuridicasId,
                                              atividade.PotenciaisClientesId, userId, model.Ligacao.sentido, atividade.Id,
                                              model.Ligacao.telefoneID, null, null, null);
                    model.ValidationResult = _ligacaoServico.Adicionar(ligacao);

                    if (model.ValidationResult.IsValid)
                    {
                        if (model.filaID != null)
                        {
                            ColocarAtividadeFila((int)model.filaID, atividade.Id);
                        }
                    }

                    _servicoAtividadeParteEnvolvidaServico.Adicionar(new AtividadeParteEnvolvida(atividade.Id,
                                                                                                 atividade.PessoasFisicasId, atividade.PessoasJuridicasId, null, userId,
                                                                                                 TipoParteEnvolvida.ClienteTratado.Value, null, null));
                }
            }
            else //Atualizar
            {
                var atividade = _atividadeServico.ObterPorId((long)model.id);

                if (atividade != null && atividade.FinalizadoEm == null)
                {
                    if (model.statusAtividadeID != null)
                    {
                        var statusAtividade = _statusAtividadeServico.ObterPorId((long)model.statusAtividadeID);

                        if (statusAtividade != null)
                        {
                            if (statusAtividade.FinalizaAtividade)
                            {
                                atividade.FinalizadoEm        = DateTime.Now;
                                atividade.FinalizadoPorUserId = userId;
                            }
                        }
                        atividade.StatusAtividadeId = (int)model.statusAtividadeID;
                    }

                    atividade.Descricao = model.descricao;

                    if (model.atendimentoID != null)
                    {
                        atividade.AtendimentoId = (long)model.atendimentoID;
                    }

                    _atividadeServico.Atualizar(atividade);
                }

                if (model.dataAgendamento != null)
                {
                    if (model.statusAtividadeID == null)
                    {
                        model.statusAtividadeID =
                            _statusAtividadeServico.ObterStatusAtividadeLigacaoReceptiva().FirstOrDefault().Id;
                    }

                    var novaAtividade = new Atividade()
                    {
                        PessoasFisicasId     = atividade.PessoasFisicasId,
                        PessoasJuridicasId   = atividade.PessoasJuridicasId,
                        PotenciaisClientesId = atividade.PotenciaisClientesId,
                        OcorrenciaId         = atividade.OcorrenciaId,
                        CriadoPorUserId      = userId,
                        ContratoId           = atividade.ContratoId,
                        Descricao            = model.descricao,
                        MidiasId             = atividade.MidiasId,
                        StatusAtividadeId    = _statusAtividadeServico.ObterStatusAtividadePadraoParaLigacao().Id,
                        AtividadeTipoId      = 3,
                        Titulo = atividade.Titulo,
                        //atendimentoID = model.atendimentoID,
                        PrevisaoDeExecucao = model.dataAgendamento
                    };

                    if (model.agendamentoPrivado != null)
                    {
                        if ((bool)model.agendamentoPrivado)
                        {
                            novaAtividade.ResponsavelPorUserId = novaAtividade.CriadoPorUserId;
                        }
                    }

                    model.ValidationResult = _atividadeServico.Adicionar(novaAtividade);

                    if (model.ValidationResult.IsValid)
                    {
                        var ligacao = _ligacaoServico.BuscarPorAtividadeId(atividade.Id);

                        model.id = novaAtividade.Id;
                        var novaligacao = new Ligacao(novaAtividade.PessoasFisicasId, novaAtividade.PessoasJuridicasId,
                                                      novaAtividade.PotenciaisClientesId, userId, "S", novaAtividade.Id, ligacao.TelefoneId,
                                                      ligacao.NumeroOriginal, null, null);
                        model.ValidationResult = _ligacaoServico.Adicionar(novaligacao);

                        if (model.ValidationResult.IsValid)
                        {
                            var filaID = _atividadeFilaServico.ObterUltimoVinculoPraAtividade(atividade.Id);

                            if (filaID != null)
                            {
                                ColocarAtividadeFila(filaID.FilaId, novaAtividade.Id, novaAtividade.ResponsavelPorUserId);
                            }
                        }
                    }
                }
            }
        }
        public ValidationResult AtualizarStatusAtividade(long ligacaoId, int statusAtividadeId, long atendimentoId,
                                                         long atividadeId,
                                                         string userId, int midiaId)
        {
            var retorno         = new ValidationResult();
            var statusAtividade = _servicoStatusAtividade.ObterPorId(statusAtividadeId);

            if (!string.IsNullOrEmpty(statusAtividade.EntidadeNecessaria))
            {
                var podeAtualizar = _servicoStatusAtividade.VerificarEntidadeRequeridaAtendimento(atendimentoId,
                                                                                                  statusAtividadeId);

                if (!podeAtualizar)
                {
                    retorno.Add(
                        new ValidationError(
                            string.Format(
                                "Não é possível alterar o status desse atendimento, pois ainda não houve criação e/ou interação de uma: {0}",
                                statusAtividade.EntidadeNecessaria)));
                    return(retorno);
                }
            }

            if (!string.IsNullOrEmpty(statusAtividade.EntidadeNaoNecessaria))
            {
                var podeAtualizar = _servicoStatusAtividade.VerificarEntidadeNaoRequeridaAtendimento(atendimentoId,
                                                                                                     statusAtividadeId);

                if (!podeAtualizar)
                {
                    retorno.Add(
                        new ValidationError(
                            string.Format(
                                "Não é possível alterar o status desse atendimento, pois houve criação e/ou interação de uma: {0}",
                                statusAtividade.EntidadeNaoNecessaria)));
                    return(retorno);
                }
            }


            var ligacao = _servicoLigacao.ObterPorId(ligacaoId);

            if (ligacao == null)
            {
                retorno.Add(
                    new ValidationError(
                        string.Format(
                            "Não foi possível alterar o status desse atendimento, nenhuma Ligação retornada com o Id: {0}",
                            ligacaoId)));
                return(retorno);
            }

            atividadeId = ligacao.AtividadeId;
            var atividade = _servicoAtividade.ObterPorId(atividadeId);

            if (atividade == null)
            {
                retorno.Add(
                    new ValidationError(
                        string.Format(
                            "Não foi possível alterar o status desse atendimento, nenhuma Atividade retornada com o Id: {0}",
                            atividadeId)));
                return(retorno);
            }

            _servicoAtividade.Atualizar(atividade, statusAtividade, userId, midiaId);
            var atendimento = _servicoAtendimento.ObterPorId(atendimentoId);

            if (atendimento != null)
            {
                if (statusAtividade.FinalizaAtendimento)
                {
                    atendimento.FinalizadoEm        = DateTime.Now;
                    atendimento.FinalizadoPorUserId = userId;
                }
                atendimento.MidiasId = midiaId;
                _servicoAtendimento.Atualizar(atendimento);
            }

            ligacao.FinalizadoEm = DateTime.Now;
            _servicoLigacao.Atualizar(ligacao);

            return(retorno);
        }
        public ReportFiltroViewModel CarregarFiltrosPorExtenso(ReportFiltroViewModel model)
        {
            //model.dsAtividadeTipo
            if (model.AtividadeTipoId != null && string.IsNullOrEmpty(model.DsAtividadeTipo))
            {
                model.DsAtividadeTipo = _servicoAtividadeTipo.ObterPorId((int)model.AtividadeTipoId).Nome;
            }

            //model.dsCanal
            if (model.AtividadeTipoId != null && string.IsNullOrEmpty(model.DsCanal))
            {
                model.DsCanal = _servicoAtividadeTipo.ObterPorId((int)model.AtividadeTipoId).Nome;
            }

            //model.dsCriadoPor
            if (!string.IsNullOrEmpty(model.CriadoPor) && string.IsNullOrEmpty(model.DsCriadoPor))
            {
                model.DsCriadoPor = _servicoUsuario.ObterPorUserId(model.CriadoPor).Nome;
            }

            //model.dsCliente
            if (model.PessoaFisicaId != null || model.PessoaJuridicaId != null ||
                model.PotenciaisClientesId != null && string.IsNullOrEmpty(model.DsCliente))
            {
                if (model.PessoaFisicaId != null)
                {
                    model.DsCliente = _servicoPessoaFisica.ObterPorId((long)model.PessoaFisicaId).Nome;
                }

                if (model.PessoaJuridicaId != null)
                {
                    model.DsCliente = _servicoPessoaJuridica.ObterPorId((long)model.PessoaJuridicaId).RazaoSocial;
                }

                if (model.PotenciaisClientesId != null)
                {
                    model.DsCliente = _servicoPotenciaisCliente.ObterPorId((long)model.PotenciaisClientesId).nome;
                }
            }

            //model.dsMidia
            if (model.MidiaId != null && string.IsNullOrEmpty(model.DsMidia) && model.MidiaId != 99999)
            {
                model.DsMidia = _servicoMidia.ObterPorId((int)model.MidiaId).Nome;
            }

            //model.dsOcorrenciaTipo
            if (model.OcorrenciaTipoId != null)
            {
                model.DsOcorrenciaTipo = _servicoOcorrenciaTipo.ObterPorId((int)model.OcorrenciaTipoId).Nome;
            }

            //model.dsOcorrenciaTratativa
            if (!string.IsNullOrEmpty(model.OcorrenciaTratativa) && string.IsNullOrEmpty(model.DsOcorrenciaTratativa))
            {
                model.DsOcorrenciaTratativa = model.OcorrenciaTratativa.ToLower() == "c" ? "Criado" : "Tratado";
            }

            //model.dsSentido
            if (!string.IsNullOrEmpty(model.Sentido) && string.IsNullOrEmpty(model.DsSentido))
            {
                model.DsSentido = model.Sentido.ToLower() == "e" ? "Receptivo" : "Ativo";
            }

            //model.dsStatusAtividade
            if (model.StatusAtividadeId != null && string.IsNullOrEmpty(model.DsStatusAtividade))
            {
                model.DsStatusAtividade = _servicoStatusAtividade.ObterPorId((int)model.StatusAtividadeId).Descricao;
            }

            //model.dsStatusEntidade
            if (model.StatusEntidadeId != null && string.IsNullOrEmpty(model.DsStatusEntidade))
            {
                model.DsStatusEntidade = _servicoStatusEntidade.ObterPorId((int)model.StatusEntidadeId).nome;
            }

            if (model.FilaId != null && string.IsNullOrEmpty(model.DsFila))
            {
                model.DsFila = _servicoFila.ObterPorId((int)model.FilaId).Nome;
            }


            if (model.CanalId.HasValue && string.IsNullOrEmpty(model.DsCanal))
            {
                model.DsCanal = _canalServico.ObterPorId((int)model.CanalId).Nome;
            }

            if (model.AtividadesNoPrazo.HasValue)
            {
                model.DsAtividadesNoPrazo = model.AtividadesNoPrazo.Value ? "Sim" : "Não";
            }

            if (model.ProdutoId.HasValue && string.IsNullOrEmpty(model.DsProduto))
            {
                model.DsProduto = _produtoServico.ObterPorId(model.ProdutoId.Value).nome;
            }

            return(model);
        }