Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Como fazer para aplicar um valor de desconto no caso de uma aplicação que lista produtos

Home

<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet"
    href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"
    integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm"
    crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"
    integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN"
    crossorigin="anonymous"></script>
<script
    src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"
    integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q"
    crossorigin="anonymous"></script>
<script
    src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"
    integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl"
    crossorigin="anonymous"></script>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<div class="container">
    <div class="jumbotron">
    <center>
    <h1 class="display-4">Seja Bem Vindo!</h1>
    <p class="lead">Este é o seu portal funcional de precificação.</p>
    <a href="/cadastro" class="btn btn btn-primary">Cadastro de Produtos</a>
    <a href="/listaProdutos" class="btn btn btn-primary">Lista Produtos</a>
    </center>

    </div>
    </div>




</body>
</html>

Controller

package com.br.riachuelo.teste.eletronicos.controller;

import java.util.Optional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.br.riachuelo.teste.eletronicos.model.Produto;
import com.br.riachuelo.teste.eletronicos.service.ProdutoService;

@Controller
@RequestMapping(value = "/")
public class HomeController {

    @Autowired
    ProdutoService service;

    @RequestMapping(value = "home")
    public String home() {
        return "home";
    }

    @RequestMapping(value = "/cadastro")
    public String cadastroProdutos() {
        return "FormCadastroProdutoAvaria";
    }

    @PostMapping(value = "/salvarCadastro")
    public String salvarProduto(Model model, @RequestParam("nome") String nome,
            @RequestParam("descricao") String descricao, @RequestParam("valor") Double valor) {

        Produto p = new Produto(nome, descricao, valor);

        service.novoProduto(p);

        Iterable<Produto> produtos = service.listarProdutos();

        model.addAttribute("produtos", produtos);

        return "ListaProdutos";
    }

    @GetMapping(value = "/listaProdutos")
    public String listaProdutos(Model model) {

        Iterable<Produto> produtos = service.listarProdutos();

        model.addAttribute("produtos", produtos);

        return "ListaProdutos";
    }

    @PostMapping(value = "/aplicarDesconto")
    public String aplicarValor(Model model, @RequestParam("porcentagemDesconto") Integer porcentagemDesconto) {

        Integer aux = 0;

        Iterable<Produto> produtos = service.listarProdutos();

        model.addAttribute("produtos", produtos);

        for (Produto produto : produtos) {
            aux = produto.getId();

        }

        Produto p = new Produto();
        Optional<Produto> buscarPorId = service.BuscarPorId(p.getId());

        if (aux == buscarPorId.get().getId()) {
            Double valorComDesconto = service.aplicarDesconto(porcentagemDesconto, buscarPorId.get().getId(),
                    buscarPorId.get().getValor());
            buscarPorId.get().setValorComDesconto(valorComDesconto);

            service.alterarProduto(buscarPorId.get().getId());
        }

        return "ListaProdutos";
    }

}
2 respostas
solução!

Produto

package com.br.riachuelo.teste.eletronicos.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Produto {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer id;

    private String nome;

    private String descricao;

    private Double valor;

    private Double valorComDesconto;

    public Produto() {

    }

    public Produto( String nome, String descricao,Double valor){
        this.nome = nome;
        this.descricao = descricao;
        this.valor = valor;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public Double getValor() {
        return valor;
    }

    public void setValor(Double valor) {
        this.valor = valor;
    }

    public Double getValorComDesconto() {
        return valorComDesconto;
    }

    public void setValorComDesconto(Double valorComDesconto) {
        this.valorComDesconto = valorComDesconto;
    }


}

Service

package com.br.riachuelo.teste.eletronicos.service;

import java.util.Optional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Service;

import com.br.riachuelo.teste.eletronicos.model.Produto;
import com.br.riachuelo.teste.eletronicos.repository.ProdutoRepository;

@Service
public class ProdutoService {

    @Autowired
    ProdutoRepository repository;


    public void novoProduto(Produto produto){
        repository.save(produto);
    }

    public Iterable<Produto> listarProdutos(){
        Iterable<Produto> produtos = repository.findAll();

        return produtos;
    }

    public Double aplicarDesconto(Integer porcentagemDesconto,Integer id,Double valorAtual){

        Double valorDesconto = valorAtual * porcentagemDesconto / 100;

        return valorDesconto;

    }

    public Optional<Produto> BuscarPorId(Integer id){
        Optional<Produto> findById = repository.findById(id);

    return findById;
    }

    @Modifying
    @Query("UPDATE Produto  set valorComDesconto WHERE id =:id")
    public void alterarProduto(@Param("id") Integer id){

    }
}

ListaProdutos.Html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<link rel="stylesheet"
    href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"
    integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm"
    crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"
    integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN"
    crossorigin="anonymous"></script>
<script
    src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"
    integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q"
    crossorigin="anonymous"></script>
<script
    src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"
    integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl"
    crossorigin="anonymous"></script>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <div class="container">

        <table class="table">
            <thead>
                <tr>
                    <th scope="col">Id</th>
                    <th scope="col">Nome</th>
                    <th scope="col">Descricao</th>
                    <th scope="col">Valor</th>
                    <th scope="col">% Desconto</th>
                    <th scope="col">R$ Desconto</th>
                    <th scope="col">Valor com Desconto</th>

                </tr>
            </thead>

            <tr th:each="produto: ${produtos}">

                <td><span th:text="${produto.id}"></span></td>
                <td><span th:text="${produto.nome}"></span></td>
                <td><span th:text="${produto.descricao}"></span></td>
                <td><span th:text="${produto.valor}"></span></td>
                <td><input type="text"></td>
                <td><input type="text"></td>
                <td><span th:text="${produto.valorComDesconto}"></span></td>
                <td><a href="/listaProdutos" class="btn btn btn-success" onclick="/aplicarDesconto">Aplicar Desconto</a></td>
            </tr>
        </table>
        <a href="/home" class="btn btn btn-success">Home</a>
        <a href="/cadastro" class="btn btn btn-success">Cadastrar Novo Produto</a>



    </div>

</body>
</html>

Alguem sabe me dizer de que modo que eu pego as informações do produto e levo para a minha controller de modo que consiga utilizar o método de update e alterar o valorComDesconto?