From 24ce983b6fdfc9917949e82fbf87b5bfd94bf1e5 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Fri, 12 May 2023 11:19:10 +1000 Subject: [PATCH] Fixes for chart queries --- app/Services/Chart/ChartQueries.php | 31 +++++++++++++++++++++++------ app/Services/Chart/ChartService.php | 11 ++++++++++ 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/app/Services/Chart/ChartQueries.php b/app/Services/Chart/ChartQueries.php index 961a460a1001..5f7bd651b7f1 100644 --- a/app/Services/Chart/ChartQueries.php +++ b/app/Services/Chart/ChartQueries.php @@ -85,9 +85,9 @@ trait ChartQueries payments.date, IFNULL(payments.currency_id, :company_currency) AS currency_id FROM payments - WHERE payments.status_id IN (4,5,6) - AND payments.company_id = :company_id + WHERE payments.company_id = :company_id AND payments.is_deleted = 0 + AND payments.status_id IN (4,5,6) AND (payments.date BETWEEN :start_date AND :end_date) GROUP BY payments.date HAVING currency_id = :currency_id @@ -115,9 +115,9 @@ trait ChartQueries on invoices.client_id = clients.id WHERE invoices.status_id IN (2,3) AND invoices.company_id = :company_id - AND invoices.balance > 0 AND clients.is_deleted = 0 AND invoices.is_deleted = 0 + AND invoices.balance > 0 AND (invoices.date BETWEEN :start_date AND :end_date) GROUP BY currency_id "), ['company_currency' => $this->company->settings->currency_id, 'company_id' => $this->company->id, 'start_date' => $start_date, 'end_date' => $end_date]); @@ -132,7 +132,26 @@ trait ChartQueries FROM clients JOIN invoices on invoices.client_id = clients.id - WHERE invoices.status_id IN (3,4) + WHERE invoices.company_id = :company_id + AND clients.is_deleted = 0 + AND invoices.is_deleted = 0 + AND invoices.amount > 0 + AND invoices.status_id IN (3,4) + AND (invoices.date BETWEEN :start_date AND :end_date) + GROUP BY currency_id + "), ['company_currency' => $this->company->settings->currency_id, 'company_id' => $this->company->id, 'start_date' => $start_date, 'end_date' => $end_date]); + } + + public function getInvoicesQuery($start_date, $end_date) + { + return DB::select(DB::raw(" + SELECT + sum(invoices.amount) as invoiced_amount, + IFNULL(CAST(JSON_UNQUOTE(JSON_EXTRACT( clients.settings, '$.currency_id' )) AS SIGNED), :company_currency) AS currency_id + FROM clients + JOIN invoices + on invoices.client_id = clients.id + WHERE invoices.status_id IN (2,3,4) AND invoices.company_id = :company_id AND invoices.amount > 0 AND clients.is_deleted = 0 @@ -179,10 +198,10 @@ trait ChartQueries FROM clients JOIN invoices on invoices.client_id = clients.id - WHERE invoices.status_id IN (2,3,4) - AND invoices.company_id = :company_id + WHERE invoices.company_id = :company_id AND clients.is_deleted = 0 AND invoices.is_deleted = 0 + AND invoices.status_id IN (2,3,4) AND (invoices.date BETWEEN :start_date AND :end_date) GROUP BY invoices.date HAVING currency_id = :currency_id diff --git a/app/Services/Chart/ChartService.php b/app/Services/Chart/ChartService.php index 4892b16e445e..080cbb8910f9 100644 --- a/app/Services/Chart/ChartService.php +++ b/app/Services/Chart/ChartService.php @@ -94,10 +94,13 @@ class ChartService $data['currencies'] = $this->getCurrencyCodes(); foreach ($data['currencies'] as $key => $value) { + $revenue = $this->getRevenue($start_date, $end_date); $outstanding = $this->getOutstanding($start_date, $end_date); $expenses = $this->getExpenses($start_date, $end_date); + $invoices = $this->getInvoices($start_date, $end_date); + $data[$key]['invoices'] = count($invoices) > 0 ? $invoices[array_search($key, array_column($invoices, 'currency_id'))] : new \stdClass; $data[$key]['revenue'] = count($revenue) > 0 ? $revenue[array_search($key, array_column($revenue, 'currency_id'))] : new \stdClass; $data[$key]['outstanding'] = count($outstanding) > 0 ? $outstanding[array_search($key, array_column($outstanding, 'currency_id'))] : new \stdClass; $data[$key]['expenses'] = count($expenses) > 0 ? $expenses[array_search($key, array_column($expenses, 'currency_id'))] : new \stdClass; @@ -106,6 +109,14 @@ class ChartService return $data; } + public function getInvoices($start_date, $end_date) :array + { + $revenue = $this->getInvoicesQuery($start_date, $end_date); + $revenue = $this->addCurrencyCodes($revenue); + + return $revenue; + } + public function getRevenue($start_date, $end_date) :array { $revenue = $this->getRevenueQuery($start_date, $end_date);