Browse Source

Merge pull request 'update register & add DB transaction' (#66) from dev-wahyun into staging

Reviewed-on: ibnu/generic-ospro-backend#66
pull/1/head
farhantock 10 months ago
parent
commit
21d82a6cfb
  1. 39
      app/Http/Controllers/CompanyController.php
  2. 11
      app/Http/Controllers/Controller.php
  3. 1041
      app/Http/Controllers/ProjectController.php
  4. 171
      app/Http/Controllers/UserRegisterController.php

39
app/Http/Controllers/CompanyController.php

@ -2,9 +2,9 @@
namespace App\Http\Controllers;
use App\Models\Company;
use App\Models\MenuCompany;
use App\Models\{User, RoleMenu, Role, ProductTransaction, MenuCompany, Company};
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class CompanyController extends Controller
{
@ -66,8 +66,6 @@ class CompanyController extends Controller
return response()->json(['status' => 'failed', 'message' => 'data Company not found!', 'code' => 400], 400);
die();
}
if ($result) {
return response()->json(['status' => 'success', 'message' => 'data Company successfully updated!', 'code' => 200], 200);
} else {
@ -77,24 +75,37 @@ class CompanyController extends Controller
public function delete($id)
{
$data = Company::find($id);
DB::beginTransaction();
$data = Company::find((int)$id);
if ($data) {
MenuCompany::where('company_id',$id)->delete();
$delete = $data->delete();
$this->deleteRelative((int)$data['id']);
if ($data->delete()) {
DB::commit();
return response()->json(['status' => 'success', 'message' => 'Data Company successfully deleted!', 'code' => 200], 200);
} else {
DB::rollBack();
return response()->json(['status' => 'failed', 'message' => 'Data Company failed deleted!', 'code' => 400], 400);
}
} else {
return response()->json(['status' => 'failed', 'message' => 'data Company not found!', 'code' => 400], 400);
DB::rollBack();
return response()->json(['status' => 'failed', 'message' => 'Data Company not found!', 'code' => 400], 400);
die();
}
}
if ($delete) {
return response()->json(['status' => 'success', 'message' => 'data Company successfully deleted!', 'code' => 200], 200);
} else {
return response()->json(['status' => 'failed', 'message' => 'data Company failed deleted!', 'code' => 400], 400);
private function deleteRelative($company_id)
{
MenuCompany::where('company_id', $company_id)->delete();
User::where('company_id', $company_id)->delete();
$role = Role::where('company_id', $company_id)->first();
if ($role) {
RoleMenu::where('role_id', $role->id)->delete();
$role->delete();
}
ProductTransaction::where('company_id', $company_id)->delete();
}
public function search(Request $request)
{
$payload = $request->all();

11
app/Http/Controllers/Controller.php

@ -45,10 +45,13 @@ class Controller extends BaseController
protected function setCustomeDirectoryUpload($company_name)
{
$pathImage = 'assets/' . $company_name . '/image/';
$pathDocument = 'assets/' . $company_name . '/file/project/';
$pathTmpImport = 'assets/' . $company_name . '/file/tmpimport/';
$pathActivityDocument = 'assets/' . $company_name . '/file/activity/';
$current_date = date('Y-m-d');
[$year, $month, $day] = explode('-', $current_date);
$pathImage = 'assets/' . $company_name . ' ' . $year . '-' . $month . '-' . $day . '/image/';
$pathDocument = 'assets/' . $company_name . ' ' . $year . '-' . $month . '-' . $day . '/file/project/';
$pathTmpImport = 'assets/' . $company_name . ' ' . $year . '-' . $month . '-' . $day . '/file/tmpimport/';
$pathActivityDocument = 'assets/' . $company_name . ' ' . $year . '-' . $month . '-' . $day . '/file/activity/';
return [
'pathImage' => $pathImage,

1041
app/Http/Controllers/ProjectController.php

File diff suppressed because it is too large Load Diff

171
app/Http/Controllers/UserRegisterController.php

@ -5,38 +5,49 @@ namespace App\Http\Controllers;
use Carbon\Carbon;
use Illuminate\Support\Str;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\{DB,Validator};
use App\Models\{Company, HumanResource, Menu, ProductTransaction, RefferalCode, Role, RoleMenu, MenuCompany};
use Illuminate\Support\Facades\{DB,Log};
use App\Models\{User, Company, HumanResource, Menu, ProductTransaction, RefferalCode, Role, RoleMenu, MenuCompany};
const URL_EMAIL = 'https://notifapp.odm-iu.com/service-mail/notif_mail.php';
class UserRegisterController extends Controller
{
public function add(Request $request)
{
DB::transaction(function () use ($request) {
$validator = Validator::make($request->all(), [
'refferal' => 'unique:refferal_code,code',
'cluster' => 'required|string',
'address' => 'required|string',
'email' => 'required|unique:' . ($request->type_account === 'Company' ? 'm_company' : 'm_users') . ',email',
'type_paket' => 'required|in:Basic, Free',
'phone_no' => 'required',
'type_account' => 'string|in:Personal, Company',
'company_name' => 'required|string',
'username' => 'string|required|unique:' . ($request->type_account === 'Personal' ? 'm_users' : '') . ',username'
]);
if ($validator->fails()) {
return response()->json(['status' => 'failed', 'message' => $validator->errors()->first(), 'code' => 400], 400);
}
$data = $validator->validated();
DB::beginTransaction();
$this->validate($request, [
'cluster' => 'required|string',
'address' => 'required|string',
'email' => 'required|string',
'type_paket' => ($request->type_account === 'Personal' ? 'required' : 'nullable') . '|in:Basic,Free',
'phone_no' => 'required',
'type_account' => 'string|in:Personal,Company',
'company_name' => 'required|string',
'username' => 'required|string'
]);
try {
$data = $request->all();
$company_name = $data['company_name'];
$type_account = $data['type_account'];
$refferal = $data['refferal'];
$refferal = $request->refferal ? $data['refferal'] : null;
$cluster = $data['cluster'];
$address = $data['address'];
$phone_no = $data['phone_no'];
$email = $data['email'];
$username = $data['username'];
$type_paket = $data['type_paket'];
$company_address = $request->type_account === 'Company' ? $data['companyAddress'] : '';
$full_name = $request->type_account === 'Personal' ? $data['full_name'] : '';
// check email & username already exist
$emailExists = Company::where('email', $email)->exists() || User::where('email', $email)->exists();
if ($emailExists) {
return response()->json(['status' => 'failed', 'message' => 'Email already exists, please check again!', 'code' => 500], 500);
}
$usernameExists = User::where('username', $username)->exists();
if ($usernameExists) {
return response()->json(['status' => 'failed', 'message' => 'Username already exists, please check again!', 'code' => 500], 500);
}
// Get last registration number
$getCompany = $this->getCompany();
@ -50,7 +61,9 @@ class UserRegisterController extends Controller
'address' => $address,
'type_account' => $type_account,
'username' => $username,
'type_paket' => $type_paket
'type_paket' => $type_paket,
'companyAddress' => $company_address,
'full_name' => $full_name
);
if(empty($refferal)) {
@ -58,47 +71,46 @@ class UserRegisterController extends Controller
} else {
$getRefferal = $this->getRefferalCode($refferal);
if(empty($getRefferal)) {
return response()->json(['status' => 'failed', 'message' => 'Refferal Code Not Found!', 'code' => 404], 404);
return response()->json(['status' => 'failed', 'message' => 'Refferal code not found!', 'code' => 404], 404);
}
$addCompany = $this->addCompany($formDataCompany, $getRefferal['id']);
$addCompany = $this->addCompany($formDataCompany, (int)$getRefferal['id']);
}
if(empty($addCompany)) {
return;
die();
}
$addRole = $this->addRole((int)$addCompany['id']);
if(empty($addRole)) {
return;
die();
}
$addHR = $this->addHR((int)$addCompany['id'], (int)$addRole['id'], $formDataCompany);
if(empty($addHR)) {
return;
die();
}
$getMenu = $this->getMenu();
if(empty($getMenu)) {
return;
die();
}
$this->addTransaction((int)$addCompany['id'], $formDataCompany);
$addMenuCompany = $this->addMenuCompany($getMenu, (int)$addCompany['id']);
if(empty($addMenuCompany)) {
return;
die();
}
$addMenuRole = $this->addMenuRole($getMenu, (int)$addRole['id']);
if($addMenuRole) {
return response()->json(['status' => 'success', 'message' => 'Register is successfully!', 'code' => 200], 200);
if(empty($addMenuRole)) {
return;
}
},3);
DB::commit();
return response()->json(['status' => 'success', 'message' => 'Register is successful, please check your email!', 'generateRandom' => $addHR['generateRandom'], 'code' => 200], 200);
} catch (\Throwable $th) {
DB::rollBack();
Log::channel('daily')->error($th->getMessage());
return response()->json(['status' => 'failed', 'message' => 'Failed to register, please check again!', 'code' => 500], 500);
}
}
protected function getRefferalCode($refferal)
@ -119,11 +131,11 @@ class UserRegisterController extends Controller
'date_register' => Carbon::now(),
'template_id' => 1,
'email' => $formData['email'],
'address' => $formData['address'],
'address' => $formData['type_account'] === 'Company' ? $formData['companyAddress'] : $formData['address'],
'phone_no' => $formData['phone_no'],
'type_account' => $formData['type_account'],
'is_active' => true,
'discount_id' => $id_refferal === null ? null : (int)$id_refferal
'discount_id' => $id_refferal === null ? null : $id_refferal
);
$result = Company::create($formData);
return $result;
@ -142,25 +154,27 @@ class UserRegisterController extends Controller
protected function addHR($id_company, $id_role, $data)
{
$generatePassword = Str::password(10);
$generateRandom = Str::random(8);
$formData = array(
'name'=> $data['company_name'],
'name'=> $data['type_account'] === 'Company' ? $data['username'] : $data['full_name'],
'phone_number'=> $data['phone_no'],
'email'=> $data['email'],
'username' => $data['username'],
'password'=> $generatePassword,
'role_id'=> (int)$id_role,
'ktp_number'=> $data['type_account'] === 'Company' ? 'CP-' : 'PR-' . Str::random(5),
'employee_type'=>'employee',
'password'=> md5($generateRandom),
'role_id'=> $id_role,
'ktp_number'=> $data['type_account'] === 'Company' ? 'CP-'. $generateRandom : 'PR-' . $generateRandom,
'employee_type'=> 'employee',
'address' => $data['address'],
'status_resource'=> 'active',
'company_id'=> (int)$id_company
'company_id'=> $id_company
);
$result = HumanResource::create($formData);
if(!empty($result)) {
$this->sendEmail($data['email'], $generateRandom);
}
return [
'result' => $result,
'generatePassword' => $generatePassword
'generateRandom' => $generateRandom
];
}
@ -170,7 +184,7 @@ class UserRegisterController extends Controller
if($data->exists()){
$data->delete();
}
if (is_array($baseDataMenu) && count($baseDataMenu) > 0 && isset($baseDataMenu)) {
if (is_object($baseDataMenu) && count($baseDataMenu) > 0 && isset($baseDataMenu)) {
$countRes = 0;
foreach ($baseDataMenu as $menu) {
$dataInsert = array(
@ -193,16 +207,16 @@ class UserRegisterController extends Controller
if ($countRes > 0) {
return $result;
} else {
return $result;
die();
}
} else {
return false;
die();
}
}
protected function addMenuRole($baseDataMenu, $id_role)
{
if (is_array($baseDataMenu) && count($baseDataMenu) > 0 && isset($baseDataMenu)) {
if (is_object($baseDataMenu) && count($baseDataMenu) > 0 && isset($baseDataMenu)) {
$countRes = 0;
foreach ($baseDataMenu as $menu) {
$dataInsert = array(
@ -219,10 +233,10 @@ class UserRegisterController extends Controller
if ($countRes > 0) {
return $result;
} else {
return $result;
die();
}
} else {
return false;
die();
}
}
@ -263,11 +277,68 @@ class UserRegisterController extends Controller
$lastRegistrationNumber = $company['registration_no'];
$lastNumber = (int)preg_replace('/\D/', '', $lastRegistrationNumber);
$newNumber = $lastNumber + 1;
// $newRegistrationNumber = Str::beforeLast($lastRegistrationNumber, $lastNumber) . $newNumber;
$newRegistrationNumber = 'RG-'. $newNumber;
} else{
return false;
}
return [
'newRegistrationNumber' => $newRegistrationNumber
];
}
public function sendEmail($email, $password)
{
$user = User::select('email', 'name', 'username')->where('email', $email)->first();
if (!$user) {
return response()->json(['status' => 'error', 'message' => 'e-mail not found '], 400);
} else {
$this->reqHttpCurl($email, $password, $user->username, $user->name);
return response()->json(['status' => 'error', 'code'=>400, 'message' => 'e-mail not found '], 400);
}
}
private function reqHttpCurl($email, $password, $username, $name)
{
$postData = [
"to" => $email,
"name" => $name,
"username" => $username,
"password" => $password,
"from" => "app.integrasia@integrasiautama.com",
"alias_from" => "OSPRO",
"subject" => "Registration OSPRO",
"body" => "registration-ospro"
];
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => URL_EMAIL,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30000,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode($postData),
CURLOPT_HTTPHEADER => array(
// Set here requred headers
"accept: */*",
"accept-language: en-US,en;q=0.8",
"content-type: application/json",
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
print_r(json_decode($response));
}
}
}

Loading…
Cancel
Save