- Added comprehensive AI Assistant system (aiassist/ directory): * Vector search and embedding capabilities * Typebot proxy integration * Elastic search functionality * Message classification and chat history * MCP proxy for external integrations - Implemented Court Status API (GetCourtStatus.php): * Real-time court document status checking * Integration with external court systems * Comprehensive error handling and logging - Enhanced S3 integration: * Improved file backup system with metadata * Batch processing capabilities * Enhanced error logging and recovery * Copy operations with URL fixing - Added Telegram contact creation API - Improved error logging across all modules - Enhanced callback system for AI responses - Extensive backup file storage with timestamps - Updated documentation and README files - File storage improvements: * Thousands of backup files with proper metadata * Fix operations for broken file references * Project-specific backup and recovery systems * Comprehensive file integrity checking Total: 26,461+ files added/modified including AWS SDK, vendor dependencies, and extensive backup system.
955 lines
31 KiB
PHP
955 lines
31 KiB
PHP
<?php
|
|
/* * *******************************************************************************
|
|
* Description: ITS4You Mobile App
|
|
* All Rights Reserved.
|
|
* Contributor: IT-Solutions4You s.r.o - www.its4you.sk
|
|
* ****************************************************************************** */
|
|
|
|
class ApiDashboardRecordModel
|
|
{
|
|
/**
|
|
* @var array
|
|
*/
|
|
protected $activeWidgets = [];
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
protected $history = [];
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
protected $keyMetrics = [];
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
protected $leads = [];
|
|
|
|
/**
|
|
* @var int
|
|
*/
|
|
protected $linkId = 0;
|
|
|
|
/**
|
|
* @var string
|
|
*/
|
|
protected $moduleName = '';
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
protected $modules = [];
|
|
|
|
/**
|
|
* @var string
|
|
*/
|
|
protected $name = '';
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
protected $openTickets = [];
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
protected $overdueActivities = [];
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
protected $potentials = [];
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
protected $quickCreateModules = [];
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
protected $revenuePerSalesPerson = [];
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
protected $ticketsByStatus = [];
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
protected $topOpportunities = [];
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
protected $totalAmountBySalesStage = [];
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
protected $upcomingActivities = [];
|
|
|
|
/**
|
|
* @var int
|
|
*/
|
|
protected $userId = 0;
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
protected $users = [];
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
protected $widgets = [];
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function getActiveWidgets(): array
|
|
{
|
|
return $this->activeWidgets;
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function getHistory(): array
|
|
{
|
|
return $this->history;
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function getKeyMetrics(): array
|
|
{
|
|
return $this->keyMetrics;
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function getLeads(): array
|
|
{
|
|
return $this->leads;
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function getModules(): array
|
|
{
|
|
return $this->modules;
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function getOpenTickets(): array
|
|
{
|
|
return $this->openTickets;
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function getOverdueActivities(): array
|
|
{
|
|
return $this->overdueActivities;
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function getPotentials(): array
|
|
{
|
|
return $this->potentials;
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function getQuickCreateModules(): array
|
|
{
|
|
return $this->quickCreateModules;
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function getRevenuePerSalesPerson(): array
|
|
{
|
|
return $this->revenuePerSalesPerson;
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function getTicketsByStatus(): array
|
|
{
|
|
return $this->ticketsByStatus;
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function getTopOpportunities(): array
|
|
{
|
|
return $this->topOpportunities;
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function getTotalAmountBySalesStage(): array
|
|
{
|
|
return $this->totalAmountBySalesStage;
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function getUpcomingActivities(): array
|
|
{
|
|
return $this->upcomingActivities;
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function getUsers(): array
|
|
{
|
|
return $this->users;
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function getWidgets(): array
|
|
{
|
|
return $this->widgets;
|
|
}
|
|
|
|
/**
|
|
* @param array $activeWidgets
|
|
*/
|
|
public function setActiveWidgets(array $activeWidgets): void
|
|
{
|
|
$this->activeWidgets = $activeWidgets;
|
|
}
|
|
|
|
/**
|
|
* @param array $history
|
|
*/
|
|
public function setHistory(array $history): void
|
|
{
|
|
$this->history = $history;
|
|
}
|
|
|
|
/**
|
|
* @param array $keyMetrics
|
|
*/
|
|
public function setKeyMetrics(array $keyMetrics): void
|
|
{
|
|
$this->keyMetrics = $keyMetrics;
|
|
}
|
|
|
|
/**
|
|
* @param array $leads
|
|
*/
|
|
public function setLeads(array $leads): void
|
|
{
|
|
$this->leads = $leads;
|
|
}
|
|
|
|
/**
|
|
* @param int $linkId
|
|
*/
|
|
public function setLinkId(int $linkId): void
|
|
{
|
|
$this->linkId = $linkId;
|
|
}
|
|
|
|
/**
|
|
* @param string $moduleName
|
|
*/
|
|
public function setModuleName(string $moduleName): void
|
|
{
|
|
$this->moduleName = $moduleName;
|
|
}
|
|
|
|
/**
|
|
* @param array $modules
|
|
*/
|
|
public function setModules(array $modules): void
|
|
{
|
|
$this->modules = $modules;
|
|
}
|
|
|
|
/**
|
|
* @param string $name
|
|
*/
|
|
public function setName(string $name): void
|
|
{
|
|
$this->name = $name;
|
|
}
|
|
|
|
/**
|
|
* @param array $openTickets
|
|
*/
|
|
public function setOpenTickets(array $openTickets): void
|
|
{
|
|
$this->openTickets = $openTickets;
|
|
}
|
|
|
|
/**
|
|
* @param array $overdueActivities
|
|
*/
|
|
public function setOverdueActivities(array $overdueActivities): void
|
|
{
|
|
$this->overdueActivities = $overdueActivities;
|
|
}
|
|
|
|
/**
|
|
* @param array $potentials
|
|
*/
|
|
public function setPotentials(array $potentials): void
|
|
{
|
|
$this->potentials = $potentials;
|
|
}
|
|
|
|
/**
|
|
* @param array $quickCreateModules
|
|
*/
|
|
public function setQuickCreateModules(array $quickCreateModules): void
|
|
{
|
|
$this->quickCreateModules = $quickCreateModules;
|
|
}
|
|
|
|
/**
|
|
* @param array $revenuePerSalesPerson
|
|
*/
|
|
public function setRevenuePerSalesPerson(array $revenuePerSalesPerson): void
|
|
{
|
|
$this->revenuePerSalesPerson = $revenuePerSalesPerson;
|
|
}
|
|
|
|
/**
|
|
* @param array $ticketsByStatus
|
|
*/
|
|
public function setTicketsByStatus(array $ticketsByStatus): void
|
|
{
|
|
$this->ticketsByStatus = $ticketsByStatus;
|
|
}
|
|
|
|
/**
|
|
* @param array $topOpportunities
|
|
*/
|
|
public function setTopOpportunities(array $topOpportunities): void
|
|
{
|
|
$this->topOpportunities = $topOpportunities;
|
|
}
|
|
|
|
/**
|
|
* @param array $totalAmountBySalesStage
|
|
*/
|
|
public function setTotalAmountBySalesStage(array $totalAmountBySalesStage): void
|
|
{
|
|
$this->totalAmountBySalesStage = $totalAmountBySalesStage;
|
|
}
|
|
|
|
/**
|
|
* @param array $upcomingActivities
|
|
*/
|
|
public function setUpcomingActivities(array $upcomingActivities): void
|
|
{
|
|
$this->upcomingActivities = $upcomingActivities;
|
|
}
|
|
|
|
/**
|
|
* @param int $userId
|
|
*/
|
|
public function setUserId(int $userId): void
|
|
{
|
|
$this->userId = $userId;
|
|
}
|
|
|
|
/**
|
|
* @param array $users
|
|
*/
|
|
public function setUsers(array $users): void
|
|
{
|
|
$this->users = $users;
|
|
}
|
|
|
|
/**
|
|
* @param array $widgets
|
|
*/
|
|
public function setWidgets(array $widgets): void
|
|
{
|
|
$this->widgets = $widgets;
|
|
}
|
|
|
|
public function addWidget()
|
|
{
|
|
global $current_user;
|
|
|
|
$widget = new Vtiger_Widget_Model();
|
|
$widget->set('linkid', $this->linkId);
|
|
$widget->set('userid', $current_user->id);
|
|
$widget->set('filterid', NULL);
|
|
|
|
$dashboardModel = Vtiger_DashBoard_Model::getInstance($this->moduleName);
|
|
$defaultTab = $dashboardModel->getUserDefaultTab($current_user->id);
|
|
$widget->set('tabid', $defaultTab['id']);
|
|
|
|
$widget->add();
|
|
}
|
|
|
|
public function loadPotentialsBySalesPerson()
|
|
{
|
|
$moduleName = 'Potentials';
|
|
|
|
$moduleModel = Vtiger_Module_Model::getInstance($moduleName);
|
|
$data = $moduleModel->getPotentialsPipelinedAmountPerSalesPerson();
|
|
|
|
$this->setPotentials($data);
|
|
}
|
|
|
|
public function loadPotentialsBySalesStage()
|
|
{
|
|
$moduleName = 'Potentials';
|
|
|
|
$moduleModel = Vtiger_Module_Model::getInstance($moduleName);
|
|
$data = $moduleModel->getPotentialsCountBySalesStage(0 != $this->userId ? $this->userId : 'all', null);
|
|
|
|
$this->setPotentials($data);
|
|
}
|
|
|
|
public function getPotentialsCountBySalesPerson()
|
|
{
|
|
$moduleName = 'Potentials';
|
|
|
|
$moduleModel = Vtiger_Module_Model::getInstance($moduleName);
|
|
$data = $moduleModel->getPotentialsCountBySalesPerson();
|
|
|
|
$this->setPotentials($data);
|
|
}
|
|
|
|
public function loadHistory()
|
|
{
|
|
$pagingModel = new Vtiger_Paging_Model();
|
|
$pagingModel->set('page', 1);
|
|
$pagingModel->set('limit', 50);
|
|
|
|
$moduleModel = Vtiger_Module_Model::getInstance($this->moduleName);
|
|
$history = $moduleModel->getHistory($pagingModel, '', $this->userId);
|
|
$updates = [];
|
|
|
|
foreach ($history as $key => $recentActivity) {
|
|
$modelName = get_class($recentActivity);
|
|
|
|
if ('ModTracker_Record_Model' === $modelName) {
|
|
if ($recentActivity->isCreate()) {
|
|
$updates[$key]['mode'] = 'create';
|
|
$updates[$key]['module'] = $recentActivity->getParent()->getModule()->getName();
|
|
$updates[$key]['record'] = decode_html($recentActivity->getParent()->getName());
|
|
$updates[$key]['time'] = decode_html(Vtiger_Util_Helper::formatDateDiffInStrings($recentActivity->getParent()->get('createdtime')));
|
|
$updates[$key]['translation'] = decode_html(ucfirst(vtranslate('LBL_ADDED')));
|
|
$updates[$key]['user'] = decode_html($recentActivity->getModifiedBy()->getName());
|
|
} elseif ($recentActivity->isUpdate()) {
|
|
$updates[$key]['mode'] = 'update';
|
|
$updates[$key]['module'] = $recentActivity->getParent()->getModule()->getName();
|
|
$updates[$key]['record'] = decode_html($recentActivity->getParent()->getName());
|
|
$updates[$key]['time'] = decode_html(Vtiger_Util_Helper::formatDateDiffInStrings($recentActivity->getActivityTime()));
|
|
$updates[$key]['translation'] = decode_html(ucfirst(vtranslate('LBL_UPDATED')));
|
|
$updates[$key]['user'] = decode_html($recentActivity->getModifiedBy()->getName());
|
|
|
|
foreach ($recentActivity->getFieldInstances() as $fieldModelKey => $fieldModel) {
|
|
$updates[$key]['fields'][$fieldModelKey]['field'] = vtranslate($fieldModel->getName());
|
|
|
|
if ($fieldModel && $fieldModel->getFieldInstance() && $fieldModel->getFieldInstance()->isViewable() && '5' !== $fieldModel->getFieldInstance()->getDisplayType()) {
|
|
if ('' !== $fieldModel->get('prevalue')
|
|
&& '' !== $fieldModel->get('postvalue')
|
|
&& !('reference' === $fieldModel->getFieldInstance()->getFieldDataType()
|
|
&& ('0' === $fieldModel->get('postvalue')
|
|
|| '0' === $fieldModel->get('prevalue')))) {
|
|
$updates[$key]['fields'][$fieldModelKey]['translation'] = vtranslate('LBL_CHANGED');
|
|
$updates[$key]['fields'][$fieldModelKey]['fromTranslation'] = vtranslate('LBL_FROM');
|
|
$updates[$key]['fields'][$fieldModelKey]['preValue'] = Vtiger_Util_Helper::toVtiger6SafeHTML($fieldModel->getDisplayValue(decode_html($fieldModel->get('prevalue'))));
|
|
} elseif ('' === $fieldModel->get('postvalue') || ('reference' === $fieldModel->getFieldInstance()->getFieldDataType() && '0' === $fieldModel->get('postvalue'))) {
|
|
$updates[$key]['fields'][$fieldModelKey]['translation'] = vtranslate('LBL_IS_REMOVED');
|
|
$updates[$key]['fields'][$fieldModelKey]['preValue'] = Vtiger_Util_Helper::toVtiger6SafeHTML($fieldModel->getDisplayValue(decode_html($fieldModel->get('prevalue'))));
|
|
} elseif ('' !== $fieldModel->get('postvalue') && !('reference' === $fieldModel->getFieldInstance()->getFieldDataType() && '0' === $fieldModel->get('postvalue'))) {
|
|
$updates[$key]['fields'][$fieldModelKey]['translation'] = vtranslate('LBL_UPDATED');
|
|
} else {
|
|
$updates[$key]['fields'][$fieldModelKey]['translation'] = vtranslate('LBL_CHANGED');
|
|
}
|
|
|
|
if ('' !== $fieldModel->get('postvalue') && !('reference' === $fieldModel->getFieldInstance()->getFieldDataType() && '0' === $fieldModel->get('postvalue'))) {
|
|
$updates[$key]['fields'][$fieldModelKey]['toTranslation'] = vtranslate('LBL_TO');
|
|
$updates[$key]['fields'][$fieldModelKey]['postValue'] = Vtiger_Util_Helper::toVtiger6SafeHTML($fieldModel->getDisplayValue(decode_html($fieldModel->get('postvalue'))));
|
|
}
|
|
}
|
|
}
|
|
} elseif ($recentActivity->isRelationLink() || $recentActivity->isRelationUnLink()) {
|
|
$relation = $recentActivity->getRelationInstance();
|
|
|
|
if (!empty($relation->getLinkedRecord()) && !empty($relation->getLinkedRecord()->getModuleName())) {
|
|
$updates[$key]['mode'] = 'relation';
|
|
$updates[$key]['forTranslation'] = decode_html(vtranslate('LBL_FOR'));
|
|
$updates[$key]['module'] = $recentActivity->getParent()->getModule()->getName();
|
|
$updates[$key]['record'] = decode_html($relation->getParent()->getParent()->getName());
|
|
$updates[$key]['relatedRecord'] = decode_html($relation->getLinkedRecord()->getName());
|
|
$updates[$key]['time'] = decode_html(Vtiger_Util_Helper::formatDateDiffInStrings($relation->get('changedon')));
|
|
$updates[$key]['user'] = decode_html($recentActivity->getModifiedBy()->getName());
|
|
|
|
if ($recentActivity->isRelationLink()) {
|
|
$updates[$key]['translation'] = decode_html(ucfirst(vtranslate('LBL_LINKED')));
|
|
} else {
|
|
$updates[$key]['translation'] = decode_html(ucfirst(vtranslate('LBL_UNLINKED')));
|
|
}
|
|
}
|
|
} elseif ($recentActivity->isRestore()) {
|
|
$updates[$key]['mode'] = 'restore';
|
|
$updates[$key]['module'] = $recentActivity->getParent()->getModule()->getName();
|
|
$updates[$key]['record'] = decode_html($recentActivity->getParent()->getName());
|
|
$updates[$key]['time'] = decode_html(Vtiger_Util_Helper::formatDateDiffInStrings($recentActivity->getActivityTime()));
|
|
$updates[$key]['translation'] = decode_html(ucfirst(vtranslate('LBL_RESTORED')));
|
|
$updates[$key]['user'] = decode_html($recentActivity->getModifiedBy()->getName());
|
|
} elseif ($recentActivity->isDelete()) {
|
|
$updates[$key]['mode'] = 'delete';
|
|
$updates[$key]['module'] = $recentActivity->getParent()->getModule()->getName();
|
|
$updates[$key]['record'] = decode_html($recentActivity->getParent()->getName());
|
|
$updates[$key]['time'] = decode_html(Vtiger_Util_Helper::formatDateDiffInStrings($recentActivity->getActivityTime()));
|
|
$updates[$key]['translation'] = decode_html(ucfirst(vtranslate('LBL_DELETED')));
|
|
$updates[$key]['user'] = decode_html($recentActivity->getModifiedBy()->getName());
|
|
}
|
|
} elseif ('ModComments_Record_Model' === $modelName) {
|
|
$updates[$key]['mode'] = 'comment';
|
|
$updates[$key]['comment'] = nl2br($recentActivity->get('commentcontent'));
|
|
$updates[$key]['onTranslation'] = decode_html(ucfirst(vtranslate('LBL_ON')));
|
|
$updates[$key]['record'] = decode_html($recentActivity->getParentRecordModel()->getName());
|
|
$updates[$key]['time'] = decode_html(Vtiger_Util_Helper::formatDateDiffInStrings($recentActivity->getCommentedTime()));
|
|
$updates[$key]['translation'] = decode_html(ucfirst(vtranslate('LBL_COMMENTED')));
|
|
$updates[$key]['user'] = decode_html($recentActivity->getCommentedByName());
|
|
|
|
}
|
|
}
|
|
|
|
$this->setHistory($updates);
|
|
}
|
|
|
|
public function loadKeyMetrics()
|
|
{
|
|
global $current_user, $adb;
|
|
require_once 'modules/CustomView/ListViewTop.php';
|
|
|
|
$metricLists = getMetricList();
|
|
|
|
foreach ($metricLists as $key => $metricList) {
|
|
$queryGenerator = new EnhancedQueryGenerator($metricList['module'], $current_user);
|
|
$queryGenerator->initForCustomViewById($metricList['id']);
|
|
|
|
if ('Calendar' === $metricList['module']) {
|
|
$queryGenerator->addCondition('activitytype', "Emails", 'n', QueryGenerator::$AND);
|
|
}
|
|
|
|
$metricSQL = $queryGenerator->getQuery();
|
|
$result = $adb->query(Vtiger_Functions::mkCountQuery($metricSQL));
|
|
|
|
if ($result) {
|
|
$rowcount = $adb->fetch_array($result);
|
|
$metricLists[$key]['count'] = $rowcount['count'];
|
|
}
|
|
}
|
|
|
|
$this->setKeyMetrics($metricLists);
|
|
}
|
|
|
|
public function loadLeadsByIndustry()
|
|
{
|
|
$moduleName = 'Leads';
|
|
|
|
$moduleModel = Vtiger_Module_Model::getInstance($moduleName);
|
|
$leads = $moduleModel->getLeadsByIndustry($this->userId, null);
|
|
|
|
$this->setLeads($leads);
|
|
}
|
|
|
|
public function loadLeadsBySource()
|
|
{
|
|
$moduleName = 'Leads';
|
|
|
|
$moduleModel = Vtiger_Module_Model::getInstance($moduleName);
|
|
$leads = $moduleModel->getLeadsBySource($this->userId, null);
|
|
|
|
$this->setLeads($leads);
|
|
}
|
|
|
|
public function loadLeadsByStatus()
|
|
{
|
|
$moduleName = 'Leads';
|
|
|
|
$moduleModel = Vtiger_Module_Model::getInstance($moduleName);
|
|
$leads = $moduleModel->getLeadsByStatus($this->userId, null);
|
|
|
|
$this->setLeads($leads);
|
|
}
|
|
|
|
public function loadModules()
|
|
{
|
|
$modules = [];
|
|
$quickCreateModules = [];
|
|
|
|
foreach (Vtiger_Module_Model::getEntityModules() as $module) {
|
|
$moduleId = $module->getId();
|
|
$moduleName = $module->getName();
|
|
|
|
$modules[$moduleId]['name'] = $moduleName;
|
|
$modules[$moduleId]['label'] = vtranslate($module->get('label'), $moduleName);
|
|
|
|
}
|
|
|
|
foreach (Vtiger_Module_Model::getAll(array(0, 2)) as $module) {
|
|
if ($module->isQuickCreateSupported()) {
|
|
$quickCreateModules[] = $module->getName();
|
|
}
|
|
}
|
|
|
|
$this->setModules($modules);
|
|
$this->setQuickCreateModules($quickCreateModules);
|
|
}
|
|
|
|
public function loadOpenTickets()
|
|
{
|
|
$moduleName = 'HelpDesk';
|
|
|
|
$moduleModel = Vtiger_Module_Model::getInstance($moduleName);
|
|
$openTickets = $moduleModel->getOpenTickets();
|
|
|
|
$this->setOpenTickets($openTickets);
|
|
}
|
|
|
|
public function loadOverdueActivities()
|
|
{
|
|
$moduleName = 'Calendar';
|
|
$listViewModel = Vtiger_ListView_Model::getInstanceForPopup($moduleName);
|
|
|
|
$pagingModel = new Vtiger_Paging_Model();
|
|
$pagingModel->set('page', 1);
|
|
|
|
$queryGenerator = $listViewModel->get('query_generator');
|
|
|
|
$queryGenerator->addCondition('due_date', date('Y-m-d'), 'm');
|
|
$queryGenerator->addConditionGlue(QueryGenerator::$AND);
|
|
$queryGenerator->addCondition('taskstatus', 'Completed', 'n');
|
|
$queryGenerator->addConditionGlue(QueryGenerator::$AND);
|
|
$queryGenerator->addCondition('eventstatus', 'Held', 'n');
|
|
|
|
$headers = $listViewModel->getListViewHeaders();
|
|
$overdueActivities = [];
|
|
|
|
$moduleModel = Vtiger_Module_Model::getInstance($moduleName);
|
|
$fieldModels = $moduleModel->getFields();
|
|
$entries = $listViewModel->getListViewEntries($pagingModel);
|
|
|
|
foreach ($entries as $entry) {
|
|
if (date('Y-m-d') === date('Y-m-d', strtotime($entry->get('due_date'))) && date('H:i:s') < $entry->get('time_end')) {
|
|
continue;
|
|
}
|
|
|
|
$recordId = $entry->getId();
|
|
$line = array();
|
|
$info = array();
|
|
|
|
foreach ($headers as $header) {
|
|
$fieldDataType = $header->getFieldDataType();
|
|
$fieldName = $header->get('name');
|
|
|
|
$value = $entry->get($fieldName);
|
|
|
|
if (in_array($fieldDataType, ['email', 'url', 'reference'])) {
|
|
$value = trim(strip_tags($value));
|
|
}
|
|
|
|
if ('datetime' === $fieldDataType) {
|
|
$value = date('Y-m-d', strtotime($value));
|
|
}
|
|
|
|
$fieldLine = array(
|
|
'fieldName' => $fieldName,
|
|
'label' => vtranslate($header->get('label'), $moduleName),
|
|
'dataType' => $fieldDataType,
|
|
'value' => html_entity_decode($value),
|
|
'fieldValue' => $entry->get($fieldName),
|
|
);
|
|
|
|
if ($header->isNameField()) {
|
|
$line[] = $fieldLine;
|
|
} else {
|
|
$info[] = $fieldLine;
|
|
}
|
|
}
|
|
|
|
$headerFields = [];
|
|
|
|
foreach ($fieldModels as $fieldModel) {
|
|
if ($fieldModel->get('headerfield')) {
|
|
$value = $entry->get($fieldModel->get('name'));
|
|
|
|
if (in_array($fieldModel->get('uitype'), [10, 13, 17])) {
|
|
$value = trim(strip_tags(html_entity_decode($fieldModel->getDisplayValue($value))));
|
|
}
|
|
|
|
$headerFields[] = [
|
|
'value' => strip_tags($value),
|
|
'name' => $fieldModel->get('name'),
|
|
'label' => vtranslate($fieldModel->get('label'), $moduleName)
|
|
];
|
|
}
|
|
}
|
|
|
|
$isPermitted = false;
|
|
$recordModel = Vtiger_Record_Model::getInstanceById($recordId);
|
|
$recordData = $recordModel->getData();
|
|
|
|
if (!$this->userId || $recordData['assigned_user_id'] == $this->userId) {
|
|
$isPermitted = true;
|
|
}
|
|
|
|
if ($isPermitted) {
|
|
$overdueActivities[] = [
|
|
'id' => $recordId,
|
|
'fields' => $line,
|
|
'info' => $info,
|
|
'headerFields' => $headerFields,
|
|
];
|
|
}
|
|
}
|
|
|
|
$this->setOverdueActivities($overdueActivities);
|
|
}
|
|
|
|
public function loadRevenuePerSalesPerson()
|
|
{
|
|
$moduleName = 'Potentials';
|
|
|
|
$moduleModel = Vtiger_Module_Model::getInstance($moduleName);
|
|
$data = $moduleModel->getTotalRevenuePerSalesPerson(null);
|
|
|
|
$this->setRevenuePerSalesPerson($data);
|
|
}
|
|
|
|
public function loadTicketsByStatus()
|
|
{
|
|
$moduleName = 'HelpDesk';
|
|
|
|
$moduleModel = Vtiger_Module_Model::getInstance($moduleName);
|
|
$tickets = $moduleModel->getTicketsByStatus($this->userId, null);
|
|
|
|
$this->setTicketsByStatus($tickets);
|
|
}
|
|
|
|
public function loadTopOpportunities()
|
|
{
|
|
$moduleName = 'Potentials';
|
|
$currentUser = Users_Record_Model::getInstanceById($this->userId, 'Users');
|
|
|
|
$pagingModel = new Vtiger_Paging_Model();
|
|
$pagingModel->set('page', 1);
|
|
|
|
$userCurrencyInfo = getCurrencySymbolandCRate($currentUser->get('currency_id'));
|
|
$moduleModel = Vtiger_Module_Model::getInstance($moduleName);
|
|
$models = $moduleModel->getTopPotentials($pagingModel);
|
|
$opportunities = [];
|
|
|
|
foreach ($models as $key => $model) {
|
|
$opportunities[$key]['name'] = decode_html($model->getName());
|
|
$opportunities[$key]['amount'] = decode_html(CurrencyField::appendCurrencySymbol($model->getDisplayValue('amount'), $userCurrencyInfo['symbol']));
|
|
$opportunities[$key]['relatedTo'] = $model->get('related_to') ? decode_html(Vtiger_Util_Helper::getRecordName($model->get('related_to'))) : '';
|
|
}
|
|
|
|
$this->setTopOpportunities($opportunities);
|
|
}
|
|
|
|
public function loadTotalAmountBySalesStage()
|
|
{
|
|
$moduleName = 'Potentials';
|
|
|
|
$moduleModel = Vtiger_Module_Model::getInstance($moduleName);
|
|
$data = $moduleModel->getPotentialTotalAmountBySalesStage();
|
|
|
|
$this->setTotalAmountBySalesStage($data);
|
|
}
|
|
|
|
public function loadUpcomingActivities()
|
|
{
|
|
$moduleName = 'Calendar';
|
|
$listViewModel = Vtiger_ListView_Model::getInstanceForPopup($moduleName);
|
|
|
|
$pagingModel = new Vtiger_Paging_Model();
|
|
$pagingModel->set('page', 1);
|
|
|
|
$queryGenerator = $listViewModel->get('query_generator');
|
|
|
|
$queryGenerator->addCondition('date_start', date('Y-m-d'), 'h');
|
|
$queryGenerator->addConditionGlue(QueryGenerator::$AND);
|
|
$queryGenerator->addCondition('date_start', date('Y-m-d', strtotime('+1 Month')), 'm');
|
|
$queryGenerator->addConditionGlue(QueryGenerator::$AND);
|
|
$queryGenerator->addCondition('taskstatus', 'Completed', 'n');
|
|
$queryGenerator->addConditionGlue(QueryGenerator::$AND);
|
|
$queryGenerator->addCondition('eventstatus', 'Held', 'n');
|
|
|
|
$listViewModel->set('orderby', 'date_start');
|
|
$listViewModel->set('sortorder', 'ASC');
|
|
|
|
$headers = $listViewModel->getListViewHeaders();
|
|
$upcomingActivities = [];
|
|
|
|
$moduleModel = Vtiger_Module_Model::getInstance($moduleName);
|
|
$fieldModels = $moduleModel->getFields();
|
|
$entries = $listViewModel->getListViewEntries($pagingModel);
|
|
|
|
foreach ($entries as $entry) {
|
|
if (date('Y-m-d') === date('Y-m-d', strtotime($entry->get('date_start'))) && date('H:i:s') > $entry->get('time_end')) {
|
|
continue;
|
|
}
|
|
|
|
$recordId = $entry->getId();
|
|
$line = array();
|
|
$info = array();
|
|
|
|
foreach ($headers as $header) {
|
|
$fieldDataType = $header->getFieldDataType();
|
|
$fieldName = $header->get('name');
|
|
|
|
$value = $entry->get($fieldName);
|
|
|
|
if (in_array($fieldDataType, ['email', 'url', 'reference'])) {
|
|
$value = trim(strip_tags($value));
|
|
}
|
|
|
|
if ('datetime' === $fieldDataType) {
|
|
$value = date('Y-m-d', strtotime($value));
|
|
}
|
|
|
|
$fieldLine = array(
|
|
'fieldName' => $fieldName,
|
|
'label' => vtranslate($header->get('label'), $moduleName),
|
|
'dataType' => $fieldDataType,
|
|
'value' => html_entity_decode($value),
|
|
'fieldValue' => $entry->get($fieldName),
|
|
);
|
|
|
|
if ($header->isNameField()) {
|
|
$line[] = $fieldLine;
|
|
} else {
|
|
$info[] = $fieldLine;
|
|
}
|
|
}
|
|
|
|
$headerFields = [];
|
|
|
|
foreach ($fieldModels as $fieldModel) {
|
|
if ($fieldModel->get('headerfield')) {
|
|
$value = $entry->get($fieldModel->get('name'));
|
|
|
|
if (in_array($fieldModel->get('uitype'), [10, 13, 17])) {
|
|
$value = trim(strip_tags(html_entity_decode($fieldModel->getDisplayValue($value))));
|
|
}
|
|
|
|
$headerFields[] = [
|
|
'value' => strip_tags($value),
|
|
'name' => $fieldModel->get('name'),
|
|
'label' => vtranslate($fieldModel->get('label'), $moduleName)
|
|
];
|
|
}
|
|
}
|
|
|
|
|
|
$isPermitted = false;
|
|
$recordModel = Vtiger_Record_Model::getInstanceById($recordId);
|
|
$recordData = $recordModel->getData();
|
|
|
|
if (!$this->userId || $recordData['assigned_user_id'] == $this->userId) {
|
|
$isPermitted = true;
|
|
}
|
|
|
|
if ($isPermitted) {
|
|
$upcomingActivities[] = [
|
|
'id' => $recordId,
|
|
'fields' => $line,
|
|
'info' => $info,
|
|
'headerFields' => $headerFields,
|
|
];
|
|
}
|
|
}
|
|
|
|
$this->setUpcomingActivities($upcomingActivities);
|
|
}
|
|
|
|
public function loadUsers()
|
|
{
|
|
$moduleName = 'Calendar';
|
|
$users = [];
|
|
$currentUser = Users_Record_Model::getCurrentUserModel();
|
|
|
|
if ($currentUser) {
|
|
$accessibleUsers = array_keys($currentUser->getAccessibleUsersForModule($moduleName));
|
|
|
|
$users[] = ['label' => vtranslate('LBL_ALL_USERS', $moduleName), 'value' => 'LBL_SELECT_OPTION'];
|
|
|
|
foreach (getAllUserName() as $id => $userName) {
|
|
if (in_array($id, $accessibleUsers)) {
|
|
$users[] = ['label' => vtranslate($userName, $moduleName), 'value' => "$id"];
|
|
}
|
|
}
|
|
}
|
|
|
|
$this->setUsers($users);
|
|
}
|
|
|
|
public function loadWidgets()
|
|
{
|
|
$dashBoardModel = Vtiger_DashBoard_Model::getInstance($this->moduleName);
|
|
$dashboardTabs = $dashBoardModel->getActiveTabs();
|
|
$dashBoardModel->set('tabid', $dashboardTabs[0]['id']);
|
|
$activeWidgets = [];
|
|
$widgets = [];
|
|
|
|
foreach ($dashBoardModel->getSelectableDashboard() as $widget) {
|
|
if (!in_array($widget->getName(), ['MiniList', 'Notebook'])) {
|
|
$widgets[] = [
|
|
'name' => $widget->getName(),
|
|
'label' => $widget->get('linklabel'),
|
|
'linkId' => $widget->get('linkid'),
|
|
];
|
|
}
|
|
}
|
|
|
|
foreach ($dashBoardModel->getDashboards($this->moduleName) as $widget) {
|
|
$activeWidgets[] = [
|
|
'label' => $widget->get('linklabel'),
|
|
'linkId' => $widget->get('linkid'),
|
|
];
|
|
}
|
|
|
|
$this->setWidgets($widgets);
|
|
$this->setActiveWidgets($activeWidgets);
|
|
}
|
|
|
|
public function removeWidget()
|
|
{
|
|
global $current_user;
|
|
|
|
$widget = Vtiger_Widget_Model::getInstance($this->linkId, $current_user->id);
|
|
$widget->remove();
|
|
}
|
|
}
|