pushed the onboarding module to production

This commit is contained in:
Kwesi Banson
2024-02-02 09:22:33 +00:00
parent 7a64019001
commit d4ab479e0c
9 changed files with 425 additions and 112 deletions

View File

@@ -9,6 +9,7 @@ use Illuminate\Support\Arr;
use App\Jobs\SendNewUssdClientEmail;
use App\Jobs\SendUssdClientActiveEmail;
use App\Jobs\SendNewNotesEmailAlert;
use App\Jobs\SendOnboardingCompletedEmailAlert;
use App\Http\Requests;
use Carbon\Carbon;
@@ -60,7 +61,7 @@ class ClientsController extends Controller
->join('auth_users AS aumngr', 'aumngr.id', '=', 'clients.auth_user_id')
->join('auth_users AS aumodify', 'aumodify.id', '=', 'clients.last_modified_by')
->join('flags AS flags', 'flags.country', '=', 'clients.country')
->select('clients.id', 'clients.name', 'clients.status','clients.progress_indicator', 'clients.country', 'aumngr.name As accountMgr', 'aumodify.name AS modifiedBy', 'flags.url AS theflag')
->select('clients.id', 'clients.name', 'clients.status','clients.progress_indicator_score', 'clients.country', 'aumngr.name As accountMgr', 'aumodify.name AS modifiedBy', 'flags.url AS theflag')
->orderBy('name', 'ASC')
->paginate(15);
@@ -70,8 +71,8 @@ class ClientsController extends Controller
->join('auth_users AS aumngr', 'aumngr.id', '=', 'clients.auth_user_id')
->join('auth_users AS aumodify', 'aumodify.id', '=', 'clients.last_modified_by')
->join('flags AS flags', 'flags.country', '=', 'clients.country')
->select('clients.id','clients.name', 'clients.status', 'clients.progress_indicator','clients.country', 'aumngr.name As accountMgr', 'aumodify.name AS modifiedBy', 'flags.url AS theflag')
->whereRaw("clients.name like '%$keyword%' or clients.status like '%$keyword%' OR clients.country like '%$keyword%' OR aumngr.name like '%$keyword%' OR aumodify.name like '%$keyword%' OR clients.progress_indicator like '%$keyword%'")
->select('clients.id','clients.name', 'clients.status', 'clients.progress_indicator_score','clients.country', 'aumngr.name As accountMgr', 'aumodify.name AS modifiedBy', 'flags.url AS theflag')
->whereRaw("clients.name like '%$keyword%' or clients.status like '%$keyword%' OR clients.country like '%$keyword%' OR aumngr.name like '%$keyword%' OR aumodify.name like '%$keyword%' OR clients.progress_indicator_score like '%$keyword%'")
->orderBy('name', 'ASC')
->paginate(15);
}
@@ -156,6 +157,7 @@ class ClientsController extends Controller
'auth_user_id' => 'required', // account manager
]);
$onboarding_stages = Models\ClientOnboardingMainStage::orderBy('stage_id')->get();
// dd($onboarding_stages);
$client_current_stages = [];
foreach ($onboarding_stages as $value) {
@@ -173,6 +175,7 @@ class ClientsController extends Controller
'created_by' => session('current_user.id'),
'last_modified_by' => session('current_user.id'),
'progress_indicator_score' => 10,
'progress_indicator' => $onboarding_stages[0]->stage, // 'Agreement Stage', //
'onboarding_progress_stage' => json_encode($client_current_stages)
];
if ($request->has('notes')) {
@@ -205,6 +208,17 @@ class ClientsController extends Controller
$result = Models\Client::create($client_arr);
//add entries for client_onboarding_progress
$get_stage_subs_items = Models\ClientOnboardingSubItem::get();
foreach ($get_stage_subs_items as $value) {
$progress_arr = [
'stage_id' => $value->stage_id,
'client_id' => $result->id,
'name' => $value->name,
'status' => 'PENDING'
];
$clients_onboarding_progress = Models\ClientOnboardingProgress::create($progress_arr);
}
if (in_array('3', $request->services)) {
\Log::info('ussd client detected');
$ussd_client_payment_arr = [
@@ -576,7 +590,6 @@ class ClientsController extends Controller
}
else{
dump($days);
$renewal_due = "In " . floor($days/31) . " months";
}
}
@@ -789,35 +802,16 @@ class ClientsController extends Controller
//This should not be false because onboarding_progress_stage is populated during client creation
$onboarding_progress = json_decode($client->onboarding_progress_stage, 1);
//
//dump($client->progress_indicator);
$has_pending = in_array("PENDING", $onboarding_progress);
if ($has_pending == true) {
$pending_stage = Arr::where($onboarding_progress, function ($value, $key) {
return $value == "PENDING";
});
$pending_stage = array_key_first($pending_stage);
$stage_details = Models\ClientOnboardingMainStage::where('stage', $pending_stage)->first();
//get sub items
//dump($stage_details);
if ($client->progress_indicator !== "COMPLETED") {
$stage_details = Models\ClientOnboardingMainStage::where('stage', $client->progress_indicator)->first();
//dd($stage_details);
$onboarding_sub_items_progress = Models\ClientOnboardingProgress::where('stage_id', $stage_details->stage_id)->where('client_id', $id)->pluck('name', 'name');
//dd($onboarding_sub_items_progress);
$onboarding_sub_items = Models\ClientOnboardingSubItem::where('stage_id', $stage_details->stage_id)->pluck('name', 'name');
// dump($stage_details->stage_id);
// dd($onboarding_sub_items);
/*
$onboarding_stages = Models\ClientOnboardingStage::where('client_id', $id)->where('status', 'PENDING')->groupBy('stage')->get();
$onboarding_stages = Models\ClientOnboardingProgress::where('client_id', $id)->where('status', 'PENDING')->orderBy('stage', 'ASC')->first();
*/
#$progress_indicators = Models\ClientIndicator::pluck('name', 'name');
#$current_progress_indicators = json_decode($client->progress_indicators, true);
}
else{
$pending_stage = "COMPLETED";
$onboarding_sub_items = Models\ClientOnboardingSubItem::where('stage_id', $stage_details->stage_id)->pluck('name', 'name');
}
/*
else{
@@ -941,11 +935,9 @@ class ClientsController extends Controller
'onboarding_sub_items_progress' => $onboarding_sub_items_progress,
'onboarding_sub_items' => $onboarding_sub_items,
'current_pending_stage' => $pending_stage,
'current_pending_stage' => $client->progress_indicator,
'has_pending' => $has_pending
];
// dd($data);
return view('client.edit', $data);
}
@@ -958,60 +950,47 @@ class ClientsController extends Controller
*/
public function update(Requests\UpdateClientRequest $request, $id)
{
//Todo : work on the services and the sender IDs
/*
$request->validate([
'name' => 'required',
'email' => 'required|email',
'country' => 'required',
'status' => 'required',
'currency' => 'required',
'auth_user_id' => 'required'
]);
*/
// dump($request->has('other_document_name'));
// dump($request->all());
$client_update = Models\Client::find($id);
$current_pending_stage_details = Models\ClientOnboardingMainStage::where('stage', $request->current_pending_stage)->first();
$get_stage_subs_items = Models\ClientOnboardingSubItem::where('stage_id', $current_pending_stage_details->stage_id)->get();
// dd($get_stage_subs_items);
//$onboarding_sub_items_progress = Models\ClientOnboardingProgress::where('stage_id', $current_pending_stage_details->stage_id)->where('client_id', $id)->pluck('name', 'name');
//$progress_indicators_arr = json_encode($request->progress_indicators);
#update the table for onboarding progress
foreach ($request->onboarding_sub_items_progress as $value) {
$stage_id = ['stage_id' => $current_pending_stage_details->stage_id, 'client_id' => $id, 'name' => $value ];
$progress_arr = [
'status' => 'COMPLETED'
];
$clients_onboarding_progress = Models\ClientOnboardingProgress::updateOrCreate($stage_id, $progress_arr);
}
//update the status of onboarding progress stage in clients
$get_stage_onboarding_status = Models\ClientOnboardingProgress::where('client_id', $id)->where('stage_id', $current_pending_stage_details->stage_id)->where('status', 'COMPLETED')->get();
// dd($get_stage_onboarding_status);
$onboarding_progress_stage = json_decode($client_update->onboarding_progress_stage, true);
// dd(count($get_stage_subs_items) == count($get_stage_onboarding_status));
if (count($get_stage_subs_items) == count($get_stage_onboarding_status)) {
//check if all items have been completed and update
$onboarding_progress_stage[$current_pending_stage_details->stage] = 'COMPLETED';
$client_update = Models\Client::find($id);
if ($client_update->progress_indicator != 'COMPLETED') {
$current_pending_stage_details = Models\ClientOnboardingMainStage::where('stage', $request->current_pending_stage)->first();
$get_stage_subs_items = Models\ClientOnboardingSubItem::where('stage_id', $current_pending_stage_details->stage_id)->get();
#update the table for onboarding progress
foreach ($request->onboarding_sub_items_progress as $value) {
$stage_id = ['stage_id' => $current_pending_stage_details->stage_id, 'client_id' => $id, 'name' => $value ];
$progress_arr = [
'status' => 'COMPLETED'
];
$clients_onboarding_progress = Models\ClientOnboardingProgress::updateOrCreate($stage_id, $progress_arr);
}
//update the status of onboarding progress stage in clients
$get_stage_onboarding_status = Models\ClientOnboardingProgress::where('client_id', $id)->where('stage_id', $current_pending_stage_details->stage_id)->where('status', 'COMPLETED')->get();
// dd($get_stage_onboarding_status);
$onboarding_progress_stage = json_decode($client_update->onboarding_progress_stage, true);
// dd(count($get_stage_subs_items) == count($get_stage_onboarding_status));
if (count($get_stage_subs_items) == count($get_stage_onboarding_status)) {
//check if all items have been completed and update
$onboarding_progress_stage[$current_pending_stage_details->stage] = 'COMPLETED';
}
$pending_stage = Arr::where($onboarding_progress_stage, function ($value, $key) {
return $value == "PENDING";
});
$pending_stage = array_key_first($pending_stage);
if ($pending_stage == true) {
//Pending Exist
$client_update->progress_indicator = $pending_stage;
}
else{
//No pending detected so render the process completed
$client_update->progress_indicator = 'COMPLETED';
//send email here
$client = Models\Client::with('auth_user_info')->find($id);
dispatch(new SendOnboardingCompletedEmailAlert($client));
}
}
if ($request->has('document_one') && $request->has('document_one_name')) {
if ($request->file('document_one')->isValid()) {
$filename = "erp_" . time() . str_random(6) . "." . $request->document_one->extension();
@@ -1084,14 +1063,24 @@ class ClientsController extends Controller
$client_update->notes = $request->notes;
$client_update->industry = $request->industry;
#$client_update->progress_indicators = json_encode($request->onboarding_sub_items_progress);
$client_update->onboarding_progress_stage = json_encode($onboarding_progress_stage);
/*
$general_indicators = Models\ClientIndicator::count();
$indicator_score = (count($request->progress_indicators)/$general_indicators) * 100;
$indicator_score = number_format($indicator_score);
$client_update->progress_indicator_score = $indicator_score;
*/
if ($client_update->progress_indicator != 'COMPLETED') {
$client_update->onboarding_progress_stage = json_encode($onboarding_progress_stage);
$progress_breakdown = array_count_values($onboarding_progress_stage);
if (array_has($progress_breakdown, ['COMPLETED']) == false) {
$indicator_score = "0";
}
else{
$indicator_score = ($progress_breakdown['COMPLETED']/count($onboarding_progress_stage)) * 100;
}
$indicator_score = number_format($indicator_score);
$client_update->progress_indicator_score = $indicator_score;
}
else{
//review this manual process :)
$client_update->progress_indicator_score = 100;
}
$client_update->skype_name = $request->skype_name ?? "";
$client_update->linkedin_name = $request->linkedin_name ?? "";
$client_update->smpp_username = $request->smpp_username ?? "";
@@ -1128,29 +1117,6 @@ class ClientsController extends Controller
$result = $client_update->save();
#$client = Models\Client::find($id);
/*
if (in_array('3', $request->services)) {
if ($request->status == 'active' && $client_update->status !== 'active') {
\log::info('ussd client active detected');
#dispatch(new SendUssdClientActiveEmail($client));
}
}
if (in_array('3', $request->services)) {
\Log::info('ussd client detected');
$ussd_client_payment_arr = [
'client_id' => $client_update->id,
'last_modified_by_id' => session('current_user.id')
];
$retval = Models\UssdClientPayment::create($ussd_client_payment_arr);
//TODO send an email to jim/priscilla about new USSD client,
#dispatch(new SendNewUssdClientEmail($client_update));
}
$retval = $this->update_services($request->services, $client_update->id);
*/
$activity_arr = [
'type' => 'staff',
'content' => session('current_user.name') . " updated ($client_update->name) details successfully!",