576 lines
15 KiB
PHP
576 lines
15 KiB
PHP
<?php
|
|
require FCPATH . "vendor/ripcord/ripcord.php";
|
|
require FCPATH . "vendor/ripcord/ripcord_client.php";
|
|
|
|
class Timesheet_v2 extends MY_Controller
|
|
{
|
|
var $db_odoo, $url, $username, $uid, $model, $password, $common;
|
|
var $teams;
|
|
function __construct()
|
|
{
|
|
parent::__construct();
|
|
$this->url = "http://odoo.sismedika.com:8070";
|
|
$this->db_odoo = "odoo16_sismedika";
|
|
$this->username = "admin@sismedika.com";
|
|
$this->password = "duD#Z36qH5ctmRRD";
|
|
$this->common = ripcord::client("{$this->url}/xmlrpc/2/common");
|
|
$this->uid = $this->common->authenticate($this->db_odoo, $this->username, $this->password, array());
|
|
$this->model = ripcord::client("{$this->url}/xmlrpc/2/object");
|
|
$this->db->query("use one_support");
|
|
$this->teams = [3, 22, 18, 21, 24, 15, 49, 34];
|
|
}
|
|
|
|
// --- v2
|
|
//
|
|
function mobile($date = "")
|
|
{
|
|
$teams = [30, 32, 29, 27, 43];
|
|
if ($date == "") $date = date("Y-m-d");
|
|
$startDate = "$date 00:00:00";
|
|
$endDate = "$date 23:59:59";
|
|
// Define domain for search
|
|
$domain = [
|
|
"&",
|
|
['project_id', '!=', false],
|
|
"&",
|
|
['employee_id', 'in', $teams],
|
|
"&",
|
|
['date', '>=', $startDate],
|
|
['date', '<=', $endDate]
|
|
];
|
|
$kwarg = array(
|
|
"limit" => 1000,
|
|
"offset" => 0,
|
|
"order" => "user_id",
|
|
'fields' => array(
|
|
'name', 'date', 'project_id', 'task_id',
|
|
'unit_amount', 'user_id'
|
|
)
|
|
);
|
|
// Search for timesheet entries
|
|
$timesheets = $this->model->execute_kw(
|
|
$this->db_odoo,
|
|
$this->uid,
|
|
$this->password,
|
|
'account.analytic.line',
|
|
'web_search_read',
|
|
array($domain),
|
|
$kwarg
|
|
);
|
|
$total_hours = 0;
|
|
$result = [];
|
|
foreach ($timesheets["records"] as $r) {
|
|
$name = $r["name"];
|
|
$date = $r["date"];
|
|
$project = $r["project_id"][1];
|
|
$task = $r["task_id"][1];
|
|
$hour = round($r["unit_amount"], 1);
|
|
$date = $r["date"];
|
|
$user = $r["user_id"][1];
|
|
$total_hours += $hour;
|
|
$total_hours += $hour;
|
|
$result[$user][] = [
|
|
"project" => $project,
|
|
"task" => $task,
|
|
"date" => $date,
|
|
"desc" => $name,
|
|
"hour" => $hour
|
|
];
|
|
}
|
|
$table = "@startuml\n ";
|
|
$total_staff = 0;
|
|
$prev_user = "";
|
|
$table .= "object Timesheet { \n";
|
|
$table .= "<HEADER--xx>\n";
|
|
foreach ($result as $user => $data) {
|
|
if ($prev_user != $user) {
|
|
$table .= "$user\n";
|
|
$table .= "<#lightblue,#black>|= Project |= Task |= Desc |= Hour |\n";
|
|
$total_staff++;
|
|
$prev_user = $user;
|
|
}
|
|
foreach ($data as $d) {
|
|
$xdesc = $d["desc"];
|
|
if (strlen($xdesc) > 30) {
|
|
$xdesc = substr($xdesc, 0, 26) . "...";
|
|
}
|
|
$table .= "<#white>| {$d["project"]}| {$d["task"]}| {$xdesc}| {$d["hour"]}|\n";
|
|
}
|
|
}
|
|
$msg = "Collection Date : " . date("Y-m-d H:i:s") . "\n";
|
|
$msg .= "Total Hour : " . $total_hours . "\n";
|
|
$msg .= "Total Staff: " . $total_staff . "\n";
|
|
$msg .= "---\n";
|
|
$table = str_replace("<HEADER--xx>", $msg, $table);
|
|
if ($prev_user != "") {
|
|
$table .= "}\n\n";
|
|
}
|
|
$table .= "@enduml";
|
|
$img = $this->puml_post($table);
|
|
$url = "https://puml.sismedika.online/png/$img";
|
|
$this->wa_to_mobile($url);
|
|
}
|
|
function wa_to_mobile(
|
|
$url
|
|
) {
|
|
$this->load->library("Wa_sas");
|
|
$hp = "120363166799845051@g.us";
|
|
$resp = $this->wa_sas->send_image(
|
|
$hp,
|
|
"Timesheet Summary",
|
|
$url,
|
|
"image/png",
|
|
"dev.backend-status",
|
|
"png",
|
|
true
|
|
);
|
|
print_r($resp);
|
|
}
|
|
|
|
function ais($date = "")
|
|
{
|
|
$teams = [19, 28, 47, 31, 44];
|
|
if ($date == "") $date = date("Y-m-d");
|
|
$startDate = "$date 00:00:00";
|
|
$endDate = "$date 23:59:59";
|
|
// Define domain for search
|
|
$domain = [
|
|
"&",
|
|
['project_id', '!=', false],
|
|
"&",
|
|
['employee_id', 'in', $teams],
|
|
"&",
|
|
['date', '>=', $startDate],
|
|
['date', '<=', $endDate]
|
|
];
|
|
$kwarg = array(
|
|
"limit" => 1000,
|
|
"offset" => 0,
|
|
"order" => "user_id",
|
|
'fields' => array(
|
|
'name', 'date', 'project_id', 'task_id',
|
|
'unit_amount', 'user_id'
|
|
)
|
|
);
|
|
// Search for timesheet entries
|
|
$timesheets = $this->model->execute_kw(
|
|
$this->db_odoo,
|
|
$this->uid,
|
|
$this->password,
|
|
'account.analytic.line',
|
|
'web_search_read',
|
|
array($domain),
|
|
$kwarg
|
|
);
|
|
$total_hours = 0;
|
|
$result = [];
|
|
foreach ($timesheets["records"] as $r) {
|
|
$name = $r["name"];
|
|
$date = $r["date"];
|
|
$project = $r["project_id"][1];
|
|
$task = $r["task_id"][1];
|
|
$hour = round($r["unit_amount"], 1);
|
|
$date = $r["date"];
|
|
$user = $r["user_id"][1];
|
|
$total_hours += $hour;
|
|
$total_hours += $hour;
|
|
$result[$user][] = [
|
|
"project" => $project,
|
|
"task" => $task,
|
|
"date" => $date,
|
|
"desc" => $name,
|
|
"hour" => $hour
|
|
];
|
|
}
|
|
$table = "@startuml\n ";
|
|
$total_staff = 0;
|
|
$prev_user = "";
|
|
$table .= "object Timesheet { \n";
|
|
$table .= "<HEADER--xx>\n";
|
|
foreach ($result as $user => $data) {
|
|
if ($prev_user != $user) {
|
|
$table .= "$user\n";
|
|
$table .= "<#lightblue,#black>|= Project |= Task |= Desc |= Hour |\n";
|
|
$total_staff++;
|
|
$prev_user = $user;
|
|
}
|
|
foreach ($data as $d) {
|
|
$xdesc = $d["desc"];
|
|
if (strlen($xdesc) > 30) {
|
|
$xdesc = substr($xdesc, 0, 26) . "...";
|
|
}
|
|
$table .= "<#white>| {$d["project"]}| {$d["task"]}| {$xdesc}| {$d["hour"]}|\n";
|
|
}
|
|
}
|
|
$msg = "Collection Date : " . date("Y-m-d H:i:s") . "\n";
|
|
$msg .= "Total Hour : " . $total_hours . "\n";
|
|
$msg .= "Total Staff: " . $total_staff . "\n";
|
|
$msg .= "---\n";
|
|
$table = str_replace("<HEADER--xx>", $msg, $table);
|
|
if ($prev_user != "") {
|
|
$table .= "}\n\n";
|
|
}
|
|
$table .= "@enduml";
|
|
$img = $this->puml_post($table);
|
|
$url = "https://puml.sismedika.online/png/$img";
|
|
$this->wa_to_ais($url);
|
|
}
|
|
function wa_to_ais(
|
|
$url
|
|
) {
|
|
$this->load->library("Wa_sas");
|
|
$hp = "120363185074039892@g.us";
|
|
$resp = $this->wa_sas->send_image(
|
|
$hp,
|
|
"Timesheet Summary",
|
|
$url,
|
|
"image/png",
|
|
"dev.backend-status",
|
|
"png",
|
|
true
|
|
);
|
|
print_r($resp);
|
|
}
|
|
function wa_to_me(
|
|
$url
|
|
) {
|
|
$this->load->library("Wa_sas");
|
|
$hp = "6287823783747";
|
|
$resp = $this->wa_sas->send_image(
|
|
$hp,
|
|
"Timesheet Summary",
|
|
$url,
|
|
"image/png",
|
|
"ais-status",
|
|
"png"
|
|
);
|
|
print_r($resp);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function external_by_date($date = "")
|
|
{
|
|
if ($date == "") $date = date("Y-m-d");
|
|
$startDate = "$date 00:00:00";
|
|
$endDate = "$date 23:59:59";
|
|
// Define domain for search
|
|
$domain = [
|
|
"&",
|
|
['project_id', '!=', false],
|
|
"&",
|
|
['project_id', '!=', "HISv3"],
|
|
"&",
|
|
['employee_id', 'in', $this->teams],
|
|
"&",
|
|
['date', '>=', $startDate],
|
|
['date', '<=', $endDate]
|
|
];
|
|
$kwarg = array(
|
|
"limit" => 1000,
|
|
"offset" => 0,
|
|
"order" => "user_id",
|
|
'fields' => array(
|
|
'name', 'date', 'project_id', 'task_id',
|
|
'unit_amount', 'user_id'
|
|
)
|
|
);
|
|
// Search for timesheet entries
|
|
$timesheets = $this->model->execute_kw(
|
|
$this->db_odoo,
|
|
$this->uid,
|
|
$this->password,
|
|
'account.analytic.line',
|
|
'web_search_read',
|
|
array($domain),
|
|
$kwarg
|
|
);
|
|
$total_hours = 0;
|
|
$result = [];
|
|
foreach ($timesheets["records"] as $r) {
|
|
$name = $r["name"];
|
|
$date = $r["date"];
|
|
$project = $r["project_id"][1];
|
|
$hour = round($r["unit_amount"], 1);
|
|
$date = $r["date"];
|
|
$user = $r["user_id"][1];
|
|
$total_hours += $hour;
|
|
|
|
if (!isset($result[$user])) {
|
|
$result[$user] = [];
|
|
}
|
|
if (!isset($result[$user][$project])) {
|
|
$result[$user][$project] = $hour;
|
|
} else {
|
|
$result[$user][$project] += $hour;
|
|
}
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
function sas_one($date = "")
|
|
{
|
|
$sas_teams = [34, 36, 37, 38, 39, 40, 41, 42, 43, 44];
|
|
if ($date == "") $date = date("Y-m-d");
|
|
$startDate = "$date 00:00:00";
|
|
$endDate = "$date 23:59:59";
|
|
// Define domain for search
|
|
$domain = [
|
|
"&",
|
|
['project_id', '!=', false],
|
|
"&",
|
|
['employee_id', 'in', $sas_teams],
|
|
"&",
|
|
['date', '>=', $startDate],
|
|
['date', '<=', $endDate]
|
|
];
|
|
$kwarg = array(
|
|
"limit" => 1000,
|
|
"offset" => 0,
|
|
"order" => "user_id",
|
|
'fields' => array(
|
|
'name', 'date', 'project_id', 'task_id',
|
|
'unit_amount', 'user_id'
|
|
)
|
|
);
|
|
// Search for timesheet entries
|
|
$timesheets = $this->model->execute_kw(
|
|
$this->db_odoo,
|
|
$this->uid,
|
|
$this->password,
|
|
'account.analytic.line',
|
|
'web_search_read',
|
|
array($domain),
|
|
$kwarg
|
|
);
|
|
$total_hours = 0;
|
|
$result = [];
|
|
foreach ($timesheets["records"] as $r) {
|
|
$name = $r["name"];
|
|
$date = $r["date"];
|
|
$project = $r["project_id"][1];
|
|
$task = $r["task_id"][1];
|
|
$hour = round($r["unit_amount"], 1);
|
|
$date = $r["date"];
|
|
$user = $r["user_id"][1];
|
|
$total_hours += $hour;
|
|
$total_hours += $hour;
|
|
$result[$user][] = [
|
|
"project" => $project,
|
|
"task" => $task,
|
|
"date" => $date,
|
|
"desc" => $name,
|
|
"hour" => $hour
|
|
];
|
|
}
|
|
$table = "@startuml\n ";
|
|
$total_staff = 0;
|
|
$prev_user = "";
|
|
$table .= "object Timesheet { \n";
|
|
$table .= "<HEADER--xx>\n";
|
|
foreach ($result as $user => $data) {
|
|
if ($prev_user != $user) {
|
|
$table .= "$user\n";
|
|
$table .= "<#lightblue,#black>|= Project |= Task |= Desc |= Hour |\n";
|
|
$total_staff++;
|
|
$prev_user = $user;
|
|
}
|
|
foreach ($data as $d) {
|
|
$xdesc = $d["desc"];
|
|
if (strlen($xdesc) > 30) {
|
|
$xdesc = substr($xdesc, 0, 26) . "...";
|
|
}
|
|
$table .= "<#white>| {$d["project"]}| {$d["task"]}| {$xdesc}| {$d["hour"]}|\n";
|
|
}
|
|
}
|
|
$msg = "Collection Date : " . date("Y-m-d H:i:s") . "\n";
|
|
$msg .= "Total Hour : " . $total_hours . "\n";
|
|
$msg .= "Total Staff: " . $total_staff . "\n";
|
|
$msg .= "---\n";
|
|
$table = str_replace("<HEADER--xx>", $msg, $table);
|
|
if ($prev_user != "") {
|
|
$table .= "}\n\n";
|
|
}
|
|
$table .= "@enduml";
|
|
$img = $this->puml_post($table);
|
|
$url = "https://puml.sismedika.online/png/$img";
|
|
$this->wa_to_sasone($url);
|
|
}
|
|
|
|
function by_project_date($project, $date = "")
|
|
{
|
|
if ($date == "") $date = date("Y-m-d");
|
|
$startDate = "$date 00:00:00";
|
|
$endDate = "$date 23:59:59";
|
|
// Define domain for search
|
|
$domain = [
|
|
"&",
|
|
['project_id', '!=', false],
|
|
"&",
|
|
['project_id', 'ilike', "$project"],
|
|
"&",
|
|
['date', '>=', $startDate],
|
|
['date', '<=', $endDate]
|
|
];
|
|
|
|
$kwarg = array(
|
|
"limit" => 1000,
|
|
"offset" => 0,
|
|
"order" => "user_id",
|
|
'fields' => array(
|
|
'name', 'date', 'task_id',
|
|
'unit_amount', 'user_id'
|
|
)
|
|
);
|
|
// Search for timesheet entries
|
|
$timesheets = $this->model->execute_kw(
|
|
$this->db_odoo,
|
|
$this->uid,
|
|
$this->password,
|
|
'account.analytic.line',
|
|
'web_search_read',
|
|
array($domain),
|
|
$kwarg
|
|
);
|
|
$total_hours = 0;
|
|
$result = [];
|
|
foreach ($timesheets["records"] as $r) {
|
|
$name = $r["name"];
|
|
$date = $r["date"];
|
|
$task = $r["task_id"][1];
|
|
$hour = round($r["unit_amount"], 1);
|
|
$date = $r["date"];
|
|
$user = $r["user_id"][1];
|
|
$total_hours += $hour;
|
|
$result[$user][] = [
|
|
"task" => $task,
|
|
"date" => $date,
|
|
"desc" => $name,
|
|
"hour" => $hour
|
|
];
|
|
}
|
|
$table = "@startuml\n ";
|
|
$msg = "Collection Date : " . date("Y-m-d H:i:s") . "\n";
|
|
$msg .= "Total Hour : " . $total_hours . "\n";
|
|
$total_staff = 0;
|
|
$prev_user = "";
|
|
$table .= "object Timesheet { \n";
|
|
$table .= "<HEADER--xx>\n";
|
|
foreach ($result as $user => $data) {
|
|
if ($prev_user != $user) {
|
|
$table .= "$user\n";
|
|
$table .= "<#lightblue,#black>|= Date |= Task |= Desc |= Hour |\n";
|
|
$total_staff++;
|
|
$prev_user = $user;
|
|
}
|
|
foreach ($data as $d) {
|
|
$xdesc = $d["desc"];
|
|
if (strlen($xdesc) > 50) {
|
|
$xdesc = substr($xdesc, 0, 46) . "...";
|
|
}
|
|
$table .= "<#white>| {$d["date"]}| {$d["task"]}| {$xdesc}| {$d["hour"]}|\n";
|
|
}
|
|
}
|
|
$msg .= "Total Staff: " . $total_staff . "\n";
|
|
$msg .= "---\n";
|
|
$table = str_replace("<HEADER--xx>", $msg, $table);
|
|
$result = $this->external_by_date($date);
|
|
$have_ext = false;
|
|
if (count($result) > 0) {
|
|
$have_ext = true;
|
|
$table .= "\n\n\n";
|
|
$table .= "Non HIS V3\n";
|
|
$table .= "<#lightblue,#black>|= User|= Project|= Hour |\n";
|
|
$total_hours = 0;
|
|
foreach ($result as $u => $r) {
|
|
foreach ($r as $prj => $hour) {
|
|
$table .= "<#white>| {$u}| {$prj}| {$hour}|\n";
|
|
$total_hours += $hour;
|
|
}
|
|
}
|
|
echo "\n";
|
|
$table .= "Total Hour: " . $total_hours . "\n";
|
|
}
|
|
if ($prev_user != "" || $have_ext) {
|
|
$table .= "}\n\n";
|
|
}
|
|
$table .= "@enduml";
|
|
$img = $this->puml_post($table);
|
|
$url = "https://puml.sismedika.online/png/$img";
|
|
//echo $url;
|
|
$this->wa_to_group($url);
|
|
}
|
|
function wa_to_sasone(
|
|
$url
|
|
) {
|
|
$this->load->library("Wa_sas");
|
|
$hp = "6282113702602-1584412485@g.us";
|
|
$resp = $this->wa_sas->send_image(
|
|
$hp,
|
|
"Timesheet Summary",
|
|
$url,
|
|
"image/png",
|
|
"sasone-status",
|
|
"png",
|
|
true
|
|
);
|
|
print_r($resp);
|
|
}
|
|
|
|
function wa_to_group(
|
|
$url
|
|
) {
|
|
$this->load->library("Wa_sas");
|
|
//$hp = "6287823783747";
|
|
//group set to true
|
|
$hp = "120363194169273747@g.us";
|
|
//$resp = $this->wa_sas->send_message($hp, $msg,true);
|
|
// print_r($resp);
|
|
$resp = $this->wa_sas->send_image(
|
|
$hp,
|
|
"Timesheet Summary",
|
|
$url,
|
|
"image/png",
|
|
"hisv3-status",
|
|
"png",
|
|
true
|
|
);
|
|
print_r($resp);
|
|
}
|
|
function wa_to_sasone_done(
|
|
$msg
|
|
) {
|
|
$this->load->library("Wa_sas");
|
|
$hp = "6287823783747";
|
|
//$hp="6282113702602-1584412485@g.us";
|
|
//bisone supporter
|
|
//$hp = "6281328282909-1583223560@g.us";
|
|
$resp = $this->wa_sas->send_message($hp, $msg, true);
|
|
}
|
|
|
|
function puml_post($data)
|
|
{
|
|
$url = "https://puml.sismedika.online/coder";
|
|
$ch = curl_init($url);
|
|
$payload = $data;
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
|
|
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/plain'));
|
|
# Return response instead of printing.
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
# Send request.
|
|
$result = curl_exec($ch);
|
|
curl_close($ch);
|
|
return $result;
|
|
}
|
|
function bool_day($inp_dow)
|
|
{
|
|
$dow = strtolower(date("D", strtotime("now")));
|
|
if ($inp_dow == $dow) return true;
|
|
return false;
|
|
}
|
|
}
|