Fixes for chart queries

This commit is contained in:
David Bomba 2023-05-12 11:19:10 +10:00
parent 6b4435606a
commit 24ce983b6f
2 changed files with 36 additions and 6 deletions

View File

@ -85,9 +85,9 @@ trait ChartQueries
payments.date, payments.date,
IFNULL(payments.currency_id, :company_currency) AS currency_id IFNULL(payments.currency_id, :company_currency) AS currency_id
FROM payments FROM payments
WHERE payments.status_id IN (4,5,6) WHERE payments.company_id = :company_id
AND payments.company_id = :company_id
AND payments.is_deleted = 0 AND payments.is_deleted = 0
AND payments.status_id IN (4,5,6)
AND (payments.date BETWEEN :start_date AND :end_date) AND (payments.date BETWEEN :start_date AND :end_date)
GROUP BY payments.date GROUP BY payments.date
HAVING currency_id = :currency_id HAVING currency_id = :currency_id
@ -115,9 +115,9 @@ trait ChartQueries
on invoices.client_id = clients.id on invoices.client_id = clients.id
WHERE invoices.status_id IN (2,3) WHERE invoices.status_id IN (2,3)
AND invoices.company_id = :company_id AND invoices.company_id = :company_id
AND invoices.balance > 0
AND clients.is_deleted = 0 AND clients.is_deleted = 0
AND invoices.is_deleted = 0 AND invoices.is_deleted = 0
AND invoices.balance > 0
AND (invoices.date BETWEEN :start_date AND :end_date) AND (invoices.date BETWEEN :start_date AND :end_date)
GROUP BY currency_id GROUP BY currency_id
"), ['company_currency' => $this->company->settings->currency_id, 'company_id' => $this->company->id, 'start_date' => $start_date, 'end_date' => $end_date]); "), ['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 FROM clients
JOIN invoices JOIN invoices
on invoices.client_id = clients.id 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.company_id = :company_id
AND invoices.amount > 0 AND invoices.amount > 0
AND clients.is_deleted = 0 AND clients.is_deleted = 0
@ -179,10 +198,10 @@ trait ChartQueries
FROM clients FROM clients
JOIN invoices JOIN invoices
on invoices.client_id = clients.id on invoices.client_id = clients.id
WHERE invoices.status_id IN (2,3,4) WHERE invoices.company_id = :company_id
AND invoices.company_id = :company_id
AND clients.is_deleted = 0 AND clients.is_deleted = 0
AND invoices.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) AND (invoices.date BETWEEN :start_date AND :end_date)
GROUP BY invoices.date GROUP BY invoices.date
HAVING currency_id = :currency_id HAVING currency_id = :currency_id

View File

@ -94,10 +94,13 @@ class ChartService
$data['currencies'] = $this->getCurrencyCodes(); $data['currencies'] = $this->getCurrencyCodes();
foreach ($data['currencies'] as $key => $value) { foreach ($data['currencies'] as $key => $value) {
$revenue = $this->getRevenue($start_date, $end_date); $revenue = $this->getRevenue($start_date, $end_date);
$outstanding = $this->getOutstanding($start_date, $end_date); $outstanding = $this->getOutstanding($start_date, $end_date);
$expenses = $this->getExpenses($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]['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]['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; $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; 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 public function getRevenue($start_date, $end_date) :array
{ {
$revenue = $this->getRevenueQuery($start_date, $end_date); $revenue = $this->getRevenueQuery($start_date, $end_date);