Ejemplo n.º 1
0
        /// <summary>
        /// Método responsáve de devolver Valor do Produto
        /// </summary>
        /// <param name="produto"></param>
        /// <param name="cssClass"></param>
        /// <param name="idElemento"></param>
        /// <param name="nameElemento"></param>
        /// <returns></returns>
        public MvcHtmlString ValorProduto(Produto produto, string cssClass, string idElemento, string nameElemento, string produtoMontadoId)
        {
            TagBuilder elementoValorProduto = new TagBuilder("label");

            elementoValorProduto.MergeAttribute("Id", idElemento + produto.Id);
            elementoValorProduto.MergeAttribute("name", nameElemento);
            elementoValorProduto.MergeAttribute("control-produto-Id", produto.Id.ToString());
            elementoValorProduto.AddCssClass("valor-" + produto.Id);
            elementoValorProduto.AddCssClass(cssClass);

            using (_db = new ApplicationDbContext())
            {
                var promocao = _db.PromocaoItems.FirstOrDefault(c => c.ProdutoMontadoId == produtoMontadoId && c.Promocao.Ativo);

                if (promocao != null && PromotionsController.VerificaPromocao(promocao.Promocao))
                {
                    var valorPromocional = promocao.TabelaDePreco.Valor.Value;
                    valorPromocional = promocao.Promocao.TipoValor == TipoValor.Porcentual ?
                                       valorPromocional - ((valorPromocional / 100) * promocao.Promocao.Valor) :
                                       (valorPromocional - promocao.Promocao.Valor);

                    elementoValorProduto.SetInnerText("Por: " + valorPromocional.ToString("C"));
                }
                else
                {
                    elementoValorProduto.SetInnerText(produto.ProdutosMontado.First(c => c.Id == produtoMontadoId).TabelaPrecos.LastOrDefault(c => c.OptLoja == 1).Valor.Value.ToString("C"));
                }
            }

            return(MvcHtmlString.Create(elementoValorProduto.ToString()));
        }
Ejemplo n.º 2
0
        public JsonResult ObterValor(int ProdutoCorId)
        {
            var produto = _db.ProdutoCores.AsNoTracking().FirstOrDefault(c => c.Id == ProdutoCorId);

            if (produto == null)
            {
                return(Json(""));
            }
            var promocao    = produto.ProdutosMontado.First().PromocaoItems.FirstOrDefault(c => c.Promocao.Ativo && c.Promocao.TipoExibicao != TipoDeExibicao.CupomDesconto);
            var tabelaPreco = produto.ProdutosMontado.First().TabelaPrecos.LastOrDefault(c => c.OptLoja != null && c.OptLoja.Value == 1);

            if (promocao != null && PromotionsController.VerificaPromocao(promocao.Promocao))
            {
                var valorPromocional = promocao.TabelaDePreco.Valor.Value;
                valorPromocional = promocao.Promocao.TipoValor == TipoValor.Porcentual ?
                                   valorPromocional - ((valorPromocional / 100) * promocao.Promocao.Valor) :
                                   (valorPromocional - promocao.Promocao.Valor);

                var porcentualDesconto = promocao.Promocao.TipoValor == TipoValor.Porcentual ?
                                         promocao.Promocao.Valor :
                                         Convert.ToInt32((valorPromocional / promocao.Promocao.Valor) * 100);

                return(Json(new { ValueOrigem = promocao.TabelaDePreco.Valor.Value.ToString("C"), Value = valorPromocional.ToString("C"), promocao.ProdutoMontado.ProdutoId, isPromocao = true, desconto = porcentualDesconto, TabelaDePrecoId = promocao.TabelaDePrecoId }, JsonRequestBehavior.AllowGet));
            }
            else
            {
                return(Json(new { Value = tabelaPreco.Valor.Value.ToString("C"), produto.ProdutosMontado.First().ProdutoId, isPromocao = false, TabelaDePrecoId = tabelaPreco.Id }, JsonRequestBehavior.AllowGet));
            }
        }
        public void Initialize()
        {
            mockRepository = new Mock <IPromotionsRepository>();

            _promotionsController = new PromotionsController(mockRepository.Object);

            mockRepository.Setup((x) => x.GetPromotions()).Returns(mockPromotions);
        }
