M3 Integration fixes

This commit is contained in:
Mark Gregory
2026-09-22 11:08:39 +01:00
parent e4213d1fd6
commit dc97598278
7 changed files with 158 additions and 136 deletions
@@ -41,81 +41,80 @@ class UserControlController extends Controller
//
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') {
$connection = DB::connection(config('m3.connection', 'pgsql'));
$existing = $connection->select("select count(*) as COUNT1 from ICM428M where R428US='$request->R428US'");
if (($existing[0]->COUNT1 ?? 0) == '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";
}
}
// PostgreSQL/Core owns M3 profiles; no QSYS2 lookup is currently available.
$profileExists = false;
if ($profileExists) {
self::insertUser($request, false);
return 'success';
}
return self::createSystemProfileAndUser($request);
}
private static function createSystemProfileAndUser(Request $request): string
{
try {
$conn = app(PostgresProgramBridge::class);
} catch (\Throwable $e) {
return self::programBridgeConnectionError($e);
}
$conn->setOptions([
'persistent' => false,
'stateless' => true,
'debug' => true,
'debugLogFile' => '/www/sentm3test/htdocs/M3/storage/logs/toolkit_debug.log',
]);
$params = [
$conn->AddParameterChar('in', 10, 'User profile', 'E#iUsrPrf', $request->R428US),
$conn->AddParameterChar('in', 20, 'First name', 'FIRST', $request->R428FIRST),
$conn->AddParameterChar('in', 30, 'Family name', 'FAMILY', $request->R428FAMILY),
];
if (! $conn->PgmCall('ICMUSRPRF', 'EWOBJ', $params, [], [])) {
return 'error profile2';
}
self::insertUser($request, true);
return 'success2';
}
private static function insertUser(Request $request, bool $includeR42821A): void
{
$values = [
'R428CO' => $request->R428CO,
'R428PL' => $request->R428PL,
'R428WH' => $request->R428WH,
'R428STS' => $request->R428STS,
'R428US' => $request->R428US,
'R428FIRST' => $request->R428FIRST,
'R428FAMILY' => $request->R428FAMILY,
'R428EMAIL' => $request->R428EMAIL,
'R428EMPCDE' => $request->R428EMPCDE,
'R428ADMUSR' => $request->R428ADMUSR,
'R428PWRUSR' => $request->R428PWRUSR,
'MENU2OPT' => 'NN' . $request->MENU2OPT3 . 'NNN' . $request->MENU2OPT7 . $request->MENU2OPT8 . 'N',
'MENU3OPT' => $request->MENU3OPT1 . $request->MENU3OPT2 . 'NNNNNNN',
'MENU4OPT' => $request->MENU4OPT1 . $request->MENU4OPT2 . $request->MENU4OPT3 . 'NNNNNN',
'MENU5OPT' => $request->MENU5OPT1 . $request->MENU5OPT2 . $request->MENU5OPT3 . 'N' . $request->MENU5OPT5 . 'NNNN',
'MENU6OPT' => $request->MENU6OPT1 . $request->MENU6OPT2 . $request->MENU6OPT3,
'R42811A' => $request->R42811A,
];
if ($includeR42821A) {
$values['R42821A'] = $request->R42821A;
}
DB::connection(config('m3.connection', 'pgsql'))->table('icm428m')->insert($values);
}
//