public ReturnBase Salvar(vmAgendar agendar)
        {
            var retorno = new ReturnBase();
            var cliente = new Cliente();
            var tecnico = new Tecnico();

            try
            {
                retorno = this.ValidarDadosInputados(agendar, ref cliente, ref tecnico);

                if (!retorno.IsSuccess)
                {
                    return(retorno);
                }

                var agendamento = this.CadastrarAgendamento(agendar, cliente, tecnico);

                retorno.Message   = string.Format("Pedido número {0} cadastrado com sucesso para o dia {1}.", agendamento.IdordemServico, string.Concat(agendamento.Data.ToString("dd/MM/yy"), " às ", agendamento.Data.ToString("hh:mm"), " hrs"));
                retorno.IsSuccess = true;
            }
            catch (Exception ex)
            {
                retorno.Message = ex.Message;
            }

            return(retorno);
        }
        private ReturnBase BuscarTecnicoBancoECasoNaoExistaCadastrar(vmAgendar agendar, out Tecnico tecnico)
        {
            var retorno = new ReturnBase();

            tecnico = this.BuscarDadosTecnico(agendar);

            if (tecnico == null || tecnico.Id < 1)
            {
                if (string.IsNullOrEmpty(agendar.Tecnico.Nome) || string.IsNullOrEmpty(agendar.Tecnico.Email) || agendar.Tecnico.Telefone <= 0)
                {
                    retorno.Message = "CPF do cliente não informado.";
                    return(retorno);
                }

                tecnico = new Tecnico
                {
                    Email    = agendar.Tecnico.Email,
                    Cpf      = agendar.Tecnico.CPF,
                    Nome     = agendar.Tecnico.Nome,
                    Telefone = agendar.Tecnico.Telefone
                };

                this.CadastrarTecnico(tecnico);
            }

            retorno.IsSuccess = true;
            return(retorno);
        }
        private ReturnBase BuscarClienteBancoECasoNaoExistaCadastrar(vmAgendar agendar, out Cliente cliente)
        {
            var retorno = new ReturnBase();

            cliente = this.BuscarDadosCliente(agendar);

            if (cliente == null || cliente.Id < 1)
            {
                if (string.IsNullOrEmpty(agendar.Cliente.Nome) || string.IsNullOrEmpty(agendar.Cliente.Email) || agendar.Cliente.Telefone <= 0)
                {
                    retorno.Message = "CPF do cliente não informado.";
                    return(retorno);
                }

                cliente = new Cliente
                {
                    Email    = agendar.Cliente.Email,
                    Cpf      = agendar.Cliente.CPF,
                    Nome     = agendar.Cliente.Nome,
                    Telefone = agendar.Cliente.Telefone
                };

                this.CadastrarCliente(cliente);
            }

            retorno.IsSuccess = true;
            return(retorno);
        }
 private ReturnBase ValidarDadosTecnico(vmAgendar agendar, ref Tecnico tecnico)
 {
     if (agendar.Tecnico.CPF > 0M)
     {
         return(this.BuscarTecnicoBancoECasoNaoExistaCadastrar(agendar, out tecnico));
     }
     else
     {
         return(new ReturnBase {
             Message = "CPF do tecnico não informado."
         });
     }
 }
 private ReturnBase ValidarDadosCliente(vmAgendar agendar, ref Cliente cliente)
 {
     if (agendar.Cliente.CPF > 0M)
     {
         return(this.BuscarClienteBancoECasoNaoExistaCadastrar(agendar, out cliente));
     }
     else
     {
         return(new ReturnBase {
             Message = "CPF do cliente não informado."
         });
     }
 }
        private ReturnBase ValidarDadosTipoServico(vmAgendar agendar)
        {
            var retorno = new ReturnBase();

            if (agendar.TipoServico == null || string.IsNullOrEmpty(agendar.TipoServico.Tipo) ||
                agendar.TipoServico.IdItem <= 0 || agendar.TipoServico.Valor <= 0)
            {
                retorno.Message = "É necessário o preenchimento dos itens do serviço";
                return(retorno);
            }

            retorno.IsSuccess = true;
            return(retorno);
        }
        private Agendamento CadastrarAgendamento(vmAgendar agendar, Cliente cliente, Tecnico tecnico)
        {
            var agendamento = new Agendamento
            {
                Data = agendar.Data,
                IdordemServicoNavigation = new OrdemServico
                {
                    Idcliente = cliente.Id,
                    Iditem    = agendar.TipoServico.IdItem,
                    Tipo      = agendar.TipoServico.Tipo,
                    Valor     = agendar.TipoServico.Valor,
                    Idtecnico = tecnico.Id
                }
            };

            db.Agendamento.Add(agendamento);
            db.SaveChanges();
            return(agendamento);
        }
        private ReturnBase ValidarDadosInputados(vmAgendar agendar, ref Cliente cliente, ref Tecnico tecnico)
        {
            var retorno = new ReturnBase();

            if (agendar.Data == DateTime.MinValue)
            {
                retorno.Message = "Data do agendamento é obrigatória.";
                return(retorno);
            }

            retorno = this.ValidarDadosCliente(agendar, ref cliente);

            if (!retorno.IsSuccess)
            {
                return(retorno);
            }

            retorno.Reset();

            retorno = this.ValidarDadosTecnico(agendar, ref tecnico);

            if (!retorno.IsSuccess)
            {
                return(retorno);
            }

            retorno.Reset();

            retorno = this.ValidarDadosTipoServico(agendar);

            if (!retorno.IsSuccess)
            {
                return(retorno);
            }

            return(retorno);
        }
 public ReturnBase Post(vmAgendar agendar)
 {
     return(rgr.Salvar(agendar));
 }
 private Tecnico BuscarDadosTecnico(vmAgendar agendar)
 {
     return(db.Tecnico.Where(x => x.Cpf == agendar.Tecnico.CPF).ToList().FirstOrDefault());
 }
 private Cliente BuscarDadosCliente(vmAgendar agendar)
 {
     return(db.Cliente.Where(x => x.Cpf == agendar.Cliente.CPF).ToList().FirstOrDefault());
 }