Files
BE_IBL/application/controllers/mockup/masterdata/one-fisik-template/Fisiktemplate.php
2026-04-15 15:24:12 +07:00

277 lines
9.6 KiB
PHP

<?php
class Fisiktemplate extends MY_Controller
{
public function __construct()
{
parent::__construct();
$current_method = $this->router->fetch_method();
$excluded_methods = ['index'];
if (!in_array($current_method, $excluded_methods)) {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
}
}
public function index()
{
echo "Fisik Template Api";
}
public function fisikTemplateMappingList()
{
$prm = $this->sys_input;
$fisikname = isset($prm['fisikname']) ? $prm['fisikname'] : '';
$current_page = isset($prm['current_page']) ? (int) $prm['current_page'] : 1;
$number_limit = 10;
$number_offset = ($current_page - 1) * $number_limit;
try {
$this->db->select('FisikTemplateMappingID');
$this->db->from('fisik_template_mapping');
$this->db->where('FisikTemplateMappingIsActive', 'Y');
$this->db->like('FisikTemplateMappingName', $fisikname);
$this->db->group_by('FisikTemplateMappingID');
$count_query = $this->db->get();
if (!$count_query) {
$this->sys_error_db("fisik_template_mapping count", $this->db);
return;
}
$tot_count = $count_query->num_rows();
$tot_page = ceil($tot_count / $number_limit);
$this->db->select('FisikTemplateMappingID as id, FisikTemplateMappingID, FisikTemplateMappingName');
$this->db->from('fisik_template_mapping');
$this->db->where('FisikTemplateMappingIsActive', 'Y');
$this->db->like('FisikTemplateMappingName', $fisikname);
$this->db->group_by('FisikTemplateMappingID');
$this->db->order_by('FisikTemplateMappingName', 'ASC');
$this->db->limit($number_limit, $number_offset);
$query = $this->db->get();
if (!$query) {
$this->sys_error_db("fisik_template_mapping select", $this->db);
return;
}
$rows = $query->result_array();
$this->sys_ok([
"total" => $tot_page,
"total_filter" => count($rows),
"records" => $rows
]);
} catch (Exception $exc) {
$this->sys_error($exc->getMessage());
}
}
public function addFisikTemplateMapping()
{
$prm = $this->sys_input;
$userid = isset($this->sys_user['M_UserID']) ? $this->sys_user['M_UserID'] : null;
$name = isset($prm['name']) ? trim($prm['name']) : '';
if (empty($name)) {
$this->sys_error("Nama fisik tidak boleh kosong.");
return;
}
$this->db->trans_begin();
try {
$insert = $this->db->insert('fisik_template_mapping', [
'FisikTemplateMappingName' => $name,
'FisikTemplateMappingCreated' => date('Y-m-d H:i:s'),
'FisikTemplateMappingCreatedUserID' => $userid,
'FisikTemplateMappingLastUpdated' => date('Y-m-d H:i:s'),
]);
if (!$insert) {
$this->db->trans_rollback();
$this->sys_error_db("save fisik_template_mapping error", $this->db);
return;
}
$this->db->trans_commit();
$this->sys_ok([
"total" => 1,
"affected_rows" => $this->db->affected_rows()
]);
} catch (Exception $exc) {
$this->db->trans_rollback();
$this->sys_error($exc->getMessage());
}
}
public function findFisikTemplate()
{
$prm = $this->sys_input;
$id = isset($prm['id']) ? (int) $prm['id'] : 0;
$code = isset($prm['code']) ? $prm['code'] : '';
$name = isset($prm['name']) ? $prm['name'] : '';
$current_page = isset($prm['current_page']) ? (int) $prm['current_page'] : 1;
$number_limit = 10;
$number_offset = ($current_page - 1) * $number_limit;
try {
$count_sql = "
SELECT COUNT(*) AS total FROM (
SELECT FisikTemplateID
FROM fisik_template
LEFT JOIN fisik_template_mapping_detail
ON FisikTemplateID = FisikTemplateMappingDetailFisikTemplateID
AND FisikTemplateMappingDetailFisikTemplateMappingID = ?
AND FisikTemplateMappingDetailIsActive = 'Y'
WHERE FisikTemplateCode LIKE ?
AND FisikTemplateTitle LIKE ?
GROUP BY FisikTemplateID
) AS x
";
$count_query = $this->db->query($count_sql, [
$id,
"%$code%",
"%$name%"
]);
if (!$count_query || $count_query->num_rows() == 0) {
$this->sys_error_db("fisik_template count", $this->db);
return;
}
$tot_count = $count_query->row()->total;
$tot_page = ceil($tot_count / $number_limit);
$data_sql = "
SELECT
FisikTemplateID AS id,
FisikTemplateJSON AS xjson,
FisikTemplateID,
FisikTemplateType,
FisikTemplateCode,
FisikTemplateTableName,
FisikTemplateTitle,
FisikTemplateMappingDetailID,
FisikTemplateMappingDetailFisikTemplateMappingID,
FisikTemplateMappingDetailFisikTemplateID,
FisikTemplateIsActive,
IF(IFNULL(FisikTemplateMappingDetailID, 0) > 0, 'Y', 'N') AS status
FROM fisik_template
LEFT JOIN fisik_template_mapping_detail
ON FisikTemplateID = FisikTemplateMappingDetailFisikTemplateID
AND FisikTemplateMappingDetailFisikTemplateMappingID = ?
AND FisikTemplateMappingDetailIsActive = 'Y'
WHERE FisikTemplateIsActive = 'Y'
AND FisikTemplateCode LIKE ?
AND FisikTemplateTitle LIKE ?
GROUP BY FisikTemplateID
ORDER BY FisikTemplateCode ASC
LIMIT ? OFFSET ?
";
$query = $this->db->query($data_sql, [
$id,
"%$code%",
"%$name%",
$number_limit,
$number_offset
]);
if (!$query) {
$this->sys_error_db("fisik_template select", $this->db);
return;
}
$rows = $query->result_array();
foreach ($rows as $key => $value) {
$rows[$key]['xjson'] = json_decode($value['xjson']);
}
$result = [
"total" => $tot_page,
"total_filter" => count($rows),
"records" => $rows
];
$this->sys_ok($result);
} catch (Exception $exc) {
$this->sys_error($exc->getMessage());
}
}
public function saveAddFisikTemplateMappingDetail()
{
$prm = $this->sys_input;
$mappingdetailid = isset($prm['FisikTemplateMappingDetailID']) ? $prm['FisikTemplateMappingDetailID'] : null;
$templatemappingID = isset($prm['templatemappingID']) ? $prm['templatemappingID'] : null;
$templateID = isset($prm['FisikTemplateID']) ? $prm['FisikTemplateID'] : null;
$status = isset($prm['status']) ? $prm['status'] : null;
$userid = isset($this->sys_user["M_UserID"]) ? $this->sys_user["M_UserID"] : null;
$this->db->trans_begin();
try {
if ($status === 'Y') {
$data = [
'FisikTemplateMappingDetailFisikTemplateMappingID' => $templatemappingID,
'FisikTemplateMappingDetailFisikTemplateID' => $templateID,
'FisikTemplateMappingDetailCreated' => date('Y-m-d H:i:s'),
'FisikTemplateMappingDetailCreatedUserID' => $userid,
'FisikTemplateMappingDetailLastUpdated' => date('Y-m-d H:i:s'),
];
$insert = $this->db->insert('fisik_template_mapping_detail', $data);
if (!$insert) {
$this->db->trans_rollback();
$this->sys_error_db("fisik_template_mapping_detail insert", $this->db);
return;
}
$xid = $this->db->insert_id();
} else {
$data = [
'FisikTemplateMappingDetailIsActive' => 'N',
'FisikTemplateMappingDetailLastUpdated' => date('Y-m-d H:i:s'),
'FisikTemplateMappingDetailLastUpdatedUserID' => $userid
];
$this->db->where('FisikTemplateMappingDetailID', $mappingdetailid);
$update = $this->db->update('fisik_template_mapping_detail', $data);
if (!$update) {
$this->db->trans_rollback();
$this->sys_error_db("fisik_template_mapping_detail update", $this->db);
return;
}
$xid = $mappingdetailid;
}
$this->db->trans_commit();
$this->sys_ok([
"total" => 1,
"records" => ["xid" => $xid]
]);
} catch (Exception $exc) {
$this->db->trans_rollback();
$this->sys_error($exc->getMessage());
}
}
}