Ejemplo n.º 4
0
        public void RemovePromotion_ShouldThrowArgumentOutOfRangeException_WhenItemIdIsZero()
        {
            // Arrange
            var promotionsController = new PromotionsController(this.promotionServiceMock.Object, this.mappingServiceMock.Object);
            var invalidItemId        = 0;

            // Act & Assert
            promotionsController.RemovePromotion(invalidItemId);
        }
Ejemplo n.º 5
0
        public void AddPromotion_ShouldThrowArgumentOutOfRangeException_WhenDiscountIsMoreThanMaxValue_CaseOne()
        {
            // Arrange
            var promotionsController = new PromotionsController(this.promotionServiceMock.Object, this.mappingServiceMock.Object);
            var validItemId          = 5;
            var invalidDiscount      = 96;

            // Act & Assert
            promotionsController.AddPromotion(validItemId, invalidDiscount);
        }
Ejemplo n.º 6
0
        public void AddPromotion_ShouldThrowArgumentOutOfRangeException_WhenItemIdIsNegative()
        {
            // Arrange
            var promotionsController = new PromotionsController(this.promotionServiceMock.Object, this.mappingServiceMock.Object);
            var invalidItemId        = -5;
            var validDiscount        = 15;

            // Act & Assert
            promotionsController.AddPromotion(invalidItemId, validDiscount);
        }
Ejemplo n.º 7
0
        //Adicionar
        public void AdicionarItem(ProdutoMontado produtoMontado)
        {
            ItemCarrinho item;

            if (_userId == null)
            {
                item = _db.ItemCarrinhos
                       .FirstOrDefault(p => p.ProdutoMontado.Id == produtoMontado.Id && p.AnonymousId == _userAnonymonusId);
            }
            else
            {
                item = _db.ItemCarrinhos
                       .FirstOrDefault(p => p.ProdutoMontado.Id == produtoMontado.Id && p.ApplicationUserId == _userId);
            }

            if (_estoque.AvaliaDisponibilidade(produtoMontado.Id) <= 0)
            {
                throw new Exception("Item sem disponibilidade no estoque");
            }

            var promocao = _db.PromocaoItems.FirstOrDefault(c => c.ProdutoMontadoId == produtoMontado.Id && c.Promocao.Ativo);

            if (promocao != null && !PromotionsController.VerificaPromocao(promocao.Promocao))
            {
                promocao = null;
            }

            if (item == null)
            {
                item = new ItemCarrinho
                {
                    PromocaoId          = promocao?.PromocaoId,
                    Data                = DateTime.Now,
                    ProdutoMontadoId    = produtoMontado.Id,
                    QuantidadeTotalItem = 1,
                    ApplicationUserId   = _userId,
                    AnonymousId         = _userAnonymonusId,
                    TabelaPrecoId       = produtoMontado.TabelaPrecos.First().Id,
                    Status              = Status.Alocado
                };
                _db.ItemCarrinhos.Add(item);
            }
            else
            {
                item.QuantidadeTotalItem += 1;
                _db.Entry(item).State     = System.Data.Entity.EntityState.Modified;
            }

            var localLoja  = _db.Parametros.First().local_loja;
            var movEstoque = _db.Estoques.First(c => c.ProdutoMontadoId == produtoMontado.Id && c.LocalId == localLoja);

            movEstoque.SaldoAlocado    += 1;
            _db.Entry(movEstoque).State = System.Data.Entity.EntityState.Modified;
            _db.SaveChanges();
        }
Ejemplo n.º 8
0
        public void AddPromotion_ShouldHaveValidateAntiForgeryTokenAttribute()
        {
            // Arrange
            var promotionsController = new PromotionsController(this.promotionServiceMock.Object, this.mappingServiceMock.Object);
            var addPromotionMethod   = typeof(PromotionsController).GetMethod("AddPromotion");

            // Act
            var attribute = addPromotionMethod.GetCustomAttributes(typeof(ValidateAntiForgeryTokenAttribute), true).Single() as ValidateAntiForgeryTokenAttribute;

            // Assert
            Assert.IsNotNull(attribute);
        }
