227 lines
7.9 KiB
PHP
227 lines
7.9 KiB
PHP
|
|
<?
|
||
|
|
namespace themes\merakomis\time;
|
||
|
|
|
||
|
|
use core\db\structure\Column as C;
|
||
|
|
use core\db\structure\eColumnType;
|
||
|
|
use core\lang\structure\LangVariable as V;
|
||
|
|
use ModuleBZ\Form\Input\DatePicker;
|
||
|
|
use ModuleBZ\Form\Input\Hidden;
|
||
|
|
use ModuleBZ\Form\Input\Select;
|
||
|
|
use ModuleBZ\Form\Input\Switcher;
|
||
|
|
use ModuleBZ\Form\Input\Text;
|
||
|
|
use ModuleBZ\Layout\Row;
|
||
|
|
use themes\Merakomis;
|
||
|
|
use themes\merakomis\Emp;
|
||
|
|
use themes\merakomis\structure\merakomisModuleTable;
|
||
|
|
use themes\merakomis\Time;
|
||
|
|
use themes\merakomis\time\absence\structure\lang as Vars;
|
||
|
|
use \themes\merakomis\dictionary\Absence as DAbsence;
|
||
|
|
|
||
|
|
|
||
|
|
class Absence extends merakomisModuleTable {
|
||
|
|
static $self;
|
||
|
|
static $cache = [];
|
||
|
|
static $table_name = 'tMerakomisTimeAbsence';
|
||
|
|
static $controller = 'themes.merakomis.time.absence';
|
||
|
|
|
||
|
|
static $ID = 'id';
|
||
|
|
static $EMP = 'emp';
|
||
|
|
static $ABSENCE = 'absence';
|
||
|
|
static $DATE = 'date';
|
||
|
|
static $PORTAL = 'portal';
|
||
|
|
static $ACCOUNT = 'account';
|
||
|
|
|
||
|
|
|
||
|
|
static function getTitle(){return V::get(Vars::$MODULE_NAME);}
|
||
|
|
static function getSystemLangValues():array{ return Vars::getArray(); }
|
||
|
|
|
||
|
|
public static function installUniques() {
|
||
|
|
\DB::addUnique(self::$table_name,self::$table_name.'_unique',[
|
||
|
|
self::$EMP,self::$DATE,
|
||
|
|
]);
|
||
|
|
|
||
|
|
\DB::addIndexManyColumns(self::$table_name,[self::$EMP,self::$DATE]);
|
||
|
|
}
|
||
|
|
|
||
|
|
static function setDays($emp_id,$absence_id,$begin,$end){
|
||
|
|
if($begin=='0000-00-00') $begin=null;
|
||
|
|
if($end=='0000-00-00') $end=null;
|
||
|
|
$res = ['e'=>0,'m'=>''];
|
||
|
|
$dates = [];
|
||
|
|
$day = 60*60*24;
|
||
|
|
$startTime = strtotime($begin);
|
||
|
|
$endTime = strtotime($end);
|
||
|
|
|
||
|
|
for($i=$startTime;$i<=$endTime;$i+=$day){
|
||
|
|
$dates[] = date('Y-m-d',$i);
|
||
|
|
}
|
||
|
|
if(!$begin){
|
||
|
|
$res['e']=1;
|
||
|
|
$res['m']='Укажите дату начала';
|
||
|
|
} else if(!$end){
|
||
|
|
$res['e']=1;
|
||
|
|
$res['m']='Укажите дату окончания';
|
||
|
|
} else if($endTime<$startTime){
|
||
|
|
$res['e']=1;
|
||
|
|
$res['m']='Дата окончания должна быть больше, чем дата начала';
|
||
|
|
} else if(!$emp_id){
|
||
|
|
$res['e']=1;
|
||
|
|
$res['m']='Укажите сотрудника';
|
||
|
|
}
|
||
|
|
|
||
|
|
if(!$res['e']) {
|
||
|
|
if ($dates) {
|
||
|
|
$r = self::delete(new \Where(\Where::_and([
|
||
|
|
\Where::_operator(self::$EMP, '=', $emp_id),
|
||
|
|
\Where::_in(self::$DATE, $dates),
|
||
|
|
])));
|
||
|
|
|
||
|
|
Time::delete(new \Where(\Where::_and([
|
||
|
|
\Where::_operator(Time::$EMP, '=', $emp_id),
|
||
|
|
\Where::_in(Time::$DATE, $dates),
|
||
|
|
\Where::_operator(Time::$IS_OVER, '=', 0),
|
||
|
|
])));
|
||
|
|
|
||
|
|
}
|
||
|
|
if ($absence_id and $emp_id) {
|
||
|
|
foreach ($dates as $date) {
|
||
|
|
$r = self::insert([
|
||
|
|
self::$EMP => $emp_id,
|
||
|
|
self::$ABSENCE => $absence_id,
|
||
|
|
self::$DATE => $date
|
||
|
|
]);
|
||
|
|
$res[] = Cache::removeRows($date,$emp_id);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
$res['m'] = 'Успешно сохранено';
|
||
|
|
}
|
||
|
|
return $res;
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
public function _insert(array $values, array $options = array()) {
|
||
|
|
$options[\Query::ON_DUPLICATE_KEY_UPDATE] = [
|
||
|
|
self::$ABSENCE => $values[self::$ABSENCE],
|
||
|
|
];
|
||
|
|
return parent::_insert($values, $options); // TODO: Change the autogenerated stub
|
||
|
|
}
|
||
|
|
|
||
|
|
public static function afterUadd($values, $id, $result) {
|
||
|
|
$res = parent::afterUadd($values, $id, $result);
|
||
|
|
if($id and !$values[self::$ABSENCE]){
|
||
|
|
self::deleteByID($id);
|
||
|
|
}
|
||
|
|
if($values[self::$DATE] and $values[self::$EMP] and !$values[self::$ABSENCE]){
|
||
|
|
self::delete(new \Where(\Where::_and([
|
||
|
|
\Where::_operator(self::$EMP,'=',$values[self::$EMP]),
|
||
|
|
\Where::_operator(self::$DATE,'=',$values[self::$DATE]),
|
||
|
|
])));
|
||
|
|
}
|
||
|
|
if($values[self::$DATE]){
|
||
|
|
Time::delete(new \Where(\Where::_and([
|
||
|
|
\Where::_operator(Time::$EMP,'=',$values[self::$EMP]),
|
||
|
|
\Where::_operator(Time::$DATE,'=',$values[self::$DATE]),
|
||
|
|
\Where::_operator(Time::$IS_OVER,'=',0),
|
||
|
|
])));
|
||
|
|
}
|
||
|
|
return $res;
|
||
|
|
}
|
||
|
|
|
||
|
|
static function getFormInputs(\ModuleBZ\Form &$form, array $data, $C, bool $isEdit) {
|
||
|
|
$form
|
||
|
|
->addInput((new Hidden())->setName(self::$ID)->setValue( intval($C[self::$ID]?:$data['id']) ))
|
||
|
|
->addInput((new Hidden())->setName(self::$EMP)->setValue( intval($C[self::$EMP]?:($data['emp']?:Emp::$AUTH_ID)) ))
|
||
|
|
->addInput((new Hidden())->setName(self::$DATE)->setValue( $C[self::$DATE]?:($data['date']?:date('Y-m-d')) ))
|
||
|
|
->addRow((new Row())
|
||
|
|
/*
|
||
|
|
->addColumn(((new DatePicker())
|
||
|
|
->setName(self::$DATE)
|
||
|
|
->setValue($C[self::$DATE])
|
||
|
|
->setClassAll('c-50')
|
||
|
|
->setLabel($c = V::get(Vars::$DATE))
|
||
|
|
->setPlaceholder($c)
|
||
|
|
))
|
||
|
|
*/
|
||
|
|
->addColumn(((new Select())
|
||
|
|
->setName(self::$ABSENCE)
|
||
|
|
->setValue(intval($C[self::$ABSENCE]))
|
||
|
|
->setClassAll('c-100')
|
||
|
|
->setLabel($c = V::get(Vars::$ABSENCE))
|
||
|
|
->setPlaceholder($c)
|
||
|
|
->setLabel($c)
|
||
|
|
->setOptions(DAbsence::getNameList(([
|
||
|
|
'zero'=>true,
|
||
|
|
\Query::WHERE => new \Where(\Where::_or([
|
||
|
|
\Where::_operator(DAbsence::$VIS,'=',1),
|
||
|
|
$isEdit ? \Where::_operator(DAbsence::$ID,'=',intval($C[self::$ABSENCE])) : null,
|
||
|
|
]))
|
||
|
|
])))
|
||
|
|
))
|
||
|
|
)
|
||
|
|
;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
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::DEFAULT => intval(Emp::$AUTH_ID),
|
||
|
|
c::HIDDEN => true,
|
||
|
|
]),
|
||
|
|
new C([
|
||
|
|
C::VAR_NAME => &self::$DATE,
|
||
|
|
C::TYPE => eColumnType::DATE,
|
||
|
|
C::TH => V::get(Vars::$DATE),
|
||
|
|
C::FUNC_VALUE_DATA => function($v){
|
||
|
|
return Merakomis::fdate($v[self::$DATE]);
|
||
|
|
}
|
||
|
|
]),
|
||
|
|
new C([
|
||
|
|
C::VAR_NAME => &self::$ABSENCE,
|
||
|
|
C::TYPE => eColumnType::INT,
|
||
|
|
C::TH => V::get(Vars::$ABSENCE),
|
||
|
|
C::FUNC_VALUE_DATA => function($v){
|
||
|
|
return DAbsence::getName(DAbsence::getByID(intval($v[self::$ABSENCE])));
|
||
|
|
}
|
||
|
|
]),
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
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 Absence();
|
||
|
|
|
||
|
|
|
||
|
|
///
|
||
|
|
|