From 134b02fbc3a7f9b461321435fae07e5307886dc2 Mon Sep 17 00:00:00 2001 From: GhaitsaDina <ghaitsamaulidina@gmail.com> Date: Mon, 21 Nov 2022 10:37:04 +0700 Subject: [PATCH 01/14] chores: managing html package, change ddl-auto to 'create', --- .../src/main/resources/application.properties | 2 +- .../form-add-apoteker.html | 2 +- .../{manage => dokter}/list-dokter.html | 0 .../templates/fragments/fragment.html | 15 +++++--- .../main/resources/templates/home/home.html | 38 +++++++++++++++---- 5 files changed, 42 insertions(+), 15 deletions(-) rename SpringTkApap/src/main/resources/templates/{manage => apoteker}/form-add-apoteker.html (95%) rename SpringTkApap/src/main/resources/templates/{manage => dokter}/list-dokter.html (100%) diff --git a/SpringTkApap/src/main/resources/application.properties b/SpringTkApap/src/main/resources/application.properties index 81719e8..573f30a 100644 --- a/SpringTkApap/src/main/resources/application.properties +++ b/SpringTkApap/src/main/resources/application.properties @@ -9,7 +9,7 @@ spring.datasource.password= spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect -spring.jpa.hibernate.ddl-auto=create-drop +spring.jpa.hibernate.ddl-auto=create spring.main.allow-circular-references=true diff --git a/SpringTkApap/src/main/resources/templates/manage/form-add-apoteker.html b/SpringTkApap/src/main/resources/templates/apoteker/form-add-apoteker.html similarity index 95% rename from SpringTkApap/src/main/resources/templates/manage/form-add-apoteker.html rename to SpringTkApap/src/main/resources/templates/apoteker/form-add-apoteker.html index 84c95d2..862a8eb 100644 --- a/SpringTkApap/src/main/resources/templates/manage/form-add-apoteker.html +++ b/SpringTkApap/src/main/resources/templates/apoteker/form-add-apoteker.html @@ -30,7 +30,7 @@ </select> <br> <button type="submit" class="btn btn-primary">Submit</button> - <a class="btn btn-link" href="/">Home</a> + <a class="btn btn-link" href="/static">Home</a> </form> </div> </div> diff --git a/SpringTkApap/src/main/resources/templates/manage/list-dokter.html b/SpringTkApap/src/main/resources/templates/dokter/list-dokter.html similarity index 100% rename from SpringTkApap/src/main/resources/templates/manage/list-dokter.html rename to SpringTkApap/src/main/resources/templates/dokter/list-dokter.html diff --git a/SpringTkApap/src/main/resources/templates/fragments/fragment.html b/SpringTkApap/src/main/resources/templates/fragments/fragment.html index 5ad3f54..82de4b8 100644 --- a/SpringTkApap/src/main/resources/templates/fragments/fragment.html +++ b/SpringTkApap/src/main/resources/templates/fragments/fragment.html @@ -37,14 +37,17 @@ <li th:classappend="${page == 'Beranda'} ? active : ''" class="nav-item"> <a class="nav-link" th:href="@{/}">Beranda</a> </li> - <li th:classappend="${page == 'Course'} ? active : ''"class="nav-item"> - <a class="nav-link" th:href="@{/course/viewall/}">Resep</a> + <li th:classappend="${page == 'Dokter'} ? active : ''" class="nav-item"> + <a class="nav-link" th:href="@{/}">Dokter</a> </li> - <li th:classappend="${page == 'Penyelenggara'} ? active : ''"class="nav-item"> - <a class="nav-link" th:href="@{/penyelenggara/viewall/}">Obat</a> + <li th:classappend="${page == 'Resep'} ? active : ''"class="nav-item"> + <a class="nav-link" th:href="@{/}">Resep</a> </li> - <li sec:authorize="hasAnyAuthority('Admin')" th:classappend="${page == 'User'} ? active : ''"class="nav-item"> - <a class="nav-link" th:href="@{/user/viewall/}">Appointment</a> + <li th:classappend="${page == 'Obat'} ? active : ''"class="nav-item"> + <a class="nav-link" th:href="@{/obat/add}">Obat</a> + </li> + <li sec:authorize="hasAnyAuthority('Appointment')" th:classappend="${page == 'User'} ? active : ''"class="nav-item"> + <a class="nav-link" th:href="@{/}">Appointment</a> </li> </ul> <form class="form-inline my-2 my-lg-0" th:action="@{/course/view}" method="GET"> diff --git a/SpringTkApap/src/main/resources/templates/home/home.html b/SpringTkApap/src/main/resources/templates/home/home.html index 79c6a0e..9e1ab8a 100644 --- a/SpringTkApap/src/main/resources/templates/home/home.html +++ b/SpringTkApap/src/main/resources/templates/home/home.html @@ -1,20 +1,44 @@ <!DOCTYPE html> <html lang="en" xmlns:th="http://thymeleaf.org" xmlns:sec="http://www.w3.org/1999/xhtml"> <head> - <meta charset="UTF-8"> - <title>Beranda</title> - <object th:include="fragments/fragment :: css" th:remove="tag"></object> - <object th:include="fragments/fragment :: js" th:remove="tag"></object> + <meta charset="UTF-8"> + <title>Beranda</title> + <object th:include="fragments/fragment :: css" th:remove="tag"></object> + <object th:include="fragments/fragment :: js" th:remove="tag"></object> </head> <body> <object th:replace="fragments/fragment :: navbar('Beranda')"></object> <div class="alert" th:if="${message}"> - <div th:text="${message}" class="alert alert-success text-center" onclick="this.parentElement.style.display='none';"></div> + <div th:text="${message}" class="alert alert-success text-center" + onclick="this.parentElement.style.display='none';"></div> </div> <div class="d-flex justify-content-center"> - <h2 th:text="'Hello '+${#httpServletRequest.remoteUser}+'!'">Login as</h2> - <a class="nav-item nav-link text-text-secondary" th:href="@{/logout-sso}">Logout</a> + <div class="m-4 d-flex flex-column justify-content-center" style="gap: 12px"> + <div> + <h2 th:text="'Hello '+${#httpServletRequest.remoteUser}+'!'">Login as</h2> + </div> + <div> + <div> + <h5>Dokter Section</h5> + </div> + <a th:href="@{/}" class="mx-2 btn btn-primary">Sebuah Tombol</a> + </div> + <div> + <div> + <h5>Resep Section</h5> + </div> + <a th:href="@{/}" class="mx-2 btn btn-primary">Sebuah Tombol</a> + </div> + <div> + <div> + <h5>Obat Section</h5> + </div> + <a th:href="@{/obat/add}" class="mx-2 btn btn-primary">Add Obat</a> + <a th:href="@{/}" class="mx-2 btn btn-primary">Lihat Semua Obat</a> + </div> + <a class="my-2 mx-2 btn btn-danger pt-2" th:href="@{/logout-sso}">Logout</a> + </div> </div> </body> -- GitLab From 0399af1dc2d7baf7b44c2e84d8c51aab5c868190 Mon Sep 17 00:00:00 2001 From: GhaitsaDina <ghaitsamaulidina@gmail.com> Date: Mon, 21 Nov 2022 10:39:04 +0700 Subject: [PATCH 02/14] feat/obat: implemented add obat feature --- .../TK/SpringTkApap/jumlah/JumlahModel.java | 2 +- .../obat/controller/ObatController.java | 38 +++++++++++++++++++ .../obat/{ => model}/ObatModel.java | 8 ++-- .../SpringTkApap/obat/repository/ObatDb.java | 10 +++++ .../obat/service/ObatService.java | 7 ++++ .../obat/service/ObatServiceImpl.java | 21 ++++++++++ .../resources/templates/obat/add-obat.html | 26 +++++++++++++ .../templates/obat/form-add-obat.html | 31 +++++++++++++++ 8 files changed, 138 insertions(+), 5 deletions(-) create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/controller/ObatController.java rename SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/{ => model}/ObatModel.java (86%) create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/repository/ObatDb.java create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatService.java create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatServiceImpl.java create mode 100644 SpringTkApap/src/main/resources/templates/obat/add-obat.html create mode 100644 SpringTkApap/src/main/resources/templates/obat/form-add-obat.html diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/JumlahModel.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/JumlahModel.java index eeb05fb..c12bf8f 100644 --- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/JumlahModel.java +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/JumlahModel.java @@ -5,7 +5,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import org.hibernate.annotations.OnDelete; import org.hibernate.annotations.OnDeleteAction; -import spring.TK.SpringTkApap.obat.ObatModel; +import spring.TK.SpringTkApap.obat.model.ObatModel; import spring.TK.SpringTkApap.resep.ResepModel; import javax.persistence.*; diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/controller/ObatController.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/controller/ObatController.java new file mode 100644 index 0000000..5e07643 --- /dev/null +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/controller/ObatController.java @@ -0,0 +1,38 @@ +package spring.TK.SpringTkApap.obat.controller; + +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.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import spring.TK.SpringTkApap.jumlah.JumlahModel; +import spring.TK.SpringTkApap.obat.model.ObatModel; +import spring.TK.SpringTkApap.obat.service.ObatService; + +import java.util.ArrayList; +import java.util.List; + +@Controller +@RequestMapping("/obat") +public class ObatController { + + @Autowired + private ObatService obatService; + + @GetMapping("/add") + public String addObatForm(Model model){ + ObatModel obat = new ObatModel(); + model.addAttribute("obat", obat); + return "obat/form-add-obat"; + } + + @PostMapping("/add") + public String addObatSubmit(@ModelAttribute ObatModel obat, Model model){ + obatService.addObat(obat); + model.addAttribute("obat", obat); + return "obat/add-obat"; + } + +} diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/ObatModel.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/model/ObatModel.java similarity index 86% rename from SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/ObatModel.java rename to SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/model/ObatModel.java index 8a315c4..e170917 100644 --- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/ObatModel.java +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/model/ObatModel.java @@ -1,9 +1,7 @@ -package spring.TK.SpringTkApap.obat; +package spring.TK.SpringTkApap.obat.model; import com.sun.istack.NotNull; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; +import lombok.*; import org.hibernate.annotations.GenericGenerator; import spring.TK.SpringTkApap.jumlah.JumlahModel; @@ -12,6 +10,8 @@ import java.io.Serializable; import java.util.List; @Data @Entity +@Setter +@Getter @Table(name = "obat") @NoArgsConstructor @AllArgsConstructor diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/repository/ObatDb.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/repository/ObatDb.java new file mode 100644 index 0000000..d8e98f4 --- /dev/null +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/repository/ObatDb.java @@ -0,0 +1,10 @@ +package spring.TK.SpringTkApap.obat.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +import spring.TK.SpringTkApap.obat.model.ObatModel; + +@Repository +public interface ObatDb extends JpaRepository<ObatModel, String> { + +} diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatService.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatService.java new file mode 100644 index 0000000..8ce968f --- /dev/null +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatService.java @@ -0,0 +1,7 @@ +package spring.TK.SpringTkApap.obat.service; + +import spring.TK.SpringTkApap.obat.model.ObatModel; + +public interface ObatService { + void addObat(ObatModel obat); +} diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatServiceImpl.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatServiceImpl.java new file mode 100644 index 0000000..1c90cf4 --- /dev/null +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatServiceImpl.java @@ -0,0 +1,21 @@ +package spring.TK.SpringTkApap.obat.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import spring.TK.SpringTkApap.obat.model.ObatModel; +import spring.TK.SpringTkApap.obat.repository.ObatDb; + +import javax.transaction.Transactional; + +@Service +@Transactional +public class ObatServiceImpl implements ObatService{ + + @Autowired + private ObatDb obatDb; + + @Override + public void addObat(ObatModel obat) { + obatDb.save(obat); + } +} diff --git a/SpringTkApap/src/main/resources/templates/obat/add-obat.html b/SpringTkApap/src/main/resources/templates/obat/add-obat.html new file mode 100644 index 0000000..7cbf49c --- /dev/null +++ b/SpringTkApap/src/main/resources/templates/obat/add-obat.html @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<html lang="en" xmlns:th="http://thymeleaf.org"> +<head> + <meta charset="UTF-8"> + <title>RumahSehat</title> + <object th:include="fragments/fragment :: css" th:remove="tag"></object> + <object th:include="fragments/fragment :: js" th:remove="tag"></object> +</head> +<body> + +<nav th:replace="fragments/fragment :: navbar('Obat')"></nav> + +<div class="container"> + <div class="card m-4 p-4"> + <div class="card-body"> + <div class="justify-content-center"> + <h2 th:text="'Obat dengan nama ' + ${obat.namaObat} + ' berhasil ditambahkan.'"></h2> + <br> + <a class="btn btn-primary" href="/">Home</a> + </div> + </div> + </div> +</div> + +</body> +</html> \ No newline at end of file diff --git a/SpringTkApap/src/main/resources/templates/obat/form-add-obat.html b/SpringTkApap/src/main/resources/templates/obat/form-add-obat.html new file mode 100644 index 0000000..2eded3e --- /dev/null +++ b/SpringTkApap/src/main/resources/templates/obat/form-add-obat.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html xmlns:th="http://www.thymeleaf.org"> +<head> + <title>Tambah Obat</title> + <object th:include="fragments/fragment :: css" th:remove="tag"></object> + <object th:include="fragments/fragment :: js" th:remove="tag"></object> +</head> +<body> +<object th:replace="fragments/fragment :: navbar('Obat')"></object> +<div class = "container"> + <div class="card m-4 p-4"> + <div class="card-body"> + <div class="justify-content-center"> <h2>Tambah Obat Baru</h2> + <br> + <form th:action="@{/obat/add}" th:object="${obat}" method="POST"> + <label>Harga</label> + <input th:field="*{harga}" type="number" name="harga" class="form-control"/> + <label>Nama</label> + <input th:field="*{namaObat}" type="text" name="nama" class="form-control"/> + <label>Stok</label> + <input th:field="*{stok}" type="number" name="stok" class="form-control"/> + <br/> + <button type="submit" class="btn btn-primary">Submit</button> + <a class="btn btn-link" href="/static">Home</a> + </form> + </div> + </div> + </div> +</div> +</body> +</html> \ No newline at end of file -- GitLab From 251a405f13ea67ffb55e70780740b762347793e6 Mon Sep 17 00:00:00 2001 From: GhaitsaDina <ghaitsamaulidina@gmail.com> Date: Mon, 21 Nov 2022 10:39:44 +0700 Subject: [PATCH 03/14] chores: managing html package on add dokter feature --- .../templates/{manage => dokter}/form-add-dokter.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) rename SpringTkApap/src/main/resources/templates/{manage => dokter}/form-add-dokter.html (92%) diff --git a/SpringTkApap/src/main/resources/templates/manage/form-add-dokter.html b/SpringTkApap/src/main/resources/templates/dokter/form-add-dokter.html similarity index 92% rename from SpringTkApap/src/main/resources/templates/manage/form-add-dokter.html rename to SpringTkApap/src/main/resources/templates/dokter/form-add-dokter.html index 0e312ae..3628006 100644 --- a/SpringTkApap/src/main/resources/templates/manage/form-add-dokter.html +++ b/SpringTkApap/src/main/resources/templates/dokter/form-add-dokter.html @@ -6,6 +6,7 @@ <object th:include="fragments/fragment :: js" th:remove="tag"></object> </head> <body> +<object th:replace="fragments/fragment :: navbar('Dokter')"></object> <div class = "container"> <div class="card m-4 p-4"> <div class="card-body"> @@ -33,7 +34,7 @@ <input type="text" name="tarif" class="form-control"/> <br> <button type="submit" class="btn btn-primary">Submit</button> - <a class="btn btn-link" href="/">Home</a> + <a class="btn btn-link" href="/static">Home</a> </form> </div> </div> -- GitLab From 2cd647c9de852a06c3bd349e22d2508416ed671c Mon Sep 17 00:00:00 2001 From: Muhammad Tsaqib Ibadillah Wahid <muhammad.tsaqib@ui.ac.id> Date: Mon, 21 Nov 2022 11:15:19 +0700 Subject: [PATCH 04/14] Feat/obat: finished viewall feature for model Obat. --- .../obat/controller/ObatController.java | 8 +++ .../obat/service/ObatService.java | 4 ++ .../obat/service/ObatServiceImpl.java | 6 ++ .../main/resources/templates/home/home.html | 2 +- .../templates/obat/viewall-obat.html | 57 +++++++++++++++++++ 5 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 SpringTkApap/src/main/resources/templates/obat/viewall-obat.html diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/controller/ObatController.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/controller/ObatController.java index 5e07643..88450e4 100644 --- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/controller/ObatController.java +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/controller/ObatController.java @@ -35,4 +35,12 @@ public class ObatController { return "obat/add-obat"; } + @GetMapping("/viewall") + public String listObat(Model model) { + List<ObatModel> listObat = obatService.getListObat(); + + model.addAttribute("listObat", listObat); + return "obat/viewall-obat"; + } + } diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatService.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatService.java index 8ce968f..d752f2f 100644 --- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatService.java +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatService.java @@ -2,6 +2,10 @@ package spring.TK.SpringTkApap.obat.service; import spring.TK.SpringTkApap.obat.model.ObatModel; +import java.util.List; + public interface ObatService { void addObat(ObatModel obat); + + List<ObatModel> getListObat(); } diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatServiceImpl.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatServiceImpl.java index 1c90cf4..a632d13 100644 --- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatServiceImpl.java +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatServiceImpl.java @@ -6,6 +6,7 @@ import spring.TK.SpringTkApap.obat.model.ObatModel; import spring.TK.SpringTkApap.obat.repository.ObatDb; import javax.transaction.Transactional; +import java.util.List; @Service @Transactional @@ -18,4 +19,9 @@ public class ObatServiceImpl implements ObatService{ public void addObat(ObatModel obat) { obatDb.save(obat); } + + @Override + public List<ObatModel> getListObat() { + return obatDb.findAll(); + } } diff --git a/SpringTkApap/src/main/resources/templates/home/home.html b/SpringTkApap/src/main/resources/templates/home/home.html index 9e1ab8a..5277f90 100644 --- a/SpringTkApap/src/main/resources/templates/home/home.html +++ b/SpringTkApap/src/main/resources/templates/home/home.html @@ -35,7 +35,7 @@ <h5>Obat Section</h5> </div> <a th:href="@{/obat/add}" class="mx-2 btn btn-primary">Add Obat</a> - <a th:href="@{/}" class="mx-2 btn btn-primary">Lihat Semua Obat</a> + <a th:href="@{/obat/viewall}" class="mx-2 btn btn-primary">Lihat Semua Obat</a> </div> <a class="my-2 mx-2 btn btn-danger pt-2" th:href="@{/logout-sso}">Logout</a> </div> diff --git a/SpringTkApap/src/main/resources/templates/obat/viewall-obat.html b/SpringTkApap/src/main/resources/templates/obat/viewall-obat.html new file mode 100644 index 0000000..070c7e1 --- /dev/null +++ b/SpringTkApap/src/main/resources/templates/obat/viewall-obat.html @@ -0,0 +1,57 @@ +<!DOCTYPE html> +<html lang="en" xmlns:th="http://thymeleaf.org" xmlns:sec="http://www.w3.org/1999/xhtml"> +<head> + <meta charset="UTF-8"> + <title>RumahSehat - Daftar Obat</title> + <object th:include="fragments/fragment :: css" th:remove="tag"></object> + <object th:include="fragments/fragment :: js" th:remove="tag"></object> +</head> +<body> +<object th:replace="fragments/fragment :: navbar('Beranda')"></object> +<div class="container"> + <div class="card m-4 p-4"> + <div class="card-body"> + <div class="justify-content-center"> + <h2>Daftar Obat</h2> + <br> + <div th:if="*{listObat.size() != 0}"> + <br> + <table class="table"> + <thead> + <tr> + <th>No</th> + <th>Id</th> + <th>Nama</th> + <th>Stok</th> + <th>Harga</th> + <th>Aksi</th> + </tr> + </thead> + <tbody> + <tr th:each="obat, iterationStatus : ${listObat}" + th:style="${iterationStatus.even} ? 'font-weight:bold;'"> + <td th:text="${iterationStatus.count}"></td> + <td th:text="${obat.idObat}"></td> + <td th:text="${obat.namaObat}"></td> + <td th:text="${obat.stok}"></td> + <td th:text="${obat.harga}"></td> + <td> + <a class="btn btn-sm btn-warning" th:href="@{/obat/update/} + ${obat.idObat}">Update Stok</a> + </td> + </tr> + </tbody> + </table> + </div> + <div th:unless="*{listObat.size() != 0}"> + <br> + <h4 th:text="'Belum ada obat yang terdaftar'"></h4> + </div> + <br> + <a class="btn btn-primary" href="/">Home</a> + </div> + </div> + </div> +</div> + +</body> +</html> \ No newline at end of file -- GitLab From 2ef447cbab98a0675ce4dd110690d52de112ed42 Mon Sep 17 00:00:00 2001 From: GhaitsaDina <ghaitsamaulidina@gmail.com> Date: Mon, 21 Nov 2022 14:45:17 +0700 Subject: [PATCH 05/14] chores: update fragment, added 403 error page, and authorization for obat --- .../auth/security/WebSecurityConfig.java | 2 ++ .../obat/controller/ObatController.java | 19 +++++++++++++---- .../TK/SpringTkApap/obat/model/ObatModel.java | 2 +- .../SpringTkApap/obat/repository/ObatDb.java | 4 +++- .../obat/service/ObatService.java | 2 +- .../obat/service/ObatServiceImpl.java | 11 ++++++++++ .../main/resources/templates/error/403.html | 21 +++++++++++++++++++ .../templates/fragments/fragment.html | 2 +- .../templates/obat/viewall-obat.html | 9 ++++++-- 9 files changed, 62 insertions(+), 10 deletions(-) create mode 100644 SpringTkApap/src/main/resources/templates/error/403.html diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/auth/security/WebSecurityConfig.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/auth/security/WebSecurityConfig.java index 93321e7..46bfbe5 100644 --- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/auth/security/WebSecurityConfig.java +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/auth/security/WebSecurityConfig.java @@ -35,6 +35,8 @@ public class WebSecurityConfig { .antMatchers("/login-sso", "/validate-ticket", "/validate-ticket/**").permitAll() .antMatchers("/home-not-access", "/logout-not-access").permitAll() .antMatchers("/logout-sso").permitAll() + .antMatchers("/obat/viewall").hasAnyAuthority("APOTEKER", "ADMIN") + .antMatchers("/obat/update/**").hasAuthority("APOTEKER") .anyRequest().authenticated() .and( ) .formLogin() diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/controller/ObatController.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/controller/ObatController.java index 88450e4..1bfa29f 100644 --- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/controller/ObatController.java +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/controller/ObatController.java @@ -3,10 +3,7 @@ package spring.TK.SpringTkApap.obat.controller; 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.ModelAttribute; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.*; import spring.TK.SpringTkApap.jumlah.JumlahModel; import spring.TK.SpringTkApap.obat.model.ObatModel; import spring.TK.SpringTkApap.obat.service.ObatService; @@ -43,4 +40,18 @@ public class ObatController { return "obat/viewall-obat"; } + @GetMapping("/update/{idObat}") + public String updateObatForm(@PathVariable String idObat, Model model){ + ObatModel obat = obatService.getObat(idObat); + model.addAttribute("obat", obat); + return "obat/form-update-obat"; + } + + @PostMapping("/update") + public String updateObatSubmit(@ModelAttribute ObatModel obat, Model model){ + obatService.addObat(obat); + model.addAttribute("obat", obat); + return "obat/update-obat"; + } + } diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/model/ObatModel.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/model/ObatModel.java index e170917..325d61d 100644 --- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/model/ObatModel.java +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/model/ObatModel.java @@ -24,7 +24,7 @@ public class ObatModel implements Serializable { private String namaObat; @NotNull @Column(nullable = false) - private Integer stok; + private Integer stok = 100; @NotNull @Column(nullable = false) private Integer harga; diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/repository/ObatDb.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/repository/ObatDb.java index d8e98f4..bab2d8a 100644 --- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/repository/ObatDb.java +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/repository/ObatDb.java @@ -4,7 +4,9 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import spring.TK.SpringTkApap.obat.model.ObatModel; +import java.util.Optional; + @Repository public interface ObatDb extends JpaRepository<ObatModel, String> { - + Optional<ObatModel> findByIdObat(String idObat); } diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatService.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatService.java index d752f2f..43e7c5d 100644 --- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatService.java +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatService.java @@ -6,6 +6,6 @@ import java.util.List; public interface ObatService { void addObat(ObatModel obat); - List<ObatModel> getListObat(); + ObatModel getObat(String idObat); } diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatServiceImpl.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatServiceImpl.java index a632d13..192d056 100644 --- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatServiceImpl.java +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/service/ObatServiceImpl.java @@ -7,6 +7,7 @@ import spring.TK.SpringTkApap.obat.repository.ObatDb; import javax.transaction.Transactional; import java.util.List; +import java.util.Optional; @Service @Transactional @@ -24,4 +25,14 @@ public class ObatServiceImpl implements ObatService{ public List<ObatModel> getListObat() { return obatDb.findAll(); } + + @Override + public ObatModel getObat(String idObat) { + Optional<ObatModel> obat = obatDb.findByIdObat(idObat); + if(obat.isPresent()){ + return obat.get(); + } else{ + return null; + } + } } diff --git a/SpringTkApap/src/main/resources/templates/error/403.html b/SpringTkApap/src/main/resources/templates/error/403.html new file mode 100644 index 0000000..c57eb5d --- /dev/null +++ b/SpringTkApap/src/main/resources/templates/error/403.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<html lang="en" xmlns:th="http://thymeleaf.org"> +<head> + <meta charset="UTF-8"> + <title>403 NOT FOUND</title> + <object th:include="fragments/fragment :: css" th:remove="tag"></object> + <object th:include="fragments/fragment :: js" th:remove="tag"></object> +</head> +<body> +<nav th:replace="fragments/fragment :: navbar('Beranda')"></nav> + +<div class="d-flex justify-content-center"> + <div class="m-4 d-flex flex-column justify-content-center"> + <h2 class="text-center" th:text="${message}"></h2> + <h4 class="text-center"> You don't have the authority to access this page.</h4> + <a class="text-center" th:href="@{/}">Home</a> + </div> +</div> + +</body> +</html> \ No newline at end of file diff --git a/SpringTkApap/src/main/resources/templates/fragments/fragment.html b/SpringTkApap/src/main/resources/templates/fragments/fragment.html index 82de4b8..2b2e977 100644 --- a/SpringTkApap/src/main/resources/templates/fragments/fragment.html +++ b/SpringTkApap/src/main/resources/templates/fragments/fragment.html @@ -44,7 +44,7 @@ <a class="nav-link" th:href="@{/}">Resep</a> </li> <li th:classappend="${page == 'Obat'} ? active : ''"class="nav-item"> - <a class="nav-link" th:href="@{/obat/add}">Obat</a> + <a class="nav-link" th:href="@{/obat/viewall}">Obat</a> </li> <li sec:authorize="hasAnyAuthority('Appointment')" th:classappend="${page == 'User'} ? active : ''"class="nav-item"> <a class="nav-link" th:href="@{/}">Appointment</a> diff --git a/SpringTkApap/src/main/resources/templates/obat/viewall-obat.html b/SpringTkApap/src/main/resources/templates/obat/viewall-obat.html index 070c7e1..5f3cdf0 100644 --- a/SpringTkApap/src/main/resources/templates/obat/viewall-obat.html +++ b/SpringTkApap/src/main/resources/templates/obat/viewall-obat.html @@ -7,12 +7,17 @@ <object th:include="fragments/fragment :: js" th:remove="tag"></object> </head> <body> -<object th:replace="fragments/fragment :: navbar('Beranda')"></object> +<object th:replace="fragments/fragment :: navbar('Obat')"></object> <div class="container"> <div class="card m-4 p-4"> <div class="card-body"> <div class="justify-content-center"> - <h2>Daftar Obat</h2> + <div class="d-flex justify-content-between"> + <h2>Daftar Obat</h2> + <div> + <a class="btn btn-primary" th:href="@{/obat/add/}">Add Obat</a> + </div> + </div> <br> <div th:if="*{listObat.size() != 0}"> <br> -- GitLab From ef906a17d4eba11da938729eec85f80551e1d370 Mon Sep 17 00:00:00 2001 From: GhaitsaDina <ghaitsamaulidina@gmail.com> Date: Mon, 21 Nov 2022 14:46:46 +0700 Subject: [PATCH 06/14] feat/obat: implemented update obat --- .../templates/obat/form-update-obat.html | 32 +++++++++++++++++++ .../resources/templates/obat/update-obat.html | 26 +++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 SpringTkApap/src/main/resources/templates/obat/form-update-obat.html create mode 100644 SpringTkApap/src/main/resources/templates/obat/update-obat.html diff --git a/SpringTkApap/src/main/resources/templates/obat/form-update-obat.html b/SpringTkApap/src/main/resources/templates/obat/form-update-obat.html new file mode 100644 index 0000000..8bb5719 --- /dev/null +++ b/SpringTkApap/src/main/resources/templates/obat/form-update-obat.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<html xmlns:th="http://www.thymeleaf.org"> +<head> + <title>Update Obat</title> + <object th:include="fragments/fragment :: css" th:remove="tag"></object> + <object th:include="fragments/fragment :: js" th:remove="tag"></object> +</head> +<body> +<object th:replace="fragments/fragment :: navbar('Obat')"></object> +<div class = "container"> + <div class="card m-4 p-4"> + <div class="card-body"> + <div class="justify-content-center"> <h2>Update Obat</h2> + <br> + <form th:action="@{/obat/update}" th:object="${obat}" method="POST"> + <input hidden th:field="*{idObat}" type="text" name="harga" class="form-control"/> + <label>Harga</label> + <input readonly th:field="*{harga}" type="number" name="harga" class="form-control"/> + <label>Nama</label> + <input readonly th:field="*{namaObat}" type="text" name="nama" class="form-control"/> + <label>Stok</label> + <input th:field="*{stok}" type="number" name="stok" class="form-control"/> + <br/> + <button type="submit" class="btn btn-primary">Submit</button> + <a class="btn btn-link" href="/">Home</a> + </form> + </div> + </div> + </div> +</div> +</body> +</html> \ No newline at end of file diff --git a/SpringTkApap/src/main/resources/templates/obat/update-obat.html b/SpringTkApap/src/main/resources/templates/obat/update-obat.html new file mode 100644 index 0000000..d76c288 --- /dev/null +++ b/SpringTkApap/src/main/resources/templates/obat/update-obat.html @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<html lang="en" xmlns:th="http://thymeleaf.org"> +<head> + <meta charset="UTF-8"> + <title>RumahSehat</title> + <object th:include="fragments/fragment :: css" th:remove="tag"></object> + <object th:include="fragments/fragment :: js" th:remove="tag"></object> +</head> +<body> + +<nav th:replace="fragments/fragment :: navbar('Obat')"></nav> + +<div class="container"> + <div class="card m-4 p-4"> + <div class="card-body"> + <div class="justify-content-center"> + <h2 th:text="'Stok obat ' + ${obat.namaObat} + ' berhasil diupdate menjadi ' + ${obat.stok} + '.'"></h2> + <br> + <a class="btn btn-primary" href="/">Home</a> + </div> + </div> + </div> +</div> + +</body> +</html> \ No newline at end of file -- GitLab From d8e886bf2260c4e2deb025a0e4757df2c756e52a Mon Sep 17 00:00:00 2001 From: GhaitsaDina <ghaitsamaulidina@gmail.com> Date: Tue, 22 Nov 2022 16:31:13 +0700 Subject: [PATCH 07/14] feat/obat: implemented rest api --- .../obat/rest/ObatRestController.java | 56 +++++++++++++++++++ .../obat/rest/ObatRestService.java | 12 ++++ .../obat/rest/ObatRestServiceImpl.java | 45 +++++++++++++++ 3 files changed, 113 insertions(+) create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/rest/ObatRestController.java create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/rest/ObatRestService.java create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/rest/ObatRestServiceImpl.java diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/rest/ObatRestController.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/rest/ObatRestController.java new file mode 100644 index 0000000..6988170 --- /dev/null +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/rest/ObatRestController.java @@ -0,0 +1,56 @@ +package spring.TK.SpringTkApap.obat.rest; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.server.ResponseStatusException; +import spring.TK.SpringTkApap.obat.model.ObatModel; + +import java.util.List; +import java.util.NoSuchElementException; + +@RestController +@RequestMapping("/api/obat") +public class ObatRestController { + @Autowired + ObatRestService obatRestService; + + @PostMapping("/create") + private ObatModel createObat(@RequestBody ObatModel obat, BindingResult bindingResult){ + if (bindingResult.hasFieldErrors()) { + throw new ResponseStatusException( + HttpStatus.BAD_REQUEST, "Request body has invalid type or missing field." + ); + } else { + return obatRestService.createObat(obat); + } + } + + @GetMapping("/{idObat}") + private ObatModel getObat(@PathVariable(name = "idObat") String idObat){ + try { + return obatRestService.getObat(idObat); + } catch (NoSuchElementException e) { + throw new ResponseStatusException( + HttpStatus.NOT_FOUND, "Obat " + idObat + " tidak ditemukan." + ); + } + } + + @GetMapping("/all") + private List<ObatModel> getAllObat(){ + return obatRestService.retrieveObat(); + } + + @PutMapping(value = "/update-stok/{idObat}") + private ObatModel updateStokObat(@PathVariable("idObat") String idObat, @RequestBody ObatModel obat){ + try{ + return obatRestService.updateObat(idObat, obat); + } catch (NoSuchElementException e) { + throw new ResponseStatusException( + HttpStatus.NOT_FOUND, "Obat " + idObat + " not found" + ); + } + } +} diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/rest/ObatRestService.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/rest/ObatRestService.java new file mode 100644 index 0000000..48c09cd --- /dev/null +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/rest/ObatRestService.java @@ -0,0 +1,12 @@ +package spring.TK.SpringTkApap.obat.rest; + +import spring.TK.SpringTkApap.obat.model.ObatModel; + +import java.util.List; + +public interface ObatRestService { + ObatModel createObat(ObatModel obat); + List<ObatModel> retrieveObat(); + ObatModel getObat(String idObat); + ObatModel updateObat(String idObat, ObatModel obat); +} diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/rest/ObatRestServiceImpl.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/rest/ObatRestServiceImpl.java new file mode 100644 index 0000000..06a3938 --- /dev/null +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/rest/ObatRestServiceImpl.java @@ -0,0 +1,45 @@ +package spring.TK.SpringTkApap.obat.rest; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import spring.TK.SpringTkApap.obat.model.ObatModel; +import spring.TK.SpringTkApap.obat.repository.ObatDb; +import javax.transaction.Transactional; +import java.util.List; +import java.util.NoSuchElementException; +import java.util.Optional; + +@Service +@Transactional +public class ObatRestServiceImpl implements ObatRestService { + + @Autowired + ObatDb obatDb; + + @Override + public ObatModel createObat(ObatModel obat) { + return obatDb.save(obat); + } + + @Override + public List<ObatModel> retrieveObat() { + return obatDb.findAll(); + } + + @Override + public ObatModel getObat(String idObat) { + Optional<ObatModel> obat = obatDb.findByIdObat(idObat); + if(obat.isPresent()){ + return obat.get(); + } + throw new NoSuchElementException(); + } + + @Override + public ObatModel updateObat(String idObat, ObatModel obatUpdate) { + ObatModel obat = getObat(idObat); + obat.setStok(obatUpdate.getStok()); + return obatDb.save(obat); + } + +} -- GitLab From 1b40a85e2a379e718760c8767777c40eb1f8a5d3 Mon Sep 17 00:00:00 2001 From: Hasna Shafira <hasna.shafira@ui.ac.id> Date: Fri, 25 Nov 2022 18:27:52 +0700 Subject: [PATCH 08/14] feat/resep --- .../auth/security/WebSecurityConfig.java | 1 + .../jumlah/{ => model}/JumlahModel.java | 13 +- .../jumlah/repository/JumlahDb.java | 8 ++ .../jumlah/service/JumlahService.java | 9 ++ .../jumlah/service/JumlahServiceImpl.java | 27 ++++ .../obat/controller/ObatController.java | 2 +- .../TK/SpringTkApap/obat/model/ObatModel.java | 2 +- .../resep/controller/ResepController.java | 119 ++++++++++++++++++ .../resep/{ => model}/ResepModel.java | 8 +- .../resep/repository/ResepDb.java | 12 ++ .../resep/service/ResepService.java | 11 ++ .../resep/service/ResepServiceImpl.java | 30 +++++ .../resources/templates/resep/add-resep.html | 26 ++++ .../templates/resep/form-add-resep.html | 57 +++++++++ .../templates/resep/viewall-resep.html | 59 +++++++++ 15 files changed, 375 insertions(+), 9 deletions(-) rename SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/{ => model}/JumlahModel.java (68%) create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/repository/JumlahDb.java create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/service/JumlahService.java create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/service/JumlahServiceImpl.java create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java rename SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/{ => model}/ResepModel.java (78%) create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/repository/ResepDb.java create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/service/ResepService.java create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/service/ResepServiceImpl.java create mode 100644 SpringTkApap/src/main/resources/templates/resep/add-resep.html create mode 100644 SpringTkApap/src/main/resources/templates/resep/form-add-resep.html create mode 100644 SpringTkApap/src/main/resources/templates/resep/viewall-resep.html diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/auth/security/WebSecurityConfig.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/auth/security/WebSecurityConfig.java index 46bfbe5..5426fd4 100644 --- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/auth/security/WebSecurityConfig.java +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/auth/security/WebSecurityConfig.java @@ -37,6 +37,7 @@ public class WebSecurityConfig { .antMatchers("/logout-sso").permitAll() .antMatchers("/obat/viewall").hasAnyAuthority("APOTEKER", "ADMIN") .antMatchers("/obat/update/**").hasAuthority("APOTEKER") + .antMatchers("/resep/viewall").hasAnyAuthority("APOTEKER", "ADMIN") .anyRequest().authenticated() .and( ) .formLogin() diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/JumlahModel.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/model/JumlahModel.java similarity index 68% rename from SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/JumlahModel.java rename to SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/model/JumlahModel.java index c12bf8f..132c9a0 100644 --- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/JumlahModel.java +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/model/JumlahModel.java @@ -1,4 +1,4 @@ -package spring.TK.SpringTkApap.jumlah; +package spring.TK.SpringTkApap.jumlah.model; import lombok.AllArgsConstructor; import lombok.Data; @@ -6,9 +6,11 @@ import lombok.NoArgsConstructor; import org.hibernate.annotations.OnDelete; import org.hibernate.annotations.OnDeleteAction; import spring.TK.SpringTkApap.obat.model.ObatModel; -import spring.TK.SpringTkApap.resep.ResepModel; +import spring.TK.SpringTkApap.resep.model.ResepModel; import javax.persistence.*; +import javax.validation.constraints.NotNull; + import java.io.Serializable; @Data @Entity @@ -19,8 +21,11 @@ public class JumlahModel implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long idJumlah; - @ManyToOne(fetch = FetchType.EAGER) - @JoinColumn(name = "id", referencedColumnName = "id") + @NotNull @Column(nullable = false) + private Integer kuantitas; + + @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL) + @JoinColumn(name = "id_resep", referencedColumnName = "id") @OnDelete(action = OnDeleteAction.CASCADE) private ResepModel resep; diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/repository/JumlahDb.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/repository/JumlahDb.java new file mode 100644 index 0000000..a928e13 --- /dev/null +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/repository/JumlahDb.java @@ -0,0 +1,8 @@ +package spring.TK.SpringTkApap.jumlah.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import spring.TK.SpringTkApap.jumlah.model.JumlahModel; + +public interface JumlahDb extends JpaRepository<JumlahModel, String>{ + +} diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/service/JumlahService.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/service/JumlahService.java new file mode 100644 index 0000000..b1676dd --- /dev/null +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/service/JumlahService.java @@ -0,0 +1,9 @@ +package spring.TK.SpringTkApap.jumlah.service; + +import java.util.List; +import spring.TK.SpringTkApap.jumlah.model.JumlahModel; + +public interface JumlahService { + void addJumlah(JumlahModel jumlah); + List<JumlahModel> getListJumlah(); +} diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/service/JumlahServiceImpl.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/service/JumlahServiceImpl.java new file mode 100644 index 0000000..4372a20 --- /dev/null +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/jumlah/service/JumlahServiceImpl.java @@ -0,0 +1,27 @@ +package spring.TK.SpringTkApap.jumlah.service; + +import java.util.List; + +import javax.transaction.Transactional; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import spring.TK.SpringTkApap.jumlah.model.JumlahModel; +import spring.TK.SpringTkApap.jumlah.repository.JumlahDb; + +@Service +@Transactional +public class JumlahServiceImpl implements JumlahService { + @Autowired + private JumlahDb jumlahDb; + + @Override + public void addJumlah(JumlahModel jumlah) { + jumlahDb.save(jumlah); + } + + @Override + public List<JumlahModel> getListJumlah() { + return jumlahDb.findAll(); + } +} diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/controller/ObatController.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/controller/ObatController.java index c25a329..3c5bfaf 100644 --- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/controller/ObatController.java +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/controller/ObatController.java @@ -4,7 +4,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; -import spring.TK.SpringTkApap.jumlah.JumlahModel; +import spring.TK.SpringTkApap.jumlah.model.JumlahModel; import spring.TK.SpringTkApap.obat.model.ObatModel; import spring.TK.SpringTkApap.obat.service.ObatService; diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/model/ObatModel.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/model/ObatModel.java index 325d61d..05d8e88 100644 --- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/model/ObatModel.java +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/obat/model/ObatModel.java @@ -3,7 +3,7 @@ package spring.TK.SpringTkApap.obat.model; import com.sun.istack.NotNull; import lombok.*; import org.hibernate.annotations.GenericGenerator; -import spring.TK.SpringTkApap.jumlah.JumlahModel; +import spring.TK.SpringTkApap.jumlah.model.JumlahModel; import javax.persistence.*; import java.io.Serializable; diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java new file mode 100644 index 0000000..c11d6f6 --- /dev/null +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java @@ -0,0 +1,119 @@ +package spring.TK.SpringTkApap.resep.controller; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import spring.TK.SpringTkApap.jumlah.model.JumlahModel; +import spring.TK.SpringTkApap.jumlah.service.JumlahService; +import spring.TK.SpringTkApap.obat.model.ObatModel; +import spring.TK.SpringTkApap.obat.service.ObatService; +import spring.TK.SpringTkApap.resep.model.ResepModel; +import spring.TK.SpringTkApap.resep.service.ResepService; + +@Controller +@RequestMapping("/resep") +public class ResepController { + @Autowired(required = true) + private ResepService resepService; + + // @Qualifier("ObatServiceImpl") + @Autowired + private ObatService obatService; + + // @Qualifier("JumlahServiceImpl") + @Autowired + private JumlahService jumlahService; + + @GetMapping("/add") + public String addResepForm(Model model){ + ResepModel resep = new ResepModel(); + List<ObatModel> listObat = obatService.getListObat(); + + // resep.setIsDone(false); + + resep.setListJumlah(new ArrayList<>()); + resep.getListJumlah().add(new JumlahModel()); + + model.addAttribute("resep", resep); + model.addAttribute("listObat", listObat); + return "resep/form-add-resep"; + } + + @PostMapping("/add") + public String addResepSubmit(@ModelAttribute ResepModel resep, Model model){ + resep.setIsDone(false); + + resep.setCreatedAt(LocalDateTime.now()); + + if (resep.getListJumlah() != null){ + for (JumlahModel jumlah : resep.getListJumlah()){ + jumlah.setResep(resep); + jumlahService.addJumlah(jumlah); + } + } + resepService.addResep(resep); + model.addAttribute("resep", resep); + return "resep/add-resep"; + } + + @GetMapping("/viewall") + public String listResep(Model model) { + List<ResepModel> listResep = resepService.getListResep(); + model.addAttribute("listResep", listResep); + return "resep/viewall-resep"; + } + + @PostMapping(value = "/add", params = {"addRowResep"}) + private String addRowObatMultiple( + @ModelAttribute ResepModel resep, + Model model + ) { + List<ObatModel> listObat = obatService.getListObat(); + + if (resep.getListJumlah() == null || resep.getListJumlah().size() == 0) { + resep.setListJumlah(new ArrayList<>()); + } + JumlahModel newJumlah = new JumlahModel(); + newJumlah.setResep(resep); + resep.getListJumlah().add(newJumlah); + List<JumlahModel> listJumlah = jumlahService.getListJumlah(); + + model.addAttribute("resep", resep); + model.addAttribute("listJumlah", listJumlah); + model.addAttribute("listObat", listObat); + + return "resep/form-add-resep"; + } + + @PostMapping(value = "/add", params = {"deleteRowResep"}) + private String deleteRowObatMultiple( + @ModelAttribute ResepModel resep, + @RequestParam("deleteRowResep") Integer row, + Model model + ) { + List<ObatModel> listObat = obatService.getListObat(); + + final Integer rowId = Integer.valueOf(row); + resep.getListJumlah().remove(rowId.intValue()); + + List<JumlahModel> listJumlah = jumlahService.getListJumlah(); + + model.addAttribute("resep", resep); + model.addAttribute("listJumlah", listJumlah); + model.addAttribute("listObat", listObat); + + return "resep/form-add-resep"; + } + +} diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/ResepModel.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/model/ResepModel.java similarity index 78% rename from SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/ResepModel.java rename to SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/model/ResepModel.java index cedde8b..3849d63 100644 --- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/ResepModel.java +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/model/ResepModel.java @@ -1,13 +1,14 @@ -package spring.TK.SpringTkApap.resep; +package spring.TK.SpringTkApap.resep.model; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.sun.istack.NotNull; import lombok.*; import org.hibernate.annotations.OnDelete; import org.hibernate.annotations.OnDeleteAction; import org.springframework.format.annotation.DateTimeFormat; import spring.TK.SpringTkApap.appointment.model.AppointmentModel; -import spring.TK.SpringTkApap.jumlah.JumlahModel; +import spring.TK.SpringTkApap.jumlah.model.JumlahModel; import spring.TK.SpringTkApap.user.model.ApotekerModel; import javax.persistence.*; @@ -20,6 +21,7 @@ import java.util.List; @Entity @Table(name = "resep") @NoArgsConstructor +@JsonIgnoreProperties(value={"listResep"}, allowSetters = true) @AllArgsConstructor public class ResepModel implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -37,7 +39,7 @@ public class ResepModel implements Serializable { @OnDelete(action = OnDeleteAction.CASCADE) private ApotekerModel apoteker; - @OneToMany(mappedBy = "resep", fetch = FetchType.EAGER) + @OneToMany(mappedBy = "resep", fetch = FetchType.EAGER, orphanRemoval = true, cascade = {CascadeType.ALL}) private List<JumlahModel> listJumlah; @OneToOne(mappedBy = "resep", fetch = FetchType.EAGER) diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/repository/ResepDb.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/repository/ResepDb.java new file mode 100644 index 0000000..6e83313 --- /dev/null +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/repository/ResepDb.java @@ -0,0 +1,12 @@ +package spring.TK.SpringTkApap.resep.repository; + +import java.util.Optional; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +import spring.TK.SpringTkApap.resep.model.ResepModel; + +@Repository +public interface ResepDb extends JpaRepository<ResepModel, String>{ + ResepModel getById(Long id); +} diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/service/ResepService.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/service/ResepService.java new file mode 100644 index 0000000..58bfb08 --- /dev/null +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/service/ResepService.java @@ -0,0 +1,11 @@ +package spring.TK.SpringTkApap.resep.service; + +import java.util.List; + +import spring.TK.SpringTkApap.resep.model.ResepModel; + +public interface ResepService { + void addResep(ResepModel resep); + List<ResepModel> getListResep(); + ResepModel getResep(Long id); +} diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/service/ResepServiceImpl.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/service/ResepServiceImpl.java new file mode 100644 index 0000000..62694e7 --- /dev/null +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/service/ResepServiceImpl.java @@ -0,0 +1,30 @@ +package spring.TK.SpringTkApap.resep.service; + +import java.util.List; +import javax.transaction.Transactional; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import spring.TK.SpringTkApap.resep.model.ResepModel; +import spring.TK.SpringTkApap.resep.repository.ResepDb; + +@Service +@Transactional +public class ResepServiceImpl implements ResepService{ + @Autowired + private ResepDb resepDb; + + @Override + public void addResep(ResepModel resep) { + resepDb.save(resep); + } + + @Override + public List<ResepModel> getListResep() { + return resepDb.findAll(); + } + + @Override + public ResepModel getResep(Long id) { + return resepDb.getById(id); + } +} diff --git a/SpringTkApap/src/main/resources/templates/resep/add-resep.html b/SpringTkApap/src/main/resources/templates/resep/add-resep.html new file mode 100644 index 0000000..359f0c3 --- /dev/null +++ b/SpringTkApap/src/main/resources/templates/resep/add-resep.html @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<html lang="en" xmlns:th="http://thymeleaf.org"> +<head> + <meta charset="UTF-8"> + <title>RumahSehat</title> + <object th:include="fragments/fragment :: css" th:remove="tag"></object> + <object th:include="fragments/fragment :: js" th:remove="tag"></object> +</head> +<body> + +<nav th:replace="fragments/fragment :: navbar('Resep')"></nav> + +<div class="container"> + <div class="card m-4 p-4"> + <div class="card-body"> + <div class="justify-content-center"> + <h2 th:text="'Resep dengan id ' + ${resep.id} + ' berhasil ditambahkan.'"></h2> + <br> + <a class="btn btn-primary" href="/">Home</a> + </div> + </div> + </div> +</div> + +</body> +</html> \ No newline at end of file diff --git a/SpringTkApap/src/main/resources/templates/resep/form-add-resep.html b/SpringTkApap/src/main/resources/templates/resep/form-add-resep.html new file mode 100644 index 0000000..16cb8cc --- /dev/null +++ b/SpringTkApap/src/main/resources/templates/resep/form-add-resep.html @@ -0,0 +1,57 @@ +<!DOCTYPE html> +<html xmlns:th="http://www.thymeleaf.org"> +<head> + <title>Tambah Resep</title> + <object th:include="fragments/fragment :: css" th:remove="tag"></object> + <object th:include="fragments/fragment :: js" th:remove="tag"></object> +</head> +<body> +<object th:replace="fragments/fragment :: navbar('Resep')"></object> +<div class = "container"> + <div class="card m-4 p-4"> + <div class="card-body"> + <div class="justify-content-center"> <h2>Tambah Resep Baru</h2> + <br> + <form th:action="@{/resep/add}" th:object="${resep}" method="POST"> + <table class="table"> + <thead> + <th>Resep</th> + <th></th> + <th> + <button class="btn btn-primary" type="submit" name="addRowResep">Tambah Row</button> + </th> + </thead> + <tbody> + <tr th:each="jumlah, iterationStatus : *{listJumlah}"> + <td> + <select name="obat" th:field="*{listJumlah[__${iterationStatus.index}__].obat}" + class="form-control"> + <div th:each="obatNew, iterationStatus2 : ${listObat}"> + <option th:value="${obatNew.idObat}" th:text="${obatNew.namaObat}"></option> + </div> + </select> + </td> + <td> + <input class="form-control" type="number" th:field="*{listJumlah[__${iterationStatus.index}__].kuantitas}"> + </td> + <td> + <button th:value="${iterationStatus.index}" class="btn btn-danger" type="submit" + name="deleteRowResep">Hapus</button> + </td> + </tr> + </tbody> + </table> + <!-- Created At : <br> + <input required class="form-control" type="datetime-local" th:field="*{createdAt}" /> + <br><br> --> + + <br/> + <button type="submit" class="btn btn-primary">Submit</button> + <a class="btn btn-link" href="/static">Home</a> + </form> + </div> + </div> + </div> +</div> +</body> +</html> \ No newline at end of file diff --git a/SpringTkApap/src/main/resources/templates/resep/viewall-resep.html b/SpringTkApap/src/main/resources/templates/resep/viewall-resep.html new file mode 100644 index 0000000..84c7166 --- /dev/null +++ b/SpringTkApap/src/main/resources/templates/resep/viewall-resep.html @@ -0,0 +1,59 @@ +<!DOCTYPE html> +<html lang="en" xmlns:th="http://thymeleaf.org" xmlns:sec="http://www.w3.org/1999/xhtml"> +<head> + <meta charset="UTF-8"> + <title>RumahSehat - Daftar Resep</title> + <object th:include="fragments/fragment :: css" th:remove="tag"></object> + <object th:include="fragments/fragment :: js" th:remove="tag"></object> +</head> +<body> +<object th:replace="fragments/fragment :: navbar('Resep')"></object> + +<div class="container"> + <div class="card m-4 p-4"> + <div class="card-body"> + <div class="justify-content-center"> + <div class="d-flex justify-content-between"> + <h2>Daftar Resep</h2> + <div> + <a class="btn btn-primary" th:href="@{/resep/add/}">Add Resep</a> + </div> + </div> + <br> + <div th:if="*{listResep.size() != 0}"> + <br> + <table class="table"> + <thead> + <tr> + <th>Id</th> + <th>Tanggal & Waktu Resep Dibuat</th> + <th>Status</th> + </tr> + </thead> + <tbody> + <tr th:each="resep, iterationStatus : ${listResep}" + th:style="${iterationStatus.even} ? 'font-weight:bold;'"> + <td th:text="${iterationStatus.count}"></td> + <td th:text="${resep.id}"></td> + <td th:text="${resep.createdAt}"></td> + <td th:text="${resep.isDone}"></td> + <td> + <a class="btn btn-primary" th:href="@{/resep/view(id=${resep.id})}">Detail Resep</a> + </td> + </tr> + </tbody> + </table> + </div> + <div th:unless="*{listResep.size() != 0}"> + <br> + <h4 th:text="'Belum ada resep yang terdaftar'"></h4> + </div> + <br> + <a class="btn btn-primary" href="/">Home</a> + </div> + </div> + </div> +</div> + +</body> +</html> \ No newline at end of file -- GitLab From 56ed74bad08d6f4976de538fb8055cd3f9426d2d Mon Sep 17 00:00:00 2001 From: Hasna Shafira <hasna.shafira@ui.ac.id> Date: Fri, 25 Nov 2022 19:15:07 +0700 Subject: [PATCH 09/14] feat/resep --- .../TK/SpringTkApap/appointment/model/AppointmentModel.java | 2 +- .../java/spring/TK/SpringTkApap/user/model/ApotekerModel.java | 2 +- SpringTkApap/src/main/resources/templates/home/home.html | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/appointment/model/AppointmentModel.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/appointment/model/AppointmentModel.java index 55004a0..245f4c3 100644 --- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/appointment/model/AppointmentModel.java +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/appointment/model/AppointmentModel.java @@ -6,7 +6,7 @@ import lombok.*; import org.hibernate.annotations.OnDelete; import org.hibernate.annotations.OnDeleteAction; import org.springframework.format.annotation.DateTimeFormat; -import spring.TK.SpringTkApap.resep.ResepModel; +import spring.TK.SpringTkApap.resep.model.ResepModel; import spring.TK.SpringTkApap.tagihan.TagihanModel; import spring.TK.SpringTkApap.user.model.DokterModel; import spring.TK.SpringTkApap.user.model.PasienModel; diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/model/ApotekerModel.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/model/ApotekerModel.java index f662daa..769ab8c 100644 --- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/model/ApotekerModel.java +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/user/model/ApotekerModel.java @@ -2,7 +2,7 @@ package spring.TK.SpringTkApap.user.model; import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.*; -import spring.TK.SpringTkApap.resep.ResepModel; +import spring.TK.SpringTkApap.resep.model.ResepModel; import spring.TK.SpringTkApap.auth.model.UserModel; import javax.persistence.*; diff --git a/SpringTkApap/src/main/resources/templates/home/home.html b/SpringTkApap/src/main/resources/templates/home/home.html index 6d4e2f9..487ed68 100644 --- a/SpringTkApap/src/main/resources/templates/home/home.html +++ b/SpringTkApap/src/main/resources/templates/home/home.html @@ -55,7 +55,7 @@ <div class="text-center mt-1"> <img src="../img/resep.png" width="60" height="60"> <p class="card-text my-3">Buat resep, serta lihat daftar dan detail resep yang tersedia.</p> - <a th:href="@{/}" class="btn btn-sm btn-primary">Resep</a> + <a th:href="@{/resep/viewall}" class="btn btn-sm btn-primary">Resep</a> </div> </div> </div> -- GitLab From c12a96f86f53e4ca2c418ab4ff34bbfb616c9bbc Mon Sep 17 00:00:00 2001 From: Hasna Shafira <hasna.shafira@ui.ac.id> Date: Fri, 25 Nov 2022 19:18:10 +0700 Subject: [PATCH 10/14] feat/resep --- .../spring/TK/SpringTkApap/resep/controller/ResepController.java | 1 + 1 file changed, 1 insertion(+) diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java index c11d6f6..348e6cc 100644 --- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java @@ -117,3 +117,4 @@ public class ResepController { } } + -- GitLab From 6cec72cc675a50a29af77c34aefbce3e2c100520 Mon Sep 17 00:00:00 2001 From: Hasna Shafira <hasna.shafira@ui.ac.id> Date: Thu, 8 Dec 2022 16:56:18 +0700 Subject: [PATCH 11/14] feat/resep view detail --- .../resep/controller/ResepController.java | 15 +++- .../resep/repository/ResepDb.java | 3 +- .../resep/rest/ResepRestController.java | 53 +++++++++++++++ .../resep/rest/ResepRestService.java | 12 ++++ .../resep/rest/ResepRestServiceImpl.java | 34 ++++++++++ .../resources/templates/resep/view-resep.html | 68 +++++++++++++++++++ .../templates/resep/viewall-resep.html | 2 +- 7 files changed, 183 insertions(+), 4 deletions(-) create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestController.java create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestService.java create mode 100644 SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestServiceImpl.java create mode 100644 SpringTkApap/src/main/resources/templates/resep/view-resep.html diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java index 348e6cc..5ef27c7 100644 --- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java @@ -5,7 +5,6 @@ import java.util.ArrayList; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @@ -70,10 +69,24 @@ public class ResepController { @GetMapping("/viewall") public String listResep(Model model) { List<ResepModel> listResep = resepService.getListResep(); + model.addAttribute("listResep", listResep); return "resep/viewall-resep"; } + @GetMapping("/view-detail") + public String viewDetailResepById(@RequestParam(value = "id") Long id, Model model) { + ResepModel resep = resepService.getResep(id); + List<JumlahModel> listJumlah = resep.getListJumlah(); + model.addAttribute("listJumlah", listJumlah); + model.addAttribute("resep", resep); + model.addAttribute("dokter", resep.getAppointment().getDokter()); + model.addAttribute("pasien", resep.getAppointment().getPasien()); + model.addAttribute("apoteker", resep.getApoteker()); + + return "resep/view-resep"; + } + @PostMapping(value = "/add", params = {"addRowResep"}) private String addRowObatMultiple( @ModelAttribute ResepModel resep, diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/repository/ResepDb.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/repository/ResepDb.java index 6e83313..5325e03 100644 --- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/repository/ResepDb.java +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/repository/ResepDb.java @@ -1,12 +1,11 @@ package spring.TK.SpringTkApap.resep.repository; -import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import spring.TK.SpringTkApap.resep.model.ResepModel; @Repository -public interface ResepDb extends JpaRepository<ResepModel, String>{ +public interface ResepDb extends JpaRepository<ResepModel, Long>{ ResepModel getById(Long id); } diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestController.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestController.java new file mode 100644 index 0000000..ad691e3 --- /dev/null +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestController.java @@ -0,0 +1,53 @@ +package spring.TK.SpringTkApap.resep.rest; + +import java.util.List; +import java.util.NoSuchElementException; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.validation.BindingResult; +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.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.server.ResponseStatusException; + +import spring.TK.SpringTkApap.resep.model.ResepModel; +import spring.TK.SpringTkApap.resep.service.ResepService; + +@RestController +@RequestMapping("/api/resep") +public class ResepRestController { + @Autowired + ResepRestService resepRestService; + + @PostMapping("/create") + private ResepModel createObat(@RequestBody ResepModel resep, BindingResult bindingResult){ + if (bindingResult.hasFieldErrors()) { + throw new ResponseStatusException( + HttpStatus.BAD_REQUEST, "Request body has invalid type or missing field." + ); + } else { + return resepRestService.createResep(resep); + } + } + + @GetMapping("/{idResep}") + private ResepModel getResep(@PathVariable(name = "id") Long id){ + try { + return resepRestService.getResep(id); + } catch (NoSuchElementException e) { + throw new ResponseStatusException( + HttpStatus.NOT_FOUND, "Resep dengan id " + id + " tidak ditemukan." + ); + } + } + + @GetMapping("/all") + private List<ResepModel> getAllResep(){ + return resepRestService.getListResep(); + } +} diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestService.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestService.java new file mode 100644 index 0000000..1746b37 --- /dev/null +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestService.java @@ -0,0 +1,12 @@ +package spring.TK.SpringTkApap.resep.rest; + +import java.util.List; + +import spring.TK.SpringTkApap.resep.model.ResepModel; + +public interface ResepRestService { + ResepModel createResep(ResepModel resep); + List<ResepModel> getListResep(); + ResepModel getResep(Long id); +} + diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestServiceImpl.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestServiceImpl.java new file mode 100644 index 0000000..dd963e4 --- /dev/null +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestServiceImpl.java @@ -0,0 +1,34 @@ +package spring.TK.SpringTkApap.resep.rest; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +import javax.transaction.Transactional; + +import spring.TK.SpringTkApap.resep.model.ResepModel; +import spring.TK.SpringTkApap.resep.repository.ResepDb; + +@Service +@Transactional +public class ResepRestServiceImpl implements ResepRestService{ + @Autowired + ResepDb resepDb; + + @Override + public ResepModel createResep(ResepModel resep) { + return resepDb.save(resep); + } + + @Override + public List<ResepModel> getListResep() { + return resepDb.findAll(); + } + + @Override + public ResepModel getResep(Long id) { + return resepDb.getById(id); + } + +} diff --git a/SpringTkApap/src/main/resources/templates/resep/view-resep.html b/SpringTkApap/src/main/resources/templates/resep/view-resep.html new file mode 100644 index 0000000..4b3b8f5 --- /dev/null +++ b/SpringTkApap/src/main/resources/templates/resep/view-resep.html @@ -0,0 +1,68 @@ +<!DOCTYPE html> +<html lang="en" xmlns:th="http://thymeleaf.org" xmlns:sec="http://www.w3.org/1999/xhtml"> +<head> + <meta charset="UTF-8"> + <title>RumahSehat - Detail Resep</title> + <object th:include="fragments/fragment :: css" th:remove="tag"></object> + <object th:include="fragments/fragment :: js" th:remove="tag"></object> +</head> +<body> +<object th:replace="fragments/fragment :: navbar('Resep')"></object> + +<div class="container"> + <div class="card m-4 p-4"> + <div class="card-body"> + <div class="justify-content-center"> + <div class="d-flex justify-content-between"> + <h2>Detail Resep</h2> + </div> + <br> + + <p class="font-weight-bold" style="line-height: 1.5vh">ID :</p> + <p th:text="${resep.id}"></p> + <br> + <div class="row"> + <div class="col-md-7"> + <p class="font-weight-bold" style="line-height: 1.5vh">Nama Dokter :</p> + <p th:text="${dokter.nama}"></p> + </div> + <div class="col-md-5"> + <p class="font-weight-bold" style="line-height: 1.5vh">Nama Pasien :</p> + <p th:text="${pasien.nama}"></p> + </div> + </div> + <br> + <p class="font-weight-bold" style="line-height: 1.5vh">Status :</p> + <p th:text="${resep.isDone}"></p> + <br> + <p class="font-weight-bold" style="line-height: 1.5vh">Apoteker :</p> + <p th:text="${apoteker.nama}"></p> + <br> + </div> + + <div> + <br> + <table class="table"> + <thead> + <tr> + <th>Nama Obat</th> + <th>Jumlah</th> + </tr> + </thead> + <tbody> + <tr th:each="jumlah, iterationStatus : ${listJumlah}"> + <td th:text="${jumlah.obat.namaObat}"></td> + <td th:text="${jumlah.kuantitas}"></td> + </tr> + </tbody> + </table> + </div> + <br> + <a class="btn btn-primary" href="/">Home</a> + </div> + </div> + </div> +</div> + +</body> +</html> \ No newline at end of file diff --git a/SpringTkApap/src/main/resources/templates/resep/viewall-resep.html b/SpringTkApap/src/main/resources/templates/resep/viewall-resep.html index 84c7166..1e5c94a 100644 --- a/SpringTkApap/src/main/resources/templates/resep/viewall-resep.html +++ b/SpringTkApap/src/main/resources/templates/resep/viewall-resep.html @@ -38,7 +38,7 @@ <td th:text="${resep.createdAt}"></td> <td th:text="${resep.isDone}"></td> <td> - <a class="btn btn-primary" th:href="@{/resep/view(id=${resep.id})}">Detail Resep</a> + <a class="btn btn-primary" th:href="@{/resep/view-detail(id=${resep.id})}">Detail Resep</a> </td> </tr> </tbody> -- GitLab From 28ace68f1fb6b2668f924012376676ea4a274a20 Mon Sep 17 00:00:00 2001 From: Hasna Shafira <hasna.shafira@ui.ac.id> Date: Thu, 8 Dec 2022 17:06:21 +0700 Subject: [PATCH 12/14] feat/resep view detail --- .../spring/TK/SpringTkApap/resep/rest/ResepRestService.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestService.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestService.java index 1746b37..759fe2e 100644 --- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestService.java +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestService.java @@ -8,5 +8,4 @@ public interface ResepRestService { ResepModel createResep(ResepModel resep); List<ResepModel> getListResep(); ResepModel getResep(Long id); -} - +} \ No newline at end of file -- GitLab From 1d99df0e3f1b8f539ea958de358d0dde27371200 Mon Sep 17 00:00:00 2001 From: Hasna Shafira <hasna.shafira@ui.ac.id> Date: Mon, 12 Dec 2022 16:49:23 +0700 Subject: [PATCH 13/14] feat/resep changes on rest --- .../auth/controller/PageController.java | 2 ++ .../auth/security/WebSecurityConfig.java | 3 +++ .../resep/controller/ResepController.java | 3 +++ .../resep/rest/ResepRestController.java | 21 +++++++++---------- .../resep/rest/ResepRestService.java | 2 +- .../resep/rest/ResepRestServiceImpl.java | 9 ++++++-- .../appointment/view-appointment.html | 6 +++--- .../templates/resep/form-add-resep.html | 1 + 8 files changed, 30 insertions(+), 17 deletions(-) diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/auth/controller/PageController.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/auth/controller/PageController.java index 861d45d..c570b7c 100644 --- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/auth/controller/PageController.java +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/auth/controller/PageController.java @@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.servlet.ModelAndView; import spring.TK.SpringTkApap.auth.model.UserModel; +import spring.TK.SpringTkApap.auth.security.JwtTokenUtil; import spring.TK.SpringTkApap.auth.security.xml.Attributes; import spring.TK.SpringTkApap.auth.security.xml.ServiceResponse; import spring.TK.SpringTkApap.auth.service.AuthService; @@ -30,6 +31,7 @@ public class PageController { @Autowired AuthService userService; + JwtTokenUtil jwtTokenUtil; private static final String REDIRECT = "redirect:"; diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/auth/security/WebSecurityConfig.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/auth/security/WebSecurityConfig.java index 12591f5..2859091 100644 --- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/auth/security/WebSecurityConfig.java +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/auth/security/WebSecurityConfig.java @@ -54,6 +54,9 @@ public class WebSecurityConfig { .antMatchers("/appointment/viewall").hasAnyAuthority(ADMIN, DOKTER, PASIEN) .antMatchers("/appointment/detail").hasAnyAuthority(ADMIN, DOKTER, PASIEN) .antMatchers("/user/viewall/**").hasAuthority(ADMIN) + .antMatchers("/api/resep/add/**").hasAnyAuthority(DOKTER) + .antMatchers("/api/resep/all").permitAll() + .antMatchers("/api/resep/detail/**").hasAnyAuthority(ADMIN, APOTEKER, DOKTER, PASIEN) .anyRequest().authenticated() .and( ) .formLogin() diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java index 1b7f32c..6514c02 100644 --- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java @@ -80,6 +80,9 @@ public class ResepController { } } resepService.addResep(resep); + appointment.setListResep(resep); + appointmentService.updateAppointment(appointment); + System.out.println(appointment.getListResep().getId()); model.addAttribute("resep", resep); return "resep/add-resep"; } diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestController.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestController.java index ad691e3..0de32c6 100644 --- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestController.java +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestController.java @@ -5,18 +5,16 @@ import java.util.NoSuchElementException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.validation.BindingResult; 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.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.server.ResponseStatusException; - import spring.TK.SpringTkApap.resep.model.ResepModel; -import spring.TK.SpringTkApap.resep.service.ResepService; @RestController @RequestMapping("/api/resep") @@ -24,21 +22,22 @@ public class ResepRestController { @Autowired ResepRestService resepRestService; - @PostMapping("/create") - private ResepModel createObat(@RequestBody ResepModel resep, BindingResult bindingResult){ + @PostMapping("/add/{kodeAppointment}") + private ResponseEntity createResep(@RequestBody ResepModel resep, BindingResult bindingResult, @PathVariable String kodeAppointment){ if (bindingResult.hasFieldErrors()) { throw new ResponseStatusException( HttpStatus.BAD_REQUEST, "Request body has invalid type or missing field." ); } else { - return resepRestService.createResep(resep); + resepRestService.createResep(resep, kodeAppointment); + return ResponseEntity.ok("Resep berhasil dibuat"); } } - @GetMapping("/{idResep}") - private ResepModel getResep(@PathVariable(name = "id") Long id){ + @GetMapping("/detail/{idResep}") + private ResponseEntity<ResepModel> getResep(@PathVariable(name = "id") Long id){ try { - return resepRestService.getResep(id); + return ResponseEntity.status(HttpStatus.OK).body(resepRestService.getResep(id)); } catch (NoSuchElementException e) { throw new ResponseStatusException( HttpStatus.NOT_FOUND, "Resep dengan id " + id + " tidak ditemukan." @@ -47,7 +46,7 @@ public class ResepRestController { } @GetMapping("/all") - private List<ResepModel> getAllResep(){ - return resepRestService.getListResep(); + private ResponseEntity<List<ResepModel>> getAllResep(){ + return ResponseEntity.status(HttpStatus.OK).body(resepRestService.getListResep()); } } diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestService.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestService.java index 759fe2e..b2b725e 100644 --- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestService.java +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestService.java @@ -5,7 +5,7 @@ import java.util.List; import spring.TK.SpringTkApap.resep.model.ResepModel; public interface ResepRestService { - ResepModel createResep(ResepModel resep); + void createResep(ResepModel resep, String kodeAppointment); List<ResepModel> getListResep(); ResepModel getResep(Long id); } \ No newline at end of file diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestServiceImpl.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestServiceImpl.java index dd963e4..fec99d5 100644 --- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestServiceImpl.java +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestServiceImpl.java @@ -7,6 +7,8 @@ import java.util.List; import javax.transaction.Transactional; +import spring.TK.SpringTkApap.appointment.AppointmentService; +import spring.TK.SpringTkApap.appointment.model.AppointmentModel; import spring.TK.SpringTkApap.resep.model.ResepModel; import spring.TK.SpringTkApap.resep.repository.ResepDb; @@ -15,10 +17,13 @@ import spring.TK.SpringTkApap.resep.repository.ResepDb; public class ResepRestServiceImpl implements ResepRestService{ @Autowired ResepDb resepDb; + AppointmentService appointmentService; @Override - public ResepModel createResep(ResepModel resep) { - return resepDb.save(resep); + public void createResep(ResepModel resep, String kodeAppointment) { + AppointmentModel appointment = appointmentService.getAppointment(kodeAppointment); + resep.setAppointment(appointment); + resepDb.save(resep); } @Override diff --git a/SpringTkApap/src/main/resources/templates/appointment/view-appointment.html b/SpringTkApap/src/main/resources/templates/appointment/view-appointment.html index 262466c..0955c67 100644 --- a/SpringTkApap/src/main/resources/templates/appointment/view-appointment.html +++ b/SpringTkApap/src/main/resources/templates/appointment/view-appointment.html @@ -33,13 +33,13 @@ <br> <div> - <div th:if="${apt.resep != null}"> - <a class="btn btn-primary" th:href="@{/resep/view-detail(id=${id})}">Detail Resep</a> + <div th:if="${apt.listResep != null}"> + <a class="btn btn-primary" th:href="@{/resep/view-detail(id=${apt.listResep.id})}">Detail Resep</a> </div> </div> <br> <div th:unless="${apt.isDone}"> - <div th:if="${apt.resep == null}"> + <div th:if="${apt.listResep == null}"> <a class="btn btn-primary" th:href="@{/resep/add/} + ${apt.kode}">Create Resep</a> <br> </div> diff --git a/SpringTkApap/src/main/resources/templates/resep/form-add-resep.html b/SpringTkApap/src/main/resources/templates/resep/form-add-resep.html index 26f754e..024d717 100644 --- a/SpringTkApap/src/main/resources/templates/resep/form-add-resep.html +++ b/SpringTkApap/src/main/resources/templates/resep/form-add-resep.html @@ -14,6 +14,7 @@ <br> <form th:action="@{/resep/add/} + ${kode}" th:object="${resep}" method="POST"> <span> + <h5>Apoteker</h5> <select class="custom-select" th:field="*{apoteker.uuid}" id="apoteker" required="required"> <option th:each="apoteker : ${listApoteker}" th:value="${apoteker.uuid}" th:text="${apoteker.nama}"></option> </select> -- GitLab From 8c1454197b681dd3615be1b611d8826d44ae1566 Mon Sep 17 00:00:00 2001 From: Hasna Shafira <hasna.shafira@ui.ac.id> Date: Mon, 12 Dec 2022 20:08:40 +0700 Subject: [PATCH 14/14] feat/ resep path in navbar and user authority --- .../SpringTkApap/resep/controller/ResepController.java | 4 ++-- .../TK/SpringTkApap/resep/rest/ResepRestController.java | 2 +- .../tk/springtkapap/auth/security/WebSecurityConfig.java | 9 ++++++--- .../templates/appointment/view-appointment.html | 2 +- .../src/main/resources/templates/fragments/fragment.html | 2 +- .../main/resources/templates/resep/viewall-resep.html | 2 +- 6 files changed, 12 insertions(+), 9 deletions(-) diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java index 90ab7b7..87c787b 100644 --- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/controller/ResepController.java @@ -95,8 +95,8 @@ public class ResepController { return "resep/viewall-resep"; } - @GetMapping("/view-detail") - public String viewDetailResepById(@RequestParam(value = "id") Long id, Model model) { + @GetMapping("/view-detail/{id}") + public String viewDetailResepById(@PathVariable("id") Long id, Model model) { ResepModel resep = resepService.getResep(id); List<JumlahModel> listJumlah = resep.getListJumlah(); model.addAttribute("listJumlah", listJumlah); diff --git a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestController.java b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestController.java index 77917b1..c7490f3 100644 --- a/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestController.java +++ b/SpringTkApap/src/main/java/spring/TK/SpringTkApap/resep/rest/ResepRestController.java @@ -35,7 +35,7 @@ public class ResepRestController { } @GetMapping("/detail/{idResep}") - private ResponseEntity<ResepModel> getResep(@PathVariable(name = "id") Long id){ + private ResponseEntity<ResepModel> getResep(@PathVariable(name = "idResep") Long id){ try { return ResponseEntity.status(HttpStatus.OK).body(resepRestService.getResep(id)); } catch (NoSuchElementException e) { diff --git a/SpringTkApap/src/main/java/spring/tk/springtkapap/auth/security/WebSecurityConfig.java b/SpringTkApap/src/main/java/spring/tk/springtkapap/auth/security/WebSecurityConfig.java index 93d55bd..63cacad 100644 --- a/SpringTkApap/src/main/java/spring/tk/springtkapap/auth/security/WebSecurityConfig.java +++ b/SpringTkApap/src/main/java/spring/tk/springtkapap/auth/security/WebSecurityConfig.java @@ -59,9 +59,12 @@ public class WebSecurityConfig { .antMatchers("/appointment/detail").hasAnyAuthority(ADMIN, DOKTER, PASIEN) .antMatchers("/user/viewall/**").hasAuthority(ADMIN) .antMatchers("/dokter/**").hasAuthority(ADMIN) - .antMatchers("/api/resep/add/**").permitAll() - .antMatchers("/api/resep/all").permitAll() - .antMatchers("/api/resep/detail/**").permitAll() + .antMatchers("/api/resep/add/**").hasAuthority(DOKTER) + .antMatchers("/api/resep/all").hasAnyAuthority(APOTEKER, ADMIN) + .antMatchers("/api/resep/detail/**").hasAnyAuthority(APOTEKER, ADMIN, DOKTER, PASIEN) + .antMatchers("/resep/add/**").hasAuthority(DOKTER) + .antMatchers("/resep/viewall").hasAnyAuthority(APOTEKER, ADMIN) + .antMatchers("/resep/view-detail/**").hasAnyAuthority(APOTEKER, ADMIN, DOKTER, PASIEN) .anyRequest().authenticated() .and( ) .formLogin() diff --git a/SpringTkApap/src/main/resources/templates/appointment/view-appointment.html b/SpringTkApap/src/main/resources/templates/appointment/view-appointment.html index 0955c67..2f6b971 100644 --- a/SpringTkApap/src/main/resources/templates/appointment/view-appointment.html +++ b/SpringTkApap/src/main/resources/templates/appointment/view-appointment.html @@ -34,7 +34,7 @@ <div> <div th:if="${apt.listResep != null}"> - <a class="btn btn-primary" th:href="@{/resep/view-detail(id=${apt.listResep.id})}">Detail Resep</a> + <a class="btn btn-primary" th:href="@{/resep/view-detail/} + ${apt.listResep.id}">Detail Resep</a> </div> </div> <br> diff --git a/SpringTkApap/src/main/resources/templates/fragments/fragment.html b/SpringTkApap/src/main/resources/templates/fragments/fragment.html index dfe343b..e7c5322 100644 --- a/SpringTkApap/src/main/resources/templates/fragments/fragment.html +++ b/SpringTkApap/src/main/resources/templates/fragments/fragment.html @@ -30,7 +30,7 @@ <a class="nav-link" th:href="@{/}">Beranda</a> </li> <li sec:authorize="hasAnyAuthority('ADMIN', 'APOTEKER')" th:classappend="${page == 'Resep'} ? active : ''"class="nav-item"> - <a class="nav-link" th:href="@{/}">Resep</a> + <a class="nav-link" th:href="@{/resep/viewall}">Resep</a> </li> <li sec:authorize="hasAnyAuthority('ADMIN', 'APOTEKER')" th:classappend="${page == 'Obat'} ? active : ''"class="nav-item"> <a class="nav-link" th:href="@{/obat/viewall}">Obat</a> diff --git a/SpringTkApap/src/main/resources/templates/resep/viewall-resep.html b/SpringTkApap/src/main/resources/templates/resep/viewall-resep.html index 5119cfa..3b0dff3 100644 --- a/SpringTkApap/src/main/resources/templates/resep/viewall-resep.html +++ b/SpringTkApap/src/main/resources/templates/resep/viewall-resep.html @@ -35,7 +35,7 @@ <td th:text="${resep.createdAt}"></td> <td th:text="${resep.isDone}"></td> <td> - <a class="btn btn-primary" th:href="@{/resep/view-detail(id=${resep.id})}">Detail Resep</a> + <a class="btn btn-primary" th:href="@{/resep/view-detail/} + ${resep.id}">Detail Resep</a> </td> </tr> </tbody> -- GitLab