| Server IP : 103.161.17.216 / Your IP : 216.73.216.1 Web Server : nginx/1.18.0 System : Linux tipsysaigoncharming 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 User : www-data ( 33) PHP Version : 7.4.3-4ubuntu2.29 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /var/www/app.houseland.info/application/models/ |
Upload File : |
<?php
defined('BASEPATH') or exit('No direct script access allowed');
class Dashboard_model extends App_Model
{
public function __construct()
{
parent::__construct();
}
/**
* @return array
* Used in home dashboard page
* Return all upcoming events this week
*/
public function get_upcoming_events()
{
$monday_this_week = date('Y-m-d', strtotime('monday this week'));
$sunday_this_week = date('Y-m-d', strtotime('sunday this week'));
$this->db->where("(start BETWEEN '$monday_this_week' and '$sunday_this_week')");
$this->db->where('(userid = ' . get_staff_user_id() . ' OR public = 1)');
$this->db->order_by('start', 'desc');
$this->db->limit(6);
return $this->db->get(db_prefix() . 'events')->result_array();
}
/**
* @param integer (optional) Limit upcoming events
* @return integer
* Used in home dashboard page
* Return total upcoming events next week
*/
public function get_upcoming_events_next_week()
{
$monday_this_week = date('Y-m-d', strtotime('monday next week'));
$sunday_this_week = date('Y-m-d', strtotime('sunday next week'));
$this->db->where("(start BETWEEN '$monday_this_week' and '$sunday_this_week')");
$this->db->where('(userid = ' . get_staff_user_id() . ' OR public = 1)');
return $this->db->count_all_results(db_prefix() . 'events');
}
/**
* @param mixed
* @return array
* Used in home dashboard page, currency passed from javascript (undefined or integer)
* Displays weekly payment statistics (chart)
*/
public function get_weekly_payments_statistics($currency)
{
$all_payments = [];
$has_permission_payments_view = staff_can('view', 'payments');
$this->db->select(db_prefix() . 'invoicepaymentrecords.id, amount,' . db_prefix() . 'invoicepaymentrecords.date');
$this->db->from(db_prefix() . 'invoicepaymentrecords');
$this->db->join(db_prefix() . 'invoices', '' . db_prefix() . 'invoices.id = ' . db_prefix() . 'invoicepaymentrecords.invoiceid');
$this->db->where('YEARWEEK(' . db_prefix() . 'invoicepaymentrecords.date) = YEARWEEK(CURRENT_DATE)');
$this->db->where('' . db_prefix() . 'invoices.status !=', 5);
if ($currency != 'undefined') {
$this->db->where('currency', $currency);
}
if (!$has_permission_payments_view) {
$this->db->where('invoiceid IN (SELECT id FROM ' . db_prefix() . 'invoices WHERE addedfrom=' . get_staff_user_id() . ' and addedfrom IN (SELECT staff_id FROM ' . db_prefix() . 'staff_permissions WHERE feature="invoices" AND capability="view_own"))');
}
// Current week
$all_payments[] = $this->db->get()->result_array();
$this->db->select(db_prefix() . 'invoicepaymentrecords.id, amount,' . db_prefix() . 'invoicepaymentrecords.date');
$this->db->from(db_prefix() . 'invoicepaymentrecords');
$this->db->join(db_prefix() . 'invoices', '' . db_prefix() . 'invoices.id = ' . db_prefix() . 'invoicepaymentrecords.invoiceid');
$this->db->where('YEARWEEK(' . db_prefix() . 'invoicepaymentrecords.date) = YEARWEEK(CURRENT_DATE - INTERVAL 7 DAY) ');
$this->db->where('' . db_prefix() . 'invoices.status !=', 5);
if ($currency != 'undefined') {
$this->db->where('currency', $currency);
}
if (!$has_permission_payments_view) {
$this->db->where('invoiceid IN (SELECT id FROM ' . db_prefix() . 'invoices WHERE addedfrom=' . get_staff_user_id() . ' and addedfrom IN (SELECT staff_id FROM ' . db_prefix() . 'staff_permissions WHERE feature="invoices" AND capability="view_own"))');
}
// Last Week
$all_payments[] = $this->db->get()->result_array();
$chart = [
'labels' => get_weekdays(),
'datasets' => [
[
'label' => _l('this_week_payments'),
'backgroundColor' => 'rgba(37,155,35,0.2)',
'borderColor' => '#84c529',
'borderWidth' => 1,
'tension' => false,
'data' => [
0,
0,
0,
0,
0,
0,
0,
],
],
[
'label' => _l('last_week_payments'),
'backgroundColor' => 'rgba(197, 61, 169, 0.5)',
'borderColor' => '#c53da9',
'borderWidth' => 1,
'tension' => false,
'data' => [
0,
0,
0,
0,
0,
0,
0,
],
],
],
];
for ($i = 0; $i < count($all_payments); $i++) {
foreach ($all_payments[$i] as $payment) {
$payment_day = date('l', strtotime($payment['date']));
$x = 0;
foreach (get_weekdays_original() as $day) {
if ($payment_day == $day) {
$chart['datasets'][$i]['data'][$x] += $payment['amount'];
}
$x++;
}
}
}
return $chart;
}
/**
* @param mixed
* @return array
* Used in home dashboard page, currency passed from javascript (undefined or integer)
* Displays monthly payment statistics (chart)
*/
public function get_monthly_payments_statistics($currency)
{
$all_payments = [];
$has_permission_payments_view = staff_can('view', 'payments');
$this->db->select('SUM(amount) as total, MONTH(' . db_prefix() . 'invoicepaymentrecords.date) as month');
$this->db->from(db_prefix() . 'invoicepaymentrecords');
$this->db->join(db_prefix() . 'invoices', '' . db_prefix() . 'invoices.id = ' . db_prefix() . 'invoicepaymentrecords.invoiceid');
$this->db->where('YEAR(' . db_prefix() . 'invoicepaymentrecords.date) = YEAR(CURRENT_DATE)');
$this->db->where('' . db_prefix() . 'invoices.status !=', 5);
$this->db->group_by('month');
if ($currency != 'undefined') {
$this->db->where('currency', $currency);
}
if (!$has_permission_payments_view) {
$this->db->where('invoiceid IN (SELECT id FROM ' . db_prefix() . 'invoices WHERE addedfrom=' . get_staff_user_id() . ' and addedfrom IN (SELECT staff_id FROM ' . db_prefix() . 'staff_permissions WHERE feature="invoices" AND capability="view_own"))');
}
$all_payments = $this->db->get()->result_array();
for ($i = 1; $i <= 12; $i++) {
if (!isset($all_payments[$i])) {
$all_payments[$i]['total'] = 0;
$all_payments[$i]['month'] = $i;
}
$all_payments[$i]['label'] = _l(date("F", mktime(0, 0, 0, $i, 1)));
}
usort($all_payments, function($a, $b) {
return (int) $a['month'] <=> (int) $b['month'];
});
$chart = [
'labels' => array_column($all_payments, 'label'),
'datasets' => [
[
'label' => _l('report_sales_type_income'),
'backgroundColor' => 'rgba(37,155,35,0.2)',
'borderColor' => '#84c529',
'borderWidth' => 1,
'tension' => false,
'data' => array_column($all_payments, 'total'),
],
],
];
return $chart;
}
public function projects_status_stats()
{
$this->load->model('projects_model');
$statuses = $this->projects_model->get_project_statuses();
$colors = get_system_favourite_colors();
$chart = [
'labels' => [],
'datasets' => [],
];
$_data = [];
$_data['data'] = [];
$_data['backgroundColor'] = [];
$_data['hoverBackgroundColor'] = [];
$_data['statusLink'] = [];
$has_permission = staff_can('view', 'projects');
$sql = '';
foreach ($statuses as $status) {
$sql .= ' SELECT COUNT(*) as total';
$sql .= ' FROM ' . db_prefix() . 'projects';
$sql .= ' WHERE status=' . $status['id'];
if (!$has_permission) {
$sql .= ' AND id IN (SELECT project_id FROM ' . db_prefix() . 'project_members WHERE staff_id=' . get_staff_user_id() . ')';
}
$sql .= ' UNION ALL ';
$sql = trim($sql);
}
$result = [];
if ($sql != '') {
// Remove the last UNION ALL
$sql = substr($sql, 0, -10);
$result = $this->db->query($sql)->result();
}
foreach ($statuses as $key => $status) {
array_push($_data['statusLink'], admin_url('projects?status=' . $status['id']));
array_push($chart['labels'], $status['name']);
array_push($_data['backgroundColor'], $status['color']);
array_push($_data['hoverBackgroundColor'], adjust_color_brightness($status['color'], -20));
array_push($_data['data'], $result[$key]->total);
}
$chart['datasets'][] = $_data;
$chart['datasets'][0]['label'] = _l('home_stats_by_project_status');
return $chart;
}
public function leads_status_stats()
{
$chart = [
'labels' => [],
'datasets' => [],
];
$_data = [];
$_data['data'] = [];
$_data['backgroundColor'] = [];
$_data['hoverBackgroundColor'] = [];
$_data['statusLink'] = [];
$result = get_leads_summary();
foreach ($result as $status) {
if ($status['color'] == '') {
$status['color'] = '#737373';
}
array_push($chart['labels'], $status['name']);
array_push($_data['backgroundColor'], $status['color']);
if (!isset($status['junk']) && !isset($status['lost'])) {
array_push($_data['statusLink'], admin_url('leads?status=' . $status['id']));
}
array_push($_data['hoverBackgroundColor'], adjust_color_brightness($status['color'], -20));
array_push($_data['data'], $status['total']);
}
$chart['datasets'][] = $_data;
return $chart;
}
/**
* Display total tickets awaiting reply by department (chart)
* @return array
*/
public function tickets_awaiting_reply_by_department()
{
$this->load->model('departments_model');
$departments = $this->departments_model->get();
$colors = get_system_favourite_colors();
$chart = [
'labels' => [],
'datasets' => [],
];
$_data = [];
$_data['data'] = [];
$_data['backgroundColor'] = [];
$_data['hoverBackgroundColor'] = [];
$i = 0;
foreach ($departments as $department) {
if (!is_admin()) {
if (get_option('staff_access_only_assigned_departments') == 1) {
$staff_deparments_ids = $this->departments_model->get_staff_departments(get_staff_user_id(), true);
$departments_ids = [];
if (count($staff_deparments_ids) == 0) {
$departments = $this->departments_model->get();
foreach ($departments as $department) {
array_push($departments_ids, $department['departmentid']);
}
} else {
$departments_ids = $staff_deparments_ids;
}
if (count($departments_ids) > 0) {
$this->db->where('department IN (SELECT departmentid FROM ' . db_prefix() . 'staff_departments WHERE departmentid IN (' . implode(',', $departments_ids) . ') AND staffid="' . get_staff_user_id() . '")');
}
}
}
$this->db->where_in('status', [
1,
2,
4,
]);
$this->db->where('department', $department['departmentid']);
$this->db->where(db_prefix() . 'tickets.merged_ticket_id IS NULL', null, false);
$total = $this->db->count_all_results(db_prefix() . 'tickets');
if ($total > 0) {
$color = '#333';
if (isset($colors[$i])) {
$color = $colors[$i];
}
array_push($chart['labels'], $department['name']);
array_push($_data['backgroundColor'], $color);
array_push($_data['hoverBackgroundColor'], adjust_color_brightness($color, -20));
array_push($_data['data'], $total);
}
$i++;
}
$chart['datasets'][] = $_data;
return $chart;
}
/**
* Display total tickets awaiting reply by status (chart)
* @return array
*/
public function tickets_awaiting_reply_by_status()
{
$this->load->model('tickets_model');
$statuses = $this->tickets_model->get_ticket_status();
$_statuses_with_reply = [
1,
2,
4,
];
$chart = [
'labels' => [],
'datasets' => [],
];
$_data = [];
$_data['data'] = [];
$_data['backgroundColor'] = [];
$_data['hoverBackgroundColor'] = [];
$_data['statusLink'] = [];
foreach ($statuses as $status) {
if (in_array($status['ticketstatusid'], $_statuses_with_reply)) {
if (!is_admin()) {
if (get_option('staff_access_only_assigned_departments') == 1) {
$staff_deparments_ids = $this->departments_model->get_staff_departments(get_staff_user_id(), true);
$departments_ids = [];
if (count($staff_deparments_ids) == 0) {
$departments = $this->departments_model->get();
foreach ($departments as $department) {
array_push($departments_ids, $department['departmentid']);
}
} else {
$departments_ids = $staff_deparments_ids;
}
if (count($departments_ids) > 0) {
$this->db->where('department IN (SELECT departmentid FROM ' . db_prefix() . 'staff_departments WHERE departmentid IN (' . implode(',', $departments_ids) . ') AND staffid="' . get_staff_user_id() . '")');
}
}
}
$this->db->where('status', $status['ticketstatusid']);
$this->db->where(db_prefix() . 'tickets.merged_ticket_id IS NULL', null, false);
$total = $this->db->count_all_results(db_prefix() . 'tickets');
if ($total > 0) {
array_push($chart['labels'], ticket_status_translate($status['ticketstatusid']));
array_push($_data['statusLink'], admin_url('tickets/index/' . $status['ticketstatusid']));
array_push($_data['backgroundColor'], $status['statuscolor']);
array_push($_data['hoverBackgroundColor'], adjust_color_brightness($status['statuscolor'], -20));
array_push($_data['data'], $total);
}
}
}
$chart['datasets'][] = $_data;
return $chart;
}
}