|
Server : Apache System : Linux server.mata-lashes.com 3.10.0-1160.90.1.el7.x86_64 #1 SMP Thu May 4 15:21:22 UTC 2023 x86_64 User : matalashes ( 1004) PHP Version : 8.1.29 Disable Function : NONE Directory : /home/matalashes/www/simulasikite.mata-lashes.com/app.bak/Controllers/Ic/ |
Upload File : |
<?php
namespace App\Controllers\Ic;
use \App\Controllers\Ps\PS_Controller;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface;
use App\Libraries\Ps\Mylibpublic;
class Kirimbarangfgiic extends PS_Controller
{
private $id_column_name = 'mb_id';
private $mylib;
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
parent::initController($request, $response, $logger); // TODO: Change the autogenerated stub
parent::setPageTitleBreadcrumb(true, 'List Pengiriman Barang', array('l1' => 'Kirim Barang FGI', 'l2' => 'List Pengiriman Barang FGI'));
parent::setURLActionTable($this->class);
parent::setContentView($this->class);
parent::setBaseContAndModel($this->class, 'KirimBarangFgiIc');
$this->validation_input = $this->validation->setRules([
"tkb_fgiic_status" => [
'label' => 'Status',
'rules' => 'required',
],
"tkb_fgiic_fic_no" => [
'label' => 'Number',
'rules' => 'required',
],
"tkb_fgiic_fic_date" => [
'label' => 'Date',
'rules' => 'required',
]
]);
}
public function index()
{
parent::filterStoreLoad();
// parent::indexLoad();
$this->session->set('trash', false);
$this->session->set('keyword', '');
$start = date('Y-m-01');
$end = date('Y-m-t');
if ($_POST) {
$start = $this->request->getVar('start');
$end = $this->request->getVar('end');
}
$dtl = new \App\Models\KirimBarangFgiIc();
$pagination = $dtl->where('deleted_at', null)
// ->where('date(created_at) >=', $start)
// ->where('date(created_at) <=', $end)
->findAll();
$this->view_data['_data'] = $pagination;
$this->view_data['start'] = $start;
$this->view_data['end'] = $end;
$this->render->viewAdmin($this->content_views['table_view'], $this);
}
public function action($state = '', $id = '')
{
$id = $this->myLib->reveal_id($id);
if ($id == 'override404') {
return redirect()->route('override404');
}
$barang = new \App\Models\MasterBarang();
$this->view_data['_barang'] = $barang->where('deleted_at', null)->findAll();
$pob = new \App\Models\MasterPob();
$this->view_data['_pob'] = $pob->where('deleted_at', null)->findAll();
$bulumata = new \App\Models\MasterBulumata();
$this->view_data['_bulumata'] = $bulumata->where('deleted_at', null)->findAll();
if ($state == 'add') {
$this->mylib = new Mylibpublic();
$this->view_data['state'] = 'add';
$this->view_data['button'] = 'Simpan';
$this->view_data['upload_data'] = $this->upload_data;
if ($_POST) {
if (!$this->validation_input->withRequest($this->request)->run()) {
$this->view_data['error'] = true;
$this->view_data['message'] = 'Ada kesalahan dalam pengisian form!';
$this->view_data['error_list'] = $this->validation_input->getErrors();
} else {
unset($_POST['id']);
$_mdl = $this->myLib->getNewModel($this->models['base_model']);
$_datamodel = array();
$_datamodel['tkb_fgiic_pob'] = $this->request->getVar('tkb_fgiic_pob');
$_datamodel['tkb_fgiic_parsial'] = $this->request->getVar('tkb_fgiic_parsial');
$_datamodel['tkb_fgiic_fic_no'] = $this->request->getVar('tkb_fgiic_fic_no');
$_datamodel['tkb_fgiic_fic_date'] = $this->request->getVar('tkb_fgiic_fic_date');
$_datamodel['tkb_fgiic_status'] = 0;
$item = count($this->request->getVar('barang'));
$brg = $this->request->getVar('barang');
$n = $this->request->getVar('nilai');
$ma = $this->request->getVar('matauang');
$na = $this->request->getVar('nilaiasli');
$b = $this->request->getVar('bulumata');
$qbm = $this->request->getVar('qty_bm');
$tkb_fgiic_item = array();
$sum = 0;
for ($j=0; $j < $item; $j++) {
$valqbm = str_replace('.',"",$qbm[$j]);
$data = array(
'barang' => json_decode($brg[$j]),
'nilai' => $n[$j],
'matauang' => $ma[$j],
'nilaiasli' => $na[$j],
'bulumata' => $b[$j],
'qty_bm' => $valqbm,
);
array_push($tkb_fgiic_item, $data);
}
$_datamodel['tkb_fgiic_item'] = json_encode($tkb_fgiic_item);
if(isset($_POST['kirim'])){
$_datamodel['tkb_fgiic_status'] = 1;
$_datamodel['tkb_fgiic_status_mkt'] = 0;
$_datamodel['tkb_fgiic_status_sc'] = 0;
//update pengiriman
$kirimBarang = new \App\Models\KirimBarangPro();
$_kirimBarang = $kirimBarang->where('deleted_at', null)->where('tkb_pro_iskirim', 0)->orderBy('tkb_pro_id', 'ASC')->findAll();
foreach ($_kirimBarang as $d) {
$json = json_decode($d->tkb_pro_item);
$temp_barang = array();
$flag = true;
foreach($json as $j){
$i = $j->item;
$b = $j->bulumata;
$qty = $j->qty;
$qty_bm = $j->qty_bm;
$p = $j->pob;
$qty_kirim = $j->qty_kirim;
for ($j=0; $j < $item; $j++) {
$valqbm = str_replace('.',"",$qbm[$j]);
$barang = json_decode($brg[$j]);
if(!empty($barang)){
foreach($barang as $h){
if($h->tkb_pro_id == $d->tkb_pro_id && $i == $h->item && $b == $h->bulumata){
//update qty_kirim
$qty_kirim = $qty_kirim + $h->qty;
// update stok
$stok = new \App\Models\MasterStok();
$dtm = array(
'mb_id' => $i,
'ms_stok_fgi_transit' => (int)$h->qty,
);
$stok->save($dtm);
$stokbm = new \App\Models\MasterStokbulumata();
$datamodelbm = array(
'mbm_id' => $b,
'msb_stok_transit' => (int)$valqbm,
'msb_pob' => $p,
);
$stokbm->save($datamodelbm);
}
}
}
}
$datas = [
'item' => $i,
'qty' => $qty,
'qty_kirim' => $qty_kirim,
'qty_bm' => $qty_bm,
'pob' => $p,
'bulumata' => $b,
];
array_push($temp_barang,$datas);
if($qty_kirim < $qty){
$flag = false;
}
}
if($flag){
$_datamodels['tkb_pro_iskirim'] = 1;
}else{
$_datamodels['tkb_pro_iskirim'] = 0;
}
$_datamodels['tkb_pro_item'] = json_encode($temp_barang);
$kirimBarangs = new \App\Models\KirimBarangPro();
$kirimBarangs->update($d->tkb_pro_id, $_datamodels);
// log_message('alert','id '.$d->tkb_pro_id);
// log_message('alert','data updated '.json_encode($temp_barang));
}
}
try {
if (!$_mdl->save($_datamodel)) {
throw new \CodeIgniter\Database\Exceptions\DatabaseException();
} else {
$this->setMessage(false, true, $this->msgLib->scs_add());
}
} catch (Exception $e) {
$this->setMessage(true, false, $this->msgLib->err_add());
}
}
}
$this->render->viewAdmin($this->content_views['form_add_view'], $this);
} else if ($state == 'edit') {
// parent::stateEdit($id);
$mdl = $this->myLib->getNewModel($this->models['base_model']);
$_data = $mdl->find($id);
$this->view_data['state'] = 'edit';
$this->view_data['button'] = 'Simpan';
$this->view_data['id'] = $id;
$this->view_data['_data'] = $_data;
$this->view_data['upload_data'] = $this->upload_data;
if ($_POST) {
if (!$this->validation_input->withRequest($this->request)->run()) {
$this->view_data['error'] = true;
$this->view_data['message'] = 'Ada kesalahan dalam pengisian form!';
$this->view_data['error_list'] = $this->validation_input->getErrors();
} else {
unset($_POST['id']);
$_datamodel['tkb_fgiic_pob'] = $this->request->getVar('tkb_fgiic_pob');
$_datamodel['tkb_fgiic_parsial'] = $this->request->getVar('tkb_fgiic_parsial');
$_datamodel['tkb_fgiic_fic_no'] = $this->request->getVar('tkb_fgiic_fic_no');
$_datamodel['tkb_fgiic_fic_date'] = $this->request->getVar('tkb_fgiic_fic_date');
$_datamodel['tkb_fgiic_status'] = 0;
$item = count($this->request->getVar('bulumata'));
$brg = $this->request->getVar('barang');
$n = $this->request->getVar('nilai');
$ma = $this->request->getVar('matauang');
$na = $this->request->getVar('nilaiasli');
$b = $this->request->getVar('bulumata');
$qbm = $this->request->getVar('qty_bm');
$tkb_fgiic_item = array();
$sum = 0;
for ($j=0; $j < $item; $j++) {
$valqbm = str_replace('.',"",$qbm[$j]);
$data = array(
'barang' => json_decode($brg[$j]),
'nilai' => $n[$j],
'matauang' => $ma[$j],
'nilaiasli' => $na[$j],
'bulumata' => $b[$j],
'qty_bm' => $valqbm,
);
array_push($tkb_fgiic_item, $data);
}
$_datamodel['tkb_fgiic_item'] = json_encode($tkb_fgiic_item);
if(isset($_POST['kirim'])){
$_datamodel['tkb_fgiic_status'] = 1;
$_datamodel['tkb_fgiic_status_mkt'] = 0;
$_datamodel['tkb_fgiic_status_sc'] = 0;
//update pengiriman
$kirimBarang = new \App\Models\KirimBarangPro();
$_kirimBarang = $kirimBarang->where('deleted_at', null)->where('tkb_pro_iskirim', 0)->orderBy('tkb_pro_id', 'ASC')->findAll();
$qty_kirim = 0;
$savedBm = []; // penanda untuk menghindari duplicate
foreach ($_kirimBarang as $d) {
$json = json_decode($d->tkb_pro_item);
$temp_barang = array();
$flag = true;
// Ambil data lama
$temp_ids = [];
if (!empty($d->tkb_fgiic_id)) {
$decoded = json_decode($d->tkb_fgiic_id, true);
$temp_ids = is_array($decoded) ? $decoded : [];
}
foreach($json as $j){
$i = $j->item;
$b = $j->bulumata;
$qty = $j->qty;
$qty_bm = $j->qty_bm;
$p = $j->pob;
$qty_kirim = $j->qty_kirim;
$old_qty_kirim = $j->qty_kirim; // nilai lama
for ($k=0; $k < $item; $k++) {
$valqbm = str_replace('.',"",$qbm[$k]);
$barang = json_decode($brg[$k]);
if(!empty($barang)){
foreach($barang as $h){
// if($h->tkb_pro_id == $d->tkb_pro_id && $i == $h->item){
if($h->tkb_pro_id == $d->tkb_pro_id && $i == $h->item && $b == $h->bulumata){
//update qty_kirim
$qty_kirim = $qty_kirim + $h->qty;
//update stok
$stok = new \App\Models\MasterStok();
$dtm = array(
'mb_id' => $i,
'ms_pob' => $p,
'ms_stok_fgi_transit' => (int)$h->qty,
);
log_message('alert',json_encode($dtm));
$stok->save($dtm);
$stokbm = new \App\Models\MasterStokbulumata();
// cek apakah kombinasi bulumata + qty_bm sudah disimpan
$key = $b . '-' . $valqbm . '-' . $p;
if (!isset($savedBm[$key])) {
$datamodelbm = [
'mbm_id' => $b,
'msb_stok_transit' => (int)$valqbm,
'msb_pob' => $p,
];
log_message('alert', "SAVE SEKALI: " . json_encode($datamodelbm));
// $stokbm = new \App\Models\MasterStokbulumata();
$stokbm->save($datamodelbm);
$savedBm[$key] = true; // tandai sudah disimpan
}
}
}
}
}
$datas = [
'item' => $i,
'qty' => $qty,
'qty_kirim' => $qty_kirim,
'qty_bm' => $qty_bm,
'pob' => $p,
'bulumata' => $b,
];
array_push($temp_barang,$datas);
if($qty_kirim < $qty){
$flag = false;
}
// Cek apakah qty_kirim berubah
// log_message('alert','QTY LAMA '.$old_qty_kirim);
// log_message('alert','QTY BARU '.$qty_kirim);
if ($qty_kirim != $old_qty_kirim) {
$newId = ['id' => (string)$id];
// cek duplikasi
$exists = false;
foreach ($temp_ids as $row) {
if ($row['id'] == $newId['id']) {
$exists = true;
break;
}
}
if (!$exists) {
$temp_ids[] = $newId;
}
}
}
if($flag){
$_datamodels['tkb_pro_iskirim'] = 1;
}else{
$_datamodels['tkb_pro_iskirim'] = 0;
}
// log_message('alert','data updated '.json_encode($temp_barang));
$_datamodels['tkb_pro_item'] = json_encode($temp_barang);
// --- Handling tkb_fgiic_id ---
if (!empty($temp_ids)) {
$_datamodels['tkb_fgiic_id'] = json_encode($temp_ids);
}else{
$_datamodels['tkb_fgiic_id'] = NULL;
}
$kirimBarangs = new \App\Models\KirimBarangPro();
$kirimBarangs->update($d->tkb_pro_id, $_datamodels);
}
}
try {
if (!$mdl->update($id, $_datamodel)) {
throw new \CodeIgniter\Database\Exceptions\DatabaseException();
} else {
$this->setMessage(false, true, $this->msgLib->scs_edit());
}
} catch (Exception $e) {
$this->setMessage(true, false, $this->msglib->err_edit());
}
}
}
$this->render->viewAdmin($this->content_views['form_edit_view'], $this);
} else if ($state == 'delete') {
$this->view_data['state'] = 'delete';
$mdl = $this->myLib->getNewModel($this->models['base_model']);
$_data = $mdl->find($id);
if($_data->tkb_fgiic_status != 0){
$json = json_decode($_data->tkb_fgiic_item);
foreach($json as $k){
$brg = $k->barang;
$n = $k->nilai;
// $b = $k->bulumata;
$qbm = $k->qty_bm;
if(!empty($brg)){
//update pengiriman
$db = \Config\Database::connect();
$jsonId = json_encode(['id' => (string)$id]);
$escaped = $db->escape($jsonId); // hasilnya => '{"id":"4"}'
$kirimBarang = new \App\Models\KirimBarangPro();
$_kirimBarang = $kirimBarang
->where("JSON_CONTAINS(tkb_fgiic_id, $escaped)", null, false)
->orderBy('tkb_pro_id', 'ASC')
->findAll();
$savedBm = [];
foreach ($_kirimBarang as $d) {
$jsons = json_decode($d->tkb_pro_item);
$updatedItems = [];
foreach ($jsons as $j) {
$i = $j->item;
$b = $j->bulumata;
$qty = $j->qty;
$qty_bm = $j->qty_bm;
$p = $j->pob;
$old_qty_kirim = $j->qty_kirim;
$new_qty_kirim = $old_qty_kirim; // default sama
foreach ($brg as $h) {
if ($h->tkb_pro_id == $d->tkb_pro_id && $i == $h->item && $b == $h->bulumata) {
$new_qty_kirim = max(0, $old_qty_kirim - $h->qty);
// update stok
$stok = new \App\Models\MasterStok();
$dtm = [
'mb_id' => $h->item,
'ms_pob' => $_data->tkb_fgiic_pob,
'ms_stok_fgi' => (int)$h->qty,
'ms_alasan' => 'canceled transaction',
];
$stok->save($dtm);
// update stok bulumata (hanya sekali per kombinasi unik)
$stokbm = new \App\Models\MasterStokbulumata();
$key = $b . '-' . $qbm . '-' . $p;
if (!isset($savedBm[$key])) {
$datamodelbm = [
'mbm_id' => $b,
'msb_stok' => (int)$qbm,
'msb_pob' => $_data->tkb_fgiic_pob,
'msb_alasan' => 'canceled transaction',
];
$stokbm->save($datamodelbm);
$savedBm[$key] = true;
}
}
}
$updatedItems[] = [
'item' => $i,
'qty' => $qty,
'qty_kirim' => $new_qty_kirim,
'qty_bm' => $qty_bm,
'pob' => $p,
'bulumata' => $b,
];
}
// log hasil akhir per tkb_pro_id
// log_message('alert', '$d->tkb_pro_id '.$d->tkb_pro_id);
// log_message('alert', 'data updated '.json_encode($updatedItems));
// update ke DB
$_datamodels = [
'tkb_pro_item' => json_encode($updatedItems),
'tkb_pro_iskirim' => 0
];
$kirimBarang->update($d->tkb_pro_id, $_datamodels);
}
}
}
//end update pengiriman
}
$this->view_data['upload_data'] = $this->upload_data;
try {
if (!$mdl->delete($id)) {
throw new \CodeIgniter\Database\Exceptions\DatabaseException();
} else {
$this->setMessage(false, true, $this->msgLib->scs_del());
}
} catch (Exception $e) {
$this->setMessage(false, true, $this->msglib->err_del());
}
$this->render->viewAdmin($this->content_views['form_delete_view'], $this);
// parent::stateDelete($id);
} else if ($state == 'restore') {
parent::stateRestore($this->id_column_name, $id);
} else if ($state == 'deletepermanent') {
parent::stateDeletePermanent($this->id_column_name, $id);
} else if ($state == 'view') {
parent::stateView($id);
} else {
return redirect()->route('override404');
}
}
public function trash()
{
parent::filterStoreLoad();
parent::trashView();
}
public function cekstok(){
if(isset($_POST)){
$id=$_POST['id'];
$brg = new \App\Models\MasterStok();
$_brg = $brg->get_sum_stok_fgi($id);
if ($_brg->stok != 0) {
echo json_encode(array(
"statusCode"=>200,
"stok"=>$_brg->stok
));
} else {
echo json_encode(array(
"statusCode"=>400,
"stok"=>0
));
}
}
}
public function cekstokbulumata(){
if(isset($_POST)){
$id=$_POST['id'];
$pob=$_POST['pob'];
$brg = new \App\Models\MasterStokbulumata();
$_brg = $brg->get_sum_stokbm_transit_pob($id,$pob);
if ($_brg->stok != 0) {
echo json_encode(array(
"statusCode"=>200,
"stok"=>$_brg->stok
));
} else {
echo json_encode(array(
"statusCode"=>400,
"stok"=>0
));
}
}
}
public function checkpassword()
{
$confirm_password = $_POST['cp'];
$brg = new \App\Models\MasterPasskeu();
$_brg = $brg->first();
$password = $_brg->mpkeu_pass;
if($confirm_password == $password){
$mdl = $this->myLib->getNewModel($this->models['base_model']);
echo json_encode(array(
"statusCode"=>200
));
}else{
echo json_encode(array(
"statusCode"=>400
));
}
}
public function cekbarang(){
if(isset($_POST)){
$id=$_POST['id'];
$value=$_POST['value'];
$kirimBarang = new \App\Models\KirimBarangPro();
$_kirimBarang = $kirimBarang->where('deleted_at', null)->where('tkb_pro_iskirim', 0)->orderBy('tkb_pro_id', 'ASC')->findAll();
$bm = new \App\Models\MasterBulumata();
$_bm = $bm->where('mbm_id', $id)->first();
$konversi = $_bm->mbm_konversi ?? 1;
$flag = true;
$kirim = $value*$konversi;
$sisa_kirim = $value*$konversi;
$defParams = array();
$temp_barang_show = array();
$temp_barang_list = array();
foreach ($_kirimBarang as $d) {
if($flag){
$json = json_decode($d->tkb_pro_item);
foreach($json as $j){
$i = $j->item;
$b = $j->bulumata;
$qty = $j->qty;
$qty_bm = $j->qty_bm;
$p = $j->pob;
$qty_kirim = $j->qty_kirim;
if($qty_kirim < $qty){
if ($b == $id){
$sisaStok = $qty - $qty_kirim;//30
if($sisaStok >= $kirim){//stok lebih besar dari jml dikirim
$qty_kirim = (int)$qty_kirim + (int)$kirim; //disimpan untuk memotong qty_kirim
$data = array(
'tkb_pro_id' => $d->tkb_pro_id,
'item' => $i,
'bulumata' => $b,
'qty' => $kirim,
);
$barang = new \App\Models\MasterBarang();
$_barang = $barang->where('mb_id', $i)->where('deleted_at', null)->first();
$dl = array(
'brg' => $_barang->mb_kode,
'qty' => $kirim,
);
if($kirim > 0){
array_push($temp_barang_show,$data);
array_push($temp_barang_list,$dl);
}
$kirim = 0;
$flag = false;
} else{ //stok lebih kecil dari jml kirim
$kirim = $kirim-$sisaStok;
$qty_kirim = $qty_kirim + $sisaStok; //disimpan untuk memotong qty_kirim
$data = array(
'tkb_pro_id' => $d->tkb_pro_id,
'item' => $i,
'bulumata' => $b,
'qty' => $sisaStok,
);
$barang = new \App\Models\MasterBarang();
$_barang = $barang->where('mb_id', $i)->where('deleted_at', null)->first();
$dl = array(
'brg' => $_barang->mb_kode,
'qty' => $sisaStok,
);
if($sisaStok > 0){
array_push($temp_barang_show,$data);
array_push($temp_barang_list,$dl);
}
if($kirim <= 0){
$flag = false;
}
}
}
}
}
}
}
// log_message('alert','temp data barang show'.json_encode($temp_barang_show));
// log_message('alert','temp data barang '.json_encode($temp_barang_list));
// log_message('alert','-------------------------------');
echo json_encode(array(
"statusCode"=>200,
"barang"=> json_encode($temp_barang_show),
"baranglist"=> json_encode($temp_barang_list)
));
}
}
}