Merge branch '2.1-dev' of github.com:akaunting/akaunting into 2.1-dev
This commit is contained in:
@ -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;
|
||||
}
|
||||
}
|
||||
|
55
app/Abstracts/Http/Response.php
Normal file
55
app/Abstracts/Http/Response.php
Normal 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();
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
28
app/Console/Stubs/Modules/component.stub
Normal file
28
app/Console/Stubs/Modules/component.stub
Normal file
@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace $NAMESPACE$;
|
||||
|
||||
use Illuminate\View\Component;
|
||||
|
||||
class $CLASS$ extends Component
|
||||
{
|
||||
/**
|
||||
* Create a new component instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the view / contents that represent the component.
|
||||
*
|
||||
* @return \Illuminate\Contracts\View\View|string
|
||||
*/
|
||||
public function render()
|
||||
{
|
||||
return view('$ALIAS$::$VIEW_NAME$');
|
||||
}
|
||||
}
|
@ -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
|
||||
*/
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
namespace $NAMESPACE$;
|
||||
|
||||
use Illuminate\Support\Facades\Blade;
|
||||
use Illuminate\Support\ServiceProvider as Provider;
|
||||
|
||||
class $NAME$ extends Provider
|
||||
@ -14,6 +15,7 @@ class $NAME$ extends Provider
|
||||
public function boot()
|
||||
{
|
||||
$this->loadViews();
|
||||
$this->loadViewComponents();
|
||||
$this->loadTranslations();
|
||||
$this->loadMigrations();
|
||||
//$this->loadConfig();
|
||||
@ -39,6 +41,16 @@ class $NAME$ extends Provider
|
||||
$this->loadViewsFrom(__DIR__ . '/../Resources/views', '$ALIAS$');
|
||||
}
|
||||
|
||||
/**
|
||||
* Load view components.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function loadViewComponents()
|
||||
{
|
||||
Blade::componentNamespace('$COMPONENT_NAMESPACE$', '$ALIAS$');
|
||||
}
|
||||
|
||||
/**
|
||||
* Load translations.
|
||||
*
|
||||
|
@ -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'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -58,7 +58,7 @@ class Users extends Controller
|
||||
return $r->hasPermission('read-client-portal');
|
||||
});
|
||||
|
||||
$companies = user()->companies()->take(10)->get()->sortBy('name')->pluck('name', 'id');
|
||||
$companies = user()->companies()->take(setting('default.select_limit'))->get()->sortBy('name')->pluck('name', 'id');
|
||||
|
||||
return view('auth.users.create', compact('roles', 'companies', 'landing_pages'));
|
||||
}
|
||||
@ -123,7 +123,7 @@ class Users extends Controller
|
||||
});
|
||||
}
|
||||
|
||||
$companies = user()->companies()->take(10)->get()->sortBy('name')->pluck('name', 'id');
|
||||
$companies = user()->companies()->take(setting('default.select_limit'))->get()->sortBy('name')->pluck('name', 'id');
|
||||
|
||||
return view('auth.users.edit', compact('user', 'companies', 'roles', 'landing_pages'));
|
||||
}
|
||||
|
@ -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'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -22,7 +22,7 @@ class Transactions extends Controller
|
||||
{
|
||||
$accounts = Account::enabled()->orderBy('name')->pluck('name', 'id');
|
||||
|
||||
$types = collect(['expense' => 'Expense', 'income' => 'Income'])
|
||||
$types = collect(['expense' => trans_choice('general.expenses', 1), 'income' => trans_choice('general.incomes', 1)])
|
||||
->prepend(trans('general.all_type', ['type' => trans_choice('general.types', 2)]), '');
|
||||
|
||||
$request_type = !request()->has('type') ? ['income', 'expense'] : request('type');
|
||||
@ -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'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -6,9 +6,7 @@ use App\Abstracts\Http\Controller;
|
||||
use App\Http\Requests\Common\BulkAction as Request;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class
|
||||
|
||||
BulkActions extends Controller
|
||||
class BulkActions extends Controller
|
||||
{
|
||||
|
||||
/**
|
||||
|
@ -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'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -40,7 +40,7 @@ class Dashboards extends Controller
|
||||
{
|
||||
$dashboards = user()->dashboards()->collect();
|
||||
|
||||
return view('common.dashboards.index', compact('dashboards'));
|
||||
return $this->response('common.dashboards.index', compact('dashboards'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -50,7 +50,7 @@ class Items extends Controller
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
$categories = Category::item()->enabled()->orderBy('name')->pluck('name', 'id');
|
||||
$categories = Category::item()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
|
||||
|
||||
$taxes = Tax::enabled()->orderBy('name')->get()->pluck('title', 'id');
|
||||
|
||||
@ -129,7 +129,7 @@ class Items extends Controller
|
||||
*/
|
||||
public function edit(Item $item)
|
||||
{
|
||||
$categories = Category::item()->enabled()->orderBy('name')->pluck('name', 'id');
|
||||
$categories = Category::item()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
|
||||
|
||||
$taxes = Tax::enabled()->orderBy('name')->get()->pluck('title', 'id');
|
||||
|
||||
|
@ -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'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -30,7 +30,7 @@ class Items extends Controller
|
||||
*/
|
||||
public function create(IRequest $request)
|
||||
{
|
||||
$categories = Category::item()->enabled()->orderBy('name')->pluck('name', 'id');
|
||||
$categories = Category::item()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
|
||||
|
||||
$taxes = Tax::enabled()->orderBy('name')->get()->pluck('title', 'id');
|
||||
|
||||
|
@ -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'));
|
||||
}
|
||||
}
|
||||
|
@ -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'));
|
||||
}
|
||||
}
|
||||
|
@ -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'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -39,13 +39,7 @@ class Bills extends Controller
|
||||
{
|
||||
$bills = Bill::with('contact', 'transactions')->collect(['billed_at'=> 'desc']);
|
||||
|
||||
$vendors = Contact::vendor()->enabled()->orderBy('name')->pluck('name', 'id');
|
||||
|
||||
$categories = Category::expense()->enabled()->orderBy('name')->pluck('name', 'id');
|
||||
|
||||
$statuses = $this->getBillStatuses();
|
||||
|
||||
return view('purchases.bills.index', compact('bills', 'vendors', 'categories', 'statuses'));
|
||||
return $this->response('purchases.bills.index', compact('bills'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -96,7 +90,7 @@ class Bills extends Controller
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
$vendors = Contact::vendor()->enabled()->orderBy('name')->pluck('name', 'id');
|
||||
$vendors = Contact::vendor()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
|
||||
|
||||
$currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code')->toArray();
|
||||
|
||||
@ -106,7 +100,7 @@ class Bills extends Controller
|
||||
|
||||
$taxes = Tax::enabled()->orderBy('name')->get();
|
||||
|
||||
$categories = Category::expense()->enabled()->orderBy('name')->pluck('name', 'id');
|
||||
$categories = Category::expense()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
|
||||
|
||||
$number = $this->getNextBillNumber();
|
||||
|
||||
@ -192,7 +186,7 @@ class Bills extends Controller
|
||||
*/
|
||||
public function edit(Bill $bill)
|
||||
{
|
||||
$vendors = Contact::vendor()->enabled()->orderBy('name')->pluck('name', 'id');
|
||||
$vendors = Contact::vendor()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
|
||||
|
||||
$currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code')->toArray();
|
||||
|
||||
@ -202,7 +196,7 @@ class Bills extends Controller
|
||||
|
||||
$taxes = Tax::enabled()->orderBy('name')->get();
|
||||
|
||||
$categories = Category::expense()->enabled()->orderBy('name')->pluck('name', 'id');
|
||||
$categories = Category::expense()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
|
||||
|
||||
return view('purchases.bills.edit', compact('bill', 'vendors', 'currencies', 'currency', 'items', 'taxes', 'categories'));
|
||||
}
|
||||
|
@ -32,13 +32,7 @@ class Payments extends Controller
|
||||
{
|
||||
$payments = Transaction::with('account', 'bill', 'category', 'contact')->expense()->isNotTransfer()->collect(['paid_at'=> 'desc']);
|
||||
|
||||
$vendors = Contact::vendor()->enabled()->orderBy('name')->pluck('name', 'id');
|
||||
|
||||
$categories = Category::expense()->enabled()->orderBy('name')->pluck('name', 'id');
|
||||
|
||||
$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'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -66,9 +60,9 @@ class Payments extends Controller
|
||||
|
||||
$currency = Currency::where('code', $account_currency_code)->first();
|
||||
|
||||
$vendors = Contact::vendor()->enabled()->orderBy('name')->pluck('name', 'id');
|
||||
$vendors = Contact::vendor()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
|
||||
|
||||
$categories = Category::expense()->enabled()->orderBy('name')->pluck('name', 'id');
|
||||
$categories = Category::expense()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
|
||||
|
||||
$payment_methods = Modules::getPaymentMethods();
|
||||
|
||||
@ -154,9 +148,9 @@ class Payments extends Controller
|
||||
|
||||
$currency = Currency::where('code', $payment->currency_code)->first();
|
||||
|
||||
$vendors = Contact::vendor()->enabled()->orderBy('name')->pluck('name', 'id');
|
||||
$vendors = Contact::vendor()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
|
||||
|
||||
$categories = Category::expense()->enabled()->orderBy('name')->pluck('name', 'id');
|
||||
$categories = Category::expense()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
|
||||
|
||||
$payment_methods = Modules::getPaymentMethods();
|
||||
|
||||
|
@ -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'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -40,13 +40,7 @@ class Invoices extends Controller
|
||||
{
|
||||
$invoices = Invoice::with('contact', 'transactions')->collect(['invoice_number'=> 'desc']);
|
||||
|
||||
$customers = Contact::customer()->enabled()->orderBy('name')->pluck('name', 'id');
|
||||
|
||||
$categories = Category::income()->enabled()->orderBy('name')->pluck('name', 'id');
|
||||
|
||||
$statuses = $this->getInvoiceStatuses();
|
||||
|
||||
return view('sales.invoices.index', compact('invoices', 'customers', 'categories', 'statuses'));
|
||||
return $this->response('sales.invoices.index', compact('invoices'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -99,7 +93,7 @@ class Invoices extends Controller
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
$customers = Contact::customer()->enabled()->orderBy('name')->pluck('name', 'id');
|
||||
$customers = Contact::customer()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
|
||||
|
||||
$currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code')->toArray();
|
||||
|
||||
@ -109,7 +103,7 @@ class Invoices extends Controller
|
||||
|
||||
$taxes = Tax::enabled()->orderBy('name')->get();
|
||||
|
||||
$categories = Category::income()->enabled()->orderBy('name')->pluck('name', 'id');
|
||||
$categories = Category::income()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
|
||||
|
||||
$number = $this->getNextInvoiceNumber();
|
||||
|
||||
@ -195,7 +189,7 @@ class Invoices extends Controller
|
||||
*/
|
||||
public function edit(Invoice $invoice)
|
||||
{
|
||||
$customers = Contact::customer()->enabled()->orderBy('name')->pluck('name', 'id');
|
||||
$customers = Contact::customer()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
|
||||
|
||||
$currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code')->toArray();
|
||||
|
||||
@ -205,7 +199,7 @@ class Invoices extends Controller
|
||||
|
||||
$taxes = Tax::enabled()->orderBy('name')->get();
|
||||
|
||||
$categories = Category::income()->enabled()->orderBy('name')->pluck('name', 'id');
|
||||
$categories = Category::income()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
|
||||
|
||||
return view('sales.invoices.edit', compact('invoice', 'customers', 'currencies', 'currency', 'items', 'taxes', 'categories'));
|
||||
}
|
||||
|
@ -32,13 +32,7 @@ class Revenues extends Controller
|
||||
{
|
||||
$revenues = Transaction::with('account', 'category', 'contact', 'invoice')->income()->isNotTransfer()->collect(['paid_at'=> 'desc']);
|
||||
|
||||
$customers = Contact::customer()->enabled()->orderBy('name')->pluck('name', 'id');
|
||||
|
||||
$categories = Category::income()->enabled()->orderBy('name')->pluck('name', 'id');
|
||||
|
||||
$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'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -66,9 +60,9 @@ class Revenues extends Controller
|
||||
|
||||
$currency = Currency::where('code', $account_currency_code)->first();
|
||||
|
||||
$customers = Contact::customer()->enabled()->orderBy('name')->pluck('name', 'id');
|
||||
$customers = Contact::customer()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
|
||||
|
||||
$categories = Category::income()->enabled()->orderBy('name')->pluck('name', 'id');
|
||||
$categories = Category::income()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
|
||||
|
||||
$payment_methods = Modules::getPaymentMethods();
|
||||
|
||||
@ -154,9 +148,9 @@ class Revenues extends Controller
|
||||
|
||||
$currency = Currency::where('code', $revenue->currency_code)->first();
|
||||
|
||||
$customers = Contact::customer()->enabled()->orderBy('name')->pluck('name', 'id');
|
||||
$customers = Contact::customer()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
|
||||
|
||||
$categories = Category::income()->enabled()->orderBy('name')->pluck('name', 'id');
|
||||
$categories = Category::income()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
|
||||
|
||||
$payment_methods = Modules::getPaymentMethods();
|
||||
|
||||
|
@ -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'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -4,6 +4,7 @@ namespace App\Http\Controllers\Settings;
|
||||
|
||||
use App\Abstracts\Http\Controller;
|
||||
use App\Models\Banking\Account;
|
||||
use App\Models\Setting\Category;
|
||||
use App\Models\Setting\Currency;
|
||||
use App\Models\Setting\Tax;
|
||||
use App\Utilities\Modules;
|
||||
@ -16,6 +17,9 @@ class Defaults extends Controller
|
||||
|
||||
$currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code');
|
||||
|
||||
$sales_categories = Category::income()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
|
||||
$purchases_categories = Category::expense()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
|
||||
|
||||
$taxes = Tax::enabled()->orderBy('name')->get()->pluck('title', 'id');
|
||||
|
||||
$payment_methods = Modules::getPaymentMethods();
|
||||
@ -23,6 +27,8 @@ class Defaults extends Controller
|
||||
return view('settings.default.edit', compact(
|
||||
'accounts',
|
||||
'currencies',
|
||||
'sales_categories',
|
||||
'purchases_categories',
|
||||
'taxes',
|
||||
'payment_methods'
|
||||
));
|
||||
|
@ -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]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
10
app/Http/Responses/Common/Items.php
Normal file
10
app/Http/Responses/Common/Items.php
Normal file
@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Responses\Common;
|
||||
|
||||
use App\Abstracts\Http\Response;
|
||||
|
||||
class Items extends Response
|
||||
{
|
||||
//
|
||||
}
|
@ -4,6 +4,9 @@ namespace App\Listeners\Update\V21;
|
||||
|
||||
use App\Abstracts\Listeners\Update as Listener;
|
||||
use App\Events\Install\UpdateFinished as Event;
|
||||
use App\Models\Setting\Category;
|
||||
use App\Models\Common\Company;
|
||||
use App\Utilities\Overrider;
|
||||
use Illuminate\Support\Facades\Artisan;
|
||||
|
||||
class Version210 extends Listener
|
||||
@ -24,6 +27,42 @@ class Version210 extends Listener
|
||||
return;
|
||||
}
|
||||
|
||||
$this->updateCompanies();
|
||||
|
||||
Artisan::call('migrate', ['--force' => true]);
|
||||
}
|
||||
protected function updateCompanies()
|
||||
{
|
||||
$company_id = session('company_id');
|
||||
|
||||
$companies = Company::cursor();
|
||||
|
||||
foreach ($companies as $company) {
|
||||
session(['company_id' => $company->id]);
|
||||
|
||||
$this->updateSettings($company);
|
||||
}
|
||||
|
||||
setting()->forgetAll();
|
||||
|
||||
session(['company_id' => $company_id]);
|
||||
|
||||
Overrider::load('settings');
|
||||
}
|
||||
|
||||
public function updateSettings($company)
|
||||
{
|
||||
$income_category = Category::income()->enabled()->first();
|
||||
$expense_category = Category::expense()->enabled()->first();
|
||||
|
||||
// Set the active company settings
|
||||
setting()->setExtraColumns(['company_id' => $company->id]);
|
||||
setting()->forgetAll();
|
||||
setting()->load(true);
|
||||
|
||||
setting()->set(['default.income_category' => setting('default.income_category', $income_category->id)]);
|
||||
setting()->set(['default.expense_category' => setting('default.expense_category', $expense_category->id)]);
|
||||
|
||||
setting()->save();
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -31,6 +31,11 @@ class BillTotal extends Model
|
||||
return $this->belongsTo('App\Models\Purchase\Bill');
|
||||
}
|
||||
|
||||
public function scopeCode($query, $code)
|
||||
{
|
||||
return $query->where('code', '=', $code);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert amount to double.
|
||||
*
|
||||
|
@ -31,6 +31,11 @@ class InvoiceTotal extends Model
|
||||
return $this->belongsTo('App\Models\Sale\Invoice');
|
||||
}
|
||||
|
||||
public function scopeCode($query, $code)
|
||||
{
|
||||
return $query->where('code', '=', $code);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert amount to double.
|
||||
*
|
||||
|
@ -59,6 +59,10 @@ class Form extends Provider
|
||||
'name', 'text', 'icon', 'values', 'selected' => null, 'attributes' => ['required' => 'required'], 'col' => 'col-md-6', 'group_class' => null
|
||||
]);
|
||||
|
||||
Facade::component('multiSelectRemoteAddNewGroup', 'partials.form.multi_select_remote_add_new_group', [
|
||||
'name', 'text', 'icon', 'values', 'selected' => null, 'attributes' => ['required' => 'required', 'path' => ''], 'col' => 'col-md-6', 'group_class' => null
|
||||
]);
|
||||
|
||||
Facade::component('selectGroup', 'partials.form.select_group', [
|
||||
'name', 'text', 'icon', 'values', 'selected' => null, 'attributes' => ['required' => 'required'], 'col' => 'col-md-6', 'group_class' => null
|
||||
]);
|
||||
@ -79,6 +83,10 @@ class Form extends Provider
|
||||
'name', 'text', 'icon', 'values', 'selected' => null, 'attributes' => ['required' => 'required'], 'col' => 'col-md-6', 'group_class' => null
|
||||
]);
|
||||
|
||||
Facade::component('selectRemoteAddNewGroup', 'partials.form.select_remote_add_new_group', [
|
||||
'name', 'text', 'icon', 'values', 'selected' => null, 'attributes' => ['required' => 'required', 'path' => ''], 'col' => 'col-md-6', 'group_class' => null
|
||||
]);
|
||||
|
||||
Facade::component('textareaGroup', 'partials.form.textarea_group', [
|
||||
'name', 'text', 'icon', 'value' => null, 'attributes' => ['rows' => '3'], 'col' => 'col-md-12', 'group_class' => null
|
||||
]);
|
||||
|
196
app/View/Components/SearchString.php
Normal file
196
app/View/Components/SearchString.php
Normal file
@ -0,0 +1,196 @@
|
||||
<?php
|
||||
|
||||
namespace App\View\Components;
|
||||
|
||||
use Illuminate\View\Component;
|
||||
use Illuminate\Support\Str;
|
||||
use Symfony\Component\Routing\Exception\RouteNotFoundException;
|
||||
|
||||
class SearchString extends Component
|
||||
{
|
||||
public $filters;
|
||||
|
||||
public $model;
|
||||
|
||||
/**
|
||||
* Create a new component instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($model)
|
||||
{
|
||||
$this->model = $model;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the view / contents that represent the component.
|
||||
*
|
||||
* @return \Illuminate\Contracts\View\View|string
|
||||
*/
|
||||
public function render()
|
||||
{
|
||||
$searc_string = config('search-string');
|
||||
|
||||
$this->filters = [];
|
||||
|
||||
if (!empty($searc_string[$this->model])) {
|
||||
$columns = $searc_string[$this->model]['columns'];
|
||||
|
||||
foreach ($columns as $column => $options) {
|
||||
// This column skip for filter
|
||||
if (!empty($options['searchable'])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!is_array($options)) {
|
||||
$column = $options;
|
||||
}
|
||||
|
||||
if (!$this->isFilter($column, $options)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$this->filters[] = [
|
||||
'key' => $this->getFilterKey($column, $options),
|
||||
'value' => $this->getFilterName($column),
|
||||
'type' => $this->getFilterType($options),
|
||||
'url' => $this->getFilterUrl($column, $options),
|
||||
'values' => $this->getFilterValues($column, $options),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
return view('components.search-string');
|
||||
}
|
||||
|
||||
protected function isFilter($column, $options)
|
||||
{
|
||||
$filter = true;
|
||||
|
||||
if (empty($this->getFilterUrl($column, $options)) && (!isset($options['date']) && !isset($options['boolean']))) {
|
||||
$filter = false;
|
||||
}
|
||||
|
||||
return $filter;
|
||||
}
|
||||
|
||||
protected function getFilterKey($column, $options)
|
||||
{
|
||||
if (isset($options['relationship'])) {
|
||||
$column .= '.id';
|
||||
}
|
||||
|
||||
return $column;
|
||||
}
|
||||
|
||||
protected function getFilterName($column)
|
||||
{
|
||||
if (strpos($column, '_id') !== false) {
|
||||
$column = str_replace('_id', '', $column);
|
||||
} else if (strpos($column, '_code') !== false) {
|
||||
$column = str_replace('_code', '', $column);
|
||||
}
|
||||
|
||||
$plural = Str::plural($column, 2);
|
||||
|
||||
if (trans_choice('general.' . $plural, 1) !== 'general.' . $plural) {
|
||||
return trans_choice('general.' . $plural, 1);
|
||||
} elseif (trans_choice('search_string.columns.' . $plural, 1) !== 'search_string.columns.' . $plural) {
|
||||
return trans_choice('search_string.columns.' . $plural, 1);
|
||||
}
|
||||
|
||||
$name = trans('general.' . $column);
|
||||
|
||||
if ($name == 'general.' . $column) {
|
||||
$name = trans('search_string.columns.' . $column);
|
||||
}
|
||||
|
||||
return $name;
|
||||
}
|
||||
|
||||
protected function getFilterType($options)
|
||||
{
|
||||
$type = 'select';
|
||||
|
||||
if (isset($options['boolean'])) {
|
||||
$type = 'boolean';
|
||||
}
|
||||
|
||||
if (isset($options['date'])) {
|
||||
$type = 'date';
|
||||
}
|
||||
|
||||
return $type;
|
||||
}
|
||||
|
||||
protected function getFilterUrl($column, $options)
|
||||
{
|
||||
$url = '';
|
||||
|
||||
if (isset($options['boolean']) || isset($options['date'])) {
|
||||
return $url;
|
||||
}
|
||||
|
||||
if (!empty($options['route'])) {
|
||||
if (is_array($options['route'])) {
|
||||
$url = route($options['route'][0], $options['route'][1]);
|
||||
} else {
|
||||
$url = route($options['route']);
|
||||
}
|
||||
} else {
|
||||
if (strpos($this->model, 'Modules') !== false) {
|
||||
$module_class = explode('\\', $this->model);
|
||||
|
||||
$url .= Str::slug($module_class[1], '-') . '::';
|
||||
}
|
||||
|
||||
if (strpos($column, '_id') !== false) {
|
||||
$column = str_replace('_id', '', $column);
|
||||
}
|
||||
|
||||
$plural = Str::plural($column, 2);
|
||||
|
||||
try {
|
||||
$url = route($url . $plural . '.index');
|
||||
} catch (\Exception $e) {
|
||||
$url = '';
|
||||
}
|
||||
}
|
||||
|
||||
return $url;
|
||||
}
|
||||
|
||||
protected function getFilterValues($column, $options)
|
||||
{
|
||||
$values = [];
|
||||
|
||||
if (isset($options['boolean'])) {
|
||||
$values = [
|
||||
[
|
||||
'key' => 0,
|
||||
'value' => trans('general.no'),
|
||||
],
|
||||
[
|
||||
'key' => 1,
|
||||
'value' => trans('general.yes'),
|
||||
],
|
||||
];
|
||||
} else if ($search = request()->get('search', false)) {
|
||||
$fields = explode(' ', $search);
|
||||
|
||||
foreach ($fields as $field) {
|
||||
if (strpos($field, ':') === false) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$filters = explode(':', $field);
|
||||
|
||||
if ($filters[0] != $column) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $values;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user