@@ -40,14 +40,34 @@ function LogsPage() {
4040 const [ workGroups , setWorkGroups ] = useState ( [ ] ) ;
4141 const [ workLogs , setWorkLogs ] = useState ( [ ] ) ;
4242 const [ voucherLogs , setVoucherLogs ] = useState ( [ ] ) ;
43+ const [ lastSemVoucherLogs , setLastSemVoucherLogs ] = useState ( [ ] ) ;
4344
4445 const [ mode , setMode ] = useState ( false ) ;
4546 const [ vouchersEarned , setVouchersEarned ] = useState ( 0 ) ;
47+ const [ vouchersEarnedLastSemester , setVouchersEarnedLastSemester ] = useState ( 0 ) ;
4648 const [ vouchersUsed , setVouchersUsed ] = useState ( 0 ) ;
49+ const [ vouchersUsedLastSemester , setVouchersUsedLastSemester ] = useState ( 0 ) ;
4750
4851 const [ refresh , setRefresh ] = useState ( false ) ;
4952
5053 const session = useSession ( ) ;
54+
55+ let startOfSemester = false ;
56+ let lastSemester ;
57+
58+ const dateTime = new Date ( ) ;
59+ const deadline = new Date ( ) ;
60+ deadline . setDate ( 16 ) ;
61+ deadline . setMonth ( 1 ) ;
62+
63+ if ( dateTime < deadline ) {
64+ startOfSemester = true ;
65+ lastSemester = {
66+ id : session . data . semester . id - 1 ,
67+ vouchersEarned : 0 ,
68+ vouchersUsed : 0 ,
69+ }
70+ }
5171
5272 useEffect ( ( ) => {
5373 fetch ( "/api/v2/users" )
@@ -80,6 +100,20 @@ function LogsPage() {
80100 . then ( voucherLog => {
81101 handleVoucherLogs ( voucherLog . voucherLogs , session , setVoucherLogs , setVouchersUsed )
82102 } )
103+
104+ if ( startOfSemester ) {
105+ fetch ( "/api/v2/workLogs?semesterId=" + lastSemester . id )
106+ . then ( res => res . json ( ) )
107+ . then ( resData => {
108+ handleLastSemesterWorkLogs ( resData . workLogs , session , setVouchersEarnedLastSemester )
109+ } )
110+
111+ fetch ( "/api/v2/voucherLogs?semesterId=" + lastSemester . id )
112+ . then ( res => res . json ( ) )
113+ . then ( voucherLog => {
114+ handleLastSemesterVoucherLogs ( voucherLog . voucherLogs , session , setLastSemVoucherLogs , setVouchersUsedLastSemester )
115+ } )
116+ }
83117 } , [ refresh ] )
84118
85119 const worklogInputLayout = worklogInput (
@@ -93,15 +127,18 @@ function LogsPage() {
93127 session ,
94128 vouchersEarned ,
95129 vouchersUsed ,
96- setRefresh
130+ setRefresh ,
131+ vouchersEarnedLastSemester ,
132+ vouchersUsedLastSemester ,
133+ startOfSemester
97134 ) ;
98135
99136 const inputLayout = mode ? worklogInputLayout : voucherLogInputLayout ;
100137 const tableLayout = (
101138 < CustomTable
102139 key = { mode ? "workLogTable" : "voucherLogTable" }
103140 headers = { mode ? WORK_TABLE_HEADERS : VOUCHER_TABLE_HEADERS }
104- data = { mode ? workLogs : voucherLogs }
141+ data = { mode ? workLogs : voucherLogs . concat ( lastSemVoucherLogs ) }
105142 defaultFilterBy = "loggedFor"
106143 />
107144 ) ;
@@ -175,6 +212,20 @@ function handleWorkLogs(logs, session, setWorkLogs, setVouchersEarned) {
175212 setVouchersEarned ( newVouchersEarned ) ;
176213}
177214
215+ function handleLastSemesterWorkLogs ( logs , session , setVouchersEarnedLastSemester ) {
216+
217+ const newVouchersEarned = logs
218+ . filter ( ( e ) => {
219+ const person = e . LoggedForUser ;
220+ return person && person . id == session . data . user . id ;
221+ } )
222+ . reduce ( ( total , e ) => {
223+ return ( total += e . duration * 0.5 ) ;
224+ } , 0.0 ) ;
225+
226+ setVouchersEarnedLastSemester ( newVouchersEarned ) ;
227+ }
228+
178229function handleVoucherLogs ( logs , session , setVoucherLogs , setVouchersUsed ) {
179230
180231 const newVoucherLogs = logs . map ( ( log ) => ( {
@@ -194,8 +245,35 @@ function handleVoucherLogs(logs, session, setVoucherLogs, setVouchersUsed) {
194245 return ( total += e . amount ) ;
195246 } , 0.0 ) ;
196247
197- setVouchersUsed ( parseFloat ( newVouchersUsed ) ) ;
198248 setVoucherLogs ( newVoucherLogs ) ;
249+ setVouchersUsed ( parseFloat ( newVouchersUsed ) ) ;
250+ }
251+
252+ function handleLastSemesterVoucherLogs ( logs , session , setLastSemVoucherLogs , setVouchersUsedLastSemester ) {
253+
254+ let newVoucherLogs = logs . map ( ( log ) => ( {
255+ ...log ,
256+ loggedFor : getUserName ( log . LoggedForUser ) ,
257+ usedAt_num : parseISO ( log . usedAt ) . getTime ( ) ,
258+ usedAt_label : format ( parseISO ( log . usedAt ) , "dd.MM HH:mm" ) . toLowerCase ( ) ,
259+ } ) )
260+ newVoucherLogs = newVoucherLogs . filter ( ( e ) => {
261+ const year = new Date ( e . usedAt ) . getFullYear ( ) ;
262+ return year == new Date ( ) . getFullYear ( ) ;
263+ } ) ;
264+
265+ const newVouchersUsed = logs
266+ . filter ( ( e ) => {
267+ const person = e . LoggedForUser ;
268+ const personId = person . id ;
269+ return personId == session . data . user . id ;
270+ } )
271+ . reduce ( ( total , e ) => {
272+ return ( total += e . amount ) ;
273+ } , 0.0 ) ;
274+
275+ setLastSemVoucherLogs ( newVoucherLogs ) ;
276+ setVouchersUsedLastSemester ( parseFloat ( newVouchersUsed ) ) ;
199277}
200278
201279export default authWrapper ( LogsPage ) ;
0 commit comments