| | 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 | }}} |