private CarrinhoViewModel AplicarDescontoIngresso(PromocaoViewModel promocaoViewModel, CarrinhoViewModel carrinho, String tipoIngresso)
        {
            var tickets = carrinho.Sessions.Tickets;

            double valorIngresso = 0;

            switch (tipoIngresso)
            {
            case "MEN":
                valorIngresso = tickets.Min(p => p.Price);
                break;

            case "MAI":
                valorIngresso = tickets.Max(p => p.Price);
                break;
            }

            var ticketADescontar = tickets.Where(t => t.Price == valorIngresso).FirstOrDefault();

            ticketADescontar.Price = AplicarDescontoNoPreco(ticketADescontar.Price, promocaoViewModel.ValorDesconto);

            carrinho.TotalPrice = carrinho.Sessions.Tickets.Sum(t => t.Price);

            return(carrinho);
        }
        public PromocaoViewModel GetPromocaoViewModelByPromocodeMOCK()
        {
            var promocaoViewModel = new PromocaoViewModel
            {
                Id = 1,
                DescricaoAplicarPromocao = "Desconto sobre maior ingresso",
                SiglaAplicarPromocao     = "MAI",
                Nome          = "Final de semana é dia de cinema!",
                Promocodes    = new List <string>(),
                Restricoes    = new List <Restricao>(),
                ValorDesconto = 12.50
            };

            promocaoViewModel.Promocodes.Add("YsnPvmhm");
            promocaoViewModel.Promocodes.Add("AdPRtqzw");
            promocaoViewModel.Promocodes.Add("MxNxhm3q");

            var restricao = new Restricao()
            {
                Id    = 1,
                Nome  = "Apenas para as sessões de sábado e domingo",
                Sigla = "FDS",
            };

            promocaoViewModel.Restricoes.Add(restricao);

            return(promocaoViewModel);
        }
        private PromocaoViewModel ConverterPromocaoParaViewModel(Promocao promocao)
        {
            var promocaoViewModel = new PromocaoViewModel
            {
                Id = promocao.Id,
                DescricaoAplicarPromocao = promocao.DescricaoAplicarPromocao,
                SiglaAplicarPromocao     = promocao.SiglaAplicarPromocao,
                Nome          = promocao.Nome,
                Promocodes    = promocao.Promocodes.Split(',').Select(p => p.Trim()).ToList(),
                Restricoes    = RecuperaRestricoes(promocao.Restricoes),
                ValorDesconto = promocao.ValorDesconto
            };

            return(promocaoViewModel);
        }
        public CarrinhoViewModel AtualizarCarrinhoComPromocao(PromocaoViewModel promocaoViewModel, CarrinhoViewModel carrinho)
        {
            carrinho.TotalPrice = carrinho.Sessions.Tickets.Sum(t => t.Price);

            bool promocaoValida = AplicarRestricoesPromocao(carrinho, promocaoViewModel.Restricoes);

            if (promocaoValida)
            {
                switch (promocaoViewModel.SiglaAplicarPromocao)
                {
                case "MEN":
                    return(AplicarDescontoIngresso(promocaoViewModel, carrinho, promocaoViewModel.SiglaAplicarPromocao));

                case "MAI":
                    return(AplicarDescontoIngresso(promocaoViewModel, carrinho, promocaoViewModel.SiglaAplicarPromocao));

                case "TOT":
                    carrinho.TotalPrice = AplicarDescontoNoPreco(carrinho.Sessions.Tickets.Sum(t => t.Price), promocaoViewModel.ValorDesconto);
                    break;
                }
            }

            return(carrinho);
        }