meraproject/themes/merakomis/dictionary/department/model.php

252 lines
7.8 KiB
PHP
Raw Permalink Normal View History

<?
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();
///