completed clients and MNO module

This commit is contained in:
Kwesi Banson Jnr
2026-08-12 20:25:43 +00:00
parent cab4591777
commit 65245e5bc9
27 changed files with 1607 additions and 471 deletions

View File

@@ -134,6 +134,8 @@ class ClientsController extends Controller
// dump($change_account_mgr_permission);
$change_account_mgr_permission = $this->hasAnyAccess([$change_account_mgr_permission]) ? 'YES' : 'NO';
// dd($change_account_mgr_permission);
// dd($showclient);
return view('clients.show', [
'page_title' => 'Client Profile',
'showclient' => $showclient,
@@ -390,7 +392,39 @@ class ClientsController extends Controller
return redirect('clients');
}
public function getClientJson($id)
{
$client = \App\Models\Client::findOrFail($id);
return response()->json($client);
}
public function update(Request $request, $id)
{
$client = \App\Models\Client::findOrFail($id);
$client->update([
'name' => $request->name,
'email' => $request->email,
'phone' => $request->phone,
'contact_person' => $request->contact_person,
'company_type' => $request->company_type,
'contract_type' => $request->contract_type,
'industry' => $request->industry,
'status' => $request->status,
'currency' => $request->currency,
'country' => $request->country,
// Arrays handled by model casts
'services' => $request->services,
'message_types' => $request->message_types,
'connections' => $request->connections,
'support_phones' => $request->support_phones,
'support_emails' => $request->support_emails,
'rate_emails' => $request->rate_emails,
'support_skype' => $request->support_skype,
]);
return response()->json(['message' => 'Client updated successfully!']);
}
public function storeFiles(AddFilesRequest $request){

View File

@@ -1,16 +0,0 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class NetworkOperatorsControlle extends Controller
{
public function index()
{
$data = [
'page_title' => 'Dashboard'
];
return view('network_operators.index', $data);
}
}

View File

@@ -0,0 +1,115 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\NetworkOperator;
class NetworkOperatorsController extends Controller
{
public function index(Request $request)
{
$query = NetworkOperator::query();
if ($request->filled('search')) {
$search = $request->input('search');
$query->where('name', 'like', "%{$search}%")
->orWhere('contact_person_email', 'like', "%{$search}%")
->orWhere('support_phones', 'like', "%{$search}%");
}
if ($request->filled('country')) {
$query->where('country', $request->input('country'));
}
if ($request->filled('connection_status')) {
$query->where('connection_status', 'like', "%{$request->input('connection_status')}%");
}
// Paginate instead of getting all records at once (e.g., 10 per page)
$operators = $query->latest('id')->paginate(10)->withQueryString();
// dd($operators);
$totalActive = NetworkOperator::where('connection_status', 'Active')->count();
$totalSipLinks = NetworkOperator::where('connection_type', 'like', '%VPN%')->count();
$totalOperators = NetworkOperator::count();
return view('network_operators.index', compact('operators', 'totalActive', 'totalSipLinks', 'totalOperators'));
}
public function store(Request $request)
{
$request->validate([
'name' => 'required|string|max:200',
'country' => 'required|string',
]);
NetworkOperator::create([
'name' => $request->name,
'country' => $request->country,
'connection_status' => $request->connection_status ?? 'Online',
'contact_person' => $request->contact_person,
'contact_person_phone' => $request->contact_person_phone,
'contact_person_email' => $request->contact_person_email,
'technical_support_person' => $request->technical_support_person,
'support_skype' => $request->support_skype,
'mno_account_manager' => $request->mno_account_manager,
'services' => $request->services,
'support_emails' => $request->support_emails,
'finance_emails' => $request->finance_emails,
'buying_rate' => $request->buying_rate ?? 0,
'rate_type' => $request->rate_type,
'payment_terms' => $request->payment_terms,
'connection_type' => $request->connection_type,
]);
return response()->json(['message' => 'MNO Partner created successfully!']);
}
public function update(Request $request, $id)
{
$operator = NetworkOperator::findOrFail($id);
$request->validate([
'name' => 'required|string|max:200',
'country' => 'required|string',
]);
$operator->update([
'name' => $request->name,
'country' => $request->country,
'connection_status' => $request->connection_status,
'contact_person' => $request->contact_person,
'contact_person_phone' => $request->contact_person_phone,
'contact_person_email' => $request->contact_person_email,
'technical_support_person' => $request->technical_support_person,
'support_skype' => $request->support_skype,
'mno_account_manager' => $request->mno_account_manager,
'services' => $request->services,
'support_emails' => $request->support_emails,
'finance_emails' => $request->finance_emails,
'buying_rate' => $request->buying_rate,
'rate_type' => $request->rate_type,
'payment_terms' => $request->payment_terms,
'connection_type' => $request->connection_type,
]);
return response()->json(['message' => 'MNO Partner updated successfully!']);
}
// Fetch single record JSON for editing modal
public function getJson($id)
{
$operator = NetworkOperator::findOrFail($id);
return response()->json($operator);
}
public function show($id)
{
$operator = NetworkOperator::findOrFail($id);
return view('network_operators.show', compact('operator'));
}
}

View File

@@ -1,69 +0,0 @@
<?php
namespace App\Http\Controllers;
use Session;
use App\Models;
use Illuminate\Http\Request;
class ProjectStatusesController extends Controller
{
//load up project status
public function index(){
$user_id = \Auth::user()->id;
// dd($user_id);
$result = Models\ProjectStatus::with('project')
->where('assignee_id', $user_id)
->orderBy('project_id', 'DESC')
->get();
$data = [
'page_title' => 'Projects Status List',
'project_statuses' => $result
];
return view('project_status.index', $data);
}
public function add_status($id){
$result = Models\Project::with('statusInfo')->where('id', $id)->firstOrFail();
$data = [
'page_title' => 'Projects Status Update',
'project' => $result
];
// dd($data);
return view('project_status.add_status', $data);
}
public function create() {
return view('project_status.create');
}
public function store(Request $request) {
// Save a new post
$this->validate($request, [
'description' => 'required',
'status' => 'required',
'project_id' => 'required',
'assignee_id' => 'required'
]);
$project_status_arr = $request->except('_token');
$result = Models\ProjectStatus::create($project_status_arr);
Session::flash('success_message', 'Project status added successfully!');
return redirect(url('projects'));
}
public function show($id) {
// Show a specific post
}
public function edit($id) {
// Show form to edit a post
}
public function update(Request $request, $id) {
// Update a specific post
return redirect(url('project-status'));
}
public function destroy($id) {
// Delete a specific post
}
}

View File

@@ -1,86 +0,0 @@
<?php
namespace App\Http\Controllers;
use Session;
use App\Models;
use Illuminate\Http\Request;
class ProjectsController extends Controller
{
public function index(){
$user_id = \Auth::user()->id;
// dd($user_id);
$result = Models\Project::where('user_id', $user_id)->get();
$data = [
'page_title' => 'Projects List',
'projects' => $result
];
return view('projects.index', $data);
}
public function create() {
// Show form to create a new post
return view('projects.create');
}
public function store(Request $request) {
// Save a new post
$this->validate($request, [
'name' => 'required',
'description'=> 'required',
'dependancy' => 'sometimes',
'status' => 'required',
]);
$project_arr = $request->except('_token');
$result = Models\Project::create($project_arr);
Session::flash('success_message', 'Project created successfully!');
return redirect(url('projects'));
}
public function show($id) {
// Show a specific post
$user_id = \Auth::user()->id;
$result = Models\Project::with('statusInfo')->where('id', $id)->firstOrFail();
$data = [
'page_title' => 'Projects Details',
'project' => $result
];
// dump($data);
return view('projects.show', $data);
}
public function edit($id) {
// Show form to edit a post
$user_id = \Auth::user()->id;
$result = Models\Project::with('statusInfo')->where('id', $id)->firstOrFail();
$data = [
'page_title' => 'Projects Update',
'project' => $result
];
return view('projects.edit', $data);
}
public function update(Request $request, $id) {
// Update a specific post
$this->validate($request, [
'name' => 'required',
'description'=> 'required',
'dependancy' => 'sometimes',
'status' => 'required',
]);
$project = Models\Project::findOrFail($id);
$project->name = $request->name;
$project->description = $request->description;
$project->dependancy = $request->dependancy;
$project->status = $request->status;
$result = $project->save();
Session::flash('success_message', 'Project details updated successfully!');
return redirect(url('projects'));
}
public function destroy($id) {
// Delete a specific post
}
}

View File

@@ -51,4 +51,14 @@ class Client extends Model
}
return $service_name_arr;
}
protected $casts = [
'connections' => 'array',
'message_types' => 'array',
'services' => 'array',
'support_emails' => 'array',
'rate_emails' => 'array',
'support_skype' => 'array',
'support_phones' => 'array',
];
}

View File

@@ -5,11 +5,17 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Casts\Attribute;
class NetworkOps extends Model
class NetworkOperator extends Model
{
protected $guarded = array('id');
public $table = "network_operators";
protected $casts = [
'services' => 'array',
'support_emails' => 'array',
'finance_emails' => 'array',
'bind_specifics' => 'array',
];
public function account_manager_info(){
return $this->hasOne('App\Models\StaffMember', 'id', 'account_manager_id');
}

View File

@@ -4,6 +4,7 @@ namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\URL;
use Illuminate\Pagination\Paginator;
class AppServiceProvider extends ServiceProvider
{
@@ -23,5 +24,6 @@ class AppServiceProvider extends ServiceProvider
if (config('app.env') === 'production') {
URL::forceScheme('https');
}
Paginator::useBootstrapFive();
}
}