source: src/main/java/com/example/medweb/web/PacientController.java@ e5fefbd

Last change on this file since e5fefbd was e5fefbd, checked in by Anita Terziska <63020646+Nit4e@…>, 22 months ago

initial commit

  • Property mode set to 100644
File size: 9.1 KB
Line 
1package com.example.medweb.web;
2
3
4import com.example.medweb.model.*;
5import com.example.medweb.model.exceptions.InvalidUserCredentialsException;
6import com.example.medweb.service.*;
7import org.springframework.stereotype.Controller;
8import org.springframework.ui.Model;
9import org.springframework.validation.annotation.Validated;
10import org.springframework.web.bind.annotation.*;
11import javax.servlet.http.HttpServletRequest;
12import java.time.ZonedDateTime;
13import java.util.List;
14
15
16
17@Controller
18@SessionAttributes({"upat", "termin", "rezervacija"})
19public 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}
Note: See TracBrowser for help on using the repository browser.