Browse Source

Merge branch 'subscription-controller-refactor'

pull/37/head
Nafies Luthfi 7 years ago
parent
commit
0dac0b7014
  1. 38
      app/Entities/BaseRepository.php
  2. 52
      app/Entities/Subscriptions/SubscriptionsRepository.php
  3. 38
      app/Http/Controllers/Controller.php
  4. 8
      app/Http/Controllers/PaymentsController.php
  5. 2
      app/Http/Controllers/Projects/JobsController.php
  6. 64
      app/Http/Controllers/SubscriptionsController.php
  7. 52
      app/Http/Requests/SubscriptionRequest.php

38
app/Entities/BaseRepository.php

@ -4,7 +4,6 @@ namespace App\Entities;
use App\Entities\Users\User;
use App\Entities\Projects\Job;
use App\Entities\Partners\Vendor;
use App\Entities\Projects\Project;
use App\Entities\Partners\Customer;
@ -28,21 +27,6 @@ abstract class BaseRepository extends EloquentRepository
}
/**
* Get list of customers and vendors.
*
* @return array
*/
public function getCustomersAndVendorsList()
{
$partners = [
__('customer.customer') => Customer::orderBy('name')->pluck('name', 'id')->all(),
__('vendor.vendor') => Vendor::orderBy('name')->pluck('name', 'id')->all(),
];
return $partners;
}
/**
* Get collection of workers.
*
* @return \Illuminate\Database\Eloquent\Collection
@ -53,28 +37,6 @@ abstract class BaseRepository extends EloquentRepository
}
/**
* Get collection of vendors.
*
* @return \Illuminate\Database\Eloquent\Collection
*/
public function getVendorsList()
{
return Vendor::where('is_active', 1)
->orderBy('name')
->pluck('name', 'id');
}
/**
* Get collection of projects.
*
* @return \Illuminate\Database\Eloquent\Collection
*/
public function getProjectsList()
{
return Project::orderBy('name')->pluck('name', 'id');
}
/**
* Get Job by it's id.
*
* @param int $jobId

52
app/Entities/Subscriptions/SubscriptionsRepository.php

@ -1,52 +0,0 @@
<?php
namespace App\Entities\Subscriptions;
use App\Entities\BaseRepository;
/**
* Subscriptions Repository Class.
*/
class SubscriptionsRepository extends BaseRepository
{
/**
* Subscription model.
*
* @var \App\Entities\Subscriptions\Subscription
*/
protected $model;
/**
* Create SubscriptionRepository class instance.
*
* @param \App\Entities\Subscriptions\Subscription $model
*/
public function __construct(Subscription $model)
{
parent::__construct($model);
}
/**
* Get subscrioption list.
*
* @param string $q
* @param int $customerId
* @return \Illuminate\Pagination\LengthAwarePaginator
*/
public function getSubscriptions($q, $customerId)
{
return $this->model->orderBy('status_id', 'desc')
->orderBy('due_date')
->where(function ($query) use ($q, $customerId) {
if ($customerId) {
$query->where('customer_id', $customerId);
}
if ($q) {
$query->where('name', 'like', '%'.$q.'%');
}
})
->with('customer', 'vendor')
->paginate($this->_paginate);
}
}

38
app/Http/Controllers/Controller.php

@ -2,6 +2,9 @@
namespace App\Http\Controllers;
use App\Entities\Partners\Vendor;
use App\Entities\Projects\Project;
use App\Entities\Partners\Customer;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
@ -10,4 +13,39 @@ use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
/**
* Get collection of projects.
*
* @return \Illuminate\Database\Eloquent\Collection
*/
public function getProjectsList()
{
return Project::orderBy('name')->pluck('name', 'id');
}
/**
* Get collection of vendors.
*
* @return \Illuminate\Database\Eloquent\Collection
*/
public function getVendorsList()
{
return Vendor::where('is_active', 1)
->orderBy('name')
->pluck('name', 'id');
}
/**
* Get list of customers and vendors.
*
* @return array
*/
public function getCustomersAndVendorsList()
{
return [
__('customer.customer') => Customer::orderBy('name')->pluck('name', 'id')->all(),
__('vendor.vendor') => Vendor::orderBy('name')->pluck('name', 'id')->all(),
];
}
}

