Files
WMS/Modules/M3/Http/Controllers/UserControlController.php
T
2026-09-21 10:59:32 +01:00

265 lines
13 KiB
PHP
Executable File

<?php
namespace Modules\M3\Http\Controllers;
use Config;
use DB;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Schema;
use Modules\M3\Models\ICM428M;
use Modules\M3\Services\PostgresProgramBridge;
class UserControlController extends Controller
{
public static function index(Request $request)
{
$connection = config('m3.connection', 'pgsql');
$profile = null;
if (Schema::connection($connection)->hasTable('icm428m')) {
$profile = DB::connection($connection)->table('icm428m')->where('R428US', strtoupper(m3_user()))->first();
}
$co = $profile->R428CO ?? '';
$whs = $profile->R428WH ?? '';
$iCM428M = Schema::connection($connection)->hasTable('icm428m')
? DB::connection($connection)->table('icm428m')->where('R428CO', $co)->where('R428WH', $whs)->get() : collect();
$uSER_INFO = Schema::connection($connection)->hasTable('icm428m')
? DB::connection($connection)->table('icm428m')->selectRaw('R428US as USERPRF, R428STS as STATUS, NULL as DATE_EXPIRED, NULL as EXPIRED')->get()->all() : [];
$power_user = [(object) ['R428PWRUSR' => $profile->R428PWRUSR ?? 'N', 'R428CO' => $co, 'R428PL' => $profile->R428PL ?? '', 'R428WH' => $whs]];
$iC670M = Schema::connection($connection)->hasTable('ic670m')
? DB::connection($connection)->table('ic670m')->get() : collect();
return view('m3::liberty-theme.pages.userControl', ['ICM428M' => $iCM428M, 'IC670M' => $iC670M, 'power_user' => $power_user, 'USER_INFO' => $uSER_INFO]);
}
//
// Process data from Add modal
//
public static function saveUserAdd(Request $request)
{
if ($request->R428EMPCDE == '') {
$request->R428EMPCDE = 0;
}
// Insert record to ICM428M
// dump($request);
// Validate user profile exists on the system
$usrprf = [(object) ['COUNT' => 0]]; // PostgreSQL/Core owns M3 profiles; no QSYS2 lookup.
// Validate employee code exists in LBPF file
// if($request->R428EMPCDE>0) {
// $empcde=DB::connection(config('m3.connection', 'pgsql'))->select("select count(*) as COUNT2 from LBPF where EMPNO='$request->R428EMPCDE'");
// if($empcde[0]->COUNT2=="0") {
// #echo "<script>alert('Employee code entered does not exist, please try again');</script>";
// return "error empcd";
// }
// }
$icm428m = DB::connection(config('m3.connection', 'pgsql'))->select("select count(*) as COUNT1 from ICM428M where R428US='$request->R428US'");
if ($icm428m[0]->COUNT1 == '1') {
return 'error exists';
} else {
if ($usrprf[0]->COUNT == '1') {
DB::connection(config('m3.connection', 'pgsql'))->insert("insert into ICM428M
(R428CO, R428PL, R428WH, R428STS, R428US, R428FIRST, R428FAMILY, R428EMAIL, R428EMPCDE, R428ADMUSR, R428PWRUSR, MENU2OPT, MENU3OPT, MENU4OPT, MENU5OPT, MENU6OPT, R42811A)
values ('$request->R428CO', '$request->R428PL', '$request->R428WH', '$request->R428STS', '$request->R428US', '$request->R428FIRST',
'$request->R428FAMILY', '$request->R428EMAIL', $request->R428EMPCDE, '$request->R428ADMUSR', '$request->R428PWRUSR',
'NN" . $request->MENU2OPT3 . 'NNN' . $request->MENU2OPT7 . $request->MENU2OPT8 . "N', '" . $request->MENU3OPT1 . $request->MENU3OPT2 . "NNNNNNN',
'" . $request->MENU4OPT1 . $request->MENU4OPT2 . $request->MENU4OPT3 . "NNNNNN',
'" . $request->MENU5OPT1 . $request->MENU5OPT2 . $request->MENU5OPT3 . 'N' . $request->MENU5OPT5 . "NNNN','" . $request->MENU6OPT1 . $request->MENU6OPT2 . $request->MENU6OPT3 . "','" . $request->R42811A . "')");
return 'success';
} else {
// CL program call here (ewobjtst.)ICMUSRPRF parms(R428US, R428FIRST, R428FAMILY)
// connect to toolkit using DB2 credentials (can also leave blank for default authority)
try {
$conn = app(PostgresProgramBridge::class);
} catch (\Throwable $e) {
// Determine reason for failure.
// Probably database authentication error or invalid or unreachable database.
return self::programBridgeConnectionError($e);
}
$conn->setOptions(['persistent' => false, 'stateless' => true, 'debug' => true, 'debugLogFile' => '/www/sentm3test/htdocs/M3/storage/logs/toolkit_debug.log']);
// Add LIB
// $result = $conn->CLCommand('ADDLIBLE LIB(MPDAT10)');
// define several input/output params
$params = [];
$params[] = $conn->AddParameterChar('in', 10, 'User profile', 'E#iUsrPrf', $request->R428US);
$params[] = $conn->AddParameterChar('in', 20, 'First name', 'FIRST', $request->R428FIRST);
$params[] = $conn->AddParameterChar('in', 30, 'Family name', 'FAMILY', $request->R428FAMILY);
// # $result = $conn->PgmCall(Config::get('eproconf.misc.PGM1'), Config::get('eproconf.misc.libname4'), $params, array(), array());
$result = $conn->PgmCall('ICMUSRPRF', 'EWOBJ', $params, [], []);
if (! $result) {
return 'error profile2';
} else {
// Successful Call : User profile created with default password
// dd($result);
// echo "<script>alert('User profile $request->R428US was created on the system with default password.');</script>";
DB::connection(config('m3.connection', 'pgsql'))->insert("insert into ICM428M
(R428CO, R428PL, R428WH, R428STS, R428US, R428FIRST, R428FAMILY, R428EMAIL, R428EMPCDE, R428ADMUSR, R428PWRUSR, MENU2OPT, MENU3OPT, MENU4OPT, MENU5OPT, MENU6OPT, R42811A,R42821A)
values ('$request->R428CO', '$request->R428PL', '$request->R428WH', '$request->R428STS', '$request->R428US', '$request->R428FIRST',
'$request->R428FAMILY', '$request->R428EMAIL', $request->R428EMPCDE, '$request->R428ADMUSR', '$request->R428PWRUSR',
'NN" . $request->MENU2OPT3 . 'NNN' . $request->MENU2OPT7 . $request->MENU2OPT8 . "N', '" . $request->MENU3OPT1 . $request->MENU3OPT2 . "NNNNNNN',
'" . $request->MENU4OPT1 . $request->MENU4OPT2 . $request->MENU4OPT3 . "NNNNNN',
'" . $request->MENU5OPT1 . $request->MENU5OPT2 . $request->MENU5OPT3 . 'N' . $request->MENU5OPT5 . "NNNN','" . $request->MENU6OPT1 . $request->MENU6OPT2 . $request->MENU6OPT3 . "','" . $request->R42811A . "','" . $request->R42821A . "')");
return 'success2';
}
// #kd return "error profile";
}
}
}
//
// Process data from Edit modal
//
public static function saveUserEdit(Request $request)
{
if ($request->R428EMPCDE == '') {
$request->R428EMPCDE = 0;
}
// Validate employee code exists in LBPF file
// dump($request->R428EMPCDE);
// if($request->R428EMPCDE>0) {
// $sqlstmt="select count(*) as COUNT from LBPF where EMPNO='$request->R428EMPCDE'";
// #echo "$sqlstmt<br>";
// $empcde=DB::connection(config('m3.connection', 'pgsql'))->select($sqlstmt);
// #dump($empcde);
// if($empcde[0]->COUNT=="0") {
// #echo "<script>alert('Employee code entered does not exist, please try again');</script>";
// return "error empcd";
// }
// }
// Update record to ICM428M
$iCM428M = DB::connection(config('m3.connection', 'pgsql'))->select("select * from ICM428M where R428US='$request->R428US'");
DB::connection(config('m3.connection', 'pgsql'))->update("update ICM428M
set R428CO='$request->R428CO', R428PL='$request->R428PL', R428WH='$request->R428WH', R428STS='$request->R428STS', R428FIRST='$request->R428FIRST',
R428FAMILY='$request->R428FAMILY', R428EMAIL='$request->R428EMAIL', R428EMPCDE=$request->R428EMPCDE, R428ADMUSR='$request->R428ADMUSR',
R428PWRUSR='$request->R428PWRUSR',
MENU2OPT='" . substr($iCM428M[0]->MENU2OPT, 0, 2) . $request->MENU2OPT3 . substr($iCM428M[0]->MENU2OPT, 3, 3) . $request->MENU2OPT7 . $request->MENU2OPT8 . "',
MENU3OPT='" . $request->MENU3OPT1 . $request->MENU3OPT2 . substr($iCM428M[0]->MENU3OPT, 2, -1) . "',
MENU4OPT='" . $request->MENU4OPT1 . $request->MENU4OPT2 . $request->MENU4OPT3 . substr($iCM428M[0]->MENU4OPT, 3, -1) . "',
MENU5OPT='" . $request->MENU5OPT1 . $request->MENU5OPT2 . $request->MENU5OPT3 . substr($iCM428M[0]->MENU5OPT, 3, 1) . $request->MENU5OPT5 . substr($iCM428M[0]->MENU5OPT, 5, -1) . "',
MENU6OPT='" . $request->MENU6OPT1 . $request->MENU6OPT2 . $request->MENU6OPT3 . substr($iCM428M[0]->MENU6OPT, 3, -1) . "',
R42811A='" . $request->R42811A . "',R42821A='" . $request->R42821A . "'
where R428US='$request->R428US'");
return 'success';
}
// 590
public static function callCL(Request $request)
{
// connect to toolkit using DB2 credentials (can also leave blank for default authority)
try {
$conn = app(PostgresProgramBridge::class);
} catch (\Throwable $e) {
// Determine reason for failure.
// Probably database authentication error or invalid or unreachable database.
return self::programBridgeConnectionError($e);
}
// Add LIB
// $result = $conn->CLCommand('ADDLIBLE LIB(MPDAT10)');
// define several input/output params
$params = [];
// AddParameterChar($io, $size, $comment, $varName, $value, $varying, $dimension)
// Add Warehouse Param
$params[] = $conn->AddParameterChar('in', 10, 'userid', 'USERID', $request->USERID);
$params[] = $conn->AddParameterChar('in', 1, 'action', 'ACTION', $request->ACTION);
// AddParameterPackDec($io, $length, $scale, $comment, $varName, $value,$dimension)
// Add Delivery Note Param
// Start Time Tracking
// $start = microtime(true);
// Config::get('eproconf.misc.PGM1'), Config::get('eproconf.misc.libname4')
// ICM700C EWOBJTST ICM700C ICM700CSBM
$result = $conn->PgmCall('ICMCHGPRF', 'EWOBJ', $params, [], []);
if (! $result) {
echo "<script>alert($pGMERRORS);</script>";
return 'error';
}
// Successful Call
else {
if ($request->ACTION == 'P') {
echo "<script>alert('The password has been reset to QAZ1WSX2 for '" . $request->USERID . "'. The user will need to enter a new password on next green screen connection.');</script>";
}
if ($request->ACTION == 'R') {
echo "<script>alert('User '" . $request->USERID . "' has been re-enabled successfully');</script>";
}
echo "<script>window.location.replace('.')</script>";
}
// if ($pGMERRORS!="") {
// // return back()->withMessage('Can not Create PR: '.$pGMERRORS);
// dump($pGMERRORS);
// }
// else{
// // return $AWREQN;
// }
}
// 765
public static function savePassword(Request $request)
{
ini_set('max_execution_time', Config::get('arrays.PHPTimeOut'));
ini_set('max_input_time', Config::get('arrays.PHPTimeOut'));
ini_set('default_socket_timeout', Config::get('arrays.PHPTimeOut'));
// echo "B3<br>";
// connect to toolkit using DB2 credentials (can also leave blank for default authority)
try {
$conn = app(PostgresProgramBridge::class);
} catch (\Throwable $e) {
return self::programBridgeConnectionError($e);
}
$result = $conn->CLCommand('QSYS/CHGUSRPRF USRPRF(' . $request->R428US_PWD . ') PASSWORD(' . $request->NEW_PASSWORD . ') STATUS(*ENABLED) PWDEXP(*NO)');
if (! $result) {
dump($pGMERRORS);
echo "<script>alert($pGMERRORS);</script>";
return 'error pwd';
}
// Successful Call
else {
return 'success';
}
}
private static function programBridgeConnectionError(\Throwable $exception): string
{
$code = (int) $exception->getCode();
return match ($code) {
8001 => 'error profile3',
42705 => 'error profile4',
default => 'error profile5',
};
}
}