diff --git a/app/Controllers/Projects/ProjectsController.php b/app/Controllers/Projects/ProjectsController.php index 18935f4..5c82dde 100644 --- a/app/Controllers/Projects/ProjectsController.php +++ b/app/Controllers/Projects/ProjectsController.php @@ -43,10 +43,29 @@ class ProjectsController extends BaseController $project->invoiceDetails = $builder ->selectSum('invoiceamount', 'invoiceTotal') ->selectSum('forecastamount', 'forecastTotal') + // Join VAT to calculate totals including VAT per invoice + ->join('vats', 'vats.id = invoices.vat_id', 'left') + // Total invoiced including VAT based on each invoice's VAT rate + ->select('SUM(ROUND(invoices.invoiceamount * (100 + COALESCE(vats.vatrate, 0)) / 100)) AS totalinvoiced', false) ->where('project_id', $project->id) ->get() ->getRow(); + // Add total payments (VAT included amounts stored in payments table) + $paymentsBuilder = $db->table('payments'); + $payments = $paymentsBuilder + ->select('COALESCE(ROUND(SUM(payments.paymentamount), 0), 0) AS payed', false) + ->join('invoices', 'invoices.id = payments.invoice_id', 'inner') + ->where('invoices.project_id', $project->id) + ->get() + ->getRow(); + + // Ensure invoiceDetails exists and attach payed sum + if (!isset($project->invoiceDetails) || !$project->invoiceDetails) { + $project->invoiceDetails = (object) []; + } + $project->invoiceDetails->payed = $payments->payed ?? 0; + $project->hourTotals = \Projecthour::getTotalHoursPerProject($project->id); return $this->json($project); diff --git a/app/Models/Eloquent/queries/QEmployeeHours.php b/app/Models/Eloquent/queries/QEmployeeHours.php index afd9d2a..27b4d29 100644 --- a/app/Models/Eloquent/queries/QEmployeeHours.php +++ b/app/Models/Eloquent/queries/QEmployeeHours.php @@ -10,17 +10,17 @@ class QEmployeeHours { public static function fire( $month, $year ) { - $sql = " - SELECT monthID, + $sql = " + SELECT MAX(monthID) AS monthID, user_id, - CONCAT(firstname, ' ', middlename, ' ', lastname) AS fullname, + MAX(CONCAT(firstname, ' ', middlename, ' ', lastname)) AS fullname, ROUND(SUM(projecthours), 0) AS projecthours, ROUND(SUM(profitablehours), 0) AS profitablehours, ROUND(SUM(nonprofitablehours), 0) AS nonprofitablehours, ROUND(SUM(revenues), 0) AS revenues, ROUND(SUM(nonprojecthours), 0) AS nonprojecthours, ROUND(SUM(projecthours + nonprojecthours), 0) AS totalhours, - targethours + MAX(targethours) AS targethours FROM ( SELECT employee_id AS user_id, MONTH(hourdate) monthID, diff --git a/app/Models/Eloquent/queries/ReservationTotals.php b/app/Models/Eloquent/queries/ReservationTotals.php index d5b9edb..7264f57 100644 --- a/app/Models/Eloquent/queries/ReservationTotals.php +++ b/app/Models/Eloquent/queries/ReservationTotals.php @@ -32,7 +32,7 @@ class ReservationTotals { ) Q1 RIGHT JOIN ( - SELECT SUM(costs) AS costs, SUM(payed) AS payed, external_id, project_id, from_reservation + SELECT SUM(costs) AS costs, SUM(payed) AS payed, external_id, project_id, MAX(from_reservation) AS from_reservation FROM projectcosts GROUP BY external_id, project_id ) Q2 @@ -47,7 +47,7 @@ class ReservationTotals { ) Q3 LEFT JOIN ( - SELECT SUM(costs) AS costs, SUM(payed) AS payed, external_id, project_id, id, from_reservation + SELECT SUM(costs) AS costs, SUM(payed) AS payed, external_id, project_id, MAX(id) AS id, MAX(from_reservation) AS from_reservation FROM projectcosts GROUP BY external_id, project_id ) Q4