Ejemplo n.º 9
0
        public void RemovePromotion_ShouldRedirectToSingleItemPage()
        {
            // Arange
            var promotionsController = new PromotionsController(this.promotionServiceMock.Object, this.mappingServiceMock.Object);
            var itemId = 10;

            // Act
            var redirectResult = promotionsController.RemovePromotion(itemId) as RedirectResult;

            // Assert
            Assert.IsNotNull(redirectResult);
            Assert.AreEqual(ServerConstants.SingleItemRedirectUrl + itemId, redirectResult.Url);
        }
Ejemplo n.º 10
0
        public void RemovePromotion_ShouldHaveAuthorizeAttribute_WithAdministratorOrRegularRole()
        {
            // Arrange
            var promotionsController = new PromotionsController(this.promotionServiceMock.Object, this.mappingServiceMock.Object);
            var addPromotionMethod   = typeof(PromotionsController).GetMethod("AddPromotion");

            // Act
            var attribute = addPromotionMethod.GetCustomAttributes(typeof(AuthorizeAttribute), true).Single() as AuthorizeAttribute;

            // Assert
            Assert.IsNotNull(attribute);
            StringAssert.Contains(UserConstants.AdministratorRole, attribute.Roles);
        }
Ejemplo n.º 11
0
        public void RemovePromotion_ShouldCallPromotionServiceAddPromotion_WhenValidArgumentsArePassed()
        {
            // Arrange
            this.promotionServiceMock.Setup(p => p.AddPromotion(
                                                It.Is <int>(i => i > ServerConstants.IdMinValue && i < ServerConstants.IdMaxValue),
                                                It.Is <int>(d => d > ServerConstants.DiscountMinValue && d < ServerConstants.DiscountMaxValue)));

            var promotionsController = new PromotionsController(this.promotionServiceMock.Object, this.mappingServiceMock.Object);
            var itemId = 10;

            // Act
            promotionsController.RemovePromotion(itemId);

            // Assert
            this.promotionServiceMock.Verify(p => p.RemovePromotion(itemId), Times.Once);
        }
Ejemplo n.º 12
0
        public async Task When_Request_Is_Sent_To_Apply_Promotions_On_Cart_Which_Is_Ineligible_Returns_Original_Value_of_The_Cart()
        {
            CartQuery cart = new CartQuery
            {
                CartItems = new List <CartItem>()
            };

            cart.CartItems.Add(new CartItem()
            {
                CartItemCode = Code.A,
                Quantity     = 1
            });
            PromotionsController promotionsController = new PromotionsController(_cartPromotionHandlerMock.Object);
            var result = await promotionsController.ApplyPromotions(cart);

            Assert.AreEqual(result.Message, "50");
        }
Ejemplo n.º 13
0
        public MvcHtmlString IconPromotion(Produto produto, string produtoMontadoId)
        {
            var promocaoItem = produto.ProdutosMontado.First(c => c.Id == produtoMontadoId)?.PromocaoItems.FirstOrDefault(c => c.Promocao.Ativo);
            var valorAtual   = produto.ProdutosMontado.First(c => c.Id == produtoMontadoId).TabelaPrecos.LastOrDefault().Valor.Value;

            if (promocaoItem != null && PromotionsController.VerificaPromocao(promocaoItem.Promocao))
            {
                var valorPromocional = promocaoItem.TabelaDePreco.Valor.Value;
                valorPromocional = promocaoItem.Promocao.TipoValor == TipoValor.Porcentual ?
                                   valorPromocional - ((valorPromocional / 100) * promocaoItem.Promocao.Valor) :
                                   (valorPromocional - promocaoItem.Promocao.Valor);

                var desconto = promocaoItem.Promocao.TipoValor == TipoValor.Porcentual ?
                               promocaoItem.Promocao.Valor :
                               Convert.ToInt32((valorPromocional / promocaoItem.Promocao.Valor) * 100);

                return(MvcHtmlString.Create("<span class= 'valor-desconto text-center' title='Promoção válida apenas para tamanho e cor selecionado!'>" + desconto.ToString("0.##") + "% <br/>Off</span>"));
            }

            return(MvcHtmlString.Create(""));
        }
Ejemplo n.º 14
0
        /// <summary>
        /// Monta o panel completo do produto
        /// </summary>
        /// <param name="produto"></param>
        /// <returns></returns>
        public MvcHtmlString PanelProdutoFor(Produto produto)
        {
            // Panel
            _tagDivPanel = new TagBuilder("div");
            _tagDivPanel.AddCssClass("panel");
            _tagDivPanel.AddCssClass(Convert.ToString(produto.Id));
            _tagDivPanel.MergeAttribute("Id", Convert.ToString(produto.Id));
            _tagDivPanel.MergeAttribute("control-value", Convert.ToString(produto.Id));

            // Panel Heading
            _tagDivHeading = new TagBuilder("div");
            _tagDivHeading.AddCssClass("panel-heading");
            _tagDivHeading.InnerHtml = produto.Descricao;

            // Panel Body
            _tagDivPanelBody = new TagBuilder("div");
            _tagDivPanelBody.AddCssClass("panel-body");

            // Panel Footer
            _tagDivPanelFooter = new TagBuilder("div");
            _tagDivPanelFooter.AddCssClass("panel-footer");

            // Descrição do Produto
            _tagDivDescricao = new TagBuilder("div");
            _tagDivDescricao.MergeAttribute("Id", "div-descricao-produto");
            _tagDescricao = new TagBuilder("label");
            _tagDescricao.MergeAttribute("Id", "label-descricao-produto");
            _tagDescricao.InnerHtml = produto.ProdutosMontado.FirstOrDefault(C => C.Publica == 1).Descricao1 == "" ? produto.Descricao : produto.ProdutosMontado.FirstOrDefault().Descricao1;
            var tagBr = new TagBuilder("br");

            _tagDivDescricao.InnerHtml  = _tagDescricao.ToString();
            _tagDivDescricao.InnerHtml += tagBr.ToString();
            //_tagDivPanelFooter.InnerHtml = _tagDivDescricao.ToString();

            // Valor do Produto
            _tagDivValor = new TagBuilder("div");
            _tagDivValor.MergeAttribute("Id", "div-valor-produto");
            var _tagValorOrigem = new TagBuilder("label");

            _tagValorOrigem.MergeAttribute("Id", "origemlabel-valor-produto" + produto.Id);
            _tagValor = new TagBuilder("label");
            _tagValor.MergeAttribute("Id", "label-valor-produto" + produto.Id);
            _tagValor.AddCssClass("valor-produto");
            _tagValorOrigem.AddCssClass("text-muted valor-origem");

            produto.ProdutosMontado = produto.ProdutosMontado
                                      .Where(c => c.ProdutoTamanhoId.HasValue &&
                                             c.ProdutoCorId.HasValue &&
                                             c.ProdutoId.HasValue &&
                                             c.ProdutoTamanho.ProdutoCores.Any() &&
                                             c.ProdutoCor.ProdutoImagens.Any()).ToList();

            var promocaoItem = produto
                               .ProdutosMontado.FirstOrDefault(c => c.Publica == 1)
                               .PromocaoItems
                               .FirstOrDefault(c => c.Promocao.Ativo && c.Promocao.TipoExibicao != TipoDeExibicao.CupomDesconto);

            var valorAtual = produto
                             .ProdutosMontado
                             .First(c => c.Publica == 1)
                             .TabelaPrecos
                             .LastOrDefault(c => c.OptLoja == 1).Valor.Value;

            if (promocaoItem != null && PromotionsController.VerificaPromocao(promocaoItem.Promocao))
            {
                var valorPromocional = promocaoItem.TabelaDePreco.Valor.Value;
                valorPromocional = promocaoItem.Promocao.TipoValor == TipoValor.Porcentual ?
                                   valorPromocional - ((valorPromocional / 100) * promocaoItem.Promocao.Valor) :
                                   (valorPromocional - promocaoItem.Promocao.Valor);

                var desconto = promocaoItem.Promocao.TipoValor == TipoValor.Porcentual ?
                               promocaoItem.Promocao.Valor :
                               Convert.ToInt32((valorPromocional / promocaoItem.Promocao.Valor) * 100);

                _tagValorOrigem.SetInnerText("De: " + promocaoItem.TabelaDePreco.Valor.Value.ToString("C"));

                _tagValor.SetInnerText("Por: " + valorPromocional.ToString("C"));
                _tagDivPanelBody.InnerHtml = "<span class= 'valor-desconto text-center' title='Promoção válida apenas para tamanho e cor selecionado!'>" + desconto + "% <br/>Off</span>";
            }
            else
            {
                _tagValor.InnerHtml = valorAtual.ToString("C");
            }

            _tagDivValor.InnerHtml       += _tagValorOrigem + "<br/>";
            _tagDivValor.InnerHtml       += _tagValor.ToString();
            _tagDivPanelFooter.InnerHtml += _tagDivValor;

            var disponibilidade = _estoque.AvaliaDisponibilidade(produto.ProdutoTamanhos.First().ProdutoCores.First().ProdutosMontado.First().Id) > 0;

            if (disponibilidade)
            {
                //Formulário para envio ao carrinho
                Formulario(produto, "ProdutoVitrine", "Details", "Comprar", "btn-success");
            }
            else
            {
                //Formulário para envio de e-mail
                Formulario(produto, "ProdutoVitrine", "Details", "Produto indisponível avise-me !", "btn-warning open-modal", disponibilidade: true);
            }

            // Tamanhos do produto
            _tagDivPanelFooter.InnerHtml += Tipos(produto, "", "", 0, 0, false);


            // Cores do Produto
            _tagDivPanelFooter.InnerHtml += _tagDivCores == null ? "" : _tagDivCores.ToString() ?? "";

            _tagDivPanelFooter.InnerHtml += _tagDivFormulario.ToString();

            _tagDivPanel.InnerHtml += _tagDivHeading.ToString();
            _tagDivPanel.InnerHtml += _tagDivPanelBody.ToString();
            _tagDivPanel.InnerHtml += _tagDivPanelFooter.ToString();

            _resultado.Append(_tagDivPanel);
            return(MvcHtmlString.Create(Convert.ToString(_resultado)));
        }
