Files
Business-credit-asistant/app/Http/Controllers/RegisterController.php
2026-06-29 13:00:18 +06:00

577 lines
20 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Http\Requests\AddPackageRequest;
use App\Http\Requests\AddProfileRequest;
use App\Http\Requests\CreateAccountRequest;
use App\Http\Requests\CustomerProfileRequest;
use App\Http\Requests\MakePaymentRequest;
use App\Http\Requests\SetCreditReportRequest;
use App\Http\Requests\EmployeeRegistrationRequest;
use App\Models\Creditreport;
use App\Models\Permission;
use App\Models\SecurityQuestion;
use App\Models\User;
use App\Models\UserIdentityQuestionAnswer;
use App\Models\UserSecurityQuestionAnswer;
use App\Services\CreditReportService;
use App\Services\Package;
use App\Services\Register;
use App\Services\SmartCredit\SmartCredit;
use App\Traits\ApiResponseTrait;
use App\Utility\Email;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Http\Requests\ClientRegistration;
class RegisterController extends Controller
{
use ApiResponseTrait;
public $data = [];
public string $message = 'Failed';
public string $status_code = '';
public string $type = 'error';
public string $code = '';
public function __construct()
{
$this->status_code = config('constant.API_FAILED_CODE');
}
public function createAccount(Request $request)
{
return view('client.manual_client_create');
}
public function createManualAccount(ClientRegistration $request)
{
$inputData = $request->all();
$this->code = config('constant.API_FAILED_CODE');
$logData['action'] = "CREATE_ACCOUNT_MANUALLY";
$last_payment_date = getCurrentDateTime();
$user_access_date = getCurrentDateTime();
try {
DB::beginTransaction();
$inputData['wave'] = 1;
$inputData['subscription_status'] = 1;
$inputData['last_payment_date'] = $last_payment_date;
$inputData['user_access_end_date'] = $user_access_date;
$inputData['credit_report_company_type'] = $inputData['source_type'];
if (!$data = (new Register())->createAccount($inputData)) {
throw new \Exception("Account creation failed.Please try again!");
}
if (isset($data['id']) && $data['id'] > 0) {
$creditReportData['user_id'] = $data['id'];
$creditReportData['email'] = $inputData['email'];
$creditReportData['password'] = $inputData['password'];
$creditReportData['report_type'] = $inputData['source_type'];
(new Creditreport())->insertCreditReport($creditReportData);
}
// Send Confirmation Email To Customer
$mailData['email'] = $inputData['email'];
$mailData['name'] = $inputData['first_name'] . ' ' . $inputData['last_name'];
$mailData['password'] = $inputData['password'];
(new Email())->clientConfirmationMail($mailData);
$this->message = "Account is created successfully.";
$this->code = config('constant.API_SUCCESS_CODE');
$this->type = 'success';
DB::commit();
} catch (\Exception $ex) {
DB::rollback();
$this->message = $ex->getMessage();
}
appLog($this->logDataCreate($logData, getModelDataMasking($inputData), $this->message, '', $this->code));
return back()->with([$this->type => $this->message]);
}
public function addProfile(AddProfileRequest $request)
{
$logData['action'] = "PROFILE_ADD";
$inputData = $request->all();
$data = [];
try {
DB::beginTransaction();
$user_id = getUserId();
if (!(new Register())->addProfile($inputData, $user_id)) {
throw new \Exception("Profile update failed.Please try again!");
}
DB::commit();
$message = "Profile updated successfully.";
$code = config('constant.API_SUCCESS_CODE');
$data = $inputData;
} catch (\Exception $ex) {
DB::rollback();
$message = $ex->getMessage();
$code = config('constant.API_FAILED_CODE');
}
appLog($this->logDataCreate($logData, $inputData, $message, $data, $code));
return $this->sendApiResponse(
$data,
$message,
$code
);
}
public function addPackage(AddPackageRequest $request)
{
$logData['action'] = "PACKAGE_ADD";
$inputData = $request->all();
$data = [];
try {
DB::beginTransaction();
$user_id = getUserId();
if (!(new Register())->addPackage($inputData, $user_id)) {
throw new \Exception("Package added failed.Please try again!");
}
DB::commit();
$message = "Package added successfully.";
$code = config('constant.API_SUCCESS_CODE');
$data = $inputData;
} catch (\Exception $ex) {
DB::rollback();
$message = $ex->getMessage();
$code = config('constant.API_FAILED_CODE');
}
appLog($this->logDataCreate($logData, $inputData, $message, $data, $code));
return $this->sendApiResponse(
$data,
$message,
$code
);
}
public function importCreditReportForUser(SetCreditReportRequest $request)
{
$logData['action'] = "IMPORT_CREDIT_REPORT";
$inputData = $request->all();
try {
$package_id = $inputData['package_id'];
$user_id = getUserId();
DB::beginTransaction();
$message = "Report not found";
$creditReport = new CreditReportService();
if (!(new Register())->addPackage($package_id, $user_id)) {
throw new \Exception("Package added failed.Please try again!");
}
$response = $creditReport->getSmartCreditHTML($inputData['email'], $inputData['password']);
if (!$response['status']) {
throw new \Exception($message);
}
$creditReportObj = app(\App\Models\Creditreport::class);
$credit_reportData['user_id'] = $user_id;
$credit_reportData['html_content'] = $response['html'];
if (!$creditReportObj->addOrUpdateCreditReport($credit_reportData)) {
throw new \Exception("Report upload problem.");
}
$message = "Your report has been saved successfully";
$code = config('constant.API_SUCCESS_CODE');
DB::commit();
} catch (\Exception $ex) {
DB::rollback();
$message = $ex->getMessage();
$code = config('constant.API_FAILED_CODE');
}
appLog($this->logDataCreate($logData, $inputData, $message, $inputData, $code));
return $this->sendApiResponse(
[],
$message,
$code
);
}
public function getUserInfoById()
{
$logData['action'] = "GET_USER_INFO_BY_ID";
$userObj = app(User::class);
$user_id = getUserId();
$userData = $userObj->getUserByUserId($user_id);
$security_questions = (new SecurityQuestion())->getSecurityQuestion();
$userData->password = customDecrypt($userData->password);
$message = "User not found";
$code = config('constant.API_FAILED_CODE');
$userData['questionList'] = $security_questions;
if (!empty($userData)) {
$message = "User info fetched successfully";
$code = config('constant.API_SUCCESS_CODE');
}
appLog($this->logDataCreate($logData, $user_id, $message, $userData, $code));
return $this->sendApiResponse(
$userData,
$message,
$code
);
}
public function makePaymentByUser(MakePaymentRequest $request): JsonResponse
{
$logData['action'] = "MAKE_PAYMENT_START";
$message = "Unknown error occurred.";
$status_code = config('constant.API_FAILED_CODE');
$inputData = $request->all();
$userData = (new Register())->emailVarification($inputData['email']);
if (!empty($userData)) {
try {
$user_id = $userData['id'];
$inputData['user_id'] = $user_id;
$inputData['amount'] = config('constant.PLAN_AMOUNT');
$package = (new Package());
$package->makePayment($inputData);
if ($package->status_code == config('constant.API_SUCCESS_CODE')) {
$inputData['email'] = $userData['email'];
$inputData['name'] = $userData['first_name'] . ' ' . $userData['last_name'];
$this->paymentMail($inputData);
}
$message = "Successfully Saved.";
$status_code = config('constant.API_SUCCESS_CODE');
Auth::loginUsingId($user_id);
} catch (\Exception $ex) {
$logData['exception']['message'] = $ex->getMessage();
$logData['exception']['trace'] = $ex->getTraceAsString();
}
$this->data = $userData;
$this->message = $message;
$this->status_code = $status_code;
}
appLog($this->logDataCreate($logData, getModelDataMasking($inputData), $this->message, getModelDataMasking($this->data), $this->status_code));
return $this->sendApiResponse(
$this->data,
$this->message,
$this->status_code
);
}
public function makePayment(Request $request): JsonResponse
{
$postData = $request->all();
$logData['action'] = "MAKE_PAYMENT_START";
$data = [];
$message = '';
$status_code = config('constant.API_FAILED_CODE');
$userData = (new User())->getUserByEmail($postData['email']);
if (!empty($userData)) {
$user_question_answer = (new UserSecurityQuestionAnswer())->getUserSecurityQuestionAnswer($userData['id']);
$inputData = [];
$inputData['id'] = $userData['id'];
$inputData["first_name"] = $userData["first_name"];
$inputData["last_name"] = $userData["last_name"];
$inputData['answer'] = $user_question_answer['answer'] ?? "";
$inputData['question_id'] = $user_question_answer['question_id'] ?? 1;
$inputData["email"] = $userData["email"];
$inputData["password"] = customDecrypt($userData["password"]);
$inputData["street_no"] = $userData["street_no"];
$inputData["street_name"] = $userData["street_name"];
$inputData["city"] = $userData["city"];
$inputData["state"] = $userData["state"];
$inputData["birth_date"] = $userData["birth_date"];
$inputData["ssn"] = $userData["ssn"];
$inputData['card_number'] = $postData['card_number'];
$inputData['expiry'] = $postData['expiry'];
$inputData["amount"] = $postData["amount"];
$inputData['package_id'] = "2";
$inputData["full_ssn"] = $postData["full_ssn"];
$inputData["phone"] = $postData["phone"];
$inputData["zip_code"] = $postData["zip_code"];
$package = (new Package());
$package->purchasePackage($inputData);
if ($package->status_code == config('constant.API_SUCCESS_CODE')) {
Auth::loginUsingId($userData['id']);
}
$data = $package->data;
$message = $package->message;
$status_code = config('constant.API_SUCCESS_CODE');
appLog($this->logDataCreate($logData, $postData, $message, $data, $status_code));
}
return $this->sendApiResponse(
$data,
$message,
$status_code
);
}
public function emailVerification(CreateAccountRequest $request)
{
$logData['action'] = "EMAIL_VERIFICATION";
$inputData = $request->all();
$this->data = [];
$this->message = '';
$this->status_code = config('constant.API_SUCCESS_CODE');
$result = [];
if(config('app.REPORT_PROVIDER') == '3') {
$result = (new Package())->checkIsEmailExistOnSmartCredit($inputData);
}
// elseif (config('app.REPORT_PROVIDER') == '2'){
// $result = $this->identityIQemailVerification();
// }
if (isset($result['status']) && $result['status']) {
$this->status_code = config('constant.API_FAILED_CODE');
$this->message = $result['message'];
}
return $this->sendApiResponse(
$this->data,
$this->message,
$this->status_code
);
}
private function identityIQemailVerification()
{
$result['status'] = true;
$result['message'] = "You already have an account with identityIQ";
return $result;
}
public function profileVerification(CustomerProfileRequest $request)
{
$logData['action'] = "SSN_VERIFICATION";
$inputData = $request->all();
$this->data = [];
$this->message = '';
$this->status_code = config('constant.API_SUCCESS_CODE');
$smartCreditRequestData['ssn'] = $inputData['full_ssn'];
$smartCreditRequestData['email'] = $inputData['email'];
$result =[];
if(config('app.REPORT_PROVIDER') == '3') {
$result = (new SmartCredit(config('app.CLIENT_KEY')))
->setData($smartCreditRequestData)
->checkIsSsnExistOnSmartCredit();
}
elseif (config('app.REPORT_PROVIDER') == '1'){
$result = $this->identityIQemailVerification();
}
if (isset($result['status']) && $result['status']) {
$this->status_code = config('constant.API_FAILED_CODE');
$this->message = $result['message'];
}
return $this->sendApiResponse(
$this->data,
$this->message,
$this->status_code
);
}
public function getSecurityQuestion(Request $request): JsonResponse
{
$logData['action'] = "GET_SECURITY_QUESTION";
$questions = (new package())->securityQuestions();
return $this->sendApiResponse(
$questions->data,
$questions->message,
$questions->status_code
);
}
public function createCustomer(CustomerProfileRequest $request): JsonResponse
{
$logData['action'] = "CREATE_CUSTOMER_START";
appLog($logData);
$inputData = $request->all();
$inputData['status'] = 2; // status = 2 for inactive user, 1 for active
// Insert User table
$inputData['credit_report_company_type'] = config('app.REPORT_PROVIDER');
$userData = $this->addUser($inputData);
$inputData['user_id'] = $userData['id'];
$inputData['status_code'] = config('constant.API_SUCCESS_CODE');
// insert credit report table and user update
(new Package())->purchasePackage($inputData);
$this->status_code = config('constant.API_SUCCESS_CODE');
$this->message = '';
// Send Email To Admin,Employee and Customer
$mailData['email'] = $inputData['email'];
$mailData['name'] = $inputData['first_name'] . ' ' . $inputData['last_name'];
(new Email())->clientRegistrationMail($mailData);
$logData['action'] = "CREATE_CUSTOMER_END";
appLog($logData);
return $this->sendApiResponse(
$this->data,
$this->message,
$this->status_code
);
}
public function getIdentityQuestionAnswer(Request $request): JsonResponse
{
$logData['action'] = "GET_IDENTITY_QUESTION_ANSWER";
$questions = (new package())->identityQuestionAnswer();
return $this->sendApiResponse(
$questions['data']['idVerificationCriteria'],
$questions['message'],
$questions['status_code']
);
}
public function postIdentityQuestion(Request $request): JsonResponse
{
$inputData = $request->all();
$questions = (new package())->submitIdentityQuestionAnswer($inputData);
if ($questions->status_code == config('constant.API_SUCCESS_CODE')) {
$questions->data = $this->insertSecurityQuestionAnswer($inputData);
}
return $this->sendApiResponse(
$questions->data,
$questions->message,
$questions->status_code
);
}
private function insertSecurityQuestionAnswer($inputData)
{
$userQuestion = [];
$logData['action'] = "INSERT_USER_IDENTITY_QUESTION_ANSWER";
$userData = (new Register())->emailVarification($inputData['email']);
if (!empty($userData)) {
$userQuestion = ['user_id' => $userData['id'], 'data' => $inputData['security_question_answer']];
(new UserIdentityQuestionAnswer())->insertData($userQuestion);
$this->status_code = config('constant.API_SUCCESS_CODE');
$this->message = 'successfully inserted user identity question answer';
}
appLog($this->logDataCreate($logData, $userQuestion, $this->message, $this->data, $this->status_code));
return $userData;
}
public function insertEmployee(EmployeeRegistrationRequest $request)
{
$inputData = $request->all();
$inputData['user_type'] = 2;
$userData = $this->addUser($inputData);
if (!empty($userData)) {
$inputData['employee_id'] = $userData['id'];
(new Permission())->insertUserPermission($inputData);
}
return back()->with([$this->type => $this->message]);
}
public function userValidationInCreditReportProvider(Request $request)
{
$code = config('constant.API_FAILED_CODE');
$message = 'Email and Password is not valid in Identity IQ.';
$inputData = $request->all();
// $isValid = (new CreditReportService())->validateUserInCreditReportProvider($inputData);
$isValid = true; // client told no need to check IQ
if($isValid) {
$message = 'Email and Password is valid.';
$code = config('constant.API_SUCCESS_CODE');
}
return $this->sendApiResponse(
$isValid,
$message,
$code
);
}
private function addUser($inputData)
{
$logData['action'] = "CREATE_ACCOUNT";
$this->data = [];
try {
DB::beginTransaction();
if (!$this->data = (new Register())->createAccount($inputData)) {
throw new \Exception("Account creation failed.Please try again!");
}
$this->message = "Account created successfully.";
$this->type = 'success';
$this->status_code = config('constant.API_SUCCESS_CODE');
DB::commit();
} catch (\Exception $ex) {
DB::rollback();
$this->message = $ex->getMessage();
$this->status_code = config('constant.API_FAILED_CODE');
}
appLog($this->logDataCreate($logData, getModelDataMasking($inputData), $this->message, getModelDataMasking($this->data), $this->status_code));
return $this->data;
}
private function logDataCreate($logData, $request, $message, $response, $code)
{
$logData['data']['request'] = $request;
$logData['data']['message'] = $message;
$logData['data']['response'] = $response;
$logData['data']['code'] = $code;
return $logData;
}
}