1 | package com.example.medweb.web;
|
---|
2 |
|
---|
3 |
|
---|
4 | import com.example.medweb.model.*;
|
---|
5 | import com.example.medweb.model.exceptions.InvalidUserCredentialsException;
|
---|
6 | import com.example.medweb.service.*;
|
---|
7 | import org.springframework.stereotype.Controller;
|
---|
8 | import org.springframework.ui.Model;
|
---|
9 | import org.springframework.validation.annotation.Validated;
|
---|
10 | import org.springframework.web.bind.annotation.*;
|
---|
11 | import javax.servlet.http.HttpServletRequest;
|
---|
12 | import java.time.ZonedDateTime;
|
---|
13 | import java.util.List;
|
---|
14 |
|
---|
15 |
|
---|
16 |
|
---|
17 | @Controller
|
---|
18 | @SessionAttributes({"upat", "termin", "rezervacija"})
|
---|
19 | public class PacientController {
|
---|
20 |
|
---|
21 | private final PacientService pacientService;
|
---|
22 | private final UpatService upatService;
|
---|
23 | private final DoktorService doktorService;
|
---|
24 | private final TerminService terminService;
|
---|
25 | private final TransakcijaService transakcijaService;
|
---|
26 | private final RezervacijaService rezervacijaService;
|
---|
27 |
|
---|
28 | public PacientController(PacientService pacientService, UpatService upatService, DoktorService doktorService,
|
---|
29 | TerminService terminService, TransakcijaService transakcijaService,
|
---|
30 | RezervacijaService rezervacijaService) {
|
---|
31 |
|
---|
32 | this.pacientService = pacientService;
|
---|
33 | this.upatService = upatService;
|
---|
34 | this.doktorService = doktorService;
|
---|
35 | this.terminService = terminService;
|
---|
36 | this.transakcijaService = transakcijaService;
|
---|
37 | this.rezervacijaService = rezervacijaService;
|
---|
38 | }
|
---|
39 |
|
---|
40 | // prikazhi forma za login na pacient
|
---|
41 | @GetMapping("/login-pacient")
|
---|
42 | public String showLoginForm(Model model){
|
---|
43 | model.addAttribute("pacient", new Pacient());
|
---|
44 | model.addAttribute("bodyContent", new Pacient());
|
---|
45 | model.addAttribute("bodyContent", "login-pacient");
|
---|
46 | return "master-template";
|
---|
47 | }
|
---|
48 |
|
---|
49 | // najava na pacient i redirekcija do pochetna ako e uspeshen loginot
|
---|
50 | // najaveniot pacient se zachuvuva vo sesija
|
---|
51 | @PostMapping("/login-pacient")
|
---|
52 | public String loginPacient (@Validated @ModelAttribute ("pacient") Pacient pacient,
|
---|
53 | HttpServletRequest request, Model model) {
|
---|
54 | //Pacient pacient = null;
|
---|
55 |
|
---|
56 | try {
|
---|
57 | pacient = this.pacientService.login(request.getParameter("email"),
|
---|
58 | request.getParameter("pass"));
|
---|
59 | request.getSession().setAttribute("pacient", pacient);
|
---|
60 | model.addAttribute("pacient", pacient);
|
---|
61 | return "redirect:/home-pacient";
|
---|
62 | }
|
---|
63 | catch (InvalidUserCredentialsException exception) {
|
---|
64 | model.addAttribute("hasError", true);
|
---|
65 | model.addAttribute("error", exception.getMessage());
|
---|
66 | return "login-pacient";
|
---|
67 | }
|
---|
68 | }
|
---|
69 |
|
---|
70 | // pochetna strana na pacient posle uspeshen login
|
---|
71 | @GetMapping("/home-pacient")
|
---|
72 | public String getPacientHomePage (Model model) {
|
---|
73 | model.addAttribute("bodyContent", "home-pacient");
|
---|
74 | return "master-template";
|
---|
75 | }
|
---|
76 |
|
---|
77 | // lista na izdadeni upati na pacient (kopche moi upati)
|
---|
78 | @GetMapping("/moi-upati")
|
---|
79 | public String getUpati (HttpServletRequest request, Pacient pacient, Model model) {
|
---|
80 | pacient = (Pacient) request.getSession().getAttribute("pacient");
|
---|
81 | List<Upat> upatList = this.upatService.findAllByPacient(pacient);
|
---|
82 | model.addAttribute("upatList", upatList);
|
---|
83 | model.addAttribute("bodyContent", upatList);
|
---|
84 | model.addAttribute("bodyContent", "pacient-upati");
|
---|
85 | return "master-template";
|
---|
86 | }
|
---|
87 |
|
---|
88 | // posle klikanje na kopcheto 'zakazhi termin' do nekoj upat,
|
---|
89 | // za toj upat se prikazhuvaat speijalistite koi rabotat vo soodvetniot oddel,
|
---|
90 | // do sekoj specijalist ima kopche 'pregledaj termini'
|
---|
91 | @GetMapping("/zakazi-termin")
|
---|
92 | public String getZakaziTerminPage (Model model) {
|
---|
93 | model.addAttribute("upat", new Upat());
|
---|
94 | model.addAttribute("bodyContent", new Upat());
|
---|
95 | model.addAttribute("bodyContent", "zakazi-termin");
|
---|
96 | return "master-template";
|
---|
97 | }
|
---|
98 |
|
---|
99 | // posle klikanje na kopcheto 'zakazhi termin' do nekoj upat,
|
---|
100 | // za toj upat se prikazhuvaat speijalistite koi rabotat vo soodvetniot oddel,
|
---|
101 | // do sekoj specijalist ima kopche 'pregledaj termini'
|
---|
102 | @GetMapping("/zakazi-termin/{id}")
|
---|
103 | public String zakaziTermin (@PathVariable Integer id, Model model) {
|
---|
104 | if (this.upatService.findById(id).isPresent()) {
|
---|
105 | Upat upat = this.upatService.findById(id).get();
|
---|
106 | String dijagnoza = upat.getDijagnoza();
|
---|
107 | Integer oddelId = upat.getOddel().getOddel_id();
|
---|
108 | String oddel = upat.getOddel().getNaziv();
|
---|
109 | List<Doktor> doktorList = upat.getOddel().getDoktorList();
|
---|
110 | model.addAttribute("upat", upat);
|
---|
111 | model.addAttribute("bodyContent", upat);
|
---|
112 | model.addAttribute("dijagnoza", dijagnoza);
|
---|
113 | model.addAttribute("bodyContent", dijagnoza);
|
---|
114 | model.addAttribute("oddelId", oddelId);
|
---|
115 | model.addAttribute("bodyContent", oddelId);
|
---|
116 | model.addAttribute("oddel", oddel);
|
---|
117 | model.addAttribute("bodyContent", oddel);
|
---|
118 | model.addAttribute("doktorList", doktorList);
|
---|
119 | model.addAttribute("bodyContent", doktorList);
|
---|
120 | model.addAttribute("bodyContent", "zakazi-termin");
|
---|
121 | return "master-template";
|
---|
122 | }
|
---|
123 | else {
|
---|
124 | return "redirect:/zakazi-termin/{id}?error=UpatNotFound";
|
---|
125 | }
|
---|
126 | }
|
---|
127 |
|
---|
128 | // so izbiranje na specijalist od listata na doktori, se prikazhuvaat terminite za istiot,
|
---|
129 | // do sekoj termin ima akcija 'zakazhi'
|
---|
130 | @GetMapping("/dostapni-termini/{id}")
|
---|
131 | public String getDostapniTerminiPage (@PathVariable Integer id, Model model) {
|
---|
132 | Upat upat = (Upat) model.getAttribute("upat");
|
---|
133 | if (this.doktorService.findById(id).isPresent()) {
|
---|
134 | Doktor doktor = this.doktorService.findById(id).get();
|
---|
135 | List<Termin> terminList = this.terminService
|
---|
136 | .findOnlyFutureAndFreeAndByDoktor(ZonedDateTime.now(), doktor.getCovek_id());
|
---|
137 | model.addAttribute("doktor", doktor);
|
---|
138 | model.addAttribute("bodyContent", doktor);
|
---|
139 | model.addAttribute("terminList", terminList);
|
---|
140 | model.addAttribute("bodyContent", terminList);
|
---|
141 | model.addAttribute("bodyContent", "dostapni-termini");
|
---|
142 | return "master-template";
|
---|
143 | }
|
---|
144 | else {
|
---|
145 | return "redirect:/dostapni-termini/{id}?error=UpatNotFound";
|
---|
146 | }
|
---|
147 | }
|
---|
148 |
|
---|
149 | // so izbiranje na termin se dodava nov zapis vo rezervacija
|
---|
150 | // se prikazhuva strana na koja treba da se sledat chekorite za potvrda na rezervacija
|
---|
151 | @PostMapping("/rezervacija/{termin_id}")
|
---|
152 | public String rezervacija (@PathVariable Integer termin_id, Model model){
|
---|
153 | Upat upat = (Upat) model.getAttribute("upat");
|
---|
154 | if (this.terminService.findOneTerminByTerminId(termin_id) != null) {
|
---|
155 | Termin termin = this.terminService.findOneTerminByTerminId(termin_id);
|
---|
156 | model.addAttribute("termin", termin);
|
---|
157 | Rezervacija rezervacija = new Rezervacija();
|
---|
158 | rezervacija.setUpat(upat);
|
---|
159 | rezervacija.setTermin(termin);
|
---|
160 | this.rezervacijaService.save(rezervacija);
|
---|
161 | model.addAttribute("rezervacija", rezervacija);
|
---|
162 | model.addAttribute("bodyContent", rezervacija);
|
---|
163 | model.addAttribute("bodyContent", "rezervacija");
|
---|
164 | return "master-template";
|
---|
165 | }
|
---|
166 | else {
|
---|
167 | return "redirect:/dostapni-termini/{id}?error=TerminNotFound";
|
---|
168 | }
|
---|
169 | }
|
---|
170 |
|
---|
171 | // prikaz na formata za transakcija za da se validira rezerviraniot termin
|
---|
172 | @GetMapping("/validiraj/rezervacija/{id}")
|
---|
173 | public String getTransakcijaPage (@PathVariable Integer id, Model model) {
|
---|
174 | Upat upat = (Upat) model.getAttribute("upat");
|
---|
175 | if (this.rezervacijaService.findById(id).isPresent()) {
|
---|
176 | Rezervacija rezervacija = this.rezervacijaService.findById(id).get();
|
---|
177 | model.addAttribute("bodyContent", "transakcija");
|
---|
178 | return "master-template";
|
---|
179 | }
|
---|
180 | else {
|
---|
181 | return "redirect:/validiraj/rezervacija/{id}?error=RezervacijaNotFound";
|
---|
182 | }
|
---|
183 | }
|
---|
184 |
|
---|
185 | // so uspeshno popolneti parametri se dodava transakcijata vo baza
|
---|
186 | // i se prikazhuva strana so site podatoci deka e uspeshno zakazhan terminot
|
---|
187 | @PostMapping("/validiraj/rezervacija/{id}")
|
---|
188 | public String transakcija (@PathVariable Integer id, Model model) {
|
---|
189 | Upat upat = (Upat) model.getAttribute("upat");
|
---|
190 | Termin termin = (Termin) model.getAttribute("termin");
|
---|
191 | if (this.rezervacijaService.findById(id).isPresent()) {
|
---|
192 | Rezervacija rezervacija = this.rezervacijaService.findById(id).get();
|
---|
193 | String smetka_bolnica = upat.getOddel().getBolnica_id().getSmetka_bolnica();
|
---|
194 | Integer suma = 50;
|
---|
195 | Transakcija transakcija = new Transakcija(suma, smetka_bolnica, rezervacija);
|
---|
196 | this.transakcijaService.save(transakcija);
|
---|
197 | model.addAttribute("transakcija", transakcija);
|
---|
198 | model.addAttribute("bodyContent", transakcija);
|
---|
199 | model.addAttribute("bodyContent", "prikaz-rezervacija");
|
---|
200 | return "master-template";
|
---|
201 | }
|
---|
202 | else {
|
---|
203 | return "redirect:/validiraj/rezervacija/{id}?error=RezervacijaNotFound";
|
---|
204 | }
|
---|
205 | }
|
---|
206 | }
|
---|