8
app/Http/Controllers/PaymentsController.php

@ -54,8 +54,8 @@ class PaymentsController extends Controller
*/
public function create()
{
$projects = $this->repo->getProjectsList();
$partners = $this->repo->getCustomersAndVendorsList();
$projects = $this->getProjectsList();
$partners = $this->getCustomersAndVendorsList();
$project = Project::find(request('project_id'));
return view('payments.create', compact('projects', 'partners', 'project'));
@ -94,14 +94,14 @@ class PaymentsController extends Controller
*/
public function edit(Payment $payment)
{
$projects = $this->repo->getProjectsList();
$projects = $this->getProjectsList();
if ($payment->partner_type == 'App\Entities\Users\User') {
$partners = $this->repo->getWorkersList();
} elseif ($payment->partner_type == 'App\Entities\Partners\Customer') {
$partners = [__('customer.customer') => $this->repo->getCustomersList()];
} else {
$partners = [__('vendor.vendor') => $this->repo->getVendorsList()];
$partners = [__('vendor.vendor') => $this->getVendorsList()];
}
return view('payments.edit', compact('payment', 'projects', 'partners'));

2
app/Http/Controllers/Projects/JobsController.php

@ -40,7 +40,7 @@ class JobsController extends Controller
{
$selectedProject = null;
$workers = $this->repo->getWorkersList();
$projects = $this->repo->getProjectsList();
$projects = $this->getProjectsList();
if ($request->has('project_id')) {
$selectedProject = Project::find($request->get('project_id'));

64
app/Http/Controllers/SubscriptionsController.php

@ -5,7 +5,6 @@ namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Entities\Subscriptions\Type;
use App\Entities\Subscriptions\Subscription;
use App\Entities\Subscriptions\SubscriptionsRepository;
use App\Http\Requests\SubscriptionRequest as FormRequest;
/**
@ -16,21 +15,6 @@ use App\Http\Requests\SubscriptionRequest as FormRequest;
class SubscriptionsController extends Controller
{
/**
* @var \App\Entities\Subscriptions\SubscriptionsRepository
*/
private $repo;
/**
* Create new Subscription Controller.
*
* @param \App\Entities\Subscriptions\SubscriptionsRepository $repo
*/
public function __construct(SubscriptionsRepository $repo)
{
$this->repo = $repo;
}
/**
* Show subscription list.
*
* @param \Illuminate\Http\Request $request
@ -38,7 +22,7 @@ class SubscriptionsController extends Controller
*/
public function index(Request $request)
{
$subscriptions = $this->repo->getSubscriptions(
$subscriptions = $this->getSubscriptionListing(
$request->get('q'),
$request->get('vendor_id')
);
@ -53,8 +37,8 @@ class SubscriptionsController extends Controller
*/
public function create()
{
$projects = $this->repo->getProjectsList();
$vendors = $this->repo->getVendorsList();
$projects = $this->getProjectsList();
$vendors = $this->getVendorsList();
return view('subscriptions.create', compact('projects', 'vendors'));
}
@ -67,9 +51,8 @@ class SubscriptionsController extends Controller
*/
public function store(FormRequest $subscriptionCreateRequest)
{
$subscriptionCreateRequest->approveFor(new Subscription());
flash(trans('subscription.created'), 'success');
$subscriptionCreateRequest->approveToCreate(new Subscription());
flash(__('subscription.created'), 'success');
return redirect()->route('subscriptions.index');
}
@ -95,8 +78,8 @@ class SubscriptionsController extends Controller
*/
public function edit(Subscription $subscription)
{
$projects = $this->repo->getProjectsList();
$vendors = $this->repo->getVendorsList();
$projects = $this->getProjectsList();
$vendors = $this->getVendorsList();
$pageTitle = $this->getPageTitle('edit', $subscription);
@ -112,9 +95,8 @@ class SubscriptionsController extends Controller
*/
public function update(FormRequest $subscriptionUpdateRequest, Subscription $subscription)
{
$subscriptionUpdateRequest->approveFor($subscription);
flash(trans('subscription.updated'), 'success');
$subscriptionUpdateRequest->approveToUpdate($subscription);
flash(__('subscription.updated'), 'success');
return redirect()->route('subscriptions.edit', $subscription->id);
}
@ -129,8 +111,7 @@ class SubscriptionsController extends Controller
public function destroy(FormRequest $subscriptionDeleteRequest, Subscription $subscription)
{
$subscriptionDeleteRequest->approveToDelete($subscription);
flash(trans('subscription.deleted'), 'success');
flash(__('subscription.deleted'), 'success');
return redirect()->route('subscriptions.index');
}
@ -154,6 +135,29 @@ class SubscriptionsController extends Controller
*/
private function getPageTitle($pageType, $subscription)
{
return trans('subscription.'.$pageType).' - '.$subscription->name.' - '.$subscription->customer->name;
return __('subscription.'.$pageType).' - '.$subscription->name.' - '.$subscription->customer->name;
}
/**
* Get subscrioption list.
*
* @param string $searchQuery
* @param int $customerId
* @return \Illuminate\Pagination\LengthAwarePaginator
*/
private function getSubscriptionListing($searchQuery, $customerId)
{
$subscriptionQuery = Subscription::orderBy('status_id', 'desc')
->orderBy('due_date')
->with('customer', 'vendor');
if ($searchQuery) {
$subscriptionQuery->where('name', 'like', '%'.$searchQuery.'%');
}
if ($customerId) {
$subscriptionQuery->where('customer_id', $customerId);
}
return $subscriptionQuery->paginate(25);
}
}

52
app/Http/Requests/SubscriptionRequest.php

@ -25,10 +25,6 @@ class SubscriptionRequest extends Request
public function rules()
{
switch ($this->method()) {
case 'POST':
return $this->getCreateRules();
break;
case 'PATCH':
return $this->getUpdateRules();
break;
@ -38,6 +34,7 @@ class SubscriptionRequest extends Request
break;
default:
return $this->getCreateRules();
break;
}
}
@ -52,7 +49,7 @@ class SubscriptionRequest extends Request
'project_id' => 'required|numeric|exists:projects,id',
'vendor_id' => 'required|numeric|exists:vendors,id',
'type_id' => 'required|numeric',
'remark' => 'max:255',
'notes' => 'nullable|max:255',
];
}
@ -66,7 +63,7 @@ class SubscriptionRequest extends Request
'project_id' => 'required|numeric|exists:projects,id',
'vendor_id' => 'required|numeric|exists:vendors,id',
'type_id' => 'required|numeric',
'remark' => 'max:255',
'notes' => 'nullable|max:255',
];
}
@ -79,28 +76,33 @@ class SubscriptionRequest extends Request
];
}
public function approveFor(Subscription $subscription)
public function approveToCreate(Subscription $subscription)
{
$project = Project::findOrFail($this->get('project_id'));
if ($subscription->exists) {
$subscriptionData = $this->except(['_method', '_token']);
$subscriptionData['customer_id'] = $project->customer_id;
$subscription->update($subscriptionData);
} else {
$subscription->project_id = $project->id;
$subscription->vendor_id = $this->get('vendor_id');
$subscription->customer_id = $project->customer_id;
$subscription->name = $this->get('name');
$subscription->price = $this->get('price');
$subscription->start_date = $this->get('start_date');
$subscription->due_date = $this->get('due_date');
$subscription->type_id = $this->get('type_id');
$subscription->notes = $this->get('notes');
$subscription->save();
}
$subscription->project_id = $project->id;
$subscription->vendor_id = $this->get('vendor_id');
$subscription->customer_id = $project->customer_id;
$subscription->name = $this->get('name');
$subscription->price = $this->get('price');
$subscription->start_date = $this->get('start_date');
$subscription->due_date = $this->get('due_date');
$subscription->type_id = $this->get('type_id');
$subscription->notes = $this->get('notes');
$subscription->save();
return $subscription;
}
public function approveToUpdate(Subscription $subscription)
{
$project = Project::findOrFail($this->get('project_id'));
$subscriptionData = $this->except(['_method', '_token']);
$subscriptionData['customer_id'] = $project->customer_id;
$subscription->update($subscriptionData);
return $subscription;
}

Loading…
Cancel
Save