| 157 | |
| 158 | === Извештај за активност на членови === |
| 159 | {{{#!sql |
| 160 | WITH DateRanges AS ( |
| 161 | SELECT |
| 162 | generate_series( |
| 163 | date_trunc('year', CURRENT_DATE) - interval '5 year', |
| 164 | date_trunc('year', CURRENT_DATE), |
| 165 | interval '1 year' |
| 166 | ) as start_date, |
| 167 | generate_series( |
| 168 | date_trunc('year', CURRENT_DATE) - interval '4 year', |
| 169 | date_trunc('year', CURRENT_DATE), |
| 170 | interval '1 year' |
| 171 | ) as end_date |
| 172 | ) |
| 173 | SELECT |
| 174 | u.FirstName || ' ' || u.LastName as MemberName, |
| 175 | m.Membership_Status, |
| 176 | d.start_date::date as PeriodStart, |
| 177 | d.end_date::date as PeriodEnd, |
| 178 | COUNT(DISTINCT l.LoanID) as TotalLoans, |
| 179 | COUNT(DISTINCT CASE WHEN l.ReturnDate IS NULL THEN l.LoanID END) as ActiveLoans, |
| 180 | COUNT(DISTINCT f.FineID) as TotalFines, |
| 181 | COALESCE(SUM(f.FineAmount), 0) as TotalFineAmount, |
| 182 | COALESCE(SUM(fp.PaymentAmount), 0) as TotalPaidAmount |
| 183 | FROM |
| 184 | DateRanges d |
| 185 | CROSS JOIN Member m |
| 186 | JOIN Users u ON m.UserID = u.UserID |
| 187 | LEFT JOIN Loan l ON m.MemberID = l.MemberID |
| 188 | AND l.LoanDate >= d.start_date |
| 189 | AND l.LoanDate < d.end_date |
| 190 | LEFT JOIN Fine f ON l.LoanID = f.LoanID |
| 191 | LEFT JOIN FinePayment fp ON f.FineID = fp.FineID |
| 192 | GROUP BY |
| 193 | u.FirstName, u.LastName, m.Membership_Status, d.start_date, d.end_date |
| 194 | ORDER BY |
| 195 | d.start_date DESC, TotalLoans DESC; |
| 196 | }}} |