Ejemplo n.º 1
0
        public IActionResult SalvarAgendamentoItem([FromBody] SalvarAgendamentoItemRequest salvarAgendamentoRequest)
        {
            var servicos = this.CriarServicos();

            var model = new AgendamentoItemDTO();

            model.CodAgendamento  = salvarAgendamentoRequest.CodAgendamentoItem;
            model.CodCliente      = 0;
            model.CodServico      = salvarAgendamentoRequest.CodAgendamentoItem;
            model.CodProfissional = 0;
            model.Inicio          = salvarAgendamentoRequest.HoraInicio;
            model.Termino         = salvarAgendamentoRequest.HoraTermino;

            if (servicos.AgendamentosServico.SalvarAgendamentoItem(model) > 0)
            {
                return(NoContent());
            }

            return(BadRequest("Não foi possível salvar o agendamento"));
        }
 public int SalvarAgendamentoItem(AgendamentoItemDTO agendamento)
 {
     return(this.repositorio.AgendamentosRepositorio.SalvarAgendamento(agendamento.ToAgendamento()));
 }
        private void ValidaAgendamento(AgendamentoItemDTO agendamentoItem)
        {
            var valido = true;
            var conf   = this.ObterConfiguracoes();
            List <AgendamentoItem> hist;

            var agOld = this.repositorio.AgendamentosRepositorio
                        .ConsultarAgendamento(agendamentoItem.CodAgendamento);

            if (agOld != null && agOld.Cd_Status == 3)
            {
                throw new ServicosException("Não é permitido alterar um agendamento Realizado");
            }

            var conflitaAlmoco = false;
            var foraDeHorario  = false;

            var inicioAlmoco = agendamentoItem.Inicio.Date + TimeSpan.Parse(conf.AlmocInicio);
            var fimAlmoco    = agendamentoItem.Inicio.Date + TimeSpan.Parse(conf.AlmocFinal);

            var inicioExpediente = agendamentoItem.Inicio.Date + TimeSpan.Parse(conf.FuncInicio);
            var fimExpediente    = agendamentoItem.Inicio.Date + TimeSpan.Parse(conf.FuncFinal);

            if (conf != null)
            {
                foraDeHorario = agendamentoItem.Inicio < inicioExpediente;
                foraDeHorario = foraDeHorario || agendamentoItem.Termino > fimExpediente;

                if (conf.BloqAlmoco == 1)
                {
                    conflitaAlmoco = inicioAlmoco >= agendamentoItem.Inicio && inicioAlmoco < agendamentoItem.Termino;
                    conflitaAlmoco = conflitaAlmoco || (fimAlmoco > agendamentoItem.Inicio && fimAlmoco <= agendamentoItem.Termino);
                    conflitaAlmoco = conflitaAlmoco || (inicioAlmoco <agendamentoItem.Inicio && fimAlmoco> agendamentoItem.Termino);
                }
            }

            if (foraDeHorario)
            {
                throw new ServicosException("Agendamento fora do horário permitido");
            }

            if (conflitaAlmoco)
            {
                throw new ServicosException("Não é permitido agendar durante o horário de almoço");
            }

            if (agendamentoItem.CodAgendamentoItem == 0)
            {
                hist = this.repositorio.AgendamentosRepositorio.ListarAgendamentosItens(a => a.Dat_Inicio >= agendamentoItem.Inicio && a.Dat_Inicio <= agendamentoItem.Termino &&
                                                                                        a.Cd_Profissional == agendamentoItem.CodProfissional && agendamentoItem.CodCliente != a.Agendamento.Cd_Cliente);

                valido &= hist == null || hist.Count == 0;

                hist = this.repositorio.AgendamentosRepositorio.ListarAgendamentosItens(a => a.Dat_Termino > agendamentoItem.Inicio && a.Dat_Termino <= agendamentoItem.Termino &&
                                                                                        a.Cd_Profissional == agendamentoItem.CodProfissional && agendamentoItem.CodCliente != a.Agendamento.Cd_Cliente);

                valido &= hist == null || hist.Count == 0;

                hist = this.repositorio.AgendamentosRepositorio.ListarAgendamentosItens(a => a.Dat_Inicio <agendamentoItem.Inicio && a.Dat_Termino> agendamentoItem.Termino &&
                                                                                        a.Cd_Profissional == agendamentoItem.CodProfissional && agendamentoItem.CodCliente != a.Agendamento.Cd_Cliente);

                valido &= hist == null || hist.Count == 0;
            }
            else
            {
                hist = this.repositorio.AgendamentosRepositorio.ListarAgendamentosItens(a => a.Dat_Inicio >= agendamentoItem.Inicio && a.Dat_Inicio <= agendamentoItem.Termino &&
                                                                                        a.Cd_Profissional == agendamentoItem.CodProfissional && agendamentoItem.CodCliente != a.Agendamento.Cd_Cliente && a.Cd_AgendamentoItem != agendamentoItem.CodAgendamentoItem);

                valido &= hist == null || hist.Count == 0;

                hist = this.repositorio.AgendamentosRepositorio.ListarAgendamentosItens(a => a.Dat_Termino > agendamentoItem.Inicio && a.Dat_Termino <= agendamentoItem.Termino &&
                                                                                        a.Cd_Profissional == agendamentoItem.CodProfissional && agendamentoItem.CodCliente != a.Agendamento.Cd_Cliente && a.Cd_AgendamentoItem != agendamentoItem.CodAgendamentoItem);

                valido &= hist == null || hist.Count == 0;

                hist = this.repositorio.AgendamentosRepositorio.ListarAgendamentosItens(a => a.Dat_Inicio <agendamentoItem.Inicio && a.Dat_Termino> agendamentoItem.Termino &&
                                                                                        a.Cd_Profissional == agendamentoItem.CodProfissional && agendamentoItem.CodCliente != a.Agendamento.Cd_Cliente && a.Cd_AgendamentoItem != agendamentoItem.CodAgendamentoItem);

                valido &= hist == null || hist.Count == 0;
            }

            if (!valido)
            {
                var nome = this.repositorio.PessoasRepositorio.Obter(agendamentoItem.CodProfissional)?.Txt_Nome ?? "profissional não identificado";
                nome = nome.Split(" ")[0];

                throw new AgendamentoConflitoException(nome + " não está disponível no horário " + agendamentoItem.horarioLabel);
            }

            if (agendamentoItem.Observacao.Length > 2000)
            {
                throw new ServicosException("Observação não pode ultrapassar 2000 caracteres");
            }

            if (agendamentoItem.CodStatus != 3)
            {
                if (agOld != null && agOld.Cd_Status == 3)
                {
                    throw new ReAbrirAgendamentoException("Agendamento já foi realizado e não pode ser reaberto");
                }
            }

            if (agendamentoItem.CodAgendamentoItem > 0 && agOld.Cd_Cliente != agendamentoItem.CodCliente)
            {
                throw new ServicosException("Não é permitido alterar o cliente de um agendamento existente");
            }
        }