• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

klinge / sl-webapp / 18124637236

30 Sep 2025 09:04AM UTC coverage: 55.3% (+4.1%) from 51.199%
18124637236

push

github

web-flow
Merge pull request #101 from klinge/dependabot/composer/league/container-tw-5.1

Update league/container requirement from ^4.2 to ^5.1

1132 of 2047 relevant lines covered (55.3%)

2.12 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

88.37
/App/Controllers/ReportController.php
1
<?php
2

3
declare(strict_types=1);
4

5
namespace App\Controllers;
6

7
use App\Application;
8
use App\Utils\View;
9
use App\Models\MedlemRepository;
10
use Psr\Http\Message\ServerRequestInterface;
11
use Psr\Http\Message\ResponseInterface;
12
use PDO;
13
use Monolog\Logger;
14

15
class ReportController extends BaseController
16
{
17
    private View $view;
18
    private MedlemRepository $medlemRepo;
19
    private PDO $conn;
20

21
    public function __construct(Application $app, ServerRequestInterface $request, Logger $logger, PDO $conn)
22
    {
23
        parent::__construct($app, $request, $logger);
4✔
24
        $this->conn = $conn;
4✔
25
        $this->view = new View($this->app);
4✔
26
        $this->medlemRepo = new MedlemRepository($this->conn, $this->logger);
4✔
27
    }
28

29
    public function show(): ResponseInterface
30
    {
31
        $data = [
1✔
32
            "title" => "Rapporter",
1✔
33
        ];
1✔
34
        return $this->view->render('reports/viewRapporter', $data);
1✔
35
    }
36

37
    public function showPaymentReport(): ResponseInterface
38
    {
39
        //Set current year
40
        $currentYear = (int) date('Y');
2✔
41
        //Get the parameter on what years to check from the form
42
        $year_param = $this->request->getParsedBody()['yearRadio'];
2✔
43

44
        // Build arrays of years and placeholders based on year_param
45
        for ($i = 0; $i < $year_param; $i++) {
2✔
46
            $years[] = $currentYear - $i;
2✔
47
        }
48

49
        $query = "SELECT m.* FROM medlem m
2✔
50
                WHERE m.standig_medlem != 1
51
                AND NOT EXISTS (
52
                    SELECT 1
53
                    FROM betalning b
54
                    WHERE b.medlem_id = m.id";
2✔
55

56
        switch ($year_param) {
57
            case 1:
2✔
58
                $query .= " AND b.avser_ar = :year0)";
×
59
                break;
×
60
            case 2:
2✔
61
                $query .= " AND b.avser_ar IN (:year0, :year1))";
×
62
                break;
×
63
            case 3:
2✔
64
                $query .= " AND b.avser_ar IN (:year0, :year1, :year2))";
1✔
65
                break;
1✔
66
            default:
67
                throw new \InvalidArgumentException("Invalid year parameter. Must be 1, 2 or 3.");
1✔
68
        }
69

70
        $stmt = $this->conn->prepare($query);
1✔
71
        // Bind all year parameters
72
        $stmt->bindParam(':year0', $currentYear, PDO::PARAM_INT);
1✔
73
        if ($year_param === 2) {
1✔
74
            $stmt->bindValue(':year1', $currentYear - 1, PDO::PARAM_INT);
×
75
        }
76
        if ($year_param === 3) {
1✔
77
            $stmt->bindValue(':year2', $currentYear - 2, PDO::PARAM_INT);
1✔
78
        }
79

80
        $stmt->execute();
1✔
81
        $result =  $stmt->fetchAll(PDO::FETCH_ASSOC);
1✔
82

83
        $data = [
1✔
84
            "title" => "Rapport: Ej gottstående medlemmar",
1✔
85
            "items" => $result
1✔
86
        ];
1✔
87
        return $this->view->render('reports/viewReportResults', $data);
1✔
88
    }
89

90
    public function showMemberEmails(): ResponseInterface
91
    {
92
        $mailList = $this->medlemRepo->getEmailForActiveMembers();
1✔
93

94
        $data = [
1✔
95
            "title" => "Rapport: Email till aktiva medlemmar",
1✔
96
            "items" => $mailList
1✔
97
        ];
1✔
98
        return $this->view->render('reports/viewReportResults', $data);
1✔
99
    }
100
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc