new \Where(\Where::_and([ \Where::_operator(self::$TEAM,'=',$team_id), \Where::_operator(self::$EMP,'=',Emp::$AUTH_ID), ])), \Query::COUNT=> 1, ]); $l = \DB::fetch($r); return intval($l[self::$SECTION]); } static function getByEmpAndProject($emp_id,$project_id){ $emp_id = intval($emp_id); $project_id = intval($project_id); $project = Project::getByID($project_id); $r = self::select([ \Query::WHERE => new \Where(\Where::_and([ \Where::_operator(self::$EMP,'=',$emp_id), \Where::_operator(self::$TEAM,'=',$project[Project::$TEAM]), ])), \Query::COUNT => 1, ]); return \DB::fetch($r); } public static function beforeUadd(array $values = []): array { $res = []; if(!$values[self::$ROLE]) { $res[self::$ROLE][] = 'Укажите роль в проекте'; } if(!$values[self::$SECTION]) { $res[self::$SECTION][] = 'Укажите подраздел'; } if(!$values[self::$EMP]) { $res[self::$EMP][] = 'Укажите сотрудника'; } return $res; } static function getFormInputs(\ModuleBZ\Form &$form, array $data, $C, bool $isEdit) { $team_id = $C[self::$TEAM] ; if($isEdit) { $project = Team::getProjectByTeamID( $team_id ); $project_id = $project[Project::$ID]; } else { $project_id = intval($data['params']['id']); $project = Project::getByID($project_id); $team_id = $project[Project::$TEAM]; } $sections = []; $section_ids = ProjectSection::get($project[Project::$ID]); $sections = []; if($section_ids) { $a = Section::select([ \Query::WHERE => new \Where(\Where::_in(Section::$ID, $section_ids)) ]); foreach ($a as $v){ $sections[] = [ 'id'=>intval($v[Section::$ID]), 'title'=>Section::getFullName($v), ]; } } $isCanEdit = Rules::isRwMember($team_id,$C[Member::$ID]); //if(Emp::isSuperView() || Emp::$AUTH_ID==$project[Project::$DIRECTOR] || Emp::isMeAnyDepartmentDirector()) { if($isCanEdit) { $form ->addInput((new Hidden())->setName(self::$TEAM)->setValue($team_id)) ->addRow((new Row()) ->addColumn((new Column())->setClassAll('c-40 ')->addRow((new Row()))) ->addColumn( (new Column())->setClassAll('c-20 ')->addRow((new Row()) /* ->addColumn(((new Select()) ->setName('emp') ->setValue(intval($C[self::$EMP])) ->setClassAll('c-50') ->setLabel($c = V::get(Vars::$EMP)) ->setPlaceholder($c) ->setSearch(true) ->setOptions(Emp::getNameList()) )) ->addColumn(((new Select()) ->setName('role') ->setValue(intval($C[self::$ROLE])) ->setClassAll('c-50') ->setLabel($c = V::get(Vars::$ROLE)) ->setPlaceholder($c) ->setSearch(true) ->setOptions($roles) //->setAjax(true) //->setAjaxUrl(true) )) */ ->addColumn(((new Select()) ->setName(self::$EMP) ->setValue(intval($C[self::$EMP])) ->setClassAll('c-100') ->setLabel($c = V::get(Vars::$EMP)) ->setPlaceholder($c) ->setSearch(true) ->setOptions(Emp::getNameList([ \Query::WHERE => new \Where( \Where::_and([ \Where::_or([ \Where::_and([ \Where::_operator(Emp::$ARCHIVE, '=', 0), \Where::_operator(Emp::$REMOVED, '=', 0), ]), $isEdit ? \Where::_operator(Emp::$ID, '=', $C[self::$EMP]) : null, ]), Emp::isMeAnyDepartmentDirector() ? \Where::_in(Emp::$ID,Rules::getSubEmps()?:[0]) : null ]) ) ])) )) ->addColumn(((new Select()) ->setName(self::$ROLE) ->setValue(intval($C[self::$ROLE])) ->setClassAll('c-100') ->setLabel($c = V::get(Vars::$ROLE)) ->setPlaceholder($c) ->setSearch(true) ->setOptions(eMemberRole::getRealNameList(intval($C[self::$ROLE]))) //->setAjax(true) //->setAjaxUrl(true) )) ->addColumn(((new Select()) ->setName(self::$SECTION) ->setValue(intval($C[self::$SECTION])) ->setClassAll('c-50') ->setLabel($c = V::get(Vars::$SECTION)) ->setPlaceholder($c) ->setSearch(true) ->setOptions($sections) )) ->addColumn(((new Switcher()) ->setName(self::$ACTIVE) ->setClassAll('c-50 green_switcher') ->setLabel(' ') ->setPlaceholder(V::get(Vars::$ACTIVE)) ->setChecked(boolval($isEdit ? $C[self::$ACTIVE] : true)) )) ->addColumn(((new Textarea()) ->setName(self::$TEXT) ->setValue($C[self::$TEXT]) ->setClassAll('c-100') ->setLabel($c = V::get(Vars::$TEXT)) ->setPlaceholder($c) )) )->addRow((new Row()) ->addColumn(((new InputSave())->setClassAll('c-100')->setName('save'))) ) )); } else { $form->addRow((new Row)->addColumn((new Column())->addTitle(new Title("Нет доступа")))); } } 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::$EMP, C::TYPE =>eColumnType::INT, C::FILTER_TYPE => eFilterType::TEXT, C::DEFAULT =>0, C::TH =>V::get(Vars::$EMP), C::NO_SORT =>false, C::FUNC_VALUE_DATA =>function($v){ $emp_id = intval($v[self::$EMP]); $a = Emp::getAbsencesToday()[$emp_id]; return [ 'id'=>$emp_id, 'name'=>Emp::getName( Emp::getByID($emp_id)), 'absence'=>$a ? $a[DAbsence::$NAME] : '', "a"=>$a, ]; }, C::FUNC_FILTER_QUERY=>function($v){ return \Where::_operator(Emp::$NAME,'LIKE ','%'.$v.'%'); }, ]), new C([ C::VAR_NAME =>&self::$TEAM, C::TYPE =>eColumnType::INT, C::DEFAULT =>0, C::TH =>V::get(Vars::$TEAM), C::HIDDEN => true, ]), new C([ C::VAR_NAME =>&self::$TEXT, C::TYPE =>eColumnType::TEXT, C::TH =>V::get(Vars::$TEXT), C::HIDDEN => true, ]), new C([ C::VAR_NAME =>&self::$ROLE, C::TYPE =>eColumnType::INT, C::FILTER_TYPE =>eFilterType::SELECT, C::NO_SORT =>false, C::DEFAULT =>0, C::TH =>V::get(Vars::$ROLE), C::FUNC_FILTER_SELECT_OPTIONS =>function(){ return eMemberRole::getRealNameList(); }, C::FUNC_VALUE_DATA => function($v){ return eMemberRole::getName($v[self::$ROLE]); /* return Post::getName( Post::getByID( intval(Role::getByID(intval($v[self::$ROLE]))[Role::$POST]) ) ); */ }, ]), new C([ C::VAR_NAME =>&self::$SECTION, C::TYPE =>eColumnType::INT, C::NO_SORT =>false, C::DEFAULT =>0, C::TH =>V::get(Vars::$SECTION), C::FUNC_VALUE_DATA => function($v){ return Section::getFullName( Section::getByID(intval($v[self::$SECTION])) ); //return eMemberRole::getName($v[self::$SECTION]); }, ]), new C([ C::VAR_NAME =>&self::$_SKYPE, C::TYPE =>eColumnType::NONE, C::FILTER_TYPE => eFilterType::TEXT, C::TH =>V::get(EmpVars::$SKYPE), C::FUNC_VALUE_DATA => function($v){ return $v[Emp::$SKYPE]; }, C::FUNC_FILTER_QUERY=>function($v){ return \Where::_operator(Emp::$SKYPE,'LIKE ','%'.$v.'%'); }, ]), new C([ C::VAR_NAME =>&self::$_DISCORD, C::TYPE =>eColumnType::NONE, C::FILTER_TYPE => eFilterType::TEXT, C::TH =>V::get(EmpVars::$DISCORD), C::FUNC_VALUE_DATA => function($v){ return $v[Emp::$DISCORD]; }, C::FUNC_FILTER_QUERY=>function($v){ return \Where::_operator(Emp::$DISCORD,'LIKE ','%'.$v.'%'); }, ]), new C([ C::VAR_NAME =>&self::$_EMAIL, C::TYPE =>eColumnType::NONE, C::FILTER_TYPE => eFilterType::TEXT, C::TH =>V::get(EmpVars::$EMAIL), C::FUNC_VALUE_DATA => function($v){ return Emp::getEmail($v); }, C::FUNC_FILTER_QUERY=>function($v){ return \Where::_operator(Emp::$EMAIL,'LIKE ','%'.$v.'%'); }, ]), new C([ C::VAR_NAME =>&self::$_PHONE, C::TYPE =>eColumnType::NONE, C::FILTER_TYPE => eFilterType::TEXT, C::TH =>V::get(EmpVars::$PHONE), C::FUNC_VALUE_DATA => function($v){ return $v[Emp::$PHONE]; }, C::FUNC_FILTER_QUERY=>function($v){ return \Where::_operator(Emp::$PHONE,'LIKE ','%'.$v.'%'); } ]), new C([ C::VAR_NAME =>&self::$ACTIVE, C::TYPE =>eColumnType::TINYINT, C::FILTER_TYPE => eFilterType::BOOLEAN, C::DEFAULT =>1, C::COL_DEFAULT =>1, C::TH =>V::get(Vars::$ACTIVE), C::FUNC_VALUE_DATA => function($v){ return Merakomis::boolString($v[self::$ACTIVE]); }, ]), /* new C([ C::VAR_NAME =>&self::$STATUS, C::TYPE =>eColumnType::NONE, C::TH =>V::get(EmpVars::$STATUS), C::FUNC_VALUE_DATA => function($v){ return EmpStatus::getName(EmpStatus::getByID(intval($v[Emp::$STATUS]))); }, ]), */ new C([ C::VAR_NAME => &self::$PORTAL, C::TYPE => eColumnType::INT, C::DEFAULT => intval(\Site::$portal_id), c::HIDDEN => true, ]), ]; } } new Member();