| 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/services/ |
Upload File : |
<?php
namespace app\services;
defined('BASEPATH') or exit('No direct script access allowed');
class CustomerProfileBadges
{
protected $customerId;
protected $CI;
protected $staffId;
public function __construct($customerId)
{
$this->customerId = $customerId;
$this->staffId = get_staff_user_id();
$this->CI = &get_instance();
}
public function getBadge($feature)
{
$badge = [];
if (method_exists($this, $feature)) {
if ($count = $this->{$feature}()) {
$badge = [
'value' => $count,
'color' => '',
'type' => 'bg-default',
];
}
}
$hook = hooks()->apply_filters('customers_profile_tab_badge', [
'feature' => $feature,
'customer_id' => $this->customerId,
'badge' => $badge,
]);
return $hook['badge'];
}
/**
* Get the total contacts for the customer profile badge
*
* @return int
*/
public function contacts()
{
$this->CI->db->where('userid', $this->customerId);
return $this->CI->db->count_all_results('contacts');
}
/**
* Get the total notes for the customer profile badge
*
* @return int
*/
public function notes()
{
$this->CI->db->where('rel_type', 'customer');
$this->CI->db->where('rel_id', $this->customerId);
return $this->CI->db->count_all_results('notes');
}
public function invoices()
{
if (!class_exists('Invoices_model', false)) {
$this->CI->load->model('invoices_model');
}
if (staff_cant('view', 'invoices')) {
$where = get_invoices_where_sql_for_staff($this->staffId);
$this->CI->db->where($where);
}
$this->CI->db->where_not_in('status', [\Invoices_model::STATUS_CANCELLED, \Invoices_model::STATUS_PAID]);
$this->CI->db->where('clientid', $this->customerId);
return $this->CI->db->count_all_results('invoices');
}
public function proposals()
{
if (staff_cant('view', 'proposals')) {
$where = get_proposals_sql_where_staff($this->staffId);
$this->CI->db->where($where);
}
$this->CI->db->where_in('status', [1, 4, 6]);
$this->CI->db->where('rel_id', $this->customerId);
$this->CI->db->where('rel_type', 'customer');
return $this->CI->db->count_all_results('proposals');
}
public function subscriptions()
{
if (staff_cant('view', 'subscriptions')) {
$this->CI->db->where('(' . db_prefix() . 'subscriptions.created_from=' . $this->staffId . ' AND ' . db_prefix() . 'subscriptions.created_from IN (SELECT staff_id FROM ' . db_prefix() . 'staff_permissions WHERE feature = "subscriptions" AND capability="view_own"))');
}
$this->CI->db->group_start();
$this->CI->db->where_in('status', ['past_due', 'unpaid', 'incomplete']);
// Not subscribed
$this->CI->db->where('stripe_subscription_id IS NULL OR stripe_subscription_id = ""');
$this->CI->db->group_end();
$this->CI->db->where('clientid ', $this->customerId);
return $this->CI->db->count_all_results('subscriptions');
}
public function estimates()
{
if (staff_cant('view', 'estimates')) {
$where = get_estimates_where_sql_for_staff($this->staffId);
$this->CI->db->where($where);
}
$this->CI->db->group_start();
$this->CI->db->where_in('status', [1, 2]);
$this->CI->db->or_where('status IN (1,2) AND sent=0');
$this->CI->db->group_end();
$this->CI->db->where('clientid', $this->customerId);
return $this->CI->db->count_all_results('estimates');
}
public function credit_notes()
{
if (staff_cant('view', 'credit_notes')) {
$this->CI->db->where('(' . db_prefix() . 'creditnotes.addedfrom=' . $this->staffId . ' AND ' . db_prefix() . 'creditnotes.addedfrom IN (SELECT staff_id FROM ' . db_prefix() . 'staff_permissions WHERE feature = "credit_notes" AND capability="view_own"))');
}
$this->CI->db->where('clientid', $this->customerId);
$this->CI->db->where('status', 1);
return $this->CI->db->count_all_results('creditnotes');
}
public function contracts()
{
if (staff_cant('view', 'contracts')) {
$this->CI->db->where('(' . db_prefix() . 'contracts.addedfrom=' . $this->staffId . ' AND ' . db_prefix() . 'contracts.addedfrom IN (SELECT staff_id FROM ' . db_prefix() . 'staff_permissions WHERE feature = "contracts" AND capability="view_own"))');
}
$this->CI->db->where('client', $this->customerId);
$this->CI->db->where('signed', 0);
return $this->CI->db->count_all_results('contracts');
}
public function projects()
{
if (staff_cant('view', 'projects')) {
$this->CI->db->where(db_prefix() . 'projects.id IN (SELECT project_id FROM ' . db_prefix() . 'project_members WHERE staff_id=' . $this->staffId . ')');
}
$this->CI->db->where('status', 2);
$this->CI->db->where('clientid', $this->customerId);
return $this->CI->db->count_all_results('projects');
}
public function tickets()
{
if (!is_admin()) {
$departments_ids = [];
if (get_option('staff_access_only_assigned_departments') == 1) {
$this->CI->load->model('departments_model');
$staff_deparments_ids = $this->CI->departments_model->get_staff_departments($this->staffId, true);
if (count($staff_deparments_ids) == 0) {
$departments = $this->CI->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->CI->db->group_start();
$this->CI->db->where('department IN (SELECT departmentid FROM ' . db_prefix() . 'staff_departments WHERE departmentid IN (' . implode(',', $departments_ids) . ') AND staffid="' . $this->staffId . '")');
}
}
$this->CI->db->or_where('assigned', $this->staffId);
if (count($departments_ids) > 0) {
$this->CI->db->group_end();
}
}
$this->CI->db->where('userid', $this->customerId);
return $this->CI->db->count_all_results('tickets');
}
public function attachments()
{
$this->CI->db->where('rel_id', $this->customerId);
$this->CI->db->where('rel_type', 'customer');
return $this->CI->db->count_all_results('files');
}
public function vault()
{
$this->CI->db->where('customer_id', $this->customerId);
return $this->CI->db->count_all_results('vault');
}
public function expenses()
{
$this->CI->db->where('clientid', $this->customerId);
$this->CI->db->where('billable', 1);
$this->CI->db->where('invoiceid IS NULL');
return $this->CI->db->count_all_results('expenses');
}
public function reminders()
{
$this->CI->db->where('rel_id', $this->customerId);
$this->CI->db->where('rel_type', 'customer');
$this->CI->db->where('isnotified', 0);
return $this->CI->db->count_all_results('reminders');
}
public function tasks()
{
$where = '(';
$where .= '(rel_id IN (SELECT id FROM ' . db_prefix() . 'invoices WHERE clientid=' . $this->customerId . ') AND rel_type="invoice")';
$where .= ' OR (rel_id IN (SELECT id FROM ' . db_prefix() . 'estimates WHERE clientid=' . $this->customerId . ') AND rel_type="estimate")';
$where .= ' OR (rel_id IN (SELECT id FROM ' . db_prefix() . 'contracts WHERE client=' . $this->customerId . ') AND rel_type="contract")';
$where .= ' OR (rel_id IN (SELECT ticketid FROM ' . db_prefix() . 'tickets WHERE userid=' . $this->customerId . ') AND rel_type="ticket")';
$where .= ' OR (rel_id IN (SELECT id FROM ' . db_prefix() . 'expenses WHERE clientid=' . $this->customerId . ') AND rel_type="expense")';
$where .= ' OR (rel_id IN (SELECT id FROM ' . db_prefix() . 'proposals WHERE rel_id=' . $this->customerId . ' AND rel_type="proposal") AND rel_type="proposal")';
$where .= ' OR (rel_id IN (SELECT userid FROM ' . db_prefix() . 'clients WHERE userid=' . $this->customerId . ') AND rel_type="customer")';
$where .= ' OR (rel_id IN (SELECT id FROM ' . db_prefix() . 'projects WHERE clientid=' . $this->customerId . ') AND rel_type="project")';
$where .= ')';
$this->CI->db->where($where);
$this->CI->db->where('datefinished is NULL');
if (staff_cant('view', 'tasks')) {
$this->CI->db->where(get_tasks_where_string(false));
}
return $this->CI->db->count_all_results('tasks');
}
}