meraproject/themes/merakomis/time/cache/model.php
keboss-m 5c21d25d45 Initial commit: Merakomis portal, Docker stack and user-reader API.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-24 11:04:05 +03:00

135 lines
4.0 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 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\structure\merakomisModuleTable;
use themes\merakomis\time\cache\structure\lang as Vars;
class Cache extends merakomisModuleTable {
static $self;
static $cache = [];
static $table_name = 'tMerakomisTimeCache';
static $controller = 'themes.merakomis.time.cache';
static $ID = 'id';
static $EMP = 'emp';
static $PROJECT = 'project';
static $BEGIN = 'begin';
static $END = 'end';
static $KEY = 'key';
static $DATA = 'data';
public static function installUniques()
{
\DB::addUnique(self::$table_name,self::$table_name.'_unique',[self::$KEY]);
}
static function getData($begin,$end,$emp,$project){
$key = self::getKey($begin,$end,$emp,$project);
$row = self::getOneEqualByColumn(self::$KEY,$key);
$res = null;
if($row){
$res = json_decode($row[self::$DATA],true)?:[];
if(!$res){
$res = [
'hours'=> 0,
'over'=>0,
'over1'=>0,
'over2'=>0,
'total'=>0,
];
}
} else {
$res['empty'] = true;
}
return $res;
}
static function getKey($begin,$end,$emp,$project){
$key = $begin.":".$end.":".$emp.":".$project;
return md5($key);
}
static function add($begin,$end,$emp,$project,$data)
{
return self::insert([
self::$KEY => self::getKey($begin,$end,$emp,$project),
self::$BEGIN => $begin,
self::$END => $end,
self::$EMP => $emp,
self::$PROJECT => $project,
self::$DATA => $data ? je($data) : [],
]);
}
static function removeRows($date,$emp = null,$project = null){
$res = self::delete($q = new \Where(\Where::_and([
\Where::_operator(self::$BEGIN,'<=',$date),
\Where::_operator(self::$END,'>=',$date),
$emp ? \Where::_operator(self::$EMP,'=',$emp) : null,
$project ? \Where::_or([
\Where::_operator(self::$PROJECT,'=',$project),
\Where::_operator(self::$PROJECT,'=',0)
]) : null
])));
echo $q;
return $res;
}
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,
]),
new C([
C::VAR_NAME => &self::$PROJECT,
C::TYPE => eColumnType::INT,
]),
new C([
C::VAR_NAME => &self::$BEGIN,
C::TYPE => eColumnType::DATE,
]),
new C([
C::VAR_NAME => &self::$END,
C::TYPE => eColumnType::DATE,
]),
new C([
C::VAR_NAME => &self::$KEY,
C::TYPE => eColumnType::VARCHAR,
C::LENGTH => 63,
]),
new C([
C::VAR_NAME => &self::$DATA,
C::TYPE => eColumnType::TEXT,
]),
];
}
}
new Cache();