Ejemplo n.º 15
0
 public void Constructor_ShouldThrowArgumentNullException_WhenMappingServiceIsNull()
 {
     // Arrange, Act & Assert
     var promotionsController = new PromotionsController(this.promotionServiceMock.Object, null);
 }
Ejemplo n.º 16
0
        public void CupomPromocional(string cupom)
        {
            if (_userId != null)
            {
                if (_db.Pedidos.Where(c => c.Promocao.Codigo == cupom && c.Cliente.ApplicationUserId == _userId).Any())
                {
                    throw new Exception("Este cupom não é mais válido");
                }
            }

            var cupomDesconto = _db.Promocoes.FirstOrDefault(c => c.Ativo && c.Codigo == cupom);

            if (cupomDesconto == null)
            {
                throw new Exception("Cupom não encontrada!");
            }

            if (!PromotionsController.VerificaPromocao(cupomDesconto))
            {
                throw new Exception("Este cupom não é mais válido");
            }

            IQueryable <ItemCarrinho> itens;

            if (_userId == null)
            {
                itens = _db.ItemCarrinhos.Include("ProdutoMontado")
                        .Where(c => c.AnonymousId == _userAnonymonusId);
            }
            else
            {
                itens = _db.ItemCarrinhos.Include("ProdutoMontado")
                        .Where(c => c.ApplicationUserId == _userId);
            }

            foreach (var itemCarrinho in itens)
            {
                if (cupomDesconto.TodosItens)
                {
                    itemCarrinho.PromocaoId       = cupomDesconto.Id;
                    _db.Entry(itemCarrinho).State = System.Data.Entity.EntityState.Modified;
                }
                else
                {
                    bool control = false;

                    var itemP = cupomDesconto.PromocaoItems.FirstOrDefault(c => c.ProdutoMontadoId == itemCarrinho.ProdutoMontadoId);
                    if (itemP != null)
                    {
                        control = true;
                        itemCarrinho.PromocaoId       = cupomDesconto.Id;
                        itemCarrinho.TabelaPrecoId    = itemP.TabelaDePrecoId;
                        itemCarrinho.TabelaPreco      = itemP.TabelaDePreco;
                        _db.Entry(itemCarrinho).State = System.Data.Entity.EntityState.Modified;
                    }

                    if (!control)
                    {
                        throw new Exception("Os itens no carrinho não são válidos para este cupom");
                    }
                }
            }

            _db.SaveChanges();
        }