Working on client saves

This commit is contained in:
David Bomba 2019-05-10 16:08:33 +10:00
parent 4cae3fdcfb
commit 3fde744d77
10 changed files with 81 additions and 36 deletions

View File

@ -102,7 +102,8 @@ class ClientController extends BaseController
*/
public function update(UpdateClientRequest $request, Client $client)
{
$client = $this->client_repo->save($request, $client);
$client = $this->client_repo->save($request->all(), $client);
return $this->itemResponse($client);
@ -115,6 +116,7 @@ class ClientController extends BaseController
*/
public function create(CreateClientRequest $request)
{
$client = ClientFactory::create(auth()->user()->company()->id, auth()->user()->id);
return $this->itemResponse($client);
@ -130,7 +132,7 @@ class ClientController extends BaseController
public function store(StoreClientRequest $request)
{
$client = $this->client_repo->save($request, ClientFactory::create(auth()->user()->company()->id, auth()->user()->id));
$client = $this->client_repo->save($request->all(), ClientFactory::create(auth()->user()->company()->id, auth()->user()->id));
$client->load('contacts', 'primary_contact');

View File

@ -4,9 +4,11 @@ namespace App\Http\Requests\Client;
use App\Http\Requests\Request;
use App\Models\Client;
use App\Utils\Traits\GeneratesNumberCounter;
class StoreClientRequest extends Request
{
use GeneratesNumberCounter;
/**
* Determine if the user is authorized to make this request.
*
@ -20,8 +22,11 @@ class StoreClientRequest extends Request
public function rules()
{
// $this->sanitize();
/* Ensure we have a client name, and that all emails are unique*/
$rules['name'] = 'required';
$rules['id_number'] = 'unique:clients,id_number,,id,company_id,' . auth()->user()->company()->id;
$contacts = request('contacts');
@ -39,6 +44,15 @@ class StoreClientRequest extends Request
}
public function sanitize()
{
$input = $this->all();
$this->replace($input);
}
public function messages()
{
return [

View File

@ -37,7 +37,7 @@ public function sanitize()
/** If we have an email address instead of a client_id - harvest the client_id here */
if(isset($input['email']) && !$input['client_id'])
{
$contact = ClientContact::company()->whereEmail($input['email'])->first();
$contact = ClientContact::company(auth()->user()->company()->id)->whereEmail($input['email'])->first();
if($contact)
$input['client_id'] = $contact->client_id;

View File

@ -14,7 +14,7 @@ class StoreClient
{
use Dispatchable;
protected $request;
protected $data;
protected $client;
@ -24,9 +24,10 @@ class StoreClient
* @return void
*/
public function __construct(Request $request, Client $client)
public function __construct(array $data, Client $client)
{
$this->request = $request;
$this->data = $data;
$this->client = $client;
}
@ -35,11 +36,11 @@ class StoreClient
*
* @return void
*/
public function handle(ClientRepository $clientRepo, ClientContactRepository $clientContactRepo) : ?Client
{
$client = $clientRepo->save($this->request, $this->client);
public function handle(ClientRepository $client_repo, ClientContactRepository $client_contact_repo) : ?Client
$client = $client_repo->save($this->data, $this->client);
$contacts = $clientContactRepo->save($this->request->input('contacts'), $client);
$contacts = $client_contact_repo->save($data['contacts']), $client);
return $client;
}

View File

@ -15,7 +15,7 @@ class UpdateClient
{
use Dispatchable;
protected $request;
protected $data;
protected $client;
@ -25,9 +25,9 @@ class UpdateClient
* @return void
*/
public function __construct(Request $request, Client $client)
public function __construct(array $data, Client $client)
{
$this->request = $request;
$this->data = $data;
$this->client = $client;
}
@ -36,11 +36,11 @@ class UpdateClient
*
* @return void
*/
public function handle(ClientRepository $clientRepo, ClientContactRepository $clientContactRepo) :?Client
public function handle(ClientRepository $client_repo, ClientContactRepository $client_contact_repo) :?Client
{
$client = $clientRepo->save($this->request, $this->client);
$client = $client_repo->save($this->data, $this->client);
$contacts = $clientContactRepo->save($this->request->input('contacts'), $client);
$contacts = $client_contact_repo->save($data['contacts']), $client);
return $client->fresh();
}

View File

@ -36,6 +36,7 @@ class BaseModel extends Model
public function scopeCompany($query, $company_id)
{
$query->where('company_id', $company_id);
return $query;
}

View File

@ -6,7 +6,7 @@ use App\Models\Client;
use App\Models\ClientContact;
/**
*
* ClientContactRepository
*/
class ClientContactRepository extends BaseRepository
{
@ -19,15 +19,19 @@ class ClientContactRepository extends BaseRepository
/* Get array of IDs which have been removed from the contacts array and soft delete each contact */
collect($client->contacts->pluck('id'))->diff($contacts->pluck('id'))->each(function($contact){
ClientContact::destroy($contact);
});
/* Set first record to primary - always*/
$contacts = $contacts->sortBy('is_primary');
$contacts->first(function($contact){
$contact['is_primary'] = true;
$contact->save();
});
//loop and update/create contacts
@ -43,13 +47,11 @@ class ClientContactRepository extends BaseRepository
);
$update_contact->fill($contact);
$update_contact->save();
});
}
}

View File

@ -5,10 +5,9 @@ namespace App\Repositories;
use App\Models\Client;
use App\Repositories\ClientContactRepository;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
/**
*
* ClientRepository
*/
class ClientRepository extends BaseRepository
{
@ -16,32 +15,55 @@ class ClientRepository extends BaseRepository
/**
* @var ClientContactRepository
*/
protected $contactRepo;
protected $contact_repo;
/**
* ClientController constructor.
* @param ClientContactRepository $contactRepo
* @param ClientContactRepository $contact_repo
*/
public function __construct(ClientContactRepository $contactRepo)
public function __construct(ClientContactRepository $contact_repo)
{
$this->contactRepo = $contactRepo;
$this->contact_repo = $contact_repo;
}
/**
* Gets the class name.
*
* @return string The class name.
*/
public function getClassName()
{
return Client::class;
}
public function save(Request $request, Client $client) : ?Client
/**
* Saves the client and its contacts
*
* @param array $data The data
* @param \App\Models\Client $client The client
*
* @return Client|\App\Models\Client|null Client Object
*/
public function save(array $data, Client $client) : ?Client
{
$client->fill($request->input());
$client->fill($data);
$client->save();
$contacts = $this->contactRepo->save($request->input('contacts'), $client);
$client->id_number = $client->getNextNumber($client); //todo write tests for this and make sure that custom client numbers also works as expected from here
$client->save();
if(isset($data['contacts']))
$contacts = $this->contact_repo->save($data['contacts'], $client);
return $client;
}
}

View File

@ -12,17 +12,15 @@ use Illuminate\Http\Request;
class InvoiceRepository extends BaseRepository
{
/**
* Gets the class name.
*
* @return ::class The class name.
* @return string The class name.
*/
public function getClassName()
{
return Invoice::class;
}
/**
* Saves the invoices
@ -49,7 +47,6 @@ class InvoiceRepository extends BaseRepository
}
/**
* Mark the invoice as sent.
*
@ -64,7 +61,7 @@ class InvoiceRepository extends BaseRepository
return $invoice;
$invoice->status_id = Invoice::STATUS_SENT;
$invoice->save();
return $invoice;

View File

@ -35,7 +35,7 @@ class RandomDataSeeder extends Seeder
$user = factory(\App\Models\User::class)->create([
'email' => $faker->email,
'account_id' => $account->id,
// 'account_id' => $account->id,
'confirmation_code' => $this->createDbHash(config('database.default'))
]);
@ -94,6 +94,12 @@ class RandomDataSeeder extends Seeder
/** Invoice Factory */
factory(\App\Models\Invoice::class,50)->create(['user_id' => $user->id, 'company_id' => $company->id, 'client_id' => $client->id]);
$clients = Client::all();
foreach($clients as $client)
{
$client->getNextNumber($client);
$client->save();
}
}
}