dict mapping order done

This commit is contained in:
mahdahar 2024-12-05 14:49:27 +07:00
parent 8fdad44f80
commit a262c66059
15 changed files with 398 additions and 75 deletions

View File

@ -51,6 +51,12 @@ $routes->POST('api/dictTests/save', 'API_DictTests::save');
$routes->get('api/dictTests/index', 'API_DictTests::index'); $routes->get('api/dictTests/index', 'API_DictTests::index');
$routes->get('api/dictTests/detail/(:any)', 'API_DictTests::detail/$1'); $routes->get('api/dictTests/detail/(:any)', 'API_DictTests::detail/$1');
// API - DictTests
$routes->get('api/dictMappings/index', 'API_DictMappings::index');
$routes->POST('api/dictMappings/saveSingle', 'API_DictMappings::saveSingle');
$routes->POST('api/dictMappings/saveProfile', 'API_DictMappings::saveProfile');
$routes->get('api/dictMappings/detail/(:any)', 'API_DictMappings::detail/$1');
// admin // admin
$routes->group('admin', ['filter' => 'role:admin'], static function ($routes) { $routes->group('admin', ['filter' => 'role:admin'], static function ($routes) {
$routes->get('', 'AdminController::index'); $routes->get('', 'AdminController::index');
@ -58,6 +64,7 @@ $routes->group('admin', ['filter' => 'role:admin'], static function ($routes) {
$routes->get('userroles/', 'AdminController::userroles_index'); $routes->get('userroles/', 'AdminController::userroles_index');
$routes->get('users/', 'AdminController::users_index'); $routes->get('users/', 'AdminController::users_index');
$routes->get('dictTests/', 'AdminController::dictTests_index'); $routes->get('dictTests/', 'AdminController::dictTests_index');
$routes->get('dictMappings/', 'AdminController::dictMappings_index');
}); });
// user // user

View File

@ -0,0 +1,133 @@
<?php
namespace App\Controllers;
use CodeIgniter\RESTful\ResourceController;
class API_DictMappings extends ResourceController {
protected $format = 'json';
public function index() {
$db = \Config\Database::connect();
$sql = "select * from cmod.dbo.CM_DICT_MAPPINGS";
$query = $db->query($sql);
$results = $query->getResultArray();
$data['dictMappings'] = $results;
return $this->respond($data, 200);
}
public function detail($mapid) {
$data = array();
$db = \Config\Database::connect();
$sql = "select * from cmod.dbo.CM_DICT_MAPPINGS where MAPID='$mapid'";
$query = $db->query($sql);
$results = $query->getResultArray();
if(isset($results[0])) {
$data = $results[0];
if($data['MAPTYPE']=='P') {
$sql = "select * from cmod.dbo.CM_DICT_MAPPING_PROFILES where MAPID='$mapid'";
$query = $db->query($sql);
$results = $query->getResultArray();
$data['mliscodes'] = $results;
}
}
return $this->respond($data, 200);
}
public function saveSingle() {
$update = $this->request->getPost('update');
$liscode = $this->request->getPost('liscode');
$hiscode = $this->request->getPost('hiscode');
$descs = $this->request->getPost('descs');
// check if hiscode is exists
$db = \Config\Database::connect();
$sql = "select 1 from cmod.dbo.CM_DICT_MAPPINGS where HISCODE='$hiscode' and MAPTYPE in ('S','P') and MAPID<>'$update'";
$query = $db->query($sql);
$results = $query->getResultArray();
if(isset($results[0])) {
$response = [
'errors' => 'HISCODE already exists',
'message' => 'HISCODE already exists'
];
return $this->fail($response , 409);
}
if($update == '0') { $sql = "INSERT INTO cmod.dbo.CM_DICT_MAPPINGS (MAPTYPE, HISCODE, LISCODE, DESCS ) VALUES ('S', '$hiscode', '$liscode', '$descs')"; }
else { $sql = "UPDATE cmod.dbo.CM_DICT_MAPPINGS set HISCODE='$hiscode', LISCODE='$liscode', DESCS='$descs' where MAPID='$update'"; }
if( $db->query($sql) ) {
return $this->respond(['message' => 'Save Success'],201);
} else {
$response = [
'errors' => $db->errors(),
'message' => 'Invalid Inputs'
];
return $this->fail($response , 409);
}
}
public function saveProfile() {
$db = \Config\Database::connect();
$update = $this->request->getPost('update');
$hiscode = $this->request->getPost('hiscode');
$descs = $this->request->getPost('descs');
$mliscode = [];
for ($i = 1; $i <= 22; $i++) {
$key = "mliscode{$i}";
if (isset($_POST[$key])) {
$mliscode[$key] = $this->request->getPost($key);
}
}
// check if hiscode is exists
$sql = "select 1 from cmod.dbo.CM_DICT_MAPPINGS where HISCODE='$hiscode' and MAPTYPE in ('P','S') and MAPID<>'$update'";
$query = $db->query($sql);
$results = $query->getResultArray();
if(isset($results[0])) {
$response = [
'errors' => $db->errors(),
'message' => 'HISCODE already exists'
];
return $this->fail($response , 409);
}
// dict_mappings
if($update == '0') { $sql = "INSERT INTO cmod.dbo.CM_DICT_MAPPINGS (MAPTYPE, HISCODE, LISCODE, DESCS ) VALUES ('P', '$hiscode', null, '$descs')"; }
else { $sql = "UPDATE cmod.dbo.CM_DICT_MAPPINGS set HISCODE='$hiscode', LISCODE=null, DESCS='$descs' where MAPID='$update'"; }
if( !$db->query($sql) ) {
$response = [
'errors' => $db->errors(),
'message' => 'Invalid Inputs'
];
return $this->fail($response , 409);
}
// getting mapid after
if($update == 0) { $update =$db->insertID(); }
// dict_mapping_profiles
$datasource = '';
foreach($mliscode as $liscode) { $datasource .= "('$update','$liscode'),"; }
$datasource = rtrim($datasource,',');
$sql = "MERGE INTO cmod.dbo.CM_DICT_MAPPING_PROFILES AS t
USING ( VALUES
$datasource
) AS s (MAPID, LISCODE) on s.MAPID=t.MAPID and s.LISCODE=t.LISCODE
WHEN NOT MATCHED BY TARGET THEN
INSERT (MAPID, LISCODE)
VALUES (s.MAPID, s.LISCODE)
WHEN NOT MATCHED BY SOURCE THEN
DELETE;";
if( $db->query($sql) ) {
return $this->respond(['message' => 'Save Success'],201);
} else {
$response = [
'errors' => $db->errors(),
'message' => 'Invalid Inputs'
];
return $this->fail($response , 409);
}
}
}

View File

@ -58,4 +58,8 @@ class AdminController extends BaseController {
public function dictTests_index() { public function dictTests_index() {
return view('admin/dictTests_index'); return view('admin/dictTests_index');
} }
public function dictMappings_index() {
return view('admin/dictMappings_index');
}
} }

View File

@ -1,4 +1,4 @@
<?= $this->extend('layouts/main.php') ?> <?= $this->extend('admin/layout/main.php') ?>
<?= $this->section('content') ?> <?= $this->section('content') ?>

View File

@ -0,0 +1,247 @@
<?= $this->extend('admin/layout/main.php') ?>
<?= $this->section('content') ?>
<div class="card border-0 m-1">
<div class="card-body">
<div class='card-title'>Dictionary Mapping Order</div>
<button class='btn btn-sm btn-primary' onclick="createSingle()"><i class="bi bi-plus-circle"></i> Create Single</button>
<button class='btn btn-sm btn-primary' onclick="createProfile()"><i class="bi bi-plus-circle"></i> Create Profile</button>
<div class="table-responsive">
<table id="myTable" class="table">
<thead>
<tr>
<th>Type</th>
<th>HIS Code</th>
<th>LIS Code</th>
<th>Description</th>
<th>Action</th>
</tr>
</thead>
<tbody id='table-body'>
</tbody>
</table>
</div>
</div>
</div>
<!-- Single -->
<div class="modal fade" id="modal_single" aria-hidden="true" tabindex="-1">
<div class="modal-dialog modal-dialog-centered modal-dialog-scrollable">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5" id="exampleModalToggleLabel">Edit Single Test</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" ></button>
</div>
<div class="modal-body" id='modal_bodySingle' style='background-color:#F4F6FF'>
<div class="row">
<div class="col-12">
<table class="table table-sm table-borderless">
<input type='hidden' id='updateSingle' value='' />
<tr class="align-middle"> <th>HIS Code</th> <th>:</th> <td><input class='form-control' type='text' id='hiscodeSingle'/></td> </tr>
<tr class="align-middle"> <th>LIS Code</th> <th>:</th> <td><input class='form-control' type='text' id='liscodeSingle' oninput='this.value = this.value.toUpperCase();' /></td> </tr>
<tr class="align-middle"> <th>Desc.</th> <th>:</th> <td><input class='form-control' type='text' id='descsSingle'/></td> </tr>
</table>
<button class='btn btn-sm btn-primary' onclick='saveSingle()'>Save</button>
<button class='btn btn-sm btn-secondary' data-bs-dismiss="modal">Cancel</button>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Profile -->
<div class="modal fade" id="modal_profile" aria-hidden="true" tabindex="-1">
<div class="modal-dialog modal-lg modal-dialog-centered modal-dialog-scrollable">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5" id="exampleModalToggleLabel">Edit Profile Test</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" ></button>
</div>
<div class="modal-body" style='background-color:#F4F6FF'>
<div class="row">
<div class="col-6">
<table class="table table-sm table-borderless">
<input type='hidden' id='updateProfile' value='' />
<tr class="align-middle"> <th>HIS Code</th> <th>:</th> <td><input class='form-control' type='text' id='hiscodeProfile'/></td> </tr>
<tr class="align-middle"> <th>Desc.</th> <th>:</th> <td><input class='form-control' type='text' id='descsProfile'/></td> </tr>
</table>
</div>
<div class="col-6">
<table class="table table-sm table-borderless">
<tr class="align-top">
<th>LIS Code</th> <th>:</th>
<?php $j=1; ?>
<td> <?php for($i=1;$i<=11;$i++) { echo "<input class='mliscode$j' type='text' maxlength='5' size='7' oninput='this.value = this.value.toUpperCase();' /> <br />\n";$j++; } ?> </td>
<td> <?php for($i=1;$i<=11;$i++) { echo "<input class='mliscode$j' type='text' maxlength='5' size='7' oninput='this.value = this.value.toUpperCase();' /> <br />\n";$j++; } ?> </td>
</tr>
</table>
</div>
</div>
<button class='btn btn-sm btn-primary' onclick='saveProfile()'>Save</button>
<button class='btn btn-sm btn-secondary' data-bs-dismiss="modal">Cancel</button>
</div>
</div>
</div>
</div>
<?= $this->endSection() ?>
<?= $this->section('script') ?>
<script>
index();
function index() {
let url = '<?=base_url('');?>api/dictMappings/index';
$.ajax({
url: url,
method: 'GET',
success: function(response) {
$("#myTable").DataTable().destroy();
$("#table-body").html("");
var data = response['dictMappings'];
for (var i = 0; i < data.length; i++) {
liscode = data[i].LISCODE;
hiscode = data[i].HISCODE;
maptype = data[i].MAPTYPE;
mapid = data[i].MAPID;
descs = data[i].DESCS;
editBtn = '';
if(data[i].LISCODE == null) { liscode = '-'; }
/*
if(data[i].HISCODE != null) { text2 = data[i].TEXT2; }
if(data[i].MAPPINGTYPE != null) { unit = data[i].UNIT; }
if(data[i].MAPPINGID != null) { refftext = data[i].REFFTEXT; }
if(data[i].DESCS != null) { refftext = data[i].DESCS; }
*/
if(maptype == 'S') {
editBtn = '<button class="btn btn-sm btn-success" ' + ' onclick="editSingle(' + mapid+ ')">Edit' + '</button> ';
} else {
editBtn = '<button class="btn btn-sm btn-success" ' + ' onclick="editProfile(' + mapid+ ')">Edit' + '</button> ';
}
let datarow = '<tr class="align-middle">' +
'<td>' + maptype + '</td>' + '<td>' + hiscode+ '</td> <td>' + liscode + '</td>' + '<td>' + descs + '</td>' + '<td>' + editBtn + '</td>' +
'</tr>';
$("#table-body").append(datarow);
}
$("#myTable").DataTable({
"pageLength" : 25,
});
},
error: function(response) { console.log(response.responseJSON); }
});
}
function createSingle() {
$("#alertSingle").html();
$("#updateSingle").val("0");
$("#hiscodeSingle").val("");
$("#liscodeSingle").val("");
$("#descsSingle").val("");
$("#modal_single").modal('show');
}
function editSingle(mapid) {
let url = '<?=base_url('');?>api/dictMappings/detail/'+mapid;
$.ajax({
url: url,
method: "GET",
success: function(response) {
let data = response;
$("#updateSingle").val(mapid);
$("#liscodeSingle").val(data.LISCODE);
$("#hiscodeSingle").val(data.HISCODE);
$("#descsSingle").val(data.DESCS);
$("#modal_single").modal('show');
},
error: function(response) {
console.log(response.responseJSON)
}
});
}
function createProfile() {
$("#updateProfile").val("0");
$("#hiscodeProfile").val("");
$("#descsProfile").val("");
for (let i = 1; i <= 22; i++) {
let id = `.mliscode${i}`;
let element = $(id);
element.val('');
}
$("#modal_profile").modal('show');
}
function editProfile(mapid) {
let url = '<?=base_url('');?>api/dictMappings/detail/'+mapid;
$.ajax({
url: url,
method: "GET",
success: function(response) {
let data = response;
$("#updateProfile").val(mapid);
$("#hiscodeProfile").val(data.HISCODE);
$("#descsProfile").val(data.DESCS);
for (let i = 0; i < data.mliscodes.length; i++) {
const fieldId = `mliscode${i + 1}`;
$(`.${fieldId}`).val(data.mliscodes[i].LISCODE);
}
$("#modal_profile").modal('show');
},
error: function(response) {
console.log(response.responseJSON)
}
});
}
function saveSingle() {
let url = '<?=base_url('');?>api/dictMappings/saveSingle';
var update = $("#updateSingle").val();
var hiscode = $("#hiscodeSingle").val();
var liscode = $("#liscodeSingle").val();
var descs = $("#descsSingle").val();
let data = { update: update, hiscode: hiscode, liscode:liscode, descs:descs };
$.ajax({
url: url,
method: "POST",
data: data,
success: function(response) {
$("#liscodeSingle").val('');
$("#hiscodeSingle").val('');
$("#descsSingle").val('');
$("#updateSingle").val('');
$("#modal_single").modal('hide');
index();
},
error: function(response) {
alert(response.responseJSON.messages.errors);
}
});
}
function saveProfile() {
let url = '<?=base_url('');?>api/dictMappings/saveProfile';
var update = $("#updateProfile").val();
var hiscode = $("#hiscodeProfile").val();
var descs = $("#descsProfile").val();
let data = { update: update, hiscode: hiscode, descs:descs };
for (let i = 1; i <= 22; i++) {
let className = `.mliscode${i}`;
let value = $(className).val();
if (value !== undefined && value != '') {
data[`mliscode${i}`] = value;
}
}
$.ajax({
url: url,
method: "POST",
data: data,
success: function(response) {
$("#modal_profile").modal('hide');
index();
},
error: function(response) {
alert(response.responseJSON.messages.errors);
}
});
}
</script>
<?= $this->endSection() ?>

View File

@ -1,4 +1,4 @@
<?= $this->extend('layouts/main.php') ?> <?= $this->extend('admin/layout/main.php') ?>
<?= $this->section('content') ?> <?= $this->section('content') ?>
<div class="card border-0 m-1"> <div class="card border-0 m-1">

View File

@ -14,11 +14,11 @@
<!-- <body class="sb-nav-fixed sb-sidenav-toggled"> --> <!-- <body class="sb-nav-fixed sb-sidenav-toggled"> -->
<body class="sb-nav-fixed"> <body class="sb-nav-fixed">
<?= $this->include('layouts/topbar'); ?> <?= $this->include('admin/layout/topbar'); ?>
<div id="layoutSidenav"> <div id="layoutSidenav">
<?= $this->include('layouts/sidebar'); ?> <?= $this->include('admin/layout/sidebar'); ?>
<div id="layoutSidenav_content"> <div id="layoutSidenav_content">
<main> <main>

View File

@ -6,6 +6,7 @@
<a class="nav-link" href="<?=base_url();?>admin/"><div class="sb-nav-link-icon"><i class="bi bi-speedometer"></i></div>Dashboard</a> <a class="nav-link" href="<?=base_url();?>admin/"><div class="sb-nav-link-icon"><i class="bi bi-speedometer"></i></div>Dashboard</a>
<a class="nav-link" href="<?=base_url();?>changePass/"><div class="sb-nav-link-icon"><i class="bi bi-key"></i></div>Change Password</a> <a class="nav-link" href="<?=base_url();?>changePass/"><div class="sb-nav-link-icon"><i class="bi bi-key"></i></div>Change Password</a>
<div class="sb-sidenav-menu-heading">Administration</div> <div class="sb-sidenav-menu-heading">Administration</div>
<a class="nav-link" href="<?=base_url();?>admin/dictMappings/"> <div class="sb-nav-link-icon"><i class="bi bi-diagram-2"></i></div> Dict. Mapping Order </a>
<a class="nav-link" href="<?=base_url();?>admin/dictTests/"> <div class="sb-nav-link-icon"><i class="bi bi-journal-album"></i></div> Dict. Test </a> <a class="nav-link" href="<?=base_url();?>admin/dictTests/"> <div class="sb-nav-link-icon"><i class="bi bi-journal-album"></i></div> Dict. Test </a>
<a class="nav-link" href="<?=base_url();?>admin/users/"> <div class="sb-nav-link-icon"><i class="bi bi-person-circle"></i></div> Users </a> <a class="nav-link" href="<?=base_url();?>admin/users/"> <div class="sb-nav-link-icon"><i class="bi bi-person-circle"></i></div> Users </a>
<a class="nav-link" href="<?=base_url();?>admin/userroles/"> <div class="sb-nav-link-icon"><i class="bi bi-person-lock"></i></div> User Roles </a> <a class="nav-link" href="<?=base_url();?>admin/userroles/"> <div class="sb-nav-link-icon"><i class="bi bi-person-lock"></i></div> User Roles </a>

View File

@ -1,4 +1,4 @@
<?= $this->extend('layouts/main.php') ?> <?= $this->extend('admin/layout/main.php') ?>
<?= $this->section('content') ?> <?= $this->section('content') ?>
<div class="card border-0"> <div class="card border-0">

View File

@ -1,4 +1,4 @@
<?= $this->extend('layouts/main.php') ?> <?= $this->extend('admin/layout/main.php') ?>
<?= $this->section('content') ?> <?= $this->section('content') ?>
<div class="card border-0"> <div class="card border-0">

View File

@ -1,69 +0,0 @@
<div id="layoutSidenav_nav">
<nav class="sb-sidenav accordion sb-sidenav-light" id="sidenavAccordion">
<div class="sb-sidenav-menu">
<div class="nav">
<div class="sb-sidenav-menu-heading">Core</div>
<a class="nav-link" href="index.html">
<div class="sb-nav-link-icon"><i class="fas fa-tachometer-alt"></i></div>
Dashboard
</a>
<div class="sb-sidenav-menu-heading">Interface</div>
<a class="nav-link collapsed" href="#" data-bs-toggle="collapse" data-bs-target="#collapseLayouts" aria-expanded="false" aria-controls="collapseLayouts">
<div class="sb-nav-link-icon"><i class="fas fa-columns"></i></div>
Layouts
<div class="sb-sidenav-collapse-arrow"><i class="bi bi-chevron-down"></i></div>
</a>
<div class="collapse" id="collapseLayouts" aria-labelledby="headingOne" data-bs-parent="#sidenavAccordion">
<nav class="sb-sidenav-menu-nested nav">
<a class="nav-link" href="layout-static.html">Static Navigation</a>
<a class="nav-link" href="layout-sidenav-light.html">Light Sidenav</a>
</nav>
</div>
<a class="nav-link collapsed" href="#" data-bs-toggle="collapse" data-bs-target="#collapsePages" aria-expanded="false" aria-controls="collapsePages">
<div class="sb-nav-link-icon"><i class="fas fa-book-open"></i></div>
Pages
<div class="sb-sidenav-collapse-arrow"><i class="fas fa-angle-down"></i></div>
</a>
<div class="collapse" id="collapsePages" aria-labelledby="headingTwo" data-bs-parent="#sidenavAccordion">
<nav class="sb-sidenav-menu-nested nav accordion" id="sidenavAccordionPages">
<a class="nav-link collapsed" href="#" data-bs-toggle="collapse" data-bs-target="#pagesCollapseAuth" aria-expanded="false" aria-controls="pagesCollapseAuth">
Authentication
<div class="sb-sidenav-collapse-arrow"><i class="fas fa-angle-down"></i></div>
</a>
<div class="collapse" id="pagesCollapseAuth" data-bs-parent="#sidenavAccordionPages">
<nav class="sb-sidenav-menu-nested nav">
<a class="nav-link" href="login.html">Login</a>
<a class="nav-link" href="register.html">Register</a>
<a class="nav-link" href="password.html">Forgot Password</a>
</nav>
</div>
<a class="nav-link collapsed" href="#" data-bs-toggle="collapse" data-bs-target="#pagesCollapseError" aria-expanded="false" aria-controls="pagesCollapseError">
Error
<div class="sb-sidenav-collapse-arrow"><i class="fas fa-angle-down"></i></div>
</a>
<div class="collapse" id="pagesCollapseError" aria-labelledby="headingOne" data-bs-parent="#sidenavAccordionPages">
<nav class="sb-sidenav-menu-nested nav">
<a class="nav-link" href="401.html">401 Page</a>
<a class="nav-link" href="404.html">404 Page</a>
<a class="nav-link" href="500.html">500 Page</a>
</nav>
</div>
</nav>
</div>
<div class="sb-sidenav-menu-heading">Addons</div>
<a class="nav-link" href="charts.html">
<div class="sb-nav-link-icon"><i class="fas fa-chart-area"></i></div>
Charts
</a>
<a class="nav-link" href="tables.html">
<div class="sb-nav-link-icon"><i class="fas fa-table"></i></div>
Tables
</a>
</div>
</div>
<div class="sb-sidenav-footer">
<div class="small">Logged in as:</div>
Analis Lab
</div>
</nav>
</div>

BIN
cmod.bak

Binary file not shown.