option('con'); $param = $this->option('param'); if(!empty($con)) { switch ($con) { case 'jobs': $entity = Arr::get($param,'entity',null); $event = Arr::get($param,'event',null); $payload = Arr::get($param,'payload',null); if($entity == 'lead_status' && isset($payload['loan_ac_no'])){ $this->updateLoan($payload['loan_ac_no'], $param); }else if($entity == 'Document_uploaded' && $event == 'DOCUMENTS_REJECTED') { $this->JMQueryRaised($param); }else if($entity == 'Document_uploaded' && $event == 'DOCUMENTS_APPROVED') { $this->disburseLoan($param); }else if($entity == 'disbursal' && $event == 'disbursal.status_update') { $this->disbursalUpdate($param); } else { return Utility::handlerSendFailed([\Config::get("constants.txt.txt_errors") => ['Missing parameter ExecuteJob']]); } break; default: return Utility::handlerSendFailed([\Config::get("constants.txt.txt_errors") => ['No case found to handle in ExecuteJob']]); } } else { return Utility::handlerSendFailed([Config::get("constants.txt.txt_errors") => ['Context is missing']]); } } public function uploadDocumentAfterManualUnderwriting($id){ $request = new Request(['id' => $id]); $JMController = new JMController($request); $wrapper = new Wrapper(); $wrapperMethods = $wrapper->register(JMMethods::class); $wrapper->payload->addPayload($request); $fileTypes = (new Payload())->getFileType(true); $JMController->uploadMultipleDocuments($wrapperMethods, $wrapper, $fileTypes, $request); } public function disburseLoan($param){ $JMBooking = JMLoanBooking::where('lead_id', $param['payload']['lead_id'])->first(['application_id']); if(isset($JMBooking->application_id)) { saveComment('JM Document Decision: DOCUMENTS_APPROVED', $JMBooking->application_id, 107); $wrapper = new Wrapper(); $wrapperMethods = $wrapper->register(JMMethods::class); $request = new Request(['id' => $JMBooking->application_id, 'jm_lead_id' => $param['payload']['lead_id']]); $wrapper->payload->addPayload($request); $wrapperRes = $wrapperMethods->disburseLoan($wrapper); if ($wrapperRes->errorBag) return response()->json(['status' => 'FAIL', 'data' => array_filter($wrapperRes->errorBag)]); } } public function disbursalUpdate($param){ $JMBooking = JMLoanBooking::where('lead_id', $param['payload']['lead_id'])->first(['application_id']); if(isset($JMBooking->application_id)) { $transaction_time = Carbon::createFromFormat('d-M-Y H:i:s', $param['payload']['transaction_time'])->toDateTimeString(); $JMDisburse = new JMDisburse(); $JMDisburse->fill([ 'application_id' => $JMBooking->application_id, 'status' => $param['payload']['status'], 'amount' => $param['payload']['amount'], 'transaction_time' => $transaction_time, 'transaction_id' => $param['payload']['transaction_id'], 'closure_reason' => '', 'nach_umrn' => '', 'created_at' => Carbon::now()->toDateTimeString() ]); $JMDisburse->save(); $this->updateUTRInReference($JMBooking->application_id, $param['payload']['transaction_id']); $this->getRepayment($JMBooking, $param); $this->changeStatus($JMBooking->application_id, JMServices::$lender_id, 'disbursed'); } } private function getRepayment($JMBooking, $param){ $wrapper = new Wrapper(); $wrapperMethods = $wrapper->register(JMMethods::class); $request = new Request(['id' => $JMBooking->application_id, 'jm_lead_id' => $param['payload']['lead_id']]); $wrapper->payload->addPayload($request); $wrapperRes = $wrapperMethods->repaymentSchedule($wrapper); if ($wrapperRes->errorBag) return response()->json(['status' => 'FAIL', 'data' => array_filter($wrapperRes->errorBag)]); } public function updateUTRInReference($id, $reference_number){ ConsumerApplicationElement::where('application_id', $id)->update([ 'reference_number' => $reference_number ]); } public function JMQueryRaised($param){ $JMBooking = JMLoanBooking::where('lead_id', $param['payload']['lead_id'])->first(['id','application_id']); if (isset($JMBooking->id)) { $docId = $param['payload']['rejection_reason']['doc_id']; $query = $docId . ': ' . $param['payload']['rejection_reason']['reason']; $this->changeStatus($JMBooking->application_id, JMServices::$lender_id, 'disbursement query', 'JM Query Raised: ' . $query); } } protected function updateUTR($id, $utr){ ConsumerApplicationElement::where('application_id', $id)->update(['reference_number' => $utr]); } public function changeStatus($id, $lender_id, $status, $message = ''){ request()->merge(['lender_id' => $lender_id, 'state' => $status, 'source' => 'jm_bre']); if ($message) { saveComment($message, $id, 107); } $application = ConsumerApplication::where('id', $id)->where('state', $status)->first(['id']); if(!isset($application->id)) { $applicationController = new ConsumerApplicationController(); $applicationController->updateStatus($id); } } public function updateLoan($loanAcNo, $param){ $JMBooking = JMLoanBooking::where('loan_ac_no', $loanAcNo)->first(['id','application_id', 'status', 'lead_id', 'webhook_id']); \request()->merge(['id' => $JMBooking->application_id]); $application = ConsumerApplication::where('id', Input::get('id'))->where('lender_id',JMServices::$lender_id)->first(['id']); if (isset($application->id) && isset($JMBooking->application_id) && $JMBooking->status != 'Approved'){ JMLoanBooking::where('id', $JMBooking->id)->update([ 'status' => $param['payload']['status'] == JMServices::$Approved ? 'Approved' : $param['payload']['status'], 'webhook_id' => $param['id'] ?? '', 'lead_id' => $param['payload']['lead_id'], 'updated_at' => Carbon::now()->toDateTimeString() ]); JMOnboarding::where('application_id', Input::get('id'))->update([ 'status' => $param['payload']['status'] == JMServices::$Approved ? 'Approved' : $param['payload']['status'], 'response' => json_encode($param), 'updated_at' => Carbon::now()->toDateTimeString() ]); if ($JMBooking->status == 'ManualReview'){ $this->uploadDocumentAfterManualUnderwriting(Input::get('id')); } if ($param['payload']['status'] == JMServices::$Approved){ $response = new Response(); $response->updateStatus('approved', JMServices::$lender_id); } } } }