Untitled
unknown
plain_text
2 years ago
49 kB
10
Indexable
<?php
declare(strict_types=1);
namespace App\Http\Controllers\V1;
use stdClass;
use Carbon\Carbon;
use Illuminate\Support\Str;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;
use App\Exceptions\ParameterException;
use App\Repositories\QCModelRepository;
use function PHPUnit\Framework\isEmpty;
use App\Exceptions\InvalidRuleException;
use App\Exceptions\DataNotFoundException;
use Illuminate\Support\Facades\Validator;
use App\Exceptions\ThirdPartyServiceException;
use App\Repositories\GeneralRepository;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Log;
class InputQcController extends Controller
{
private $qcRepo;
private $generalRepo;
private $output;
public function __construct(QCModelRepository $qcRepo, GeneralRepository $generalRepo)
{
header("Strict-Transport-Security: max-age=31536000; includeSubDomains; preload");
$this->qcRepo = $qcRepo;
$this->generalRepo = $generalRepo;
$this->output = new stdClass();
$this->output->responseCode = '';
$this->output->responseDesc = '';
$this->output->responseData = '';
}
public function getDataQCMerchant(Request $request)
{
$filter = [];
$new_req = new Request([
'mid' => $request->header('mid'),
'nama-merchant' => $request->header('nama-merchant'),
]);
$validator = Validator::make($new_req->all(), [
'mid' => 'bail|nullable|numeric',
], [
'mid.numeric' => 'Kolom MID harus berupa angka',
]);
if ($validator->fails()) {
$error_message = $validator->errors()->first();
throw new ParameterException($error_message);
}
$filter['mid'] = $request->header('mid');
$filter['nama-merchant'] = $request->header('nama-merchant');
$result = $this->qcRepo->getDataQCMerchant($filter);
if (empty($result->items())) {
throw new DataNotFoundException("Data Merchant Tidak Ditemukan");
}
$this->output->responseCode = '00';
$this->output->responseDesc = 'Success';
$this->output->responseData = $result;
return response()->json($this->output);
}
public function getDetailQCMerchant(Request $request)
{
$filter = [];
$new_req = new Request([
'mid' => $request->header('mid'),
// 'nama-merchant' => $request->header('nama-merchant'),
]);
$validator = Validator::make($new_req->all(), [
'mid' => 'bail|required|numeric',
], [
'mid.numeric' => 'Kolom MID harus berupa angka',
]);
if ($validator->fails()) {
$error_message = $validator->errors()->first();
throw new ParameterException($error_message);
}
$filter['mid'] = $request->header('mid');
// $filter['nama-merchant'] = $request->header('nama-merchant');
$result = $this->qcRepo->getDetailQCMerchant($filter);
if (empty($result)) {
throw new DataNotFoundException("Data Merchant Tidak Ditemukan");
}
$this->output->responseCode = '00';
$this->output->responseDesc = 'Success';
$this->output->responseData = $result;
return response()->json($this->output);
}
public function InputQCMerchant(Request $request)
{
//validate header
$new_req = new Request([
'PERNR' => $request->header('PERNR'),
'NAMA-LENGKAP' => $request->header('NAMA-LENGKAP'),
'LEVEL-ID' => $request->header('LEVEL-ID'),
]);
$validator = Validator::make($new_req->all(), [
'PERNR' => 'required',
'NAMA-LENGKAP' => 'required',
'LEVEL-ID' => 'required',
]);
if ($validator->fails()) {
$error_message = $validator->errors()->first();
throw new ParameterException($error_message);
}
$validator = Validator::make($request->all(), [
'app_id' => ['required'],
'mid' => 'required|numeric',
'nama_merchant' => ['required'],
'dba' => ['required'],
'alamat_merchant' => ['required'],
'kodepos' => ['required'],
'kelurahan' => ['required'],
'kecamatan' => ['required'],
'kabupaten' => ['required'],
'provinsi' => ['required'],
'pic' => ['required'],
'tlp_merchant_1' => ['required', 'max:13', 'regex:/^[0-9\-]+$/'],
'tlp_merchant_2' => ['required', 'max:13', 'regex:/^[0-9\-]+$/'],
'jenis_merchant' => ['required'],
'group_merchant' => 'bail|nullable|alpha',
// 'program_merchant' => ['required'],
'no_rek' => ['required', 'regex:/^[0-9\-]+$/'],
'pemilik_rek' => ['required'],
'merchant_tipe' => ['required'],
'mcc_visa' => ['required'],
'mcc_master' => ['required'],
'mcc_npg' => ['required'],
'mcc_unik' => ['required'],
'mcc_master_auto' => ['required', 'regex:/^[^!@#$%^&*<>\?]+$/'],
'mcc_visa_auto' => ['required', 'regex:/^[^!@#$%^&*<>\?]+$/'],
'mcc_npg_auto' => ['required', 'regex:/^[^!@#$%^&*<>\?]+$/'],
'mcc_unik_auto' => ['required', 'regex:/^[^!@#$%^&*<>\?]+$/'],
'mdr_onus' => ['required'],
'mdr_offus' => ['required'],
'mdr_debit' => ['required'],
'mdr_debit_pl' => ['required'],
'mdr_debit_npg' => ['required'],
'mdr_unik' => ['required'],
"sales_volume" => ['required', 'starts_with:1,2,3,4,5,6,7,8,9'],
'jam_buka' => ['required'],
'jam_tutup' => ['required'],
'note' => ['required'],
// 'mdr_plan' => ['required', 'array'],
'mdr_plan.*.mdr_term' => ['required'],
'mdr_plan.*.mdr_plan' => ['required'],
'mdr_plan.*.mdr' => ['required'],
], [
'mdr_plan.*.mdr_term.required' => 'The mdr installment data must be completed.',
'mdr_plan.*.mdr_plan.required' => 'The mdr installment data must be completed.',
'mdr_plan.*.mdr.required' => 'The mdr installment data must be completed.'
]);
if ($validator->fails()) {
$error_message = $validator->errors()->first();
throw new ParameterException($error_message);
}
$req_data = $request->all();
$data_from_table = $this->qcRepo->getMerchant($request->app_id);
if (empty($data_from_table)) {
throw new DataNotFoundException("app id Tidak Ditemukan");
}
// $old_data = [];
foreach ($data_from_table as $key => $value) {
$old_data[$key] = $value;
}
//get mapping field
$mapping_field = $this->generalRepo->getMappingField()->toArray();
$mapping_key = array_column($mapping_field, 'app_merchant', 'field_name');
//compare the old and new app_merchant
$changes = [];
foreach ($old_data as $key => $old_value) {
$new_value = $req_data[$key];
if ($old_value !== $new_value && !empty($new_value)) {
if (isset($mapping_key[$key])) {
$column_name = $mapping_key[$key];
$changes[$column_name] = array(
$old_value,
$new_value
);
} else {
throw new ParameterException("Field " . $key . " tidak diketahui.");
}
}
}
//compare mdr
$mdr_plan_zero = [];
$cicilan = [];
$mdr = $this->qcRepo->GetMdr($request->app_id);
foreach ($mdr as $key => $value) {
if ($value->mdr_plan == 0) {
if ($value->on_off == 1) {
$mdr_plan_zero['mdr_onus'] = $value;
}
if ($value->on_off == 0) {
$mdr_plan_zero['mdr_offus'] = $value;
}
if ($value->on_off == 2) {
$mdr_plan_zero['mdr_debit'] = $value;
}
if ($value->on_off == 3) {
$mdr_plan_zero['mdr_debit_pl'] = $value;
}
if ($value->on_off == 4) {
$mdr_plan_zero['mdr_debit_png'] = $value;
}
if ($value->on_off == 5) {
$mdr_plan_zero['mdr_unik'] = $value;
}
} else {
$cicilan[] = $value;
}
}
if (isset($mdr_plan_zero['mdr_debit_pl']) && $request->mdr_onus !== $mdr_plan_zero['mdr_onus']->mdr) {
$changes['mdr_onus'] = [$mdr_plan_zero['mdr_onus']->mdr, $request->mdr_onus];
}
if (isset($mdr_plan_zero['mdr_debit_pl']) && $request->mdr_offus !== $mdr_plan_zero['mdr_offus']->mdr) {
$changes['mdr_offus'] = [$mdr_plan_zero['mdr_offus']->mdr, $request->mdr_offus];
}
if (isset($mdr_plan_zero['mdr_debit_pl']) && $request->mdr_debit !== $mdr_plan_zero['mdr_debit']->mdr) {
$changes['mdr_debit'] = [$mdr_plan_zero['mdr_debit']->mdr, $request->mdr_debit];
}
if (isset($mdr_plan_zero['mdr_debit_pl']) && $request->mdr_debit_pl !== $mdr_plan_zero['mdr_debit_pl']->mdr) {
$changes['mdr_debit_pl'] = [$mdr_plan_zero['mdr_debit_pl']->mdr, $request->mdr_debit_pl];
}
if (isset($mdr_plan_zero['mdr_debit_pl']) && $request->mdr_debit_npg !== $mdr_plan_zero['mdr_debit_png']->mdr) {
$changes['mdr_debit_npg'] = [$mdr_plan_zero['mdr_debit_png']->mdr, $request->mdr_debit_npg];
}
if (isset($mdr_plan_zero['mdr_debit_pl']) && $request->mdr_unik !== $mdr_plan_zero['mdr_unik']->mdr) {
$changes['mdr_unik'] = [$mdr_plan_zero['mdr_unik']->mdr, $request->mdr_unik];
}
$mdr_cicilan_uba = 0;
$perubahan_mdr = [];
$penambahan_mdr = [];
if ($request->merchant_tipe == 99) {
foreach ($request->mdr_plan as $key => $mdr_plan) {
if (array_key_exists($key, $cicilan)) {
if ($mdr_plan['mdr'] !== $cicilan[$key]->mdr) {
$perubahan_mdr[] = [$mdr_plan['mdr'], $cicilan[$key]->mdr];
}
if ($mdr_plan['mdr_term'] !== $cicilan[$key]->mdr_term) {
$perubahan_mdr[] = [$mdr_plan['mdr_term'], $cicilan[$key]->mdr_term];
}
if ($mdr_plan['mdr_plan'] !== $cicilan[$key]->mdr_plan) {
$perubahan_mdr[] = [$mdr_plan['mdr_plan'], $cicilan[$key]->mdr_plan];
}
} else {
$penambahan_mdr[] = [$mdr_plan['mdr']];
}
}
if (!empty($perubahan_mdr) || !empty($penambahan_mdr) || count($request->mdr_plan) !== count($cicilan)) {
$mdr_cicilan_uba = 1;
// $changes['mdr_cicilan'] = [$mdr_cicilan, $request->mdr_plan];
}
}
if (empty($changes) && $mdr_cicilan_uba != 1) {
throw new DataNotFoundException("Tidak terdeteksi perubahan data");
}
DB::beginTransaction();
try {
$json_changes = json_encode($changes);
//check perubahan mcc
$param_mcc = 'NON-MCC';
if (isset($changes['mcc_visa']) || isset($changes['mcc_master']) || isset($changes['mcc_npg']) || isset($changes['mcc_unik'])) {
$param_mcc = 'MCC';
}
//get level
$inbox_level = $this->qcRepo->getStatusInboxLevel($request->header('LEVEL-ID'), $param_mcc, 'INPUT');
if (empty($inbox_level)) {
throw new ParameterException("Anda tidak memeliki kewenangan untuk melakukan proses ini.");
}
//insert qc_data
$data_insert = array(
'app_id' => $request->app_id,
'app_jenis' => $request->app_jenis,
'mid' => $request->mid,
'status' => 'INPUT',
'status_inbox_level' => $inbox_level->user_level_next,
'status_last_level' => $request->header('LEVEL-ID'),
'tgl_entry' => Carbon::now()->toDateTimeString(),
'user_entry' => $request->header('PERNR') . "|" . $request->header('NAMA-LENGKAP'),
'note_entry' => $request->notes,
'tgl_update' => Carbon::now()->toDateTimeString(),
'user_update' => $request->header('PERNR') . "|" . $request->header('NAMA-LENGKAP'),
'note_update' => $request->note,
'is_mdr_cicilan_ubah' => $mdr_cicilan_uba,
'data_ubah' => $json_changes
);
$result = $this->qcRepo->Insert($data_insert);
if ($result === null) {
throw new ParameterException("Gagal insert qc_data");
}
$arr_mdr_cicilan = [];
if ($mdr_cicilan_uba == 1) {
foreach ($request->mdr_plan as $rows) {
$arr_mdr_cicilan[] = [
"id_qc" => $result,
"mid" => $request->mid,
"plan" => $rows["mdr_plan"],
"term" => $rows["mdr_term"],
"mdr" => $rows["mdr"],
];
}
$this->qcRepo->input_mdr_cicilan($arr_mdr_cicilan);
}
//insert qc_log
$insert_log = array(
'id_qc' => $result,
'status' => 'INPUT',
'tgl' => date("Y-m-d H:i:s"),
'user' => $request->header('PERNR') . '|' . $request->header('NAMA-LENGKAP'),
'user_level' => $request->header('LEVEL-ID'),
'note' => $request->note
);
$result_log = $this->qcRepo->insert_qc_log($insert_log);
if ($result_log < 0) {
throw new ParameterException('Gagal insert log.');
}
DB::commit();
$this->output->responseCode = '00';
$this->output->responseDesc = "Data quality control berhasil diajukan.\nID QC : " . $result;
$this->output->responseData = ['id_qc' => $result];
return response()->json($this->output);
} catch (\Throwable $e) {
DB::rollback();
$error_msg = $e->getMessage();
throw new ParameterException($error_msg);
}
}
public function AproveQCMerchant(Request $request)
{
$validator = Validator::make($request->all(), [
'id_qc' => 'bail|required|numeric',
'note_approve' => 'bail|required'
]);
$validator_header = Validator::make($request->header(), [
'level-id' => 'bail|required',
'pernr' => 'bail|required',
'nama-lengkap' => 'bail|required'
]);
if ($validator->fails()) {
$error_massage = $validator->errors()->first();
throw new ParameterException($error_massage);
}
if ($validator_header->fails()) {
$error_massage = $validator_header->errors()->first();
throw new ParameterException($error_massage);
}
$id_qc = $request->id_qc;
$level_id = $request->header('level-id');
$username = $request->header('pernr');
$nama_lengkap = $request->header('nama-lengkap');
$note_approve = $request->note_approve;
$data_qc = $this->qcRepo->getDataQc($id_qc);
if (empty($data_qc)) {
throw new DataNotFoundException("Data QC Tidak Ditemukan.");
}
DB::beginTransaction();
try {
$data_ubah = (array) json_decode($data_qc->data_ubah);
$jmlh_data_ubah = count($data_ubah);
//pengecekan jika melalui analis
if ($level_id == '18') {
if (($jmlh_data_ubah == 2) && (isset($data_ubah['mcc_visa']) || isset($data_ubah['mcc_master']) || isset($data_ubah['mcc_npg']) || isset($data_ubah['mcc_unik']))) {
$map_mcs = $this->qcRepo->select_data('map_mcs', array('modul' => 'QUALITYCONTROL', 'user_level_action' => $level_id, 'action' => 'APPROVE', 'param' => 'MCC'), $select_str = 'user_level_next');
} else {
$map_mcs = $this->qcRepo->select_data('map_mcs', array('modul' => 'QUALITYCONTROL', 'user_level_action' => $level_id, 'action' => 'APPROVE', 'param' => 'MCC++'), $select_str = 'user_level_next');
}
} else {
$map_mcs = $this->qcRepo->select_data('map_mcs', array('modul' => 'QUALITYCONTROL', 'user_level_action' => $level_id, 'action' => 'APPROVE'), $select_str = 'user_level_next');
}
if (count($map_mcs) < 1) {
DB::rollback();
throw new DataNotFoundException("Data map_mcs Tidak Ditemukan/user anda tidak dapat mengakses menu ini.");
}
$arr_data_trail = array();
$arr_query_trail = array();
if ($map_mcs[0]->user_level_next == '9999') {
$dqc_ubah = array();
foreach ($data_ubah as $key => $value) {
if ($key == 'mdr_onus' || $key == 'mdr_offus' || $key == 'mdr_debit_pl' || $key == 'mdr_debit' || $key == 'mdr_debit_npg' || $key == 'mdr_unik') {
$field_mdr_ubah[] = $key;
$mdr_ubah[$key] = $value[1];
} else {
$field_qc_ubah[] = $key;
if ($key == 'tlp_merchant_1' || $key == 'tlp_merchant_2') {
$field_param_ubah[] = 'tlp_merchant_1;tlp_merchant_2';
} else {
$field_param_ubah[] = $key;
}
$dqc_ubah[$key] = $value[1];
}
}
$arr_data_trail[] = $dqc_ubah;
/*update data terkait hasil quality control*/
if (isset($dqc_ubah) && count($dqc_ubah) > 0) {
$proses_app_merchant = $this->qcRepo->update_data('app_merchant', $dqc_ubah, array('app_id' => $data_qc->app_id, 'mid' => $data_qc->mid));
if ($proses_app_merchant < 0) {
DB::rollback();
throw new DataNotFoundException("Data merchant gagal diperbaharui.");
}
//update data inisiasi
$list_param = $this->qcRepo->get_map_merchant_inisiasi($field_param_ubah);
if (empty($list_param)) {
DB::rollback();
throw new DataNotFoundException("Data list_param tidak ditemukan.");
}
foreach ($list_param as $val) {
$field_inisiasi = explode(';', $val->inisiasi_field);
$field_app_merchant = explode(';', $val->app_merchant_field);
if (count($field_inisiasi) == count($field_app_merchant)) {
if (isset($init_ubah[$val->inisiasi_field])) {
$init_ubah[$val->inisiasi_field] = $init_ubah[$val->inisiasi_field] . ',' . $dqc_ubah[$val->app_merchant_field];
} else {
$init_ubah[$val->inisiasi_field] = $dqc_ubah[$val->app_merchant_field];
}
}
if (count($field_inisiasi) > count($field_app_merchant)) {
for ($i = 0; $i < count($field_inisiasi); $i++) {
if (isset($init_ubah[$field_inisiasi[$i]])) {
$init_ubah[$field_inisiasi[$i]] = $init_ubah[$field_inisiasi[$i]] . ',' . $dqc_ubah[$val->app_merchant_field];
} else {
$init_ubah[$field_inisiasi[$i]] = $dqc_ubah[$val->app_merchant_field];
}
}
}
if (count($field_inisiasi) < count($field_app_merchant)) {
$app_merchant_field = "";
for ($i = 0; $i < count($field_app_merchant); $i++) {
if ($i) {
$app_merchant_field = $app_merchant_field . '/' . (isset($dqc_ubah[$field_app_merchant[$i]]) ? $dqc_ubah[$field_app_merchant[$i]] : "");
} else {
$app_merchant_field = (isset($dqc_ubah[$field_app_merchant[$i]]) ? $dqc_ubah[$field_app_merchant[$i]] : "");
}
}
if (isset($init_ubah[$val->inisiasi_field])) {
$init_ubah[$val->inisiasi_field] = $init_ubah[$val->inisiasi_field] . ',' . $app_merchant_field;
} else {
$init_ubah[$val->inisiasi_field] = $app_merchant_field;
}
}
}
if (isset($init_ubah) && count($init_ubah) > 0) {
$proses_inisiasi = $this->qcRepo->update_data('inisiasi', $init_ubah, array('app_id' => $data_qc->app_id));
if (empty($proses_inisiasi)) {
DB::rollback();
throw new DataNotFoundException("Data inisiasi gagal diperbaharui");
}
}
$mdr = $this->qcRepo->select_data('app_merchant_mdr', array('app_id' => $data_qc->app_id), '*');
$mdr_onus = 0;
$mdr_offus = 0;
$mdr_debit = 0;
$mdr_debit_pl = 0;
$mdr_debit_npg = 0;
$mdr_unik = 0;
if (isset($mdr)) {
foreach ($mdr as $dr) {
if ($dr->plan == 0) {
if ($dr->on_off == 1) {
$mdr_onus = 1;
} elseif ($dr->on_off == 0) {
$mdr_offus = 1;
} elseif ($dr->on_off == 2) {
$mdr_debit = 1;
} elseif ($dr->on_off == 3) {
$mdr_debit_pl = 1;
} elseif ($dr->on_off == 4) {
$mdr_debit_npg = 1;
} elseif ($dr->on_off == 5) {
$mdr_unik = 1;
}
}
}
}
if (isset($mdr_ubah['mdr_offus'])) {
if ($mdr_offus) {
$proses_offus = $this->qcRepo->update_data('app_merchant_mdr', array('mdr' => $mdr_ubah['mdr_offus']), array('app_id' => $data_qc->app_id, 'plan' => 0, 'on_off' => 0));
} else {
$data_offus = array(
'app_id' => $data_qc->app_id,
'mid' => $data_qc->mid,
'on_off' => 0,
'plan' => 0,
'term' => 0,
'mdr' => $mdr_ubah['mdr_offus']
);
$proses_offus = $this->qcRepo->insert_data('app_merchant_mdr', $data_offus);
}
if ($proses_offus < 0) {
DB::rollback();
throw new DataNotFoundException("Data MDR off us gagal diperbaharui.");
}
}
if (isset($mdr_ubah['mdr_onus'])) {
if ($mdr_onus) {
$proses_onus = $this->qcRepo->update_data('app_merchant_mdr', array('mdr' => $mdr_ubah['mdr_onus']), array('app_id' => $data_qc->app_id, 'plan' => 0, 'on_off' => 1));
} else {
$data_onus = array(
'app_id' => $data_qc->app_id,
'mid' => $data_qc->mid,
'on_off' => 1,
'plan' => 0,
'term' => 0,
'mdr' => $mdr_ubah['mdr_onus']
);
$proses_onus = $this->qcRepo->insert_data('app_merchant_mdr', $data_onus);
}
if ($proses_onus < 0) {
DB::rollback();
throw new DataNotFoundException("Data MDR on us gagal diperbaharui.");
}
}
if (isset($mdr_ubah['mdr_debit'])) {
if ($mdr_debit) {
$proses_debit = $this->qcRepo->update_data('app_merchant_mdr', array('mdr' => $mdr_ubah['mdr_debit']), array('app_id' => $data_qc->app_id, 'plan' => 0, 'on_off' => 2));
} else {
$data_debit = array(
'app_id' => $data_qc->app_id,
'mid' => $data_qc->mid,
'on_off' => 2,
'plan' => 0,
'term' => 0,
'mdr' => $mdr_ubah['mdr_debit']
);
$proses_debit = $this->qcRepo->insert_data('app_merchant_mdr', $data_debit);
}
if ($proses_debit < 0) {
DB::rollback();
throw new DataNotFoundException("Data MDR debit gagal diperbaharui.");
}
}
if (isset($mdr_ubah['mdr_debit_pl'])) {
if ($mdr_debit_pl) {
$proses_debit_pl = $this->qcRepo->update_data('app_merchant_mdr', array('mdr' => $mdr_ubah['mdr_debit_pl']), array('app_id' => $data_qc->app_id, 'plan' => 0, 'on_off' => 3));
} else {
$data_debit_pl = array(
'app_id' => $data_qc->app_id,
'mid' => $data_qc->mid,
'on_off' => 3,
'plan' => 0,
'term' => 0,
'mdr' => $mdr_ubah['mdr_debit_pl']
);
$proses_debit_pl = $this->qcRepo->insert_data('app_merchant_mdr', $data_debit_pl);
}
if ($proses_debit_pl < 0) {
DB::rollback();
throw new DataNotFoundException("Data MDR debit PL gagal diperbaharui.");
}
}
if (isset($mdr_ubah['mdr_debit_npg'])) {
if ($mdr_debit_npg) {
$proses_debit_npg = $this->qcRepo->update_data('app_merchant_mdr', array('mdr' => $mdr_ubah['mdr_debit_npg']), array('app_id' => $data_qc->app_id, 'plan' => 0, 'on_off' => 4));
} else {
$data_debit_npg = array(
'app_id' => $data_qc->app_id,
'mid' => $data_qc->mid,
'on_off' => 4,
'plan' => 0,
'term' => 0,
'mdr' => $mdr_ubah['mdr_debit_npg']
);
$proses_debit_npg = $this->qcRepo->insert_data('app_merchant_mdr', $data_debit_npg);
}
if ($proses_debit_npg < 0) {
DB::rollback();
throw new DataNotFoundException("Data MDR debit NPG gagal diperbaharui.");
}
}
if (isset($mdr_ubah['mdr_unik'])) {
if ($mdr_unik) {
$proses_debit_unik = $this->qcRepo->update_data('app_merchant_mdr', array('mdr' => $mdr_ubah['mdr_unik']), array('app_id' => $data_qc->app_id, 'plan' => 0, 'on_off' => 5));
} else {
$data_debit_npg = array(
'app_id' => $data_qc->app_id,
'mid' => $data_qc->mid,
'on_off' => 5,
'plan' => 0,
'term' => 0,
'mdr' => $mdr_ubah['mdr_unik']
);
$proses_debit_unik = $this->qcRepo->insert_data('app_merchant_mdr', $mdr_unik);
}
if ($proses_debit_unik < 0) {
DB::rollback();
throw new DataNotFoundException("Data MDR debit NPG gagal diperbaharui.");
}
}
}
$mdr_cicilan = $this->qcRepo->select_data('qc_mdr_cicilan_ubah', array('id_qc' => $id_qc), '*');
if (!empty($mdr_cicilan)) {
$this->qcRepo->delete_data_mdr(array('app_id' => $data_qc->app_id, 'mid' => $data_qc->mid, 'on_off' => '1'));
foreach ($mdr_cicilan as $val) {
$data_mdr_cicilan = array(
'app_id' => $data_qc->app_id,
'mid' => $val->mid,
'on_off' => 1,
'plan' => $val->plan,
'term' => $val->term,
'mdr' => $val->mdr
);
$proses_mdr_cicilan = $this->qcRepo->insert_data('app_merchant_mdr', $data_mdr_cicilan);
if (!$proses_mdr_cicilan) {
DB::rollback();
throw new DataNotFoundException("Data MDR debit PL gagal diperbaharui.");
}
}
}
}
$insert_update = array(
'status' => 'APPROVE',
'status_inbox_level' => $map_mcs[0]->user_level_next,
'status_last_level' => $level_id,
'tgl_update' => date('Y-m-d H:i:s'),
'user_update' => $username . '|' . $nama_lengkap,
'note_update' => $note_approve
);
$result_ins = $this->qcRepo->update_data('qc_data', $insert_update, array('id_qc' => $id_qc));
$result_interface = 0;
if ($map_mcs[0]->user_level_next == '9999') {
$insert_interface = array('id_qc' => $id_qc);
$result_interface = $this->qcRepo->insert_data('qc_interface', $insert_interface);
}
$datadbl['id_qc'] = $id_qc;
$datadbl['status'] = 'APPROVE';
$datadbl['tgl'] = date("Y-m-d H:i:s");
$datadbl['user'] = $username . '|' . $nama_lengkap;
$datadbl['user_level'] = $level_id;
$datadbl['note'] = $note_approve;
$insert_log = $this->qcRepo->insert_qc_log($datadbl);
if (!$insert_log) {
DB::rollback();
throw new DataNotFoundException("Data insert Log PL gagal diperbaharui.");
}
DB::commit();
$this->output->responseCode = "00";
$this->output->responseDesc = "SUCCESS APRROVE QC";
return response()->json($this->output);
} catch (\Thowable $e) {
DB::rollback();
$error_msg = $e->getMessage();
throw new DataNotFoundException($error_msg);
}
}
public function RejectQCMerchant(Request $request)
{
//validate header
$new_req = new Request([
'PERNR' => $request->header('PERNR'),
'NAMA-LENGKAP' => $request->header('NAMA-LENGKAP'),
'LEVEL-ID' => $request->header('LEVEL-ID'),
]);
$validator = Validator::make($new_req->all(), [
'PERNR' => 'required',
'NAMA-LENGKAP' => 'required',
'LEVEL-ID' => 'required',
]);
if ($validator->fails()) {
$error_message = $validator->errors()->first();
throw new ParameterException($error_message);
}
$validator = Validator::make($request->all(), [
'id_qc' => 'required',
'status' => 'required',
'notes' => 'bail|required'
], [
'notes.required' => 'The notes reject field is required'
]);
if ($validator->fails()) {
$error_message = $validator->errors()->first();
throw new ParameterException($error_message);
}
DB::beginTransaction();
try {
$map_mcs = $this->qcRepo->select_data('map_mcs', array('modul' => 'QUALITYCONTROL', 'user_level_action' => $request->header('LEVEL-ID'), 'action' => $request->status), $select_str = 'user_level_next');
if (count($map_mcs) < 1) {
throw new DataNotFoundException("Data map_mcs Tidak Ditemukan/user anda tidak dapat mengakses menu ini.");
}
$data_update = array(
'status' => $request->status,
'status_inbox_level' => $map_mcs[0]->user_level_next,
'status_last_level' => $request->header('LEVEL-ID'),
'tgl_update' => date('Y-m-d H:i:s'),
'user_update' => $request->header('PERNR') . '|' . $request->header('NAMA-LENGKAP'),
'note_update' => $request->notes
);
$where = [
'id_qc' => $request->id_qc
];
$result_update = $this->qcRepo->update_data('qc_data', $data_update, $where);
if ($result_update < 0) {
DB::rollBack();
throw new ParameterException('Gagal update qc_data.');
}
$insert_log = array(
'id_qc' => $request->id_qc,
'status' => $request->status,
'tgl' => date("Y-m-d H:i:s"),
'user' => $request->header('PERNR') . '|' . $request->header('NAMA-LENGKAP'),
'user_level' => $request->header('LEVEL-ID'),
'note' => $request->notes
);
$result_log = $this->qcRepo->insert_qc_log($insert_log);
if ($result_log < 0) {
DB::rollBack();
throw new ParameterException('Gagal insert log.');
}
DB::commit();
$this->output->responseCode = "00";
$this->output->responseDesc = "SUCCESS APRROVE QC";
return response()->json($this->output);
} catch (\Throwable $e) {
DB::rollback();
$error_msg = $e->getMessage();
throw new ParameterException($error_msg);
}
}
public function DeleteQCMerchant(Request $request)
{
//validate header
$new_req = new Request([
'PERNR' => $request->header('PERNR'),
'NAMA-LENGKAP' => $request->header('NAMA-LENGKAP'),
'LEVEL-ID' => $request->header('LEVEL-ID'),
]);
$validator = Validator::make($new_req->all(), [
'PERNR' => 'required',
'NAMA-LENGKAP' => 'required',
'LEVEL-ID' => 'required',
]);
if ($validator->fails()) {
$error_message = $validator->errors()->first();
throw new ParameterException($error_message);
}
$validator = Validator::make($request->all(), [
'id_qc' => 'required',
]);
if ($validator->fails()) {
$error_message = $validator->errors()->first();
throw new ParameterException($error_message);
}
$data_qc = $this->qcRepo->getDataQc($request->id_qc);
if (empty($data_qc)) {
throw new DataNotFoundException("Data QC Tidak Ditemukan.");
}
$req_user_entry = $request->header('PERNR') . '|' . $request->header('NAMA-LENGKAP');
if ($data_qc->user_entry != $req_user_entry) {
throw new ParameterException("User entry tidak sesuai");
}
if ($data_qc->status != 'REJECT') {
throw new ParameterException("Status tidak sesuai");
}
$delete_qc_result = $this->qcRepo->delete_qc_data($request->id_qc);
if ($delete_qc_result < 0) {
throw new ParameterException("Data QC gagal di hapus");
}
$delete_log = $this->qcRepo->delete_qc_log($request->id_qc);
if ($delete_log < 0) {
throw new ParameterException("Data log gagal di hapus");
}
$this->output->responseCode = "00";
$this->output->responseDesc = "SUCCESS DELETE QC";
return response()->json($this->output);
}
public function updateInterfaceStatus(Request $request)
{
$where = array('job_name' => $request->jobname);
$update_data['status'] = '-1';
$update_data['ket'] = 'RETRY';
$update_data['last_update'] = date('Y-m-d H:i:s');
DB::beginTransaction();
try {
$res = $this->qcRepo->update_data('interface_status', $update_data, $where);
if ($res < 0) {
DB::rollback();
throw new DataNotFoundException("Data merchant gagal diperbaharui.");
}
DB::commit();
$this->output->responseCode = "00";
$this->output->responseDesc = "SUCCESS RETRY STATUS";
return response()->json($this->output);
} catch (\Throwable $e) {
DB::rollback();
$error_msg = $e->getMessage();
throw new DataNotFoundException($error_msg);
}
}
public function interfaceProcess(Request $request)
{
$validator = Validator::make($request->all(), [
'tindak_lanjut' => 'required',
'data' => 'required',
'data.*.id_qc' => ['required'],
// 'data.*.app_id' => [''],
'data.*.app_jenis' => ['required'],
'data.*.mid' => ['required'],
]);
if ($validator->fails()) {
$error_message = $validator->errors()->first();
throw new ParameterException($error_message);
}
$req_iface = $request->all();
DB::beginTransaction();
try {
$mid_mdr_onus_retry = array();
foreach ($req_iface['data'] as $key => $iface_data) {
$response_error = array(
'id_qc' => $iface_data['id_qc'],
'error' => array()
);
$res_detail_qc = $this->qcRepo->get_qc_detail($iface_data);
if ($res_detail_qc->isEmpty()) {
Log::channel('daily')->error('Data Interface tidak ditemukan | id_qc : ' . $iface_data['id_qc']);
$response_error['error'][] = array('error_message' => 'Data Interface tidak ditemukan');
continue;
}
$data_ubah = array();
$tmp_ubah = (array) json_decode($res_detail_qc[0]->data_ubah);
if (is_array($tmp_ubah) && count($tmp_ubah) > 0) {
$data_ubah = $tmp_ubah;
}
dd($data_ubah);
//GETTING ORIGINAL DATA BEFORE QC
$merchant_ori = $this->qcRepo->select_data('app_merchant', array('app_id' => $iface_data['app_id']));
if (empty($merchant_ori)) {
Log::channel('daily')->error('Original data merchant tidak ditemukan | app_id : ' . $iface_data['app_id'] . '| id_qc : ' . $iface_data['id_qc']);
$response_error['error'][] = array('error_message' => 'Original data merchant tidak ditemukan');
}
//GET ORIGINAL MDR
$result_mdr = null;
$app_mdr = $this->qcRepo->select_data('app_merchant_mdr', array('app_id' => $iface_data['app_id'], 'mid' => $iface_data['mid']), '*');
if ($iface_data['app_id'] != '') {
if (empty($app_mdr)) {
$app_mdr = $this->qcRepo->select_data('app_merchant_mdr', array('mid' => $iface_data['mid']), '*');
if (empty($app_mdr)) {
$app_merchant = $this->qcRepo->select_data('merchant_data', array('mid' => $iface_data['mid']));
if (!empty($app_merchant)) {
$merchant_row = $app_merchant[0];
$result_mdr['mdr_onus'] = $merchant_row->mdr_onus;
$result_mdr['mdr_offus'] = $merchant_row->mdr_offus;
$result_mdr['mdr_debit'] = $merchant_row->mdr_debit;
$result_mdr['mdr_debit_pl'] = $merchant_row->mdr_debit_pl;
$result_mdr['mdr_npg'] = $merchant_row->mdr_debit_npg;
$result_mdr['mdr_unik'] = $merchant_row->mdr_unik;
if ($merchant_row->tipe_merchant == '99') {
$mdr_cicilan = $this->qcRepo->select_data('merchant_data_mdr_cicilan', array('mid' => $iface_data['mid']));
if (!empty($mdr_cicilan)) {
foreach ($mdr_cicilan as $mdrcicilan_row) {
$result_mdr['mdr_cicilan'][] = array(
'plan' => $mdrcicilan_row->plan,
'term' => $mdrcicilan_row->term,
'mdr' => $mdrcicilan_row->mdr
);
}
}
}
}
}
}
if (!empty($app_mdr)) {
foreach ($app_mdr as $app_mdr_row) {
$keys = array(
'0' => 'mdr_offus',
'1' => ($app_mdr_row->plan == '0') ? 'mdr_onus' : 'mdr_cicilan',
'2' => 'mdr_debit',
'3' => 'mdr_debit_pl',
'4' => 'mdr_npg',
'5' => 'mdr_unik'
);
$result_key = $keys[$app_mdr_row->on_off];
if ($result_key == 'mdr_cicilan') {
$result_mdr[$result_key][] = array(
'plan' => $app_mdr_row->plan,
'term' => $app_mdr_row->term,
'mdr' => $app_mdr_row->mdr
);
} else {
$result_mdr[$result_key] = $app_mdr_row->mdr;
}
}
}
} else {
$app_merchant = $this->qcRepo->select_data('merchant_data', array('mid' => $iface_data['mid']));
if (!empty($app_merchant)) {
$merchant_row = $app_merchant[0];
$result_mdr['mdr_onus'] = $merchant_row->mdr_onus;
$result_mdr['mdr_offus'] = $merchant_row->mdr_offus;
$result_mdr['mdr_debit'] = $merchant_row->mdr_debit;
$result_mdr['mdr_debit_pl'] = $merchant_row->mdr_debit_pl;
$result_mdr['mdr_npg'] = $merchant_row->mdr_debit_npg;
$result_mdr['mdr_unik'] = $merchant_row->mdr_unik;
if ($merchant_row->tipe_merchant == '99') {
$mdr_cicilan = $this->qcRepo->select_data('merchant_data_mdr_cicilan', array('mid' => $iface_data['mid']));
if (!empty($mdr_cicilan)) {
foreach ($mdr_cicilan as $mdrcicilan_row) {
$result_mdr['mdr_cicilan'][] = array(
'plan' => $mdrcicilan_row->plan,
'term' => $mdrcicilan_row->term,
'mdr' => $mdrcicilan_row->mdr
);
}
}
}
}
}
if ($result_mdr == null) {
Log::channel('daily')->error('MDR Original tidak ditemukan | id_qc : ' . $iface_data['id_qc']);
$response_error['error'][] = array('error_message' => 'MDR Original tidak ditemukan');
}
if ($req_iface['tindak_lanjut'] == 'retry') {
if ($iface_data['is_mdr_onus'] == -1 && !in_array($iface_data['mid'], $mid_mdr_onus_retry)) {
$res_update = $this->interface_mdr($iface_data['mid'], 'ON', $data_ubah['mdr_onus'][])
}
}
}
} catch (\Throwable $e) {
DB::rollback();
$error_msg = $e->getMessage();
throw new DataNotFoundException($error_msg);
}
}
public function interface_mdr($mid = '001000000000', $type = 'ON', $mdr = '00,00')
{
if ($type == 'ON') {
$MDR_ON_OFF = 'ON';
$mdr_id = '0';
$MDR_TYPE = 'EDC';
} elseif ($type == 'OFF') {
// $MDR_ON_OFF = 'OFF';
$MDR_ON_OFF = 'OF';
$mdr_id = '1';
$MDR_TYPE = 'EDC';
} elseif ($type == 'NPG') {
// $MDR_ON_OFF = 'OFF';
$MDR_ON_OFF = 'OF';
$mdr_id = '3';
$MDR_TYPE = 'NPG';
}
$mdr_app_id = substr($mid, 3) . '000' . '00' . $mdr_id;
$data_csap['MDR_MID'] = substr($mid, 3);
$data_csap['MDR_INSTALLMENT'] = '0';
$data_csap['MDR_ON_OFF'] = $MDR_ON_OFF;
$data_csap['MDR_TYPE'] = $MDR_TYPE;
$data_csap['MDR_PLAN'] = '';
$data_csap['MDR_TERM'] = '';
$data_csap['MDR_RATE'] = floatval(str_replace(',', '.', $mdr));
$data_csap['MDR_DATE_MODIFIED'] = date('Y-m-d H:i:s');
$data_csap['MDR_MODIFIED_BY'] = 'MMS';
$res_update = $this->qcRepo->interface_mdr($data_csap, $mdr_app_id);
dd($res_update);
}
}
Editor is loading...