added responsable class to index

This commit is contained in:
Denis Duliçi 2020-11-06 00:43:46 +03:00
parent 96963ef0e1
commit e5a7f5b15e
31 changed files with 139 additions and 32 deletions

View File

@ -2,6 +2,7 @@
namespace App\Abstracts\Http;
use App\Abstracts\Http\Response;
use App\Traits\Jobs;
use App\Traits\Relationships;
use Illuminate\Database\Eloquent\Collection;
@ -99,4 +100,25 @@ abstract class Controller extends BaseController
return new LengthAwarePaginator($items->forPage($page, $perPage), $items->count(), $perPage, $page, $options);
}
/**
* Generate a response based on request type like HTML, JSON, or anything else.
*
* @param string $view
* @param array $data
*
* @return \Illuminate\Http\Response
*/
public function response($view, $data = [])
{
$class_name = str_replace('Controllers', 'Responses', (new \ReflectionClass($this))->getName());
if (class_exists($class_name)) {
$response = new $class_name($view, $data);
} else {
$response = new class($view, $data) extends Response {};
}
return $response;
}
}

View File

@ -0,0 +1,55 @@
<?php
namespace App\Abstracts\Http;
use Illuminate\Contracts\Support\Responsable;
use Illuminate\Support\Arr;
use Illuminate\Support\Str;
abstract class Response implements Responsable
{
protected $accepts = ['json', 'rss'];
protected $view;
protected $data;
public function __construct($view, $data)
{
$this->view = $view;
$this->data = $data;
}
public function toJson()
{
return response()->json([
'success' => true,
'error' => false,
'data' => Arr::first($this->data),
'message' => '',
]);
}
public function toHtml()
{
return view($this->view, $this->data);
}
public function toResponse($request)
{
foreach ($this->accepts as $accept) {
$request_method = 'expects' . Str::studly($accept);
$response_method = 'to' . Str::studly($accept);
if (!method_exists($request, $request_method) || !method_exists($this, $response_method)) {
continue;
}
if ($request->{$request_method}()) {
return $this->{$response_method}();
}
}
return $this->toHtml();
}
}

View File

@ -70,9 +70,16 @@ abstract class Model extends Eloquent
$request = request();
$search = $request->get('search');
$query->usingSearchString($search)->sortable($sort);
if ($request->expectsJson()) {
return $query->get();
}
$limit = $request->get('limit', setting('default.list_limit', '25'));
return $query->usingSearchString($search)->sortable($sort)->paginate($limit);
return $query->paginate($limit);
}
/**

View File

@ -3,7 +3,6 @@
namespace $CLASS_NAMESPACE$;
use App\Abstracts\Http\Controller;
use App\Abstracts\Http\FormRequest;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
@ -11,15 +10,17 @@ class $CLASS$ extends Controller
{
/**
* Display a listing of the resource.
*
* @return Response
*/
public function index()
{
return view('$ALIAS$::index');
return $this->response('$ALIAS$::index');
}
/**
* Show the form for creating a new resource.
*
* @return Response
*/
public function create()
@ -29,6 +30,7 @@ class $CLASS$ extends Controller
/**
* Store a newly created resource in storage.
*
* @param Request $request
* @return Response
*/
@ -39,6 +41,7 @@ class $CLASS$ extends Controller
/**
* Show the specified resource.
*
* @param int $id
* @return Response
*/
@ -49,6 +52,7 @@ class $CLASS$ extends Controller
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return Response
*/
@ -59,6 +63,7 @@ class $CLASS$ extends Controller
/**
* Update the specified resource in storage.
*
* @param Request $request
* @param int $id
* @return Response
@ -70,6 +75,7 @@ class $CLASS$ extends Controller
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return Response
*/

View File

@ -20,7 +20,7 @@ class Permissions extends Controller
{
$permissions = Permission::collect();
return view('auth.permissions.index', compact('permissions'));
return $this->response('auth.permissions.index', compact('permissions'));
}
/**

View File

@ -21,7 +21,7 @@ class Roles extends Controller
{
$roles = Role::collect();
return view('auth.roles.index', compact('roles'));
return $this->response('auth.roles.index', compact('roles'));
}
/**

View File

@ -37,7 +37,7 @@ class Users extends Controller
{
$users = User::with('media', 'roles')->collect();
return view('auth.users.index', compact('users'));
return $this->response('auth.users.index', compact('users'));
}
/**

View File

@ -21,7 +21,7 @@ class Accounts extends Controller
{
$accounts = Account::collect();
return view('banking.accounts.index', compact('accounts'));
return $this->response('banking.accounts.index', compact('accounts'));
}
/**

View File

@ -26,7 +26,7 @@ class Reconciliations extends Controller
$accounts = collect(Account::enabled()->orderBy('name')->pluck('name', 'id'));
return view('banking.reconciliations.index', compact('reconciliations', 'accounts'));
return $this->response('banking.reconciliations.index', compact('reconciliations', 'accounts'));
}
/**

View File

@ -30,7 +30,7 @@ class Transactions extends Controller
$transactions = Transaction::with('account', 'category', 'contact')->collect(['paid_at'=> 'desc']);
return view('banking.transactions.index', compact('transactions', 'accounts', 'types', 'categories'));
return $this->response('banking.transactions.index', compact('transactions', 'accounts', 'types', 'categories'));
}
/**

View File

@ -52,10 +52,10 @@ class Transfers extends Controller
];
}
$special_key = array(
$special_key = [
'expense_transaction.name' => 'from_account',
'income_transaction.name' => 'to_account',
);
];
$request = request();
@ -77,12 +77,12 @@ class Transfers extends Controller
array_multisort($sort_order, $sort_type, $data);
}
$transfers = $this->paginate($data);
$transfers = $request->expectsJson() ? $data : $this->paginate($data);
$accounts = collect(Account::enabled()->orderBy('name')->pluck('name', 'id'))
->prepend(trans('general.all_type', ['type' => trans_choice('general.accounts', 2)]), '');
return view('banking.transfers.index', compact('transfers', 'accounts'));
return $this->response('banking.transfers.index', compact('transfers', 'accounts'));
}
/**

View File

@ -26,7 +26,7 @@ class Companies extends Controller
{
$companies = Company::collect();
return view('common.companies.index', compact('companies'));
return $this->response('common.companies.index', compact('companies'));
}
/**

View File

@ -39,7 +39,7 @@ class Dashboards extends Controller
{
$dashboards = user()->dashboards()->collect();
return view('common.dashboards.index', compact('dashboards'));
return $this->response('common.dashboards.index', compact('dashboards'));
}
/**

View File

@ -30,7 +30,7 @@ class Items extends Controller
{
$items = Item::with('category', 'media')->collect();
return view('common.items.index', compact('items'));
return $this->response('common.items.index', compact('items'));
}
/**

View File

@ -45,7 +45,7 @@ class Reports extends Controller
$categories[$class->getCategory()][] = $report;
}
return view('common.reports.index', compact('categories', 'totals', 'icons'));
return $this->response('common.reports.index', compact('categories', 'totals', 'icons'));
}
/**

View File

@ -29,6 +29,6 @@ class Home extends Controller
$free = $this->getFreeModules($data);
$installed = Module::all()->pluck('enabled', 'alias')->toArray();
return view('modules.home.index', compact('pre_sale', 'paid', 'new', 'free', 'installed'));
return $this->response('modules.home.index', compact('pre_sale', 'paid', 'new', 'free', 'installed'));
}
}

View File

@ -21,6 +21,6 @@ class My extends Controller
$modules = $this->getInstalledModules();
$installed = Module::where('company_id', '=', session('company_id'))->pluck('enabled', 'alias')->toArray();
return view('modules.my.index', compact('purchased', 'modules', 'installed'));
return $this->response('modules.my.index', compact('purchased', 'modules', 'installed'));
}
}

View File

@ -32,7 +32,7 @@ class Invoices extends Controller
$statuses = $this->getInvoiceStatuses();
return view('portal.invoices.index', compact('invoices', 'categories', 'statuses'));
return $this->response('portal.invoices.index', compact('invoices', 'categories', 'statuses'));
}
/**

View File

@ -20,7 +20,7 @@ class Payments extends Controller
$payment_methods = Modules::getPaymentMethods('all');
return view('portal.payments.index', compact('payments', 'payment_methods'));
return $this->response('portal.payments.index', compact('payments', 'payment_methods'));
}
/**

View File

@ -45,7 +45,7 @@ class Bills extends Controller
$statuses = $this->getBillStatuses();
return view('purchases.bills.index', compact('bills', 'vendors', 'categories', 'statuses'));
return $this->response('purchases.bills.index', compact('bills', 'vendors', 'categories', 'statuses'));
}
/**

View File

@ -38,7 +38,7 @@ class Payments extends Controller
$accounts = Account::enabled()->orderBy('name')->pluck('name', 'id');
return view('purchases.payments.index', compact('payments', 'vendors', 'categories', 'accounts'));
return $this->response('purchases.payments.index', compact('payments', 'vendors', 'categories', 'accounts'));
}
/**

View File

@ -30,7 +30,7 @@ class Vendors extends Controller
{
$vendors = Contact::with('bills.transactions')->vendor()->collect();
return view('purchases.vendors.index', compact('vendors'));
return $this->response('purchases.vendors.index', compact('vendors'));
}
/**

View File

@ -28,7 +28,7 @@ class Customers extends Controller
{
$customers = Contact::with('invoices.transactions')->customer()->collect();
return view('sales.customers.index', compact('customers'));
return $this->response('sales.customers.index', compact('customers'));
}
/**

View File

@ -46,7 +46,7 @@ class Invoices extends Controller
$statuses = $this->getInvoiceStatuses();
return view('sales.invoices.index', compact('invoices', 'customers', 'categories', 'statuses'));
return $this->response('sales.invoices.index', compact('invoices', 'customers', 'categories', 'statuses'));
}
/**

View File

@ -38,7 +38,7 @@ class Revenues extends Controller
$accounts = Account::enabled()->orderBy('name')->pluck('name', 'id');
return view('sales.revenues.index', compact('revenues', 'customers', 'categories', 'accounts'));
return $this->response('sales.revenues.index', compact('revenues', 'customers', 'categories', 'accounts'));
}
/**

View File

@ -30,7 +30,7 @@ class Categories extends Controller
'other' => trans_choice('general.others', 1),
]);
return view('settings.categories.index', compact('categories', 'types', 'transfer_id'));
return $this->response('settings.categories.index', compact('categories', 'types', 'transfer_id'));
}
/**

View File

@ -21,7 +21,7 @@ class Currencies extends Controller
{
$currencies = Currency::collect();
return view('settings.currencies.index', compact('currencies'));
return $this->response('settings.currencies.index', compact('currencies'));
}
/**

View File

@ -63,7 +63,7 @@ class Settings extends Controller
$settings[$alias] = $setting;
}
return view('settings.settings.index', ['modules' => $settings]);
return $this->response('settings.settings.index', ['modules' => $settings]);
}
/**

View File

@ -29,7 +29,7 @@ class Taxes extends Controller
'compound' => trans('taxes.compound'),
];
return view('settings.taxes.index', compact('taxes', 'types'));
return $this->response('settings.taxes.index', compact('taxes', 'types'));
}
/**

View File

@ -0,0 +1,10 @@
<?php
namespace App\Http\Responses\Common;
use App\Abstracts\Http\Response;
class Items extends Response
{
//
}

View File

@ -275,9 +275,16 @@ class Company extends Eloquent
$request = request();
$search = $request->get('search');
$query = user()->companies()->usingSearchString($search)->sortable($sort);
if ($request->expectsJson()) {
return $query->get();
}
$limit = $request->get('limit', setting('default.list_limit', '25'));
return user()->companies()->usingSearchString($search)->sortable($sort)->paginate($limit);
return $query->paginate($limit);
}
/**