public async Task <IActionResult> CriarContratoPasso4(NovoContratoPasso4ViewModel contratoPasso4)
        {
            if (contratoPasso4.UmAno == true)
            {
                contratoPasso4.DataFim = contratoPasso4.DataInicio.AddYears(1);
            }
            else if (contratoPasso4.DoisAnos == true)
            {
                contratoPasso4.DataFim = contratoPasso4.DataInicio.AddYears(2);
            }

            ViewData["ClienteId"] = contratoPasso4.ClienteId;
            var clienteId = bd.Utilizadores.SingleOrDefault(e => e.UtilizadorId == contratoPasso4.ClienteId);

            ViewData["ClienteNome"] = clienteId.Nome;
            ViewData["PacoteId"]    = contratoPasso4.PacoteId;
            var pacoteId = bd.Pacotes.SingleOrDefault(e => e.PacoteId == contratoPasso4.PacoteId);

            ViewData["PacoteNome"]   = pacoteId.Nome;
            ViewData["Morada"]       = contratoPasso4.Morada;
            ViewData["CodigoPostal"] = contratoPasso4.CodigoPostal;
            ViewData["Telefone"]     = contratoPasso4.Telefone;
            ViewData["DataInicio"]   = contratoPasso4.DataInicio;
            ViewData["DataFim"]      = contratoPasso4.DataFim;
            ViewData["DistritosId"]  = contratoPasso4.DistritosId;
            var distritoId = bd.Distritos.SingleOrDefault(e => e.DistritosId == contratoPasso4.DistritosId);

            ViewData["DistritoNome"] = distritoId.Nome;


            List <Promocoes> promocoesPacotes = await bd.PromocoesPacotes.Where(p => p.PacoteId == contratoPasso4.PacoteId)
                                                .Include(c => c.Promocoes)
                                                .Select(c => c.Promocoes)
                                                .Where(c => c.DataInicio <DateTime.Now && c.DataFim> DateTime.Now && c.Inactivo == false)
                                                .ToListAsync();

            var promocoesDistritos = await bd.DistritosPromocoes
                                     .Where(c => c.DistritosId == contratoPasso4.DistritosId)
                                     .Include(c => c.Promocao)
                                     .Select(c => c.Promocao)
                                     .ToListAsync();

            List <Promocoes> promocoes = new List <Promocoes>();

            foreach (var item in promocoesPacotes)
            {
                foreach (var promocao in promocoesDistritos)
                {
                    if (item.PromocoesId == promocao.PromocoesId)
                    {
                        promocoes.Add(promocao);
                    }
                }
            }


            ViewData["PromocoesId"] = new SelectList(promocoes, "PromocoesId", "Nome");

            return(View(contratoPasso4));
        }
        public IActionResult CriarContratoPasso3Validacao(NovoContratoPasso3ViewModel contratoPasso3)
        {
            if (!ModelState.IsValid)
            {
                ViewData["PacoteId"] = new SelectList(bd.Pacotes, "PacoteId", "Nome");
                return(View(contratoPasso3));
            }

            else
            {
                NovoContratoPasso4ViewModel contratoPasso4 = new NovoContratoPasso4ViewModel
                {
                    ClienteId    = contratoPasso3.ClienteId,
                    Morada       = contratoPasso3.Morada,
                    DistritosId  = contratoPasso3.DistritosId,
                    CodigoPostal = contratoPasso3.CodigoPostal,
                    Telefone     = contratoPasso3.Telefone,
                    PacoteId     = contratoPasso3.PacoteId,
                    DataInicio   = contratoPasso3.DataInicio,
                    UmAno        = contratoPasso3.UmAno,
                    DoisAnos     = contratoPasso3.DoisAnos,
                };
                ViewData["PacoteId"] = new SelectList(bd.Pacotes, "PacoteId", "Nome");

                return(RedirectToAction("CriarContratoPasso4", contratoPasso4));
            }
        }
        public async Task <IActionResult> Create5(NovoContratoPasso4ViewModel contratoPasso4, Contratos contratos)
        {
            if (!ModelState.IsValid)
            {
                var clienteId = bd.Utilizadores.SingleOrDefault(e => e.UtilizadorId == contratos.UtilizadorId);

                ViewData["ClienteId"]   = contratos.ClienteId;
                ViewData["ClienteNome"] = clienteId.Nome;
                ViewData["PacoteId"]    = new SelectList(bd.Pacotes, "PacoteId", "Nome");
                ViewData["PromocoesId"] = new SelectList(bd.Promocoes, "PromocoesId", "Nome");
                return(View());
            }

            //Código que vai buscar o ID do funcionário que tem login feito e atribui automaticamente ao contrato
            var funcionario      = bd.Utilizadores.SingleOrDefault(c => c.Email == User.Identity.Name);
            var funcionarioEmail = bd.Utilizadores.SingleOrDefault(d => d.Email == funcionario.Email);

            contratos.FuncionarioId = funcionarioEmail.UtilizadorId;

            //Código que vai buscar o preço do pacote
            contratos.PacoteId = contratoPasso4.PacoteId;
            var pacoteid = bd.Pacotes.SingleOrDefault(e => e.PacoteId == contratos.PacoteId);

            contratos.PrecoPacote = pacoteid.Preco;

            //Código que vai buscar o nome do pacote
            contratos.NomePacote = pacoteid.Nome;

            ////Código que vai buscar o cliente
            //contratos.ClienteId = contratos.UtilizadorId;

            List <PromocoesPacotes> PromocoesDisponiveis = new List <PromocoesPacotes>();

            foreach (var pacote in bd.PromocoesPacotes)
            {
                if (contratos.PacoteId == pacote.PacoteId)
                {
                    PromocoesDisponiveis.Add(pacote);
                }
            }

            contratos.PromocoesId = contratoPasso4.PromocoesId;

            bool PromoDisponivel = false;

            foreach (var promocao in PromocoesDisponiveis)
            {
                if (contratos.PromocoesId == promocao.PromocoesId)
                {
                    PromoDisponivel = true;
                }
            }

            if (PromoDisponivel == false)
            {
                var clienteId = bd.Utilizadores.SingleOrDefault(e => e.UtilizadorId == contratos.UtilizadorId);

                ViewData["ClienteId"]    = contratos.UtilizadorId;
                ViewData["ClienteNome"]  = clienteId.Nome;
                ViewData["UtilizadorId"] = new SelectList(bd.Utilizadores, "UtilizadorId", "Nome");
                ViewData["PacoteId"]     = new SelectList(bd.Pacotes, "PacoteId", "Nome");
                ViewData["PromocaoDesc"] = new SelectList(bd.Promocoes, "PromocoesId", "PromocaoDesc");
                ViewData["PromocoesId"]  = new SelectList(bd.Promocoes, "PromocoesId", "Nome");

                ViewBag.Message = "A promoção que está a tentar aplicar não está disponível para o pacote selecionado";
                return(View(contratos));
            }

            //Código que vai buscar o desconto da promoção
            int promo      = contratos.PromocoesId;
            var promocaoid = bd.Promocoes.SingleOrDefault(e => e.PromocoesId == contratos.PromocoesId);

            contratos.PromocaoDesc = promocaoid.PromocaoDesc;

            //Cálculo do PrecoFinal
            contratos.PrecoFinal = contratos.PrecoPacote - contratos.PromocaoDesc;

            contratos.ClienteId    = contratoPasso4.ClienteId;
            contratos.CodigoPostal = contratoPasso4.CodigoPostal;
            contratos.DataFim      = contratoPasso4.DataFim;
            contratos.DataInicio   = contratoPasso4.DataInicio;
            contratos.Morada       = contratoPasso4.Morada;
            contratos.DistritosId  = contratoPasso4.DistritosId;


            bd.Add(contratos);
            await bd.SaveChangesAsync();

            List <ServicosPacotes>   servicosNoPacote   = new List <ServicosPacotes>();
            List <ServicosContratos> servicosNoContrato = new List <ServicosContratos>();

            foreach (var item in bd.ServicosPacotes)
            {
                if (item.PacoteId == pacoteid.PacoteId)
                {
                    servicosNoPacote.Add(item);
                }
            }

            foreach (var item in servicosNoPacote)
            {
                servicosNoContrato.Add(new ServicosContratos()
                {
                    ServicoId = item.ServicoId, ContratoId = contratos.ContratoId
                });
            }
            foreach (var item in servicosNoContrato)
            {
                bd.ServicosContratos.Add(item);
            }

            await bd.SaveChangesAsync();


            ViewBag.Mensagem = "Contrato adicionado com sucesso.";
            return(View("Sucesso"));
        }