Files
voltcerto/app/Services/LeadService.php
Luis Medon e488ae3342 Add feature tests, unit tests, and configuration for Laravel application
- Created ExampleTest and RoutesTest for basic application response and route testing.
- Implemented IsolatedDatabaseTestCase for isolated database testing.
- Added unit tests for various models and services including Contract, CPE, and LeadDetail.
- Developed request validation tests for CreateClientRequest, UpdateClientRequest, and ContractRequest.
- Introduced Vite configuration for asset management in the Laravel application.
2026-10-29 11:30:06 +00:00

134 lines
3.3 KiB
PHP

<?php
namespace App\Services;
use App\Http\Requests\LeadRequest;
use App\Models\Clients as Client;
use App\Models\LeadDetail;
use App\Models\LeadStatus;
class LeadService
{
/**
* Display a listing of leads.
*/
public function list()
{
// Fetch only records with type = 'lead' and eager load leadStatus relation
$leads = Client::with('leadStatus')
->where('type', 'lead')
->orderBy('created_at', 'desc')
->paginate(10);
return compact('leads');
}
/**
* Display a specific lead.
*/
public function show($id)
{
// Fetch a single lead with its leadStatus
$lead = Client::with(['leadStatus', 'leadDetail'])->where('type', 'lead')->findOrFail($id);
return compact('lead');
}
/**
* Show the form for creating a new lead.
*/
public function create()
{
// Use unified add_edit view
return ['leadStatuses' => LeadStatus::all()];
}
/**
* Store a newly created lead in storage.
*/
public function store(LeadRequest $request)
{
$validated = $request->validated();
$validated['type'] = 'lead';
$validated['seller_id'] = $request->user()->id;
$client = Client::create($validated);
// Save lead details
LeadDetail::create([
'client_id' => $client->id,
'contact_date' => $request->contact_date,
'contract_end_date' => $request->contract_end_date,
'contract_type' => $request->contract_type,
'delivery_point_code' => $request->delivery_point_code,
]);
return $client->load('leadDetail');
}
/**
* Show the form for editing the specified lead.
*/
public function edit($id)
{
// Find lead by id
$lead = Client::with('leadDetail')->where('type', 'lead')->findOrFail($id);
// Use unified add_edit view and pass the lead
return ['lead' => $lead, 'leadStatuses' => LeadStatus::all()];
}
/**
* Update the specified lead in storage.
*/
public function update(LeadRequest $request, $id)
{
$lead = Client::where('type', 'lead')->findOrFail($id);
$lead->update($request->validated());
// Update or create lead details
$lead->leadDetail()->updateOrCreate(
['client_id' => $lead->id],
[
'contact_date' => $request->contact_date,
'contract_end_date' => $request->contract_end_date,
'contract_type' => $request->contract_type,
'delivery_point_code' => $request->delivery_point_code,
]
);
return $lead->load('leadDetail');
}
/**
* Convert a lead into a client.
*/
public function convert($id)
{
$lead = Client::where('type', 'lead')->findOrFail($id);
$lead->update([
'type' => 'client',
'lead_status_id' => null,
'status' => 'A',
]);
return $lead;
}
/**
* Remove the specified lead from storage.
*/
public function destroy($id)
{
$lead = Client::where('type', 'lead')->findOrFail($id);
$lead->delete();
return [
'status' => 'success',
'message' => 'Lead removed successfully!'
];
}
}