252 lines
7.8 KiB
PHP
252 lines
7.8 KiB
PHP
<?
|
|
namespace themes\merakomis\dictionary;
|
|
|
|
use core\db\structure\Column as C;
|
|
use core\db\structure\eColumnType;
|
|
use core\lang\structure\LangVariable as V;
|
|
use ModuleBZ\Form\Input\Hidden;
|
|
use ModuleBZ\Layout\Column;
|
|
use ms\ms\structure\msModuleTable;
|
|
use common\Image;
|
|
use ModuleBZ\Form\Input\ImagePicker;
|
|
use ModuleBZ\Form\Input\Switcher;
|
|
use ModuleBZ\Form\Input\Text;
|
|
use ModuleBZ\Form\Input\Textarea;
|
|
use ModuleBZ\Layout\Row;
|
|
use themes\merakomis\dictionary\department\structure\lang as Vars;
|
|
use themes\merakomis\Emp;
|
|
use themes\merakomis\input\Save as InputSave;
|
|
use themes\merakomis\Post;
|
|
use themes\merakomis\structure\merakomisModuleTable;
|
|
|
|
|
|
class Department extends merakomisModuleTable {
|
|
static $self;
|
|
static $cache = [];
|
|
static $table_name = 'tMerakomisDDepartment';
|
|
static $controller = 'themes.merakomis.dictionary.department';
|
|
|
|
static $ID = 'id';
|
|
static $NAME = 'name';
|
|
static $SHORT = 'short';
|
|
static $IS_COMPANY_REPORT = 'is_company_report';
|
|
static $PARENT = 'parent';
|
|
static $PORTAL = 'portal';
|
|
static $ACCOUNT = 'account';
|
|
|
|
///--
|
|
static $CACHE;
|
|
|
|
|
|
static function getTitle(){return V::get(Vars::$MODULE_NAME);}
|
|
static function getSystemLangValues():array{ return Vars::getArray(); }
|
|
|
|
|
|
public function _deleteById(int $id) {
|
|
$res = parent::_deleteById($id); // TODO: Change the autogenerated stub
|
|
$r = self::select([
|
|
\Query::WHERE => new \Where(\Where::_operator(self::$PARENT,'=',$id)),
|
|
]);
|
|
while($l = \DB::fetch($r)){
|
|
self::deleteByID($l[self::$ID]);
|
|
}
|
|
$r = Post::select([
|
|
\Query::WHERE => new \Where(\Where::_operator(Post::$DEPARTMENT,'=',$id))
|
|
]);
|
|
while($l = \DB::fetch($r)){
|
|
Post::deleteByID($l[Post::$ID]);
|
|
}
|
|
|
|
return $res;
|
|
}
|
|
|
|
static function format($v){
|
|
$id = intval($v[self::$ID]);
|
|
$r = Post::select([
|
|
\Query::WHERE => new \Where(\Where::_and([
|
|
\Where::_operator( Post::$DEPARTMENT,'=',$id ),
|
|
]))
|
|
]);
|
|
|
|
$directors = [];
|
|
$employees = [];
|
|
$emp_ids = [];
|
|
$emp_active = [];
|
|
while($l = \DB::fetch($r)){
|
|
$post_id = intval($l[Post::$ID]);
|
|
/*
|
|
while($role_l = \DB::fetch($roles_r)){
|
|
$roles[] = [
|
|
'id'=>intval($role_l[Role::$ID]),
|
|
'post_id'=>intval($post_id),
|
|
'emp'=>Emp::format($role_l,false),
|
|
];
|
|
}
|
|
*/
|
|
$roles = [];
|
|
if($l[Post::$EMP]) {
|
|
$emp_ids[] = $l[Post::$EMP];
|
|
if(!$l[Emp::$ARCHIVE]){
|
|
$emp_active[] = $l[Post::$EMP];
|
|
}
|
|
}
|
|
$post = [
|
|
'id'=>$post_id,
|
|
'title'=>Post::getName($l),
|
|
'is_director'=>boolval($l[Post::$IS_DIRECTOR]),
|
|
'emp'=>Emp::format($l,false),
|
|
//'roles'=>$roles,
|
|
];
|
|
if($l[Post::$IS_DIRECTOR]){ $directors[] = $post; }
|
|
else $employees[] = $post;
|
|
}
|
|
|
|
|
|
return [
|
|
'id'=>$id,
|
|
'title'=>self::getName($v),
|
|
'parent'=>$v[self::$PARENT],
|
|
'directors'=>$directors,
|
|
'employees'=>$employees,
|
|
'emp_ids'=>$emp_ids,
|
|
'emp_active'=>$emp_active,
|
|
];
|
|
}
|
|
|
|
|
|
static function getPath($id) {
|
|
|
|
if(self::$CACHE['getPath'][$id]) return self::$CACHE['getPath'][$id];
|
|
$s = self::getStructure();
|
|
$i = 1;
|
|
do{
|
|
$path[] = $id;
|
|
$id = $s['base'][$id][self::$PARENT];
|
|
$i++;
|
|
if($i>10) break;
|
|
} while($s['base'][$id]);
|
|
$path = array_reverse($path);
|
|
return self::$CACHE['getPath'][$id] = $path;
|
|
|
|
}
|
|
|
|
static function getStructure(){
|
|
$key = 'getStructure';
|
|
if(self::$CACHE[$key]) return self::$CACHE[$key];
|
|
$res = [];
|
|
$a = self::getAll();
|
|
foreach ($a as $k=>$v){
|
|
$id = intval($v[self::$ID]);
|
|
$parent = intval($v[self::$PARENT]);
|
|
$res['base'][$id] = $v+self::format($v);
|
|
$res[$parent][] = $id;
|
|
}
|
|
|
|
|
|
return self::$CACHE[$key] = $res;
|
|
}
|
|
|
|
|
|
static function getFormInputs(\ModuleBZ\Form &$form, array $data, $C, bool $isEdit) {
|
|
|
|
$row = (new Row());
|
|
$row->addColumn(((new Text())
|
|
->setName(self::$NAME)
|
|
->setValue($C[self::$NAME])
|
|
->setClassAll('c-100')
|
|
->setLabel($c = V::get(Vars::$NAME))
|
|
->setPlaceholder($c)
|
|
));
|
|
|
|
|
|
if(Emp::isAdmin()){
|
|
$row->addColumn(((new Text())
|
|
->setName(self::$SHORT)
|
|
->setValue($C[self::$SHORT])
|
|
->setClassAll('c-100')
|
|
->setLabel($c = V::get(Vars::$SHORT))
|
|
)
|
|
)->addColumn(((new Switcher())
|
|
->setName(self::$IS_COMPANY_REPORT)
|
|
->setValue($C[self::$IS_COMPANY_REPORT])
|
|
->setClassAll('c-100')
|
|
->setPlaceholder($c = V::get(Vars::$IS_COMPANY_REPORT))
|
|
->setChecked(boolval($C[self::$IS_COMPANY_REPORT]))
|
|
)
|
|
)
|
|
|
|
;
|
|
}
|
|
$row->addColumn(((new InputSave())->setClassAll('c-100')->setName('save')));
|
|
|
|
$form
|
|
->addInput((new Hidden())->setName(self::$PARENT)->setValue(intval($C[self::$PARENT]?:$data['parent'])))
|
|
->addRow((new Row())
|
|
->addColumn((new Column())->setClassAll('c-40 ')->addRow((new Row())))
|
|
->addColumn(
|
|
(new Column())->setClassAll('c-20 ')
|
|
|
|
->addRow($row)
|
|
));
|
|
|
|
}
|
|
|
|
static function columnInfo() : array {
|
|
return [
|
|
new C([
|
|
C::VAR_NAME =>&self::$ID,
|
|
C::TYPE =>eColumnType::INT,
|
|
C::AUTO_INCREMENT =>true,
|
|
C::PRIMARY =>true,
|
|
C::DEFAULT =>0,
|
|
C::HIDDEN =>true,
|
|
C::TH =>V::get(Vars::$ID),
|
|
]),
|
|
new C([
|
|
C::VAR_NAME => &self::$NAME,
|
|
C::TYPE => eColumnType::VARCHAR,
|
|
C::LENGTH => 1023,
|
|
C::TH => V::get(Vars::$NAME),
|
|
]),
|
|
new C([
|
|
C::VAR_NAME => &self::$SHORT,
|
|
C::TYPE => eColumnType::TEXT,
|
|
C::TH => V::get(Vars::$SHORT),
|
|
]),
|
|
new C([
|
|
C::VAR_NAME => &self::$IS_COMPANY_REPORT,
|
|
C::TYPE => eColumnType::TINYINT,
|
|
C::LENGTH => 1,
|
|
C::DEFAULT => 0,
|
|
C::TH => V::get(Vars::$IS_COMPANY_REPORT),
|
|
]),
|
|
new C([
|
|
C::VAR_NAME => &self::$PARENT,
|
|
C::TYPE => eColumnType::INT,
|
|
C::TH => V::get(Vars::$PARENT),
|
|
]),
|
|
new C([
|
|
C::VAR_NAME => &self::$PORTAL,
|
|
C::TYPE => eColumnType::INT,
|
|
C::DEFAULT => intval(\Site::$portal_id),
|
|
c::HIDDEN => true,
|
|
]),
|
|
new C([
|
|
C::VAR_NAME => &self::$ACCOUNT,
|
|
C::TYPE => eColumnType::INT,
|
|
C::DEFAULT => intval(\Site::$owner_id),
|
|
//C::TH => V::get(Vars::$ACCOUNT),
|
|
c::HIDDEN => true,
|
|
]),
|
|
];
|
|
}
|
|
|
|
}
|
|
new Department();
|
|
|
|
|
|
///
|
|
|
|
|
|
|