diff options
Diffstat (limited to 'src/main')
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 |