304 lines
12 KiB
PHP
304 lines
12 KiB
PHP
<?
|
|
|
|
namespace controller\themes\merakomis\time;
|
|
|
|
use ms\ms\structure\msControllerTable;
|
|
use themes\Merakomis;
|
|
use themes\merakomis\Day;
|
|
use themes\merakomis\Emp;
|
|
use themes\merakomis\structure\merakomisControllerTable;
|
|
use themes\merakomis\Time;
|
|
use themes\merakomis\time\Absence;
|
|
use themes\merakomis\time\Cache;
|
|
|
|
class Api extends merakomisControllerTable {
|
|
|
|
static $class = 'themes\merakomis\Time';
|
|
|
|
|
|
static function test()
|
|
{
|
|
|
|
$begin = '2025-05-19';
|
|
$end = '2025-06-30';
|
|
$emp_id = 10;
|
|
$pid = 86;
|
|
$res = Time::getEmpsTimeWithFot($begin,$end,$emp_id,$pid);
|
|
|
|
/*
|
|
echo '<pre>';
|
|
echo var_dump(Time::getPeriodWithDays('2020-12-31','2021-01-17'));
|
|
echo var_dump(Time::getPeriodWithDays('2021-01-05','2021-01-17'));
|
|
echo var_dump(Time::getPeriodWithDays('2021-01-05','2022-05-17'));
|
|
echo '</pre>';
|
|
*/
|
|
}
|
|
public static function getSummary() {
|
|
$res = [];
|
|
if(Emp::$IS_AUTH) {
|
|
$res = Time::getMySummary($_POST['emp']);
|
|
}
|
|
echo je($res);
|
|
}
|
|
public static function addFromCalendar() {
|
|
$res =[];
|
|
if(Emp::$IS_AUTH){
|
|
$emp_id = intval($_POST['emp']) ?: Emp::$AUTH_ID;
|
|
|
|
$time = cfloatval($_POST['time']);
|
|
$date = $_POST['date'];
|
|
$project_id = intval($_POST['project']);
|
|
$x = ($time-intval($time))*100;
|
|
if($x<=25) $x = 0;
|
|
else if ($x>=75) $x=100;
|
|
else $x=50;
|
|
|
|
$time = intval($time)+$x/100;
|
|
|
|
if($time<0) $time = 0;
|
|
if($time>24) $time = 24;
|
|
|
|
// Считаем сколько чел за этот день вообще от работал, и сколько рабочих часов в этом дне
|
|
|
|
$total_work = 0;
|
|
$total_over = 0;
|
|
$r = Time::select([
|
|
\Query::SELECT => [
|
|
'SUM('.Time::$DURATION.') as cc',
|
|
Time::$IS_OVER,
|
|
],
|
|
\Query::WHERE => \Where::_and([
|
|
\Where::_operator(Time::$EMP,'=',$emp_id),
|
|
\Where::_operator(Time::$DATE,'=',$_POST['date']),
|
|
]),
|
|
\Query::GROUP_BY => [Time::$IS_OVER],
|
|
]);
|
|
while ($l = \DB::fetch($r)){
|
|
if(!$l[Time::$IS_OVER]) $total_work += floatval($l['cc']);
|
|
if($l[Time::$IS_OVER]) $total_over += floatval($l['cc']);
|
|
}
|
|
|
|
$maxWorkHours = Day::getWorkHoursByDate($date);
|
|
$maxOverHours = 24 - $maxWorkHours;
|
|
|
|
//$info = Time::getEmpTime([\Where::_operator(Time::$DATE,'=',$date)],$emp_id,$project_id);
|
|
$info = Time::getEmpTime($date,null,$emp_id,$project_id);
|
|
$res['info'] = $info;
|
|
|
|
|
|
$total_work -= $info['hours'];
|
|
$total_over -= $info['over'];
|
|
|
|
$newWorkHours = $total_work+$time;
|
|
$newOverHours = $total_over + $time;
|
|
|
|
$leftWorkHours = $maxWorkHours - $total_work;
|
|
$leftOverHours = $maxOverHours - $total_over;
|
|
|
|
|
|
$isOver = intval($_POST['over']);
|
|
if($isOver){
|
|
if($newOverHours > $maxOverHours){
|
|
$time = $leftOverHours;
|
|
}
|
|
} else {
|
|
if($newWorkHours > $maxWorkHours){
|
|
$time = $leftWorkHours;
|
|
}
|
|
}
|
|
|
|
|
|
$d = [
|
|
Time::$PROJECT => intval($_POST['project']),
|
|
Time::$EMP => $emp_id,
|
|
Time::$DATE => $_POST['date'],
|
|
Time::$IS_OVER => intval($_POST['over']),
|
|
Time::$DURATION => $time,
|
|
];
|
|
$res['r'] = Time::insert($d);
|
|
|
|
//$res = $d;
|
|
$res['$newWorkHours'] = $newWorkHours;
|
|
$res['$leftWorkHours'] = $leftWorkHours;
|
|
$res['$maxWorkHours'] = $maxWorkHours;
|
|
$res['$newOverHours'] = $newOverHours;
|
|
$res['$leftOverHours'] = $leftOverHours;
|
|
$res['$maxOverHours'] = $maxOverHours;
|
|
}
|
|
echo je($res);
|
|
}
|
|
public static function setAbsence() {
|
|
$res =[];
|
|
if(Emp::$IS_AUTH){
|
|
$project = intval($_POST['project']);
|
|
$emp_id = intval($_POST['emp']) ?: Emp::$AUTH_ID;
|
|
$type = intval($_POST['type']);
|
|
foreach ($_POST['dates'] as $date){
|
|
Absence::uadd([
|
|
Absence::$DATE => $date,
|
|
Absence::$EMP => $emp_id,
|
|
Absence::$ABSENCE => $type,
|
|
]);
|
|
$res[] = Cache::removeRows($date,$emp_id);
|
|
}
|
|
}
|
|
echo je($res);
|
|
}
|
|
public static function getTimeTable($post) {
|
|
$res = [];
|
|
//Emp::$AUTH_ID = 1;
|
|
//Emp::$IS_AUTH = true;
|
|
//$_POST['type']=2;
|
|
if(Emp::$IS_AUTH){
|
|
$res = Time::getTimeTable(
|
|
intval($_POST['project']),
|
|
intval($_POST['emp'])?:Emp::$AUTH_ID,
|
|
);
|
|
}
|
|
echo je($res);
|
|
}
|
|
public static function getStat($post) {
|
|
|
|
ini_set('memory_limit', '512M');
|
|
set_time_limit(0);
|
|
$res = [];
|
|
//Emp::$AUTH_ID = 3;
|
|
//Emp::$IS_AUTH = true;
|
|
//$_POST['type']=12;
|
|
//$_POST['range'][0]='2025-05-19';
|
|
//$_POST['range'][1]='2025-06-30';
|
|
|
|
|
|
|
|
if(Emp::$IS_AUTH){
|
|
$res = Time::getStat($_POST);
|
|
}
|
|
$res['text'] = [
|
|
Merakomis::$_ANALYSIS_MY_1 => Merakomis::$ANALYSIS_MY_1,
|
|
Merakomis::$_ANALYSIS_MY_2 => Merakomis::$ANALYSIS_MY_2,
|
|
Merakomis::$_ANALYSIS_YEAR_1 => Merakomis::$ANALYSIS_YEAR_1,
|
|
Merakomis::$_ANALYSIS_YEAR_2 => Merakomis::$ANALYSIS_YEAR_2,
|
|
Merakomis::$_ANALYSIS_OFFICE_1 => Merakomis::$ANALYSIS_OFFICE_1,
|
|
Merakomis::$_ANALYSIS_OFFICE_2 => Merakomis::$ANALYSIS_OFFICE_2,
|
|
Merakomis::$_ANALYSIS_OFFICE_3 => Merakomis::$ANALYSIS_OFFICE_3,
|
|
Merakomis::$_ANALYSIS_DEPARTMENT_1 => Merakomis::$ANALYSIS_DEPARTMENT_1,
|
|
Merakomis::$_ANALYSIS_DEPARTMENT_2 => Merakomis::$ANALYSIS_DEPARTMENT_2,
|
|
Merakomis::$_ANALYSIS_DEPARTMENT_3 => Merakomis::$ANALYSIS_DEPARTMENT_3,
|
|
Merakomis::$_ANALYSIS_COMPANY_1 => Merakomis::$ANALYSIS_COMPANY_1,
|
|
Merakomis::$_ANALYSIS_COMPANY_2 => Merakomis::$ANALYSIS_COMPANY_2,
|
|
Merakomis::$_ANALYSIS_COMPANY_3 => Merakomis::$ANALYSIS_COMPANY_3,
|
|
Merakomis::$_ANALYSIS_COMPANY_4 => Merakomis::$ANALYSIS_COMPANY_4,
|
|
Merakomis::$_ANALYSIS_COMPANY_5 => Merakomis::$ANALYSIS_COMPANY_5,
|
|
Merakomis::$_ANALYSIS_COMPANY_6 => Merakomis::$ANALYSIS_COMPANY_6,
|
|
|
|
Merakomis::$_STAFF_SUBTITLE_1 => Merakomis::$STAFF_SUBTITLE_1,
|
|
Merakomis::$_STAFF_SUBTITLE_2 => Merakomis::$STAFF_SUBTITLE_2,
|
|
Merakomis::$_STAFF_SUBTITLE_3 => Merakomis::$STAFF_SUBTITLE_3,
|
|
Merakomis::$_STAFF_SUBTITLE_4 => Merakomis::$STAFF_SUBTITLE_4,
|
|
Merakomis::$_STAFF_SUBTITLE_5 => Merakomis::$STAFF_SUBTITLE_5,
|
|
Merakomis::$_STAFF_TEXT_1 => Merakomis::$STAFF_TEXT_1,
|
|
Merakomis::$_STAFF_TEXT_2 => Merakomis::$STAFF_TEXT_2,
|
|
Merakomis::$_STAFF_TEXT_3 => Merakomis::$STAFF_TEXT_3,
|
|
Merakomis::$_STAFF_TEXT_4 => Merakomis::$STAFF_TEXT_4,
|
|
Merakomis::$_STAFF_TEXT_5 => Merakomis::$STAFF_TEXT_5,
|
|
Merakomis::$_ANALYSIS_TEAM_1 => Merakomis::$ANALYSIS_TEAM_1,
|
|
Merakomis::$_ANALYSIS_TEAM_2 => Merakomis::$ANALYSIS_TEAM_2,
|
|
Merakomis::$_ANALYSIS_TEAM_3 => Merakomis::$ANALYSIS_TEAM_3,
|
|
Merakomis::$_ANALYSIS_TEAM_4 => Merakomis::$ANALYSIS_TEAM_4,
|
|
Merakomis::$_ANALYSIS_TEAM_5 => Merakomis::$ANALYSIS_TEAM_5,
|
|
Merakomis::$_ANALYSIS_TEAM_6 => Merakomis::$ANALYSIS_TEAM_6,
|
|
Merakomis::$_ANALYSIS_TEAM_7 => Merakomis::$ANALYSIS_TEAM_7,
|
|
Merakomis::$_ANALYSIS_TEAM_8 => Merakomis::$ANALYSIS_TEAM_8,
|
|
Merakomis::$_ANALYSIS_TEAM_9 => Merakomis::$ANALYSIS_TEAM_9,
|
|
Merakomis::$_ANALYSIS_TEAM_10 => Merakomis::$ANALYSIS_TEAM_10,
|
|
Merakomis::$_ANALYSIS_TEAM_11 => Merakomis::$ANALYSIS_TEAM_11,
|
|
Merakomis::$_ANALYSIS_TEAM_12 => Merakomis::$ANALYSIS_TEAM_12,
|
|
Merakomis::$_ANALYSIS_TEAM_1_SUBTITLE => Merakomis::$ANALYSIS_TEAM_1_SUBTITLE,
|
|
Merakomis::$_ANALYSIS_TEAM_2_SUBTITLE => Merakomis::$ANALYSIS_TEAM_2_SUBTITLE,
|
|
Merakomis::$_ANALYSIS_TEAM_3_SUBTITLE => Merakomis::$ANALYSIS_TEAM_3_SUBTITLE,
|
|
Merakomis::$_ANALYSIS_TEAM_4_SUBTITLE => Merakomis::$ANALYSIS_TEAM_4_SUBTITLE,
|
|
Merakomis::$_ANALYSIS_TEAM_5_SUBTITLE => Merakomis::$ANALYSIS_TEAM_5_SUBTITLE,
|
|
Merakomis::$_ANALYSIS_TEAM_6_SUBTITLE => Merakomis::$ANALYSIS_TEAM_6_SUBTITLE,
|
|
Merakomis::$_ANALYSIS_TEAM_7_SUBTITLE => Merakomis::$ANALYSIS_TEAM_7_SUBTITLE,
|
|
Merakomis::$_ANALYSIS_TEAM_8_SUBTITLE => Merakomis::$ANALYSIS_TEAM_8_SUBTITLE,
|
|
Merakomis::$_ANALYSIS_TEAM_9_SUBTITLE => Merakomis::$ANALYSIS_TEAM_9_SUBTITLE,
|
|
Merakomis::$_ANALYSIS_TEAM_10_SUBTITLE => Merakomis::$ANALYSIS_TEAM_10_SUBTITLE,
|
|
Merakomis::$_ANALYSIS_YEAR_1_SUBTITLE => Merakomis::$ANALYSIS_YEAR_1_SUBTITLE,
|
|
Merakomis::$_ANALYSIS_YEAR_2_SUBTITLE => Merakomis::$ANALYSIS_YEAR_2_SUBTITLE,
|
|
Merakomis::$_ANALYSIS_COMPANY_1_SUBTITLE => Merakomis::$ANALYSIS_COMPANY_1_SUBTITLE,
|
|
Merakomis::$_ANALYSIS_COMPANY_2_SUBTITLE => Merakomis::$ANALYSIS_COMPANY_2_SUBTITLE,
|
|
Merakomis::$_ANALYSIS_COMPANY_3_SUBTITLE => Merakomis::$ANALYSIS_COMPANY_3_SUBTITLE,
|
|
Merakomis::$_ANALYSIS_COMPANY_4_SUBTITLE => Merakomis::$ANALYSIS_COMPANY_4_SUBTITLE,
|
|
Merakomis::$_ANALYSIS_COMPANY_4_SUBTITLE_2 => Merakomis::$ANALYSIS_COMPANY_4_SUBTITLE_2,
|
|
Merakomis::$_ANALYSIS_COMPANY_5_SUBTITLE => Merakomis::$ANALYSIS_COMPANY_5_SUBTITLE,
|
|
Merakomis::$_ANALYSIS_COMPANY_6_SUBTITLE => Merakomis::$ANALYSIS_COMPANY_6_SUBTITLE,
|
|
Merakomis::$_FOT_TITLE => Merakomis::$FOT_TITLE,
|
|
Merakomis::$_FOT_TEXT => Merakomis::$FOT_TEXT,
|
|
Merakomis::$_FOT_TITLE_2 => Merakomis::$FOT_TITLE_2,
|
|
Merakomis::$_FOT_TEXT_2 => Merakomis::$FOT_TEXT_2,
|
|
Merakomis::$_ALL_PROJECTS_TITLE => Merakomis::$ALL_PROJECTS_TITLE,
|
|
Merakomis::$_ALL_PROJECTS_TEXT => Merakomis::$ALL_PROJECTS_TEXT,
|
|
];
|
|
echo je($res);
|
|
}
|
|
public static function getTableData($post = []) {
|
|
|
|
$and = [];
|
|
if($id = intval($post['data']['params']['id'])){
|
|
$and[] = \Where::_operator(Time::$PROJECT,'=',$id);
|
|
}
|
|
if($emp = intval($post['data']['params']['emp'])){
|
|
$and[] = \Where::_operator(Time::$EMP,'=',$emp);
|
|
} else {
|
|
$and[] = \Where::_operator(Time::$EMP,'=',Emp::$AUTH_ID);
|
|
}
|
|
|
|
|
|
if($and){
|
|
$post['options'][\Query::WHERE] = \Where::_and($and);
|
|
}
|
|
$post['options'][\Query::SORT] = [Time::$DATE=>'DESC'];
|
|
$post['getData'] = true;
|
|
$res = parent::getTableData($post);
|
|
/*
|
|
switch (intval($id)){
|
|
case merakomru::$PARTNERS->id_for_theme : $res['title'] = 'Партнёры'; break;
|
|
}
|
|
*/
|
|
echo je($res);
|
|
}
|
|
|
|
|
|
static function getStatTest()
|
|
{
|
|
|
|
echo ini_get('memory_limit');
|
|
|
|
ini_set('memory_limit', '512M');
|
|
|
|
set_time_limit(0);
|
|
$res = [];
|
|
Emp::$AUTH_ID = 7;
|
|
Emp::$IS_AUTH = true;
|
|
$_POST['type']=1;
|
|
$_POST['range'][0]='2024-10-01';
|
|
|
|
$_POST['range'][0]='2024-09-01';
|
|
$_POST['range'][1]='2025-09-30';
|
|
|
|
|
|
$res = Time::getStat($_POST);
|
|
//echo je($res);
|
|
|
|
echo "После: " . (memory_get_usage()/1024/1024) . " байт\n";
|
|
echo "Пик: " . (memory_get_peak_usage()/1024/1024) . " байт\n";
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|