Name = 'Task';
$this->Version = '1.0';
$this->Creator = 'Chronos';
$this->License = 'GNU/GPLv3';
$this->Description = 'Work and task management';
$this->Dependencies = array(ModuleUser::GetName());
$this->Models = array(TaskGroup::GetClassName(), Task::GetClassName(), Work::GetClassName());
}
function DoStart(): void
{
$this->System->FormManager->RegisterClass('Task', array(
'Title' => 'Úkoly',
'Table' => 'Task',
'DefaultSortColumn' => 'TimeCreate',
'DefaultSortOrder' => 1,
'Items' => array(
'Name' => array('Type' => 'String', 'Caption' => 'Jméno', 'Default' => '', 'Required' => true),
'TimeCreate' => array('Type' => 'Date', 'Caption' => 'Datum zadání', 'Default' => '', 'Required' => true),
'TimeDue' => array('Type' => 'Date', 'Caption' => 'Termín', 'Default' => '', 'Null' => true),
'TimeClose' => array('Type' => 'Date', 'Caption' => 'Datum uzavření', 'Default' => '', 'Null' => true),
'Priority' => array('Type' => 'TPriority', 'Caption' => 'Důležitost', 'Default' => 1),
'Public' => array('Type' => 'Boolean', 'Caption' => 'Veřejné', 'Default' => '0'),
'Progress' => array('Type' => 'Integer', 'Caption' => 'Průběh', 'Default' => '0', 'Suffix' => '%'),
'Group' => array('Type' => 'TTaskGroup', 'Caption' => 'Kategorie', 'Default' => '', 'Null' => true),
'Description' => array('Type' => 'Text', 'Caption' => 'Popis', 'Default' => '', 'NotInList' => true),
'Conclusion' => array('Type' => 'Text', 'Caption' => 'Vyhodnocení', 'Default' => '', 'NotInList' => true),
'AssignedTo' => array('Type' => 'TUser', 'Caption' => 'Přiřazeno', 'Default' => '', 'Null' => true),
'Work' => array('Type' => 'TWorkListTask', 'Caption' => 'Práce', 'Default' => ''),
),
));
$this->System->FormManager->RegisterClass('TaskGroup', array(
'Title' => 'Kategorie úkolu',
'Table' => 'TaskGroup',
'DefaultSortColumn' => 'Name',
'Items' => array(
'Name' => array('Type' => 'String', 'Caption' => 'Jméno', 'Default' => ''),
'Description' => array('Type' => 'Text', 'Caption' => 'Popis', 'Default' => ''),
'Parent' => array('Type' => 'TTaskGroup', 'Caption' => 'Kategorie', 'Default' => '', 'Null' => true),
'Tasks' => array('Type' => 'TTaskList', 'Caption' => 'Úkoly', 'Default' => ''),
),
));
$this->System->FormManager->RegisterClass('Work', array(
'Title' => 'Práce',
'Table' => 'Work',
'DefaultSortColumn' => 'TimeStart',
'Items' => array(
'Name' => array('Type' => 'String', 'Caption' => 'Název', 'Default' => ''),
'Description' => array('Type' => 'Text', 'Caption' => 'Popis', 'Default' => ''),
'TimeStart' => array('Type' => 'DateTime', 'Caption' => 'Čas začátku', 'Default' => ''),
'Duration' => array('Type' => 'Float', 'Caption' => 'Trvání', 'Default' => '1', 'Suffix' => 'hodin'),
'User' => array('Type' => 'TUser', 'Caption' => 'Uživatel', 'Default' => '1', 'Null' => true),
'Task' => array('Type' => 'TTask', 'Caption' => 'Úkol', 'Default' => '', 'Null' => true),
),
));
$this->System->FormManager->RegisterFormType('TTask', array(
'Type' => 'Reference',
'Table' => 'Task',
'Id' => 'Id',
'Name' => 'Name',
'Filter' => '1',
));
$this->System->FormManager->RegisterFormType('TWorkListTask', array(
'Type' => 'ManyToOne',
'Table' => 'Work',
'Id' => 'Id',
'Ref' => 'Task',
'Filter' => '1',
));
$this->System->FormManager->RegisterFormType('TTaskList', array(
'Type' => 'ManyToOne',
'Table' => 'Task',
'Id' => 'Id',
'Ref' => 'Group',
'Filter' => '1',
));
$this->System->FormManager->RegisterFormType('TTaskGroup', array(
'Type' => 'Reference',
'Table' => 'TaskGroup',
'Id' => 'Id',
'Name' => 'Name',
'Filter' => '1',
));
ModuleIS::Cast($this->System->GetModule('IS'))->RegisterDashboardItem('Task',
array($this, 'ShowDashboardItem'));
}
function ShowDashboardItem(): string
{
$DbResult = $this->Database->select('Task', 'COUNT(*)', '`Progress` < 100');
$DbRow = $DbResult->fetch_row();
$Output = 'Nedokončených úkolů: '.$DbRow['0'].'
';
return $Output;
}
}
class Task extends Model
{
static function GetModelDesc(): ModelDesc
{
$Desc = new ModelDesc(self::GetClassName());
$Desc->AddString('Name');
$Desc->AddDate('TimeCreate');
$Desc->AddDate('TimeDue');
$Desc->AddDate('TimeClose');
$Desc->AddEnum('Priority', array('Nízká', 'Střední', 'Vysoká'));
$Desc->AddBoolean('Public');
$Desc->AddInteger('Progress');
$Desc->AddReference('Group', TaskGroup::GetClassName());
$Desc->AddString('Description');
$Desc->AddText('Conclusion');
$Desc->AddReference('AssignedTo', User::GetClassName());
return $Desc;
}
}
class TaskGroup extends Model
{
static function GetModelDesc(): ModelDesc
{
$Desc = new ModelDesc(self::GetClassName());
$Desc->AddString('Name');
$Desc->AddText('Description');
$Desc->AddReference('Parent', TaskGroup::GetClassName());
return $Desc;
}
}
class Work extends Model
{
static function GetModelDesc(): ModelDesc
{
$Desc = new ModelDesc(self::GetClassName());
$Desc->AddString('Name');
$Desc->AddText('Description');
$Desc->AddDateTime('TimeStart');
$Desc->AddFloat('Duration');
$Desc->AddReference('User', User::GetClassName());
$Desc->AddReference('Task', Task::GetClassName());
return $Desc;
}
}