577 lines
20 KiB
PHP
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;
|
|
}
|
|
|
|
}
|