updated client payment, file upload and notes

This commit is contained in:
Kwesi Banson Jnr
2026-08-08 20:47:45 +00:00
parent daf7d9b9dc
commit 6cce100e62
17 changed files with 508 additions and 94 deletions

View File

@@ -11,6 +11,8 @@ use Illuminate\Support\Facades\Log;
use Carbon\Carbon;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
class ClientsController extends Controller
{
@@ -363,14 +365,15 @@ class ClientsController extends Controller
Log::info('ussd client detected');
Models\UssdClientPayment::create([
'client_id' => $result->id,
'last_modified_by_id' => session('current_user.id')
'last_modified_by_id' => Auth::user()->id
]);
}
$user_id = $auth_user->id;
Models\UserActivity::create([
'type' => 'staff',
'content' => session('current_user.name') . " added a new client ({$result->name}) successfully!",
'user_id' => session('current_user.id'),
'content' => Auth::user()->name . " added a new client ({$result->name}) successfully!",
'user_id' => Auth::user()->id,
'ip_address' => request()->ip(),
'device' => $request->header('User-Agent')
]);
@@ -402,7 +405,7 @@ class ClientsController extends Controller
$client = Models\Client::find($request->client_id);
$document_arr['file_extension'] = $request->document->extension();
$document_arr['file_reff'] = time() . uniqid();
$document_arr['last_modified_by'] = session('current_user.id');
$document_arr['last_modified_by'] = Auth::user()->id;
$result = Models\ClientFile::create($document_arr);
@@ -412,13 +415,64 @@ class ClientsController extends Controller
else{
$data = ['code' => 3, 'msg' => 'Your request could not be handled at this time'];
}
$user_id = session('current_user.id');
$username = session('current_user.name');
$user_id = Auth::user()->id;
$username = Auth::user()->name;
$content = "User ID : " . $user_id . " (" . $username . ") Document successfully uploaded for " . $client->name;
$this->logUsersActivity($type = 'staff', $content);
#$this->logUsersActivity($type = 'staff', $content);
return response()->json($data, 200);
}
public function storeDocument(Request $request)
{
$request->validate([
'client_id' => 'required|exists:clients,id',
'names' => 'required|array',
'names.*' => 'required|string|max:255',
'files' => 'required|array',
'files.*' => 'required|file|mimes:pdf,doc,docx,jpg,png,xlsx|max:15360',
]);
// return response()->json(['message' => 'check check', 'data' => $request->all()]);
foreach ($request->file('files') as $index => $file) {
$customName = $request->names[$index];
$filename = time() . '_' . uniqid() . '.' . $file->getClientOriginalExtension();
$file->storeAs('', $filename, 'client_files');
Models\ClientFile::create([
'client_id' => $request->client_id,
'created_by' => Auth::user()->id,
'name' => $customName,
'file_path' => $filename,
'file_extension' => $file->getClientOriginalExtension(),
]);
}
return response()->json(['message' => 'Documents uploaded successfully!']);
}
public function clientFiledownload($id)
{
$file = Models\ClientFile::findOrFail($id);
$filePath = 'public/client_files/' . $file->file_path;
$filename = basename($file->file_path);
// dd($filePath);
if (!Storage::disk('client_files')->exists($filename)) {
abort(404, 'Document not found.');
}
// This forces a download and names the file neatly for the user
// $downloadName = $file->name . '.' . $file->file_extension;
// dd($downloadName);
// 4. Construct a download name using the custom user title + the original extension
$downloadName = Str::slug($file->name) . '.' . $file->file_extension;
// 5. Securely stream the file payload back to the browser
return Storage::disk('client_files')->download($filename, $downloadName);
return Storage::download($filePath, $downloadName);
}
public function getClientFile($id){
$client_file = Models\ClientFile::with('client_info')->findOrFail($id);
$file = public_path('documents/client_files/') . $client_file->file_path;
@@ -438,7 +492,7 @@ class ClientsController extends Controller
'invoice_date' => 'required',
'invoice_status' => 'required',
]);
$auth_user = session('current_user');
$auth_user = Auth::user();
if ($request->short_code !== null) {
$check = is_numeric($request->short_code);
@@ -447,14 +501,13 @@ class ClientsController extends Controller
return response()->json($data, 200);
}
}
$finance_arr = [
'invoice_number' => $request->invoice_number,
'invoice_amount' => $request->invoice_amount,
'invoice_date' => $request->invoice_date,
'invoice_status' => $request->invoice_status,
'short_code' => ($request->short_code) ? $request->short_code : "",
'services' => implode(',', $request->services),
'services' => $request->services, //implode(',', $request->services),
'user_id' => $auth_user['id'],
'client_id' => $request->client_id
];
@@ -478,10 +531,11 @@ class ClientsController extends Controller
else{
$data = ['code' => 3, 'msg' => 'Your request could not be handled at this time'];
}
$user_id = session('current_user.id');
$username = session('current_user.name');
$user_id = $auth_user->id;
$username = $auth_user->name;
$content = "User ID : " . $user_id . " (" . $username . ") Added a payment record for : " . $client->name;
$this->logUsersActivity($type = 'staff', $content);
#$this->logUsersActivity($type = 'staff', $content);
return response()->json($data, 200);
}
public function financeUpdate(Request $request){
@@ -495,7 +549,7 @@ class ClientsController extends Controller
'invoice_status' => 'required'
]);
$auth_user = session('current_user');
$auth_user = Auth::user();
$payment = Models\ClientPayment::findOrFail($request->payment_id);
$payment->invoice_number = $request->invoice_number;
@@ -516,7 +570,7 @@ class ClientsController extends Controller
'invoice_date' => $request->invoice_date,
'invoice_status' => $request->invoice_status,
'short_code' => ($request->short_code) ? $request->short_code : "",
'services' => implode(',', $request->services),
'services' => $request->services, //implode(',', $request->services),
'user_id' => $auth_user['id'],
'client_id' => $request->client_id
];
@@ -533,10 +587,10 @@ class ClientsController extends Controller
else{
$data = ['code' => 3, 'msg' => 'Your request could not be handled at this time'];
}
$user_id = session('current_user.id');
$username = session('current_user.name');
$user_id = $auth_user->id;
$username = $auth_user->name;
$content = "User ID : " . $user_id . " (" . $username . ") updated an existing payment record for " . $client->name;
$this->logUsersActivity($type = 'staff', $content);
#$this->logUsersActivity($type = 'staff', $content);
@@ -546,7 +600,7 @@ class ClientsController extends Controller
$request->validate([
'client_id' => 'required',
'network' => 'required',
'shortcode' => 'required',
'shortcode' => 'required|numeric|digits_between:3,7',
'code_type' => 'required',
'toll_free' => 'required',
'status' => 'required',
@@ -555,7 +609,7 @@ class ClientsController extends Controller
'expiry_date' => 'required',
'monthly_fee' => 'sometimes'
]);
$auth_user = session('current_user');
$auth_user = Auth::user();
$shortcode_arr = [
'name' => $request->name,
@@ -565,7 +619,7 @@ class ClientsController extends Controller
'shortcode' => $request->shortcode,
'code_type' => $request->code_type,
'toll_free' => $request->toll_free,
'last_updated_by' => $auth_user['id'],
'last_updated_by' => $auth_user->id,
'launch_date' => $request->launch_date,
'expiry_date' => $request->expiry_date,
'status' => $request->status
@@ -588,10 +642,11 @@ class ClientsController extends Controller
else{
$data = ['code' => 3, 'msg' => 'Your request could not be handled at this time'];
}
$user_id = session('current_user.id');
$username = session('current_user.name');
$user_id = $auth_user->id;
$username = $auth_user->name;
$content = "User ID : " . $user_id . " (" . $username . ") Added new short code for " . $client->name;
$this->logUsersActivity($type = 'staff', $content);
# active this later
#$this->logUsersActivity($type = 'staff', $content);
return response()->json($data, 200);
}
public function shortCodeUpdate(Request $request){
@@ -607,7 +662,7 @@ class ClientsController extends Controller
'launch_date' => 'required',
'expiry_date' => 'required'
]);
$auth_user = session('current_user');
$auth_user = Auth::user();
$mnoCountry = $this->getMnoCountry($request->network);
if ($mnoCountry == false) {
$data = ['code' => 3, 'msg' => 'Your request could not be handled at this time'];
@@ -641,11 +696,22 @@ class ClientsController extends Controller
else{
$data = ['code' => 3, 'msg' => 'Your request could not be handled at this time'];
}
$user_id = session('current_user.id');
$username = session('current_user.name');
$user_id = $auth_user->id;
$username = $auth_user->name;
$content = "User ID : " . $user_id . " (" . $username . ") updated short code enty for " . $request->short_code;
$this->logUsersActivity($type = 'staff', $content);
#$this->logUsersActivity($type = 'staff', $content);
return response()->json($data, 200);
}
public function storeNote(Request $request)
{
$request->validate(['note' => 'required|string', 'client_id' => 'required|exists:clients,id']);
\App\Models\ClientNote::create($request->all());
return response()->json(['message' => 'Note added successfully!']);
}
}

View File

@@ -0,0 +1,27 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\Log;
use Carbon\Carbon;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\DB;
class ServicesController extends Controller
{
public function getServicesJson()
{
$services = Models\Service::select('id', 'name')->get();
return response()->json($services);
}
}

View File

@@ -3,6 +3,7 @@
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use App\Models\Service;
class ClientPayment extends Model
{
@@ -15,4 +16,21 @@ class ClientPayment extends Model
public function created_by_info(){
return $this->hasOne('App\Models\Account', 'id', 'auth_user_id');
}
// public function services(){
// return $this->hasMany('App\Models\Service', 'id', 'client_id');
// }
protected $casts = [
'services' => 'array',
];
public function getServiceNamesAttribute()
{
if (empty($this->services) || !is_array($this->services)) {
return collect();
}
return Service::whereIn('id', $this->services)->pluck('name');
}
}