Răsfoiți Sursa

Starts commits

Ranghetti 7 luni în urmă
părinte
comite
12a40f44d4

+ 3 - 3
src/main/java/com/platform2easy/genesis/GenesisApplication.java

@@ -6,8 +6,8 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
 @SpringBootApplication
 public class GenesisApplication {
 
-	public static void main(String[] args) {
-		SpringApplication.run(GenesisApplication.class, args);
-	}
+    public static void main(String[] args) {
+        SpringApplication.run(GenesisApplication.class, args);
+    }
 
 }

+ 25 - 0
src/main/java/com/platform2easy/genesis/domain/model/Compra.java

@@ -0,0 +1,25 @@
+package com.platform2easy.genesis.domain.model;
+
+
+import jakarta.persistence.CascadeType;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.OneToMany;
+import lombok.Data;
+
+import java.util.List;
+
+@Entity
+@Data
+public class Compra {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+    private String fornecedor;
+
+    @OneToMany(mappedBy = "compra", cascade = CascadeType.ALL, orphanRemoval = true)
+    private List<ItemCompra> itens;
+}

+ 25 - 0
src/main/java/com/platform2easy/genesis/domain/model/ItemCompra.java

@@ -0,0 +1,25 @@
+package com.platform2easy.genesis.domain.model;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.ManyToOne;
+import lombok.Data;
+
+@Entity
+@Data
+public class ItemCompra {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+    @ManyToOne
+    private Compra compra;
+
+    private Integer quantidade;
+    private Float valor;
+    private String descricao;
+
+}

+ 24 - 0
src/main/java/com/platform2easy/genesis/domain/model/ItemVenda.java

@@ -0,0 +1,24 @@
+package com.platform2easy.genesis.domain.model;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.ManyToOne;
+import lombok.Data;
+
+@Entity
+@Data
+public class ItemVenda {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+    @ManyToOne
+    private Venda venda;
+
+    private Integer quantidade;
+    private Float valor;
+    private String descricao;
+}

+ 24 - 0
src/main/java/com/platform2easy/genesis/domain/model/Venda.java

@@ -0,0 +1,24 @@
+package com.platform2easy.genesis.domain.model;
+
+import jakarta.persistence.CascadeType;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.OneToMany;
+import lombok.Data;
+
+import java.util.List;
+
+@Entity
+@Data
+public class Venda {
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+    private String cliente;
+
+    @OneToMany(mappedBy = "venda", cascade = CascadeType.ALL, orphanRemoval = true)
+    private List<ItemVenda> itens;
+
+}

+ 8 - 0
src/main/java/com/platform2easy/genesis/domain/repository/CompraRepository.java

@@ -0,0 +1,8 @@
+package com.platform2easy.genesis.domain.repository;
+
+
+import com.platform2easy.genesis.domain.model.Compra;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface CompraRepository extends JpaRepository<Compra, Long> {
+}

+ 8 - 0
src/main/java/com/platform2easy/genesis/domain/repository/ItemCompraRepository.java

@@ -0,0 +1,8 @@
+package com.platform2easy.genesis.domain.repository;
+
+
+import com.platform2easy.genesis.domain.model.ItemCompra;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface ItemCompraRepository extends JpaRepository<ItemCompra, Long> {
+}

+ 37 - 0
src/main/java/com/platform2easy/genesis/domain/service/CompraService.java

@@ -0,0 +1,37 @@
+package com.platform2easy.genesis.domain.service;
+
+import com.platform2easy.genesis.domain.model.Compra;
+import com.platform2easy.genesis.domain.repository.CompraRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+@Service
+public class CompraService {
+
+    @Autowired
+    private CompraRepository repository;
+
+    @Transactional
+    public void salvar(Compra compra) {
+
+        compra.getItens().forEach(itemCompra -> itemCompra.setCompra(compra));
+
+        repository.save(compra);
+    }
+
+    public List<Compra> listarTodos() {
+        return repository.findAll();
+    }
+
+    public Compra buscarPorId(Long id) {
+        return repository.findById(id).get();
+    }
+
+    public void deletarPorId(Long id) {
+        repository.deleteById(id);
+    }
+
+}

+ 67 - 0
src/main/java/com/platform2easy/genesis/web/controller/CompraController.java

