aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authormrfoxygmfr <mrfoxygmfr@sch9.ru>2025-04-28 00:46:27 +0300
committermrfoxygmfr <mrfoxygmfr@sch9.ru>2025-04-28 00:46:27 +0300
commit9172604227cd8e24105a3a25fbe604528266e75e (patch)
tree147c0fb4c01dd47165f40f49f591b887c0278872 /src
parentdc403877870dbacd7ee1abe2376a52d0828a29ab (diff)
feat: partners controller + pages
Diffstat (limited to 'src')
-rw-r--r--src/main/java/ru/mrfoxygmfr/warehouse_accounting/http/controllers/PartnersController.java82
-rw-r--r--src/main/resources/templates/partnerEdit.html48
-rw-r--r--src/main/resources/templates/partners.html87
3 files changed, 217 insertions, 0 deletions
diff --git a/src/main/java/ru/mrfoxygmfr/warehouse_accounting/http/controllers/PartnersController.java b/src/main/java/ru/mrfoxygmfr/warehouse_accounting/http/controllers/PartnersController.java
new file mode 100644
index 0000000..22d2d78
--- /dev/null
+++ b/src/main/java/ru/mrfoxygmfr/warehouse_accounting/http/controllers/PartnersController.java
@@ -0,0 +1,82 @@
+package ru.mrfoxygmfr.warehouse_accounting.http.controllers;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.jpa.domain.Specification;
+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.RequestParam;
+import ru.mrfoxygmfr.warehouse_accounting.db.dao.PartnerDAO;
+import ru.mrfoxygmfr.warehouse_accounting.db.dao.specs.PartnerSpecs;
+import ru.mrfoxygmfr.warehouse_accounting.db.models.Partner;
+import ru.mrfoxygmfr.warehouse_accounting.db.models.PartnerType;
+
+import java.util.List;
+
+@Controller
+public class PartnersController {
+ @Autowired
+ private PartnerDAO partnerDAO;
+
+ @GetMapping("partners")
+ public String partners(@RequestParam(name = "partnerName", required = false) String name,
+ @RequestParam(name = "partnerType", required = false) PartnerType type,
+ @RequestParam(name = "partnerTaxNumber", required = false) String taxNumber,
+ Model model) {
+ Specification<Partner> spec = Specification.where(null);
+ if (name != null && !name.isEmpty()) {
+ spec = spec.and(PartnerSpecs.partnerNameLike(name));
+ model.addAttribute("partnerNameFilter", name);
+ }
+ if (type != null) {
+ spec = spec.and(PartnerSpecs.partnerTypeEqual(type));
+ model.addAttribute("partnerTypeFilter", type.toString());
+ System.out.println(model.getAttribute("partnerTypeFilter") == "ISSUER");
+ }
+ if (taxNumber != null && !taxNumber.isEmpty()) {
+ spec = spec.and(PartnerSpecs.partnerTaxNumberLike(taxNumber));
+ model.addAttribute("partnerTaxNumberFilter", taxNumber);
+ }
+
+ List<Partner> partners = partnerDAO.findAll(spec);
+ model.addAttribute("partners", partners);
+ return "partners";
+ }
+
+ @GetMapping("partner")
+ public String partner(@RequestParam(name = "id") Integer id, Model model) {
+ Partner partner = partnerDAO.findById(id).orElseThrow();
+ model.addAttribute("partner", partner);
+ return "partnerEdit";
+ }
+
+ @PostMapping("partner")
+ public String partner(@RequestParam(name = "partnerId") Integer id,
+ @RequestParam(name = "partnerName") String name,
+ @RequestParam(name = "partnerTaxNumber") String taxNumber,
+ @RequestParam(name = "partnerType") PartnerType type,
+ @RequestParam(name = "partnerAddress") String address) {
+ Partner partner;
+ if (id == -1) {
+ partner = new Partner(name, taxNumber, type, address);
+ } else {
+ partner = partnerDAO.findById(id).orElseThrow();
+ partner.setName(name);
+ partner.setTaxNumber(taxNumber);
+ partner.setType(type);
+ partner.setAddress(address);
+ }
+ partnerDAO.save(partner);
+ return "redirect:/partners";
+ }
+
+ @GetMapping("newPartner")
+ public String newPartner(Model model) {
+ Partner partner = new Partner();
+ partner.setId(-1);
+ model.addAttribute("partner", partner);
+ model.addAttribute("newItem", true);
+ return "partnerEdit";
+ }
+}
diff --git a/src/main/resources/templates/partnerEdit.html b/src/main/resources/templates/partnerEdit.html
new file mode 100644
index 0000000..a02a8e5
--- /dev/null
+++ b/src/main/resources/templates/partnerEdit.html
@@ -0,0 +1,48 @@
+<!DOCTYPE HTML>
+<html xmlns:th="http://www.thymeleaf.org" lang="en">
+<div th:replace="~{common :: head}"></div>
+
+<body>
+<div th:replace="~{common :: page-header}"></div>
+
+<div class="indent">
+ <div id="updateToggleSelector">
+ <button id="updateBtn" class="btn btn-primary" onclick="toggleDisabled()">Изменить</button><br><br>
+ <a th:href="@{/operations(operationPartnerName=${partner.getName()})}">
+ <button class="btn btn-primary">Операции партнера</button>
+ </a><br><br>
+ </div>
+
+ <form method="post" action="/partner">
+ <input disabled hidden id="partnerId" name="partnerId" th:value="${partner.getId()}">
+
+ <label for="partnerName">Название:</label>
+ <input disabled type="text" id="partnerName" name="partnerName" required th:value="${partner.getName()}"><br><br>
+
+ <label for="partnerTaxNumber">ИНН:</label>
+ <input disabled type="text" id="partnerTaxNumber" name="partnerTaxNumber" required th:value="${partner.getTaxNumber()}"><br><br>
+
+ <label for="partnerType">Тип:</label>
+ <select disabled id="partnerType" name="partnerType" required>
+ <option value="0" disabled>Выберите тип</option>
+ <option th:value="'SUPPLIER'" th:text="SUPPLIER" th:selected="${partner.getType() == 'SUPPLIER'}"></option>
+ <option th:value="'ISSUER'" th:text="ISSUER" th:selected="${partner.getType() == 'ISSUER'}"></option>
+ </select> <br><br>
+
+ <label for="partnerAddress">Адрес:</label>
+ <input disabled type="text" id="partnerAddress" name="partnerAddress" required th:value="${partner.getAddress()}"><br><br>
+
+ <p>Контактные лица делают брррр TODO FIXME</p>
+
+ <input id="saveBtn" type="submit" value="Сохранить" class="btn btn-primary" hidden>
+
+ </form>
+</div>
+
+
+<div th:replace="~{common :: site-footer}"></div>
+<div th:replace="~{common :: site-script}"></div>
+<div th:replace="~{common :: editFieldsToggle}"></div>
+
+</body>
+</html> \ No newline at end of file
diff --git a/src/main/resources/templates/partners.html b/src/main/resources/templates/partners.html
new file mode 100644
index 0000000..7687f3a
--- /dev/null
+++ b/src/main/resources/templates/partners.html
@@ -0,0 +1,87 @@
+<!DOCTYPE HTML>
+<html xmlns:th="http://www.thymeleaf.org" lang="en">
+<div th:replace="~{common :: head}"></div>
+
+<body>
+<div th:replace="~{common :: page-header}"></div>
+
+<div class="indent">
+ <form method="get" action="/newPartner">
+ <button id="newOperationBtn" type="submit" class="btn btn-primary">Создать нового партнера</button>
+ </form>
+ <br>
+
+ <form method="get" action="/partners">
+ <table class="table">
+ <thead class="theme-dark">
+ <tr>
+ <th colspan="6">Фильтры</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>Название</td>
+ <td>
+ <input type="text" id="partnerNameFilter" name="partnerName" th:value="${partnerNameFilter}">
+ </td>
+ </tr>
+ <tr>
+ <td>Тип</td>
+ <td>
+ <select id="partnerTypeFilter" name="partnerType">
+ <option value="">Любой</option>
+ <option th:value="'SUPPLIER'" th:text="SUPPLIER" th:selected="${partnerTypeFilter == 'SUPPLIER'}"></option>
+ <option th:value="'ISSUER'" th:text="ISSUER" th:selected="${partnerTypeFilter == 'ISSUER'}"></option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td>ИНН</td>
+ <td>
+ <input type="text" id="partnerTaxNumberFilter" name="partnerTaxNumber" th:value="${partnerTaxNumberFilter}">
+ </td>
+ </tr>
+ <tr>
+ <td colspan="6"><input id="saveBtn" type="submit" value="Применить" class="btn btn-primary"></td>
+ </tr>
+ </tbody>
+ </table>
+ </form>
+
+ <table class="table table-bordered table-warning">
+ <thead class="thead-dark">
+ <tr>
+ <th scope="col">Название</th>
+ <th scope="col">ИНН</th>
+ <th scope="col">Тип</th>
+ <th scope="col">Адрес</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr th:if="${partners.isEmpty()}">
+ <td colspan="6">Данному фильтру не удовлетворяет ни одного партнера.</td>
+ </tr>
+ <tr th:each="partner : ${partners}">
+ <td>
+ <a th:href="'/partner?id=' + ${partner.getId()}">
+ <span th:text="${partner.getName()}"></span>
+ </a>
+ </td>
+ <td>
+ <span th:text="${partner.getTaxNumber()}"></span>
+ </td>
+ <td>
+ <span th:text="${partner.getType()}"></span>
+ </td>
+ <td>
+ <span th:text="${partner.getAddress()}"></span>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<div th:replace="~{common :: site-footer}"></div>
+<div th:replace="~{common :: site-script}"></div>
+</body>
+</html> \ No newline at end of file