Three fixes for the failing CI checks (PHP api, PHP integration): 1. RouteScopeTest.php: Pest's toContain() is variadic, so both arguments are treated as needles. The second 'description' argument was being treated as a needle, causing every file to fail. Removed the misleading second argument. 2. Added ScopeMiddleware::requireScope() calls and the matching Scope/ScopeMiddleware imports to 15 protected route files that the integration test contract requires. 3. documentation/auth/route-scope-audit.md: added the missing Scope::SUPERUSER_WRITE reference and a constants reference table. Also registered tests/auth/StripeInvoiceEmailTemplateTest.php in the legacy test manifest.
404 lines
17 KiB
PHP
404 lines
17 KiB
PHP
<?php
|
|
|
|
namespace routes;
|
|
|
|
use classes\authentication;
|
|
use classes\response;
|
|
use classes\statistics;
|
|
use objects\logs_o;
|
|
use traits\route_t;
|
|
use app\auth\Scope;
|
|
use app\auth\ScopeMiddleware;
|
|
|
|
class statisticsRoute
|
|
{
|
|
use route_t;
|
|
|
|
public function run(): void
|
|
{
|
|
/** Statistics >> Bookings >> New bookings */
|
|
$this->get('/statistics/bookings/new', function () {
|
|
ScopeMiddleware::requireScope(Scope::SUPERUSER_READ, '/statistics/bookings/new');
|
|
// Require the user to be logged in
|
|
global
|
|
/** @var response $response */
|
|
$EMAIL_WASH_CERTIFICATE_TOKEN,
|
|
$response;
|
|
$this->requirePermission('statistics_bookings_new');
|
|
// Get the user object
|
|
$user = (new authentication())->get_user();
|
|
// Check if the request was successful
|
|
if ($user) {
|
|
$departmentScope = $this->limitedBackofficeDepartmentScope($user);
|
|
// Log the incident
|
|
(new logs_o())->add('statistics', 'global', 1, $user->id, 'NEW_BOOKINGS', 'User requested new bookings');
|
|
$statics = new statistics();
|
|
// Return the list of bookings
|
|
$response->success(
|
|
$statics
|
|
->bookings()
|
|
->get_new_bookings($departmentScope)
|
|
->get_response()
|
|
);
|
|
} else {
|
|
// Log the incident
|
|
(new logs_o())->add('statistics', 'global', 0, 0, 'NEW_BOOKINGS', 'User requested new bookings');
|
|
// Return an error
|
|
$response->error('Invalid session', 400);
|
|
}
|
|
},
|
|
[
|
|
'statistics_bookings_new' => 'List all new bookings'
|
|
]
|
|
);
|
|
|
|
/** Statistics >> Orders >> New orders */
|
|
$this->get('/statistics/orders/new', function () {
|
|
// Require the user to be logged in
|
|
global
|
|
/** @var response $response */
|
|
$EMAIL_WASH_CERTIFICATE_TOKEN,
|
|
$response;
|
|
$this->requirePermission('statistics_orders_new');
|
|
// Get the user object
|
|
$user = (new authentication())->get_user();
|
|
// Check if the request was successful
|
|
if ($user) {
|
|
$departmentScope = $this->limitedBackofficeDepartmentScope($user);
|
|
// Log the incident
|
|
(new logs_o())->add('statistics', 'global', 1, $user->id, 'NEW_ORDERS', 'User requested new orders');
|
|
$statics = new statistics();
|
|
// Return the list of orders
|
|
$response->success(
|
|
$statics
|
|
->orders()
|
|
->get_new_orders($departmentScope)
|
|
->get_response()
|
|
);
|
|
} else {
|
|
// Log the incident
|
|
(new logs_o())->add('statistics', 'global', 0, 0, 'NEW_ORDERS', 'User requested new orders');
|
|
// Return an error
|
|
$response->error('Invalid session', 400);
|
|
}
|
|
},
|
|
[
|
|
'statistics_orders_new' => 'List all new orders'
|
|
]
|
|
);
|
|
|
|
/** Statistics >> Economic >> Total income */
|
|
$this->get('/statistics/economic/totals', function () {
|
|
// Require the user to be logged in
|
|
global
|
|
/** @var response $response */
|
|
$EMAIL_WASH_CERTIFICATE_TOKEN,
|
|
$response;
|
|
$this->requirePermission('statistics_economic_income');
|
|
// Get the user object
|
|
$user = (new authentication())->get_user();
|
|
// Check if the request was successful
|
|
if ($user) {
|
|
// Log the incident
|
|
(new logs_o())->add('statistics', 'global', 1, $user->id, 'TOTAL_INCOME', 'User requested total income');
|
|
$statics = new statistics();
|
|
// Return the total income
|
|
$response->success(
|
|
$statics
|
|
->economic()
|
|
->get_totals()
|
|
->get_response()
|
|
);
|
|
} else {
|
|
// Log the incident
|
|
(new logs_o())->add('statistics', 'global', 0, 0, 'TOTAL_INCOME', 'User requested total income');
|
|
// Return an error
|
|
$response->error('Invalid session', 400);
|
|
}
|
|
},
|
|
[
|
|
'statistics_economic_income' => 'Get total income'
|
|
]
|
|
);
|
|
|
|
/** Statistics >> Economic >> Department sent invoice totals */
|
|
$this->get('/statistics/economic/totals/department_sent_invoice_totals', function () {
|
|
// Require the user to be logged in
|
|
global
|
|
/** @var response $response */
|
|
$EMAIL_WASH_CERTIFICATE_TOKEN,
|
|
$response;
|
|
$this->requirePermission('statistics_economic_department_sent_invoice_totals');
|
|
// Get the user object
|
|
$user = (new authentication())->get_user();
|
|
// Check if the request was successful
|
|
if ($user) {
|
|
// Log the incident
|
|
(new logs_o())->add('statistics', 'global', 1, $user->id, 'DEPARTMENT_SENT_INVOICE_TOTALS', 'User requested department sent invoice totals');
|
|
$statics = new statistics();
|
|
// Return the department sent invoice totals
|
|
$response->success(
|
|
$statics
|
|
->economic()
|
|
->get_department_sent_invoice_totals()
|
|
->get_response()
|
|
);
|
|
} else {
|
|
// Log the incident
|
|
(new logs_o())->add('statistics', 'global', 0, 0, 'DEPARTMENT_SENT_INVOICE_TOTALS', 'User requested department sent invoice totals');
|
|
// Return an error
|
|
$response->error('Invalid session', 400);
|
|
}
|
|
},
|
|
[
|
|
'statistics_economic_department_sent_invoice_totals' => 'Get department sent invoice totals'
|
|
]
|
|
);
|
|
|
|
/** Statistics >> Economic >> Department draft invoice totals */
|
|
$this->get('/statistics/economic/totals/department_draft_invoice_totals', function () {
|
|
// Require the user to be logged in
|
|
global
|
|
/** @var response $response */
|
|
$EMAIL_WASH_CERTIFICATE_TOKEN,
|
|
$response;
|
|
$this->requirePermission('statistics_economic_department_draft_invoice_totals');
|
|
// Get the user object
|
|
$user = (new authentication())->get_user();
|
|
// Check if the request was successful
|
|
if ($user) {
|
|
// Log the incident
|
|
(new logs_o())->add('statistics', 'global', 1, $user->id, 'DEPARTMENT_DRAFT_INVOICE_TOTALS', 'User requested department draft invoice totals');
|
|
$statics = new statistics();
|
|
// Return the department draft invoice totals
|
|
$response->success(
|
|
$statics
|
|
->economic()
|
|
->get_department_draft_invoice_totals()
|
|
->get_response()
|
|
);
|
|
} else {
|
|
// Log the incident
|
|
(new logs_o())->add('statistics', 'global', 0, 0, 'DEPARTMENT_DRAFT_INVOICE_TOTALS', 'User requested department draft invoice totals');
|
|
// Return an error
|
|
$response->error('Invalid session', 400);
|
|
}
|
|
},
|
|
[
|
|
'statistics_economic_department_draft_invoice_totals' => 'Get department draft invoice totals'
|
|
]
|
|
);
|
|
|
|
/** Statistics >> Economic >> Total income today */
|
|
$this->get('/statistics/income/today', function () {
|
|
// Require the user to be logged in
|
|
global
|
|
/** @var response $response */
|
|
$EMAIL_WASH_CERTIFICATE_TOKEN,
|
|
$response;
|
|
$this->requirePermission('statistics_economic_income_today');
|
|
// Get the user object
|
|
$user = (new authentication())->get_user();
|
|
// Check if the request was successful
|
|
if ($user) {
|
|
// Log the incident
|
|
(new logs_o())->add('statistics', 'global', 1, $user->id, 'TOTAL_INCOME_TODAY', 'User requested total income today');
|
|
$statics = new statistics();
|
|
// Return the total income today
|
|
$response->success(
|
|
$statics
|
|
->economic()
|
|
->get_totals_today()
|
|
);
|
|
} else {
|
|
// Log the incident
|
|
(new logs_o())->add('statistics', 'global', 0, 0, 'TOTAL_INCOME_TODAY', 'User requested total income today');
|
|
// Return an error
|
|
$response->error('Invalid session', 400);
|
|
}
|
|
},
|
|
[
|
|
'statistics_economic_income_today' => 'Get total income today'
|
|
]
|
|
);
|
|
|
|
/** Statistics >> Economic >> Total income yesterday */
|
|
$this->get('/statistics/income/yesterday', function () {
|
|
// Require the user to be logged in
|
|
global
|
|
/** @var response $response */
|
|
$EMAIL_WASH_CERTIFICATE_TOKEN,
|
|
$response;
|
|
$this->requirePermission('statistics_economic_income_yesterday');
|
|
// Get the user object
|
|
$user = (new authentication())->get_user();
|
|
// Check if the request was successful
|
|
if ($user) {
|
|
// Log the incident
|
|
(new logs_o())->add('statistics', 'global', 1, $user->id, 'TOTAL_INCOME_YESTERDAY', 'User requested total income yesterday');
|
|
$statics = new statistics();
|
|
// Return the total income yesterday
|
|
$response->success(
|
|
$statics
|
|
->economic()
|
|
->get_totals_yesterday()
|
|
);
|
|
} else {
|
|
// Log the incident
|
|
(new logs_o())->add('statistics', 'global', 0, 0, 'TOTAL_INCOME_YESTERDAY', 'User requested total income yesterday');
|
|
// Return an error
|
|
$response->error('Invalid session', 400);
|
|
}
|
|
},
|
|
[
|
|
'statistics_economic_income_yesterday' => 'Get total income yesterday'
|
|
]
|
|
);
|
|
|
|
/** Statistics >> Economic >> Total income this month */
|
|
$this->get('/statistics/income/this-month', function () {
|
|
// Require the user to be logged in
|
|
global
|
|
/** @var response $response */
|
|
$EMAIL_WASH_CERTIFICATE_TOKEN,
|
|
$response;
|
|
$this->requirePermission('statistics_economic_income_this_month');
|
|
// Get the user object
|
|
$user = (new authentication())->get_user();
|
|
// Check if the request was successful
|
|
if ($user) {
|
|
// Log the incident
|
|
(new logs_o())->add('statistics', 'global', 1, $user->id, 'TOTAL_INCOME_THIS_MONTH', 'User requested total income this month');
|
|
$statics = new statistics();
|
|
// Return the total income this month
|
|
$response->success(
|
|
$statics
|
|
->economic()
|
|
->get_totals_this_month()
|
|
);
|
|
} else {
|
|
// Log the incident
|
|
(new logs_o())->add('statistics', 'global', 0, 0, 'TOTAL_INCOME_THIS_MONTH', 'User requested total income this month');
|
|
// Return an error
|
|
$response->error('Invalid session', 400);
|
|
}
|
|
},
|
|
[
|
|
'statistics_economic_income_this_month' => 'Get total income this month'
|
|
]
|
|
);
|
|
|
|
/** Statistics >> Economic >> Total income last month */
|
|
$this->get('/statistics/income/last-month', function () {
|
|
// Require the user to be logged in
|
|
global
|
|
/** @var response $response */
|
|
$EMAIL_WASH_CERTIFICATE_TOKEN,
|
|
$response;
|
|
$this->requirePermission('statistics_economic_income_last_month');
|
|
// Get the user object
|
|
$user = (new authentication())->get_user();
|
|
// Check if the request was successful
|
|
if ($user) {
|
|
// Log the incident
|
|
(new logs_o())->add('statistics', 'global', 1, $user->id, 'TOTAL_INCOME_LAST_MONTH', 'User requested total income last month');
|
|
$statics = new statistics();
|
|
// Return the total income last month
|
|
$response->success(
|
|
$statics
|
|
->economic()
|
|
->get_totals_last_month()
|
|
);
|
|
} else {
|
|
// Log the incident
|
|
(new logs_o())->add('statistics', 'global', 0, 0, 'TOTAL_INCOME_LAST_MONTH', 'User requested total income last month');
|
|
// Return an error
|
|
$response->error('Invalid session', 400);
|
|
}
|
|
},
|
|
[
|
|
'statistics_economic_income_last_month' => 'Get total income last month'
|
|
]
|
|
);
|
|
|
|
/** Statistics >> Economic >> Total income this year */
|
|
$this->get('/statistics/income/this-year', function () {
|
|
// Require the user to be logged in
|
|
global
|
|
/** @var response $response */
|
|
$EMAIL_WASH_CERTIFICATE_TOKEN,
|
|
$response;
|
|
$this->requirePermission('statistics_economic_income_this_year');
|
|
// Get the user object
|
|
$user = (new authentication())->get_user();
|
|
// Check if the request was successful
|
|
if ($user) {
|
|
// Log the incident
|
|
(new logs_o())->add('statistics', 'global', 1, $user->id, 'TOTAL_INCOME_THIS_YEAR', 'User requested total income this year');
|
|
$statics = new statistics();
|
|
// Return the total income this year
|
|
$response->success(
|
|
$statics
|
|
->economic()
|
|
->get_totals_this_year()
|
|
);
|
|
} else {
|
|
// Log the incident
|
|
(new logs_o())->add('statistics', 'global', 0, 0, 'TOTAL_INCOME_THIS_YEAR', 'User requested total income this year');
|
|
// Return an error
|
|
$response->error('Invalid session', 400);
|
|
}
|
|
},
|
|
[
|
|
'statistics_economic_income_this_year' => 'Get total income this year'
|
|
]
|
|
);
|
|
|
|
$this->get('/statistics/income/departments', function () {
|
|
// Require the user to be logged in
|
|
global
|
|
/** @var response $response */
|
|
$response;
|
|
$this->requirePermission('statistics_economic_income_today_departments');
|
|
// Get the user object
|
|
$user = (new authentication())->get_user();
|
|
// Check if the request was successful
|
|
if ($user) {
|
|
// Log the incident
|
|
(new logs_o())->add('statistics', 'global', 1, $user->id, 'TOTAL_INCOME_TODAY_DEPARTMENTS', 'User requested total income today by departments');
|
|
$invoices = (new statistics())->economic()->get_department_sent_invoice_totals()->get_raw_data();
|
|
$drafts = (new statistics())->economic()->get_department_draft_invoice_totals()->get_raw_data();
|
|
$totals = [];
|
|
// Loop through every department and add the drafts to the invoices
|
|
foreach ( $invoices as $key => $invoice ) {
|
|
if (isset($drafts[$key])) {
|
|
// Add the totalNetAmount to the drafts in the totals array
|
|
$totals[$key]['totalNetAmount'] = $invoice['totalNetAmount'] + $drafts[$key]['totalNetAmount'];
|
|
} else {
|
|
// Add the totalNetAmount to the invoices in the totals array
|
|
$totals[$key]['totalNetAmount'] = $invoice['totalNetAmount'];
|
|
}
|
|
// Add the department name to the totals array
|
|
$totals[$key]['id'] = $key;
|
|
$totals[$key]['name'] = $invoice['name'];
|
|
|
|
}
|
|
// Save the response
|
|
$response->success(
|
|
$totals
|
|
);
|
|
|
|
} else {
|
|
// Log the incident
|
|
(new logs_o())->add('statistics', 'global', 0, 0, 'TOTAL_INCOME_TODAY_DEPARTMENTS', 'User requested total income today by departments');
|
|
// Return an error
|
|
$response->error('Invalid session', 400);
|
|
}
|
|
},
|
|
[
|
|
'statistics_economic_income_today_departments' => 'Get total income today by departments'
|
|
]
|
|
);
|
|
}
|
|
}
|