@@ -0,0 +1,67 @@
+package com.platform2easy.genesis.web.controller;
+
+import com.platform2easy.genesis.domain.model.Compra;
+import com.platform2easy.genesis.domain.model.ItemCompra;
+import com.platform2easy.genesis.domain.service.CompraService;
+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.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import java.util.Arrays;
+
+@Controller
+@RequestMapping("compra")
+public class CompraController {
+
+    @Autowired
+    private CompraService service;
+
+    @GetMapping()
+    public String iniciar(Compra compra, Model model) {
+        return "compra/formulario";
+    }
+
+    @PostMapping()
+    public String inserir(Compra compra, ItemCompra itemCompra, Model model) {
+        itemCompra.setId(null);
+
+        if (compra.getItens() == null) compra.setItens(Arrays.asList(itemCompra));
+        else compra.getItens().add(itemCompra);
+
+        return iniciar(compra, model);
+    }
+
+    @PostMapping("{index}")
+    public String removerItem(@PathVariable int index, Compra compra, Model model) {
+        compra.getItens().remove(index);
+        return iniciar(compra, model);
+    }
+
+    @PostMapping("salvar")
+    public String salvar(Compra compra, Model model) {
+        service.salvar(compra);
+        return "redirect:/compra/listar";
+    }
+
+    @GetMapping("listar")
+    public String listar(Model model) {
+        model.addAttribute("compras", service.listarTodos());
+        return "compra/lista";
+    }
+
+    @GetMapping("editar/{id}")
+    public String alterar(@PathVariable Long id, Model model) {
+        model.addAttribute("compra", service.buscarPorId(id));
+        return "compra/formulario";
+    }
+
+    @GetMapping("remover/{id}")
+    public String remover(@PathVariable Long id, Model model) {
+        service.deletarPorId(id);
+        return "redirect:/compra/listar";
+    }
+}

+ 16 - 0
src/main/resources/application.properties

@@ -1 +1,17 @@
 spring.application.name=genesis
+
+server.port=8080
+
+#datasource
+spring.datasource.url=jdbc:h2:mem:banco
+spring.datasource.username=sa
+spring.datasource.password=
+spring.datasource.driver-class-name=org.h2.Driver
+
+#JPA
+spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
+spring.jpa.hibernate.ddl-auto=update
+
+#h2
+spring.h2.console.enabled=true
+spring.h2.console.path=/banco

+ 5 - 0
src/main/resources/static/css/estilo.css

@@ -0,0 +1,5 @@
+@charset "ISO-8859-1";
+
+h1 {
+	color: green;
+}

+ 39 - 0
src/main/resources/templates/Index.html

@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html lang="en" xmlns:th="http://www.thymeleaf.org">
+<head th:fragment="head">
+    <meta charset="UTF-8">
+    <title>Compra & Venda</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.6/dist/css/bootstrap.min.css" rel="stylesheet"
+          integrity="sha384-4Q6Gf2aSP4eDXB8Miphtr37CMZZQ5oXLH2yaXMJ2w8e2ZtHTl7GptT4jmndRuHDT" crossorigin="anonymous">
+    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.13.1/font/bootstrap-icons.min.css">
+
+    <link rel="stylesheet" th:href="@{/css/estilo.css}">
+
+</head>
+<body>
+<div class="container">
+    <div th:fragment="menu">
+        <h1>Compra & Venda</h1>
+        <a type="button" class="btn btn-outline-info" th:href="@{/}">Home</a>
+        <a type="button" class="btn btn-outline-info" th:href="@{/compra/listar}">Compras</a>
+        <a type="button" class="btn btn-outline-info" th:href="@{/compra}">Comprar</a>
+        <a type="button" class="btn btn-outline-warning" th:href="@{/banco}" target="_blank">Banco</a>
+        <div class="alert alert-warning alert-dismissible fade show position-fixed top-0 end-0 m-3" role="alert"
+             style="max-width: 400px; z-index: 9999;">
+            <strong>Holy guacamole!</strong> You should check in on some of those fields below.
+            <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
+        </div>
+    </div>
+</div>
+
+<div th:fragment="script">
+    <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/dist/umd/popper.min.js"
+            integrity="sha384-I7E8VVD/ismYTF4hNIPjVp/Zjvgyol6VFvRkX/vR+Vc4jQkC+hVqc2pM8ODewa9r"
+            crossorigin="anonymous"></script>
+    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.6/dist/js/bootstrap.min.js"
+            integrity="sha384-RuyvpeZCxMJCqVUGFI0Do1mQrods/hhxYlcVfGPOfQtPJh0JCw12tUAZ/Mv10S7D"
+            crossorigin="anonymous"></script>
+</div>
+</body>
+</html>

+ 66 - 0
src/main/resources/templates/compra/formulario.html

@@ -0,0 +1,66 @@
+<!DOCTYPE html>
+<html lang="en" xmlns:th="http://www.thymeleaf.org">
+<head th:insert="~{index :: head}">
+    <meta charset="UTF-8">
+</head>
+<body>
+<div class="container">
+    <div th:insert="~{index :: menu}"></div>
+    <br/>
+    <form>
+        <div class="mb-3">
+            <input hidden="true" name="id" th:value="${compra.id}" type="text">
+
+            <label class="form-label" for="fornecedor">Fornecedor</label>
+            <input class="form-control" id="fornecedor" name="fornecedor" th:value="${compra.fornecedor}" type="text">
+        </div>
+
+        <br/>
+        <div class="mb-3">
+            <table class="table">
+                <thead>
+                <tr>
+                    <th>Código</th>
+                    <th>Item</th>
+                    <th>Valor</th>
+                    <th></th>
+                </tr>
+                </thead>
+                <tbody>
+                <tr th:each="item, stat : ${compra.itens}">
+                    <td>
+                        <input th:value="${item.id}" th:name="|itens[${stat.index}].id|" type="text" hidden="true">
+                        <input th:value="${item.id}" class="form-control" type="text" disabled>
+                    </td>
+                    <td>
+                        <input th:value="${item.descricao}" class="form-control"
+                               th:name="|itens[${stat.index}].descricao|" type="text" required>
+                    </td>
+                    <td><input th:value="${item.valor}" class="form-control" th:name="|itens[${stat.index}].valor|"
+                               type="text" required></td>
+                    <td>
+                        <button class="btn btn-outline-dark" formmethod="post" th:formaction="@{'/compra/' + ${stat.index}}"
+                                type="submit">
+                            <i class="bi bi-dash-square"></i>
+                        </button>
+                    </td>
+                </tr>
+                <tr>
+                    <td><input class="form-control" type="text" disabled></td>
+                    <td><input class="form-control" th:name="descricao" type="text"></td>
+                    <td><input class="form-control" th:name="valor" type="text"></td>
+                    <td>
+                        <button class="btn btn-outline-dark" formmethod="post" th:formaction="@{/compra}" type="submit">
+                            <i class="bi bi-plus-square"></i>
+                        </button>
+                </tr>
+                </tbody>
+            </table>
+        </div>
+
+        <button class="btn btn-dark" formmethod="post" th:formaction="@{/compra/salvar}" type="submit">Salvar</button>
+    </form>
+</div>
+<div th:insert="~{index :: script}"></div>
+</body>
+</html>

+ 38 - 0
src/main/resources/templates/compra/lista.html

@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html lang="en" xmlns:th="http://www.thymeleaf.org">
+<head th:insert="~{index :: head}">
+    <meta charset="UTF-8">
+</head>
+<body>
+<div class="container">
+    <div th:insert="~{index :: menu}"></div>
+    <br/>
+    <table class="table table-hover">
+        <thead>
+        <tr>
+            <th>Código</th>
+            <th>Fornecedor</th>
+            <th>Ações</th>
+        </tr>
+        </thead>
+        <tbody>
+        <tr th:each="compra : ${compras}">
+            <td th:text="${compra.id}">0</td>
+            <td th:text="${compra.fornecedor}">0</td>
+            <td>
+                <a th:href="@{'/compra/editar/' + ${compra.id}}" type="button" class="btn btn-outline-dark"
+                   title="Editar">
+                    <i class="bi bi-pencil-square"></i>
+                </a>
+                <a th:href="@{'/compra/remover/' + ${compra.id}}" type="button" class="btn btn-outline-dark"
+                   title="Remover">
+                    <i class="bi bi-dash-square"></i>
+                </a>
+            </td>
+        </tr>
+        </tbody>
+    </table>
+</div>
+<div th:insert="~{index :: script}"></div>
+</body>
+</html>