source: src/main/java/project/educatum/service/impl/PaymentServiceImpl.java@ d3cf3a1

Last change on this file since d3cf3a1 was d3cf3a1, checked in by Marija Micevska <marija_micevska@…>, 2 years ago

Initial commit

  • Property mode set to 100644
File size: 10.4 KB
Line 
1package project.educatum.service.impl;
2
3import org.springframework.stereotype.Service;
4import project.educatum.model.Listening;
5import project.educatum.model.Payment;
6import project.educatum.model.Teacher;
7import project.educatum.model.exceptions.PaymentNotFoundException;
8import project.educatum.model.exceptions.TeacherNotFoundException;
9import project.educatum.repository.ListeningRepository;
10import project.educatum.repository.PaymentRepository;
11import project.educatum.repository.TeacherRepository;
12import project.educatum.service.*;
13
14import javax.persistence.EntityManager;
15import javax.persistence.PersistenceContext;
16import java.util.ArrayList;
17import java.util.List;
18
19@Service
20public class PaymentServiceImpl implements PaymentService {
21
22 private final ListeningService listeningService;
23 private final TeacherService teacherService;
24 private final TeacherStudentService teacherStudentService;
25 private final ClassService classService;
26 private final TeacherRepository teacherRepository;
27 private final PaymentRepository paymentRepository;
28 private final ListeningRepository listeningRepository;
29
30 @PersistenceContext
31 private EntityManager entityManager;
32
33 public PaymentServiceImpl(ListeningService listeningService, TeacherService teacherService, TeacherStudentService teacherStudentService, ClassService classService, TeacherRepository teacherRepository, PaymentRepository paymentRepository, ListeningRepository listeningRepository) {
34 this.listeningService = listeningService;
35 this.teacherService = teacherService;
36 this.teacherStudentService = teacherStudentService;
37 this.classService = classService;
38 this.teacherRepository = teacherRepository;
39 this.paymentRepository = paymentRepository;
40 this.listeningRepository = listeningRepository;
41 }
42
43 @Override
44 public void addPayment(Integer teacherID, Integer price, Integer classID, Integer studentID) {
45 Teacher teacher = teacherRepository.findById(teacherID).orElseThrow(TeacherNotFoundException::new);
46 Integer owes = studentTeacherLoan(studentID, teacher.getId());
47 if (owes != 0) {
48 List<Listening> listeningList = listeningRepository.findAllByClassAndStudent(classID, studentID);
49 Integer paymentID = listeningList.get(0).getIdPayment().getId();
50 Payment p = paymentRepository.findById(paymentID).orElseThrow(PaymentNotFoundException::new);
51 paymentRepository.updatePrice(price, p.getId());
52 }
53 }
54
55 @Override
56 public List<Object[]> getListenedClassesQuery() {
57 javax.persistence.Query q = entityManager.createNativeQuery(
58 """
59 select distinct q3.ucenik1 id_ucenik, q3.id_nastavnik id_nastavnik,
60 q3.slusanicasovi slusani_casovi
61 from
62 (
63 select * from
64 (
65
66 select u.id_ucenik ucenik1, u.ime, n.id_nastavnik nastavnik1, count(s.id_cas || '-' || s.id_slusanje) slusanicasovi
67 from project.ucenici u\s
68 join project.slusanje s on s.id_ucenik = u.id_ucenik\s
69 join project.casovi c on c.id_cas = s.id_cas\s
70 join project.nastavnici n on n.id_nastavnik = c.id_nastavnik\s
71 group by 1,2,3
72 \s
73 \s
74 \s
75 )q1
76
77
78 join
79 \s
80 (
81 select c.id_cas,n.id_nastavnik as id_nastavnik,n.ime,s.id_ucenik ucenik2, s.id_slusanje id_slusanje2 from project.casovi c
82 join project.slusanje s on s.id_cas=c.id_cas
83 join project.nastavnici n on n.id_nastavnik=c.id_nastavnik
84 ) q2 on
85 q1.ucenik1=q2.ucenik2
86 and q1.nastavnik1=q2.id_nastavnik)q3
87 """
88 );
89 return q.getResultList();
90 }
91
92
93 @Override
94 public List<Object[]> getPaymentsQuery() {
95 javax.persistence.Query q = entityManager.createNativeQuery(
96 """
97 select q4.id_nastavnik1 as id_nastavnik,q4.nastavnik,\s
98 q4.id_ucenik1 as id_ucenik, q4.ucenik as ime_ucenik, sum(q4.dolzi) as dolzi from (
99 \s
100 \s
101 \s
102 \s
103 select q3.id_nastavnik1, q3.nastavnik1 || ' ' || q3.nastavnik_prezime1 as nastavnik,
104 q3.id_ucenik1,q3.ime_ucenik1 as ucenik, (q3.vkupno_za_plakjanje-q3.plateno) as dolzi
105 from
106 (
107 select * from
108 \s
109 (
110 select n.id_nastavnik as id_nastavnik1,n.ime as nastavnik1, n.prezime nastavnik_prezime1,
111 u.id_ucenik as id_ucenik1,u.ime || ' ' || u.prezime ime_ucenik1,
112 sum(pl.iznos) as plateno from
113 project.nastavnici n\s
114 join project.plakjanja pl on pl.id_nastavnik = n.id_nastavnik\s
115 join project.casovi c on c.id_nastavnik = pl.id_nastavnik\s
116 join project.slusanje s on s.id_cas = c.id_cas\s
117 and s.id_plakjanja = pl.id_plakjanja\s
118 join project.ucenici u on u.id_ucenik = s.id_ucenik\s
119 group by 1,2,3,4
120 \s
121 ) q1
122 \s
123 join
124
125 (
126 select n.id_nastavnik as id_nastavnik2,n.ime as nastavnik2, n.prezime nastavnik_prezime2,
127 u2.id_ucenik as id_ucenik2, u2.ime || ' ' || u2.prezime as ime_ucenik2,
128 (pn.cena_po_cas * pn.broj_casovi_po_dogovor) vkupno_za_plakjanje from project.ucenici u2
129 join project.predava_na pn on pn.id_ucenik = u2.id_ucenik
130 join project.nastavnici n on n.id_nastavnik =pn.id_nastavnik
131 ) q2
132 on q1.id_ucenik1 = q2.id_ucenik2 and q2.id_nastavnik2=q1.id_nastavnik1
133 ) q3
134 )q4
135 group by 1,2,3,4
136 order by id_nastavnik\s
137
138 \s
139 \s
140 \s
141 """);
142
143 return q.getResultList();
144 }
145
146
147 @Override
148 public Integer studentTeacherLoan(Integer studentId, Integer teacherId) {
149 List<Object[]> query = getPaymentsQuery();
150 List<String> payments = new ArrayList<>();
151 StringBuilder sb = new StringBuilder();
152 int total = 0;
153 for (Object[] payment : query) {
154 sb.setLength(0);
155 for (int i = 0; i < payment.length; i++) {
156 String attribute = payment[i].toString();
157 sb.append(attribute).append(" ");
158 }
159 payments.add(sb.toString());
160 }
161 for (String p : payments) {
162 String[] parts = p.split("\\s+");
163 String idTeacher = parts[0];
164 String studentID = parts[3];
165 String owes = parts[6];
166 if (Integer.valueOf(studentID).equals(studentId)
167 && Integer.valueOf(idTeacher).equals(teacherId)) {
168 total += Integer.parseInt(owes);
169 }
170 }
171 if (total < 0) total = 0;
172 return total;
173 }
174
175 @Override
176 public Integer numListenedClasses(Integer idStudent, Integer idTeacher) {
177 int total = 0;
178 List<Object[]> query = getListenedClassesQuery();
179 List<String> listeningList = new ArrayList<>();
180 StringBuilder sb = new StringBuilder();
181 for (Object[] l : query) {
182 sb.setLength(0);
183 for (int i = 0; i < l.length; i++) {
184 String attribute = l[i].toString();
185 sb.append(attribute).append(" ");
186 }
187 listeningList.add(sb.toString());
188 }
189 for (String s : listeningList) {
190 String[] parts = s.split("\\s+");
191 String idU = parts[0];
192 String idN = parts[1];
193 String numClasses = parts[2];
194 if (Integer.valueOf(idU).equals(idStudent) && Integer.valueOf(idN).equals(idTeacher))
195 total += Integer.parseInt(numClasses);
196 }
197 if (total < 0) total = 0;
198 return total;
199 }
200
201}
Note: See TracBrowser for help on using the repository browser.