akaunting 3.0 (the last dance)
This commit is contained in:
@ -1,81 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\Auth;
|
||||
|
||||
use App\Abstracts\Http\ApiController;
|
||||
use App\Http\Requests\Auth\Permission as Request;
|
||||
use App\Models\Auth\Permission;
|
||||
use App\Jobs\Auth\CreatePermission;
|
||||
use App\Jobs\Auth\DeletePermission;
|
||||
use App\Jobs\Auth\UpdatePermission;
|
||||
use App\Transformers\Auth\Permission as Transformer;
|
||||
|
||||
class Permissions extends ApiController
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return \Dingo\Api\Http\Response
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$permissions = Permission::collect();
|
||||
|
||||
return $this->response->paginator($permissions, new Transformer());
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param Permission $permission
|
||||
* @return \Dingo\Api\Http\Response
|
||||
*/
|
||||
public function show(Permission $permission)
|
||||
{
|
||||
return $this->item($permission, new Transformer());
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param $request
|
||||
* @return \Dingo\Api\Http\Response
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$permission = $this->dispatch(new CreatePermission($request));
|
||||
|
||||
return $this->response->created(route('api.permissions.show', $permission->id), $this->item($permission, new Transformer()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
* @param $permission
|
||||
* @param $request
|
||||
* @return \Dingo\Api\Http\Response
|
||||
*/
|
||||
public function update(Permission $permission, Request $request)
|
||||
{
|
||||
$permission = $this->dispatch(new UpdatePermission($permission, $request));
|
||||
|
||||
return $this->item($permission->fresh(), new Transformer());
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param Permission $permission
|
||||
* @return \Dingo\Api\Http\Response
|
||||
*/
|
||||
public function destroy(Permission $permission)
|
||||
{
|
||||
try {
|
||||
$this->dispatch(new DeletePermission($permission));
|
||||
|
||||
return $this->response->noContent();
|
||||
} catch(\Exception $e) {
|
||||
$this->response->errorUnauthorized($e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
@ -1,81 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\Auth;
|
||||
|
||||
use App\Abstracts\Http\ApiController;
|
||||
use App\Http\Requests\Auth\Role as Request;
|
||||
use App\Models\Auth\Role;
|
||||
use App\Jobs\Auth\CreateRole;
|
||||
use App\Jobs\Auth\DeleteRole;
|
||||
use App\Jobs\Auth\UpdateRole;
|
||||
use App\Transformers\Auth\Role as Transformer;
|
||||
|
||||
class Roles extends ApiController
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return \Dingo\Api\Http\Response
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$roles = Role::with('permissions')->collect();
|
||||
|
||||
return $this->response->paginator($roles, new Transformer());
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param Role $role
|
||||
* @return \Dingo\Api\Http\Response
|
||||
*/
|
||||
public function show(Role $role)
|
||||
{
|
||||
return $this->item($role, new Transformer());
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param $request
|
||||
* @return \Dingo\Api\Http\Response
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$role = $this->dispatch(new CreateRole($request));
|
||||
|
||||
return $this->response->created(route('api.roles.show', $role->id), $this->item($role, new Transformer()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
* @param $role
|
||||
* @param $request
|
||||
* @return \Dingo\Api\Http\Response
|
||||
*/
|
||||
public function update(Role $role, Request $request)
|
||||
{
|
||||
$role = $this->dispatch(new UpdateRole($role, $request));
|
||||
|
||||
return $this->item($role->fresh(), new Transformer());
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param Role $role
|
||||
* @return \Dingo\Api\Http\Response
|
||||
*/
|
||||
public function destroy(Role $role)
|
||||
{
|
||||
try {
|
||||
$this->dispatch(new DeleteRole($role));
|
||||
|
||||
return $this->response->noContent();
|
||||
} catch(\Exception $e) {
|
||||
$this->response->errorUnauthorized($e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
@ -4,31 +4,32 @@ namespace App\Http\Controllers\Api\Auth;
|
||||
|
||||
use App\Abstracts\Http\ApiController;
|
||||
use App\Http\Requests\Auth\User as Request;
|
||||
use App\Http\Resources\Auth\User as Resource;
|
||||
use App\Jobs\Auth\CreateUser;
|
||||
use App\Jobs\Auth\DeleteUser;
|
||||
use App\Jobs\Auth\UpdateUser;
|
||||
use App\Models\Auth\User;
|
||||
use App\Transformers\Auth\User as Transformer;
|
||||
|
||||
class Users extends ApiController
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$users = User::with('companies', 'permissions', 'roles')->collect();
|
||||
|
||||
return $this->response->paginator($users, new Transformer());
|
||||
return Resource::collection($users);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param int|string $id
|
||||
* @return \Dingo\Api\Http\Response
|
||||
*
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show($id)
|
||||
{
|
||||
@ -39,20 +40,21 @@ class Users extends ApiController
|
||||
$user = User::with('companies', 'permissions', 'roles')->where('email', $id)->first();
|
||||
}
|
||||
|
||||
return $this->item($user, new Transformer());
|
||||
return new Resource($user);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param $request
|
||||
* @return \Dingo\Api\Http\Response
|
||||
*
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$user = $this->dispatch(new CreateUser($request));
|
||||
|
||||
return $this->response->created(route('api.users.show', $user->id), $this->item($user, new Transformer()));
|
||||
return $this->created(route('api.users.show', $user->id), new Resource($user));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -60,55 +62,60 @@ class Users extends ApiController
|
||||
*
|
||||
* @param $user
|
||||
* @param $request
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(User $user, Request $request)
|
||||
{
|
||||
$user = $this->dispatch(new UpdateUser($user, $request));
|
||||
|
||||
return $this->item($user->fresh(), new Transformer());
|
||||
return new Resource($user->fresh());
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable the specified resource in storage.
|
||||
*
|
||||
* @param User $user
|
||||
* @return \Dingo\Api\Http\Response
|
||||
*
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function enable(User $user)
|
||||
{
|
||||
$user = $this->dispatch(new UpdateUser($user, request()->merge(['enabled' => 1])));
|
||||
|
||||
return $this->item($user->fresh(), new Transformer());
|
||||
return new Resource($user->fresh());
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable the specified resource in storage.
|
||||
*
|
||||
* @param User $user
|
||||
* @return \Dingo\Api\Http\Response
|
||||
*
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function disable(User $user)
|
||||
{
|
||||
$user = $this->dispatch(new UpdateUser($user, request()->merge(['enabled' => 0])));
|
||||
|
||||
return $this->item($user->fresh(), new Transformer());
|
||||
return new Resource($user->fresh());
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param User $user
|
||||
* @return \Dingo\Api\Http\Response
|
||||
*
|
||||
* @throws \Symfony\Component\HttpKernel\Exception\HttpException
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function destroy(User $user)
|
||||
{
|
||||
try {
|
||||
$this->dispatch(new DeleteUser($user));
|
||||
|
||||
return $this->response->noContent();
|
||||
return $this->noContent();
|
||||
} catch(\Exception $e) {
|
||||
$this->response->errorUnauthorized($e->getMessage());
|
||||
$this->errorUnauthorized($e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,31 +4,31 @@ namespace App\Http\Controllers\Api\Banking;
|
||||
|
||||
use App\Abstracts\Http\ApiController;
|
||||
use App\Http\Requests\Banking\Account as Request;
|
||||
use App\Http\Resources\Banking\Account as Resource;
|
||||
use App\Jobs\Banking\CreateAccount;
|
||||
use App\Jobs\Banking\DeleteAccount;
|
||||
use App\Jobs\Banking\UpdateAccount;
|
||||
use App\Models\Banking\Account;
|
||||
use App\Transformers\Banking\Account as Transformer;
|
||||
|
||||
class Accounts extends ApiController
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$accounts = Account::collect();
|
||||
|
||||
return $this->response->paginator($accounts, new Transformer());
|
||||
return Resource::collection($accounts);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param $id
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show($id)
|
||||
{
|
||||
@ -39,20 +39,20 @@ class Accounts extends ApiController
|
||||
$account = Account::where('number', $id)->first();
|
||||
}
|
||||
|
||||
return $this->item($account, new Transformer());
|
||||
return new Resource($account);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param $request
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$account = $this->dispatch(new CreateAccount($request));
|
||||
|
||||
return $this->response->created(route('api.accounts.show', $account->id), $this->item($account, new Transformer()));
|
||||
return $this->created(route('api.accounts.show', $account->id), new Resource($account));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -60,16 +60,16 @@ class Accounts extends ApiController
|
||||
*
|
||||
* @param $account
|
||||
* @param $request
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Account $account, Request $request)
|
||||
{
|
||||
try {
|
||||
$account = $this->dispatch(new UpdateAccount($account, $request));
|
||||
|
||||
return $this->item($account->fresh(), new Transformer());
|
||||
return new Resource($account->fresh());
|
||||
} catch(\Exception $e) {
|
||||
$this->response->errorUnauthorized($e->getMessage());
|
||||
$this->errorUnauthorized($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@ -77,29 +77,29 @@ class Accounts extends ApiController
|
||||
* Enable the specified resource in storage.
|
||||
*
|
||||
* @param Account $account
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function enable(Account $account)
|
||||
{
|
||||
$account = $this->dispatch(new UpdateAccount($account, request()->merge(['enabled' => 1])));
|
||||
|
||||
return $this->item($account->fresh(), new Transformer());
|
||||
return new Resource($account->fresh());
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable the specified resource in storage.
|
||||
*
|
||||
* @param Account $account
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function disable(Account $account)
|
||||
{
|
||||
try {
|
||||
$account = $this->dispatch(new UpdateAccount($account, request()->merge(['enabled' => 0])));
|
||||
|
||||
return $this->item($account->fresh(), new Transformer());
|
||||
return new Resource($account->fresh());
|
||||
} catch(\Exception $e) {
|
||||
$this->response->errorUnauthorized($e->getMessage());
|
||||
$this->errorUnauthorized($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@ -107,16 +107,16 @@ class Accounts extends ApiController
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param Account $account
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function destroy(Account $account)
|
||||
{
|
||||
try {
|
||||
$this->dispatch(new DeleteAccount($account));
|
||||
|
||||
return $this->response->noContent();
|
||||
return $this->noContent();
|
||||
} catch(\Exception $e) {
|
||||
$this->response->errorUnauthorized($e->getMessage());
|
||||
$this->errorUnauthorized($e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,48 +4,48 @@ namespace App\Http\Controllers\Api\Banking;
|
||||
|
||||
use App\Abstracts\Http\ApiController;
|
||||
use App\Http\Requests\Banking\Reconciliation as Request;
|
||||
use App\Http\Resources\Banking\Reconciliation as Resource;
|
||||
use App\Jobs\Banking\CreateReconciliation;
|
||||
use App\Jobs\Banking\DeleteReconciliation;
|
||||
use App\Jobs\Banking\UpdateReconciliation;
|
||||
use App\Models\Banking\Reconciliation;
|
||||
use App\Transformers\Banking\Reconciliation as Transformer;
|
||||
|
||||
class Reconciliations extends ApiController
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$items = Reconciliation::with('account')->collect();
|
||||
$reconciliations = Reconciliation::with('account')->collect();
|
||||
|
||||
return $this->response->paginator($items, new Transformer());
|
||||
return Resource::collection($reconciliations);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param $reconciliation
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show(Reconciliation $reconciliation)
|
||||
{
|
||||
return $this->item($reconciliation, new Transformer());
|
||||
return new Resource($reconciliation);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param $request
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$reconciliation = $this->dispatch(new CreateReconciliation($request));
|
||||
|
||||
return $this->response->created(route('api.reconciliations.show', $reconciliation->id), $this->item($reconciliation, new Transformer()));
|
||||
return $this->created(route('api.reconciliations.show', $reconciliation->id), new Resource($reconciliation));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -53,29 +53,29 @@ class Reconciliations extends ApiController
|
||||
*
|
||||
* @param $reconciliation
|
||||
* @param $request
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Reconciliation $reconciliation, Request $request)
|
||||
{
|
||||
$reconciliation = $this->dispatch(new UpdateReconciliation($reconciliation, $request));
|
||||
|
||||
return $this->item($reconciliation->fresh(), new Transformer());
|
||||
return new Resource($reconciliation->fresh());
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param Reconciliation $reconciliation
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function destroy(Reconciliation $reconciliation)
|
||||
{
|
||||
try {
|
||||
$this->dispatch(new DeleteReconciliation($reconciliation));
|
||||
|
||||
return $this->response->noContent();
|
||||
return $this->noContent();
|
||||
} catch(\Exception $e) {
|
||||
$this->response->errorUnauthorized($e->getMessage());
|
||||
$this->errorUnauthorized($e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,48 +4,48 @@ namespace App\Http\Controllers\Api\Banking;
|
||||
|
||||
use App\Abstracts\Http\ApiController;
|
||||
use App\Http\Requests\Banking\Transaction as Request;
|
||||
use App\Http\Resources\Banking\Transaction as Resource;
|
||||
use App\Jobs\Banking\CreateTransaction;
|
||||
use App\Jobs\Banking\DeleteTransaction;
|
||||
use App\Jobs\Banking\UpdateTransaction;
|
||||
use App\Models\Banking\Transaction;
|
||||
use App\Transformers\Banking\Transaction as Transformer;
|
||||
|
||||
class Transactions extends ApiController
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$transactions = Transaction::with('account', 'category', 'contact')->collect(['paid_at'=> 'desc']);
|
||||
|
||||
return $this->response->paginator($transactions, new Transformer());
|
||||
return Resource::collection($transactions);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param Transaction $transaction
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show(Transaction $transaction)
|
||||
{
|
||||
return $this->item($transaction, new Transformer());
|
||||
return new Resource($transaction);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param $request
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$transaction = $this->dispatch(new CreateTransaction($request));
|
||||
|
||||
return $this->response->created(route('api.transactions.show', $transaction->id), $this->item($transaction, new Transformer()));
|
||||
return $this->created(route('api.transactions.show', $transaction->id), new Resource($transaction));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -53,29 +53,29 @@ class Transactions extends ApiController
|
||||
*
|
||||
* @param $transaction
|
||||
* @param $request
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Transaction $transaction, Request $request)
|
||||
{
|
||||
$transaction = $this->dispatch(new UpdateTransaction($transaction, $request));
|
||||
|
||||
return $this->item($transaction->fresh(), new Transformer());
|
||||
return new Resource($transaction->fresh());
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param Transaction $transaction
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function destroy(Transaction $transaction)
|
||||
{
|
||||
try {
|
||||
$this->dispatch(new DeleteTransaction($transaction));
|
||||
|
||||
return $this->response->noContent();
|
||||
return $this->noContent();
|
||||
} catch(\Exception $e) {
|
||||
$this->response->errorUnauthorized($e->getMessage());
|
||||
$this->errorUnauthorized($e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,18 +4,18 @@ namespace App\Http\Controllers\Api\Banking;
|
||||
|
||||
use App\Abstracts\Http\ApiController;
|
||||
use App\Http\Requests\Banking\Transfer as Request;
|
||||
use App\Http\Resources\Banking\Transfer as Resource;
|
||||
use App\Jobs\Banking\CreateTransfer;
|
||||
use App\Jobs\Banking\UpdateTransfer;
|
||||
use App\Jobs\Banking\DeleteTransfer;
|
||||
use App\Models\Banking\Transfer;
|
||||
use App\Transformers\Banking\Transfer as Transformer;
|
||||
|
||||
class Transfers extends ApiController
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
@ -51,31 +51,31 @@ class Transfers extends ApiController
|
||||
$transfers->setCollection(collect($items));
|
||||
}
|
||||
|
||||
return $this->response->paginator($transfers, new Transformer());
|
||||
return Resource::collection($transfers);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param Transfer $transfer
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show(Transfer $transfer)
|
||||
{
|
||||
return $this->item($transfer, new Transformer());
|
||||
return new Resource($transfer);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param $request
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$transfer = $this->dispatch(new CreateTransfer($request));
|
||||
|
||||
return $this->response->created(route('api.transfers.show', $transfer->id), $this->item($transfer, new Transformer()));
|
||||
return $this->created(route('api.transfers.show', $transfer->id), new Resource($transfer));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -83,29 +83,29 @@ class Transfers extends ApiController
|
||||
*
|
||||
* @param $transfer
|
||||
* @param $request
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Transfer $transfer, Request $request)
|
||||
{
|
||||
$transfer = $this->dispatch(new UpdateTransfer($transfer, $request));
|
||||
|
||||
return $this->item($transfer->fresh(), new Transformer());
|
||||
return new Resource($transfer->fresh());
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param Transfer $transfer
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function destroy(Transfer $transfer)
|
||||
{
|
||||
try {
|
||||
$this->dispatch(new DeleteTransfer($transfer));
|
||||
|
||||
return $this->response->noContent();
|
||||
return $this->noContent();
|
||||
} catch(\Exception $e) {
|
||||
$this->response->errorUnauthorized($e->getMessage());
|
||||
$this->errorUnauthorized($e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,13 +4,13 @@ namespace App\Http\Controllers\Api\Common;
|
||||
|
||||
use App\Abstracts\Http\ApiController;
|
||||
use App\Http\Requests\Common\Company as Request;
|
||||
use App\Http\Resources\Common\Company as Resource;
|
||||
use App\Jobs\Common\CreateCompany;
|
||||
use App\Jobs\Common\DeleteCompany;
|
||||
use App\Jobs\Common\UpdateCompany;
|
||||
use App\Models\Common\Company;
|
||||
use App\Transformers\Common\Company as Transformer;
|
||||
use App\Traits\Users;
|
||||
use Dingo\Api\Http\Response;
|
||||
use Illuminate\Http\Response;
|
||||
|
||||
class Companies extends ApiController
|
||||
{
|
||||
@ -19,20 +19,20 @@ class Companies extends ApiController
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$companies = user()->companies()->collect();
|
||||
|
||||
return $this->response->paginator($companies, new Transformer());
|
||||
return Resource::collection($companies);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param Company $company
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show(Company $company)
|
||||
{
|
||||
@ -40,9 +40,9 @@ class Companies extends ApiController
|
||||
// Check if user can access company
|
||||
$this->canAccess($company);
|
||||
|
||||
return $this->item($company, new Transformer());
|
||||
return new Resource($company);
|
||||
} catch (\Exception $e) {
|
||||
$this->response->errorUnauthorized($e->getMessage());
|
||||
$this->errorUnauthorized($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@ -50,13 +50,13 @@ class Companies extends ApiController
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param $request
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$company = $this->dispatch(new CreateCompany($request));
|
||||
|
||||
return $this->response->created(route('api.companies.show', $company->id), $this->item($company, new Transformer()));
|
||||
return $this->created(route('api.companies.show', $company->id), new Resource($company));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -64,16 +64,16 @@ class Companies extends ApiController
|
||||
*
|
||||
* @param $company
|
||||
* @param $request
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Company $company, Request $request)
|
||||
{
|
||||
try {
|
||||
$company = $this->dispatch(new UpdateCompany($company, $request));
|
||||
|
||||
return $this->item($company->fresh(), new Transformer());
|
||||
return new Resource($company->fresh());
|
||||
} catch (\Exception $e) {
|
||||
$this->response->errorUnauthorized($e->getMessage());
|
||||
$this->errorUnauthorized($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@ -81,16 +81,16 @@ class Companies extends ApiController
|
||||
* Enable the specified resource in storage.
|
||||
*
|
||||
* @param Company $company
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function enable(Company $company)
|
||||
{
|
||||
try {
|
||||
$company = $this->dispatch(new UpdateCompany($company, request()->merge(['enabled' => 1])));
|
||||
|
||||
return $this->item($company->fresh(), new Transformer());
|
||||
return new Resource($company->fresh());
|
||||
} catch (\Exception $e) {
|
||||
$this->response->errorUnauthorized($e->getMessage());
|
||||
$this->errorUnauthorized($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@ -98,16 +98,16 @@ class Companies extends ApiController
|
||||
* Disable the specified resource in storage.
|
||||
*
|
||||
* @param Company $company
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function disable(Company $company)
|
||||
{
|
||||
try {
|
||||
$company = $this->dispatch(new UpdateCompany($company, request()->merge(['enabled' => 0])));
|
||||
|
||||
return $this->item($company->fresh(), new Transformer());
|
||||
return new Resource($company->fresh());
|
||||
} catch (\Exception $e) {
|
||||
$this->response->errorUnauthorized($e->getMessage());
|
||||
$this->errorUnauthorized($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@ -115,16 +115,16 @@ class Companies extends ApiController
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param Company $company
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function destroy(Company $company)
|
||||
{
|
||||
try {
|
||||
$this->dispatch(new DeleteCompany($company));
|
||||
|
||||
return $this->response->noContent();
|
||||
return $this->noContent();
|
||||
} catch (\Exception $e) {
|
||||
$this->response->errorUnauthorized($e->getMessage());
|
||||
$this->errorUnauthorized($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@ -133,16 +133,16 @@ class Companies extends ApiController
|
||||
*
|
||||
* @param Company $company
|
||||
*
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function canAccess(Company $company)
|
||||
{
|
||||
if (!empty($company) && $this->isUserCompany($company->id)) {
|
||||
if (! empty($company) && $this->isUserCompany($company->id)) {
|
||||
return new Response('');
|
||||
}
|
||||
|
||||
$message = trans('companies.error.not_user_company');
|
||||
|
||||
$this->response->errorUnauthorized($message);
|
||||
$this->errorUnauthorized($message);
|
||||
}
|
||||
}
|
||||
|
@ -4,12 +4,12 @@ namespace App\Http\Controllers\Api\Common;
|
||||
|
||||
use App\Abstracts\Http\ApiController;
|
||||
use App\Http\Requests\Common\Contact as Request;
|
||||
use App\Http\Resources\Common\Contact as Resource;
|
||||
use App\Jobs\Common\CreateContact;
|
||||
use App\Jobs\Common\DeleteContact;
|
||||
use App\Jobs\Common\UpdateContact;
|
||||
use App\Models\Common\Contact;
|
||||
use App\Traits\Uploads;
|
||||
use App\Transformers\Common\Contact as Transformer;
|
||||
|
||||
class Contacts extends ApiController
|
||||
{
|
||||
@ -18,20 +18,20 @@ class Contacts extends ApiController
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$contacts = Contact::collect();
|
||||
|
||||
return $this->response->paginator($contacts, new Transformer());
|
||||
return Resource::collection($contacts);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param int|string $id
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show($id)
|
||||
{
|
||||
@ -42,20 +42,20 @@ class Contacts extends ApiController
|
||||
$contact = Contact::where('email', $id)->first();
|
||||
}
|
||||
|
||||
return $this->item($contact, new Transformer());
|
||||
return new Resource($contact);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param $request
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$contact = $this->dispatch(new CreateContact($request));
|
||||
|
||||
return $this->response->created(route('api.contacts.show', $contact->id), $this->item($contact, new Transformer()));
|
||||
return $this->created(route('api.contacts.show', $contact->id), new Resource($contact));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -63,42 +63,42 @@ class Contacts extends ApiController
|
||||
*
|
||||
* @param $contact
|
||||
* @param $request
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Contact $contact, Request $request)
|
||||
{
|
||||
$contact = $this->dispatch(new UpdateContact($contact, $request));
|
||||
|
||||
return $this->item($contact->fresh(), new Transformer());
|
||||
return new Resource($contact->fresh());
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable the specified resource in storage.
|
||||
*
|
||||
* @param Contact $contact
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function enable(Contact $contact)
|
||||
{
|
||||
$contact = $this->dispatch(new UpdateContact($contact, request()->merge(['enabled' => 1])));
|
||||
|
||||
return $this->item($contact->fresh(), new Transformer());
|
||||
return new Resource($contact->fresh());
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable the specified resource in storage.
|
||||
*
|
||||
* @param Contact $contact
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function disable(Contact $contact)
|
||||
{
|
||||
try {
|
||||
$contact = $this->dispatch(new UpdateContact($contact, request()->merge(['enabled' => 0])));
|
||||
|
||||
return $this->item($contact->fresh(), new Transformer());
|
||||
return new Resource($contact->fresh());
|
||||
} catch(\Exception $e) {
|
||||
$this->response->errorUnauthorized($e->getMessage());
|
||||
$this->errorUnauthorized($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@ -106,16 +106,16 @@ class Contacts extends ApiController
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param Contact $contact
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function destroy(Contact $contact)
|
||||
{
|
||||
try {
|
||||
$this->dispatch(new DeleteContact($contact));
|
||||
|
||||
return $this->response->noContent();
|
||||
return $this->noContent();
|
||||
} catch(\Exception $e) {
|
||||
$this->response->errorUnauthorized($e->getMessage());
|
||||
$this->errorUnauthorized($e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,13 +4,13 @@ namespace App\Http\Controllers\Api\Common;
|
||||
|
||||
use App\Abstracts\Http\ApiController;
|
||||
use App\Http\Requests\Common\Dashboard as Request;
|
||||
use App\Http\Resources\Common\Dashboard as Resource;
|
||||
use App\Jobs\Common\CreateDashboard;
|
||||
use App\Jobs\Common\DeleteDashboard;
|
||||
use App\Jobs\Common\UpdateDashboard;
|
||||
use App\Models\Common\Dashboard;
|
||||
use App\Transformers\Common\Dashboard as Transformer;
|
||||
use App\Traits\Users;
|
||||
use Dingo\Api\Http\Response;
|
||||
use Illuminate\Http\Response;
|
||||
|
||||
class Dashboards extends ApiController
|
||||
{
|
||||
@ -19,20 +19,20 @@ class Dashboards extends ApiController
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$dashboards = user()->dashboards()->with('widgets')->collect();
|
||||
|
||||
return $this->response->paginator($dashboards, new Transformer());
|
||||
return Resource::collection($dashboards);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param int|string $id
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show($id)
|
||||
{
|
||||
@ -42,9 +42,9 @@ class Dashboards extends ApiController
|
||||
// Check if user can access dashboard
|
||||
$this->canAccess($dashboard);
|
||||
|
||||
return $this->item($dashboard, new Transformer());
|
||||
return new Resource($dashboard);
|
||||
} catch (\Exception $e) {
|
||||
$this->response->errorUnauthorized($e->getMessage());
|
||||
$this->errorUnauthorized($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@ -52,13 +52,13 @@ class Dashboards extends ApiController
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param $request
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$dashboard = $this->dispatch(new CreateDashboard($request));
|
||||
|
||||
return $this->response->created(route('api.dashboards.show', $dashboard->id), $this->item($dashboard, new Transformer()));
|
||||
return $this->created(route('api.dashboards.show', $dashboard->id), new Resource($dashboard));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -66,16 +66,16 @@ class Dashboards extends ApiController
|
||||
*
|
||||
* @param $dashboard
|
||||
* @param $request
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Dashboard $dashboard, Request $request)
|
||||
{
|
||||
try {
|
||||
$dashboard = $this->dispatch(new UpdateDashboard($dashboard, $request));
|
||||
|
||||
return $this->item($dashboard->fresh(), new Transformer());
|
||||
return new Resource($dashboard->fresh());
|
||||
} catch(\Exception $e) {
|
||||
$this->response->errorUnauthorized($e->getMessage());
|
||||
$this->errorUnauthorized($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@ -83,16 +83,16 @@ class Dashboards extends ApiController
|
||||
* Enable the specified resource in storage.
|
||||
*
|
||||
* @param Dashboard $dashboard
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function enable(Dashboard $dashboard)
|
||||
{
|
||||
try {
|
||||
$dashboard = $this->dispatch(new UpdateDashboard($dashboard, request()->merge(['enabled' => 1])));
|
||||
|
||||
return $this->item($dashboard->fresh(), new Transformer());
|
||||
return new Resource($dashboard->fresh());
|
||||
} catch(\Exception $e) {
|
||||
$this->response->errorUnauthorized($e->getMessage());
|
||||
$this->errorUnauthorized($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@ -100,16 +100,16 @@ class Dashboards extends ApiController
|
||||
* Disable the specified resource in storage.
|
||||
*
|
||||
* @param Dashboard $dashboard
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function disable(Dashboard $dashboard)
|
||||
{
|
||||
try {
|
||||
$dashboard = $this->dispatch(new UpdateDashboard($dashboard, request()->merge(['enabled' => 0])));
|
||||
|
||||
return $this->item($dashboard->fresh(), new Transformer());
|
||||
return new Resource($dashboard->fresh());
|
||||
} catch(\Exception $e) {
|
||||
$this->response->errorUnauthorized($e->getMessage());
|
||||
$this->errorUnauthorized($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@ -117,16 +117,16 @@ class Dashboards extends ApiController
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param Dashboard $dashboard
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function destroy(Dashboard $dashboard)
|
||||
{
|
||||
try {
|
||||
$this->dispatch(new DeleteDashboard($dashboard));
|
||||
|
||||
return $this->response->noContent();
|
||||
return $this->noContent();
|
||||
} catch(\Exception $e) {
|
||||
$this->response->errorUnauthorized($e->getMessage());
|
||||
$this->errorUnauthorized($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@ -135,7 +135,7 @@ class Dashboards extends ApiController
|
||||
*
|
||||
* @param Dashboard $dashboard
|
||||
*
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function canAccess($dashboard)
|
||||
{
|
||||
@ -145,6 +145,6 @@ class Dashboards extends ApiController
|
||||
|
||||
$message = trans('dashboards.error.not_user_dashboard');
|
||||
|
||||
$this->response->errorUnauthorized($message);
|
||||
$this->errorUnauthorized($message);
|
||||
}
|
||||
}
|
||||
|
@ -4,50 +4,50 @@ namespace App\Http\Controllers\Api\Common;
|
||||
|
||||
use App\Abstracts\Http\ApiController;
|
||||
use App\Http\Requests\Common\Item as Request;
|
||||
use App\Http\Resources\Common\Item as Resource;
|
||||
use App\Jobs\Common\CreateItem;
|
||||
use App\Jobs\Common\DeleteItem;
|
||||
use App\Jobs\Common\UpdateItem;
|
||||
use App\Models\Common\Item;
|
||||
use App\Transformers\Common\Item as Transformer;
|
||||
|
||||
class Items extends ApiController
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$items = Item::with('category', 'taxes')->collect();
|
||||
|
||||
return $this->response->paginator($items, new Transformer());
|
||||
return Resource::collection($items);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param int|string $id
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show($id)
|
||||
{
|
||||
$item = Item::with('category', 'taxes')->find($id);
|
||||
|
||||
return $this->item($item, new Transformer());
|
||||
return new Resource($item);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param $request
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$item = $this->dispatch(new CreateItem($request));
|
||||
|
||||
return $this->response->created(route('api.items.show', $item->id), $this->item($item, new Transformer()));
|
||||
return $this->created(route('api.items.show', $item->id), new Resource($item));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -55,55 +55,55 @@ class Items extends ApiController
|
||||
*
|
||||
* @param $item
|
||||
* @param $request
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Item $item, Request $request)
|
||||
{
|
||||
$item = $this->dispatch(new UpdateItem($item, $request));
|
||||
|
||||
return $this->item($item->fresh(), new Transformer());
|
||||
return new Resource($item->fresh());
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable the specified resource in storage.
|
||||
*
|
||||
* @param Item $item
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function enable(Item $item)
|
||||
{
|
||||
$item = $this->dispatch(new UpdateItem($item, request()->merge(['enabled' => 1])));
|
||||
|
||||
return $this->item($item->fresh(), new Transformer());
|
||||
return new Resource($item->fresh());
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable the specified resource in storage.
|
||||
*
|
||||
* @param Item $item
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function disable(Item $item)
|
||||
{
|
||||
$item = $this->dispatch(new UpdateItem($item, request()->merge(['enabled' => 0])));
|
||||
|
||||
return $this->item($item->fresh(), new Transformer());
|
||||
return new Resource($item->fresh());
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param Item $item
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function destroy(Item $item)
|
||||
{
|
||||
try {
|
||||
$this->dispatch(new DeleteItem($item));
|
||||
|
||||
return $this->response->noContent();
|
||||
return $this->noContent();
|
||||
} catch(\Exception $e) {
|
||||
$this->response->errorUnauthorized($e->getMessage());
|
||||
$this->errorUnauthorized($e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3,13 +3,10 @@
|
||||
namespace App\Http\Controllers\Api\Common;
|
||||
|
||||
use App\Abstracts\Http\ApiController;
|
||||
use Date;
|
||||
use Dingo\Api\Routing\Helpers;
|
||||
use App\Utilities\Date;
|
||||
|
||||
class Ping extends ApiController
|
||||
{
|
||||
use Helpers;
|
||||
|
||||
/**
|
||||
* Instantiate a new controller instance.
|
||||
*/
|
||||
@ -23,9 +20,9 @@ class Ping extends ApiController
|
||||
*
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index()
|
||||
public function pong()
|
||||
{
|
||||
return $this->response->array([
|
||||
return response()->json([
|
||||
'status' => 'ok',
|
||||
'timestamp' => Date::now(),
|
||||
]);
|
||||
|
@ -4,48 +4,48 @@ namespace App\Http\Controllers\Api\Common;
|
||||
|
||||
use App\Abstracts\Http\ApiController;
|
||||
use App\Http\Requests\Common\Report as Request;
|
||||
use App\Http\Resources\Common\Report as Resource;
|
||||
use App\Jobs\Common\CreateReport;
|
||||
use App\Jobs\Common\DeleteReport;
|
||||
use App\Jobs\Common\UpdateReport;
|
||||
use App\Models\Common\Report;
|
||||
use App\Transformers\Common\Report as Transformer;
|
||||
|
||||
class Reports extends ApiController
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$reports = Report::collect();
|
||||
|
||||
return $this->response->paginator($reports, new Transformer());
|
||||
return Resource::collection($reports);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param Report $report
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show(Report $report)
|
||||
{
|
||||
return $this->item($report, new Transformer());
|
||||
return new Resource($report);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param $request
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$report = $this->dispatch(new CreateReport($request));
|
||||
|
||||
return $this->response->created(route('api.reports.show', $report->id), $this->item($report, new Transformer()));
|
||||
return $this->created(route('api.reports.show', $report->id), new Resource($report));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -53,29 +53,29 @@ class Reports extends ApiController
|
||||
*
|
||||
* @param $report
|
||||
* @param $request
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Report $report, Request $request)
|
||||
{
|
||||
$report = $this->dispatch(new UpdateReport($report, $request));
|
||||
|
||||
return $this->item($report->fresh(), new Transformer());
|
||||
return new Resource($report->fresh());
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param Report $report
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function destroy(Report $report)
|
||||
{
|
||||
try {
|
||||
$this->dispatch(new DeleteReport($report));
|
||||
|
||||
return $this->response->noContent();
|
||||
return $this->noContent();
|
||||
} catch(\Exception $e) {
|
||||
$this->response->errorUnauthorized($e->getMessage());
|
||||
$this->errorUnauthorized($e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,7 +4,6 @@ namespace App\Http\Controllers\Api\Common;
|
||||
|
||||
use App\Abstracts\Http\ApiController;
|
||||
use App\Models\Module\Module;
|
||||
use Dingo\Api\Http\Response;
|
||||
use Illuminate\Filesystem\Filesystem;
|
||||
use Illuminate\Support\Facades\App;
|
||||
use Illuminate\Support\Str;
|
||||
@ -16,7 +15,7 @@ class Translations extends ApiController
|
||||
*
|
||||
* @param string $locale
|
||||
* @param string $file
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function file($locale, $file)
|
||||
{
|
||||
@ -34,7 +33,7 @@ class Translations extends ApiController
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param string $locale
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function all($locale)
|
||||
{
|
||||
|
@ -4,11 +4,11 @@ namespace App\Http\Controllers\Api\Document;
|
||||
|
||||
use App\Abstracts\Http\ApiController;
|
||||
use App\Http\Requests\Banking\Transaction as Request;
|
||||
use App\Http\Resources\Banking\Transaction as Resource;
|
||||
use App\Jobs\Banking\CreateBankingDocumentTransaction;
|
||||
use App\Jobs\Banking\DeleteTransaction;
|
||||
use App\Models\Banking\Transaction;
|
||||
use App\Models\Document\Document;
|
||||
use App\Transformers\Banking\Transaction as Transformer;
|
||||
|
||||
class DocumentTransactions extends ApiController
|
||||
{
|
||||
@ -28,13 +28,13 @@ class DocumentTransactions extends ApiController
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @param $document_id
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index($document_id)
|
||||
{
|
||||
$transactions = Transaction::documentId($document_id)->get();
|
||||
|
||||
return $this->response->collection($transactions, new Transformer());
|
||||
return Resource::collection($transactions);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -42,13 +42,13 @@ class DocumentTransactions extends ApiController
|
||||
*
|
||||
* @param $document_id
|
||||
* @param $id
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show($document_id, $id)
|
||||
{
|
||||
$transaction = Transaction::documentId($document_id)->find($id);
|
||||
|
||||
return $this->item($transaction, new Transformer());
|
||||
return new Resource($transaction);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -56,7 +56,7 @@ class DocumentTransactions extends ApiController
|
||||
*
|
||||
* @param $document_id
|
||||
* @param $request
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store($document_id, Request $request)
|
||||
{
|
||||
@ -64,7 +64,7 @@ class DocumentTransactions extends ApiController
|
||||
|
||||
$transaction = $this->dispatch(new CreateBankingDocumentTransaction($document, $request));
|
||||
|
||||
return $this->response->created(route('api.documents.transactions.show', [$document_id, $transaction->id]), $this->item($transaction, new Transformer()));
|
||||
return $this->created(route('api.documents.transactions.show', [$document_id, $transaction->id]), new Resource($transaction));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -72,7 +72,7 @@ class DocumentTransactions extends ApiController
|
||||
*
|
||||
* @param $document_id
|
||||
* @param $id
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function destroy($document_id, $id)
|
||||
{
|
||||
@ -80,6 +80,6 @@ class DocumentTransactions extends ApiController
|
||||
|
||||
$this->dispatch(new DeleteTransaction($transaction));
|
||||
|
||||
return $this->response->noContent();
|
||||
return $this->noContent();
|
||||
}
|
||||
}
|
||||
|
@ -4,31 +4,31 @@ namespace App\Http\Controllers\Api\Document;
|
||||
|
||||
use App\Abstracts\Http\ApiController;
|
||||
use App\Http\Requests\Document\Document as Request;
|
||||
use App\Http\Resources\Document\Document as Resource;
|
||||
use App\Jobs\Document\CreateDocument;
|
||||
use App\Jobs\Document\DeleteDocument;
|
||||
use App\Jobs\Document\UpdateDocument;
|
||||
use App\Models\Document\Document;
|
||||
use App\Transformers\Document\Document as Transformer;
|
||||
|
||||
class Documents extends ApiController
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$documents = Document::with('contact', 'histories', 'items', 'transactions')->collect(['issued_at'=> 'desc']);
|
||||
|
||||
return $this->response->paginator($documents, new Transformer());
|
||||
return Resource::collection($documents);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param $id
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show($id)
|
||||
{
|
||||
@ -39,7 +39,7 @@ class Documents extends ApiController
|
||||
$document = Document::where('document_number', $id)->first();
|
||||
}
|
||||
|
||||
return $this->item($document, new Transformer());
|
||||
return new Resource($document);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -47,13 +47,13 @@ class Documents extends ApiController
|
||||
*
|
||||
* @param $request
|
||||
*
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$document = $this->dispatch(new CreateDocument($request));
|
||||
|
||||
return $this->response->created(route('api.documents.show', $document->id), $this->item($document, new Transformer()));
|
||||
return $this->created(route('api.documents.show', $document->id), new Resource($document));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -62,13 +62,13 @@ class Documents extends ApiController
|
||||
* @param $document
|
||||
* @param $request
|
||||
*
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Document $document, Request $request)
|
||||
{
|
||||
$document = $this->dispatch(new UpdateDocument($document, $request));
|
||||
|
||||
return $this->item($document->fresh(), new Transformer());
|
||||
return new Resource($document->fresh());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -76,16 +76,16 @@ class Documents extends ApiController
|
||||
*
|
||||
* @param Document $document
|
||||
*
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function destroy(Document $document)
|
||||
{
|
||||
try {
|
||||
$this->dispatch(new DeleteDocument($document));
|
||||
|
||||
return $this->response->noContent();
|
||||
return $this->noContent();
|
||||
} catch(\Exception $e) {
|
||||
$this->response->errorUnauthorized($e->getMessage());
|
||||
$this->errorUnauthorized($e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,48 +4,48 @@ namespace App\Http\Controllers\Api\Settings;
|
||||
|
||||
use App\Abstracts\Http\ApiController;
|
||||
use App\Http\Requests\Setting\Category as Request;
|
||||
use App\Http\Resources\Setting\Category as Resource;
|
||||
use App\Jobs\Setting\CreateCategory;
|
||||
use App\Jobs\Setting\DeleteCategory;
|
||||
use App\Jobs\Setting\UpdateCategory;
|
||||
use App\Models\Setting\Category;
|
||||
use App\Transformers\Setting\Category as Transformer;
|
||||
|
||||
class Categories extends ApiController
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$categories = Category::collect();
|
||||
$categories = Category::withSubCategory()->collect();
|
||||
|
||||
return $this->response->paginator($categories, new Transformer());
|
||||
return Resource::collection($categories);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param Category $category
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show(Category $category)
|
||||
{
|
||||
return $this->item($category, new Transformer());
|
||||
return new Resource($category);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param $request
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$category = $this->dispatch(new CreateCategory($request));
|
||||
|
||||
return $this->response->created(route('api.categories.show', $category->id), $this->item($category, new Transformer()));
|
||||
return $this->created(route('api.categories.show', $category->id), new Resource($category));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -53,16 +53,16 @@ class Categories extends ApiController
|
||||
*
|
||||
* @param $category
|
||||
* @param $request
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Category $category, Request $request)
|
||||
{
|
||||
try {
|
||||
$category = $this->dispatch(new UpdateCategory($category, $request));
|
||||
|
||||
return $this->item($category->fresh(), new Transformer());
|
||||
return new Resource($category->fresh());
|
||||
} catch(\Exception $e) {
|
||||
$this->response->errorUnauthorized($e->getMessage());
|
||||
$this->errorUnauthorized($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@ -70,29 +70,29 @@ class Categories extends ApiController
|
||||
* Enable the specified resource in storage.
|
||||
*
|
||||
* @param Category $category
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function enable(Category $category)
|
||||
{
|
||||
$category = $this->dispatch(new UpdateCategory($category, request()->merge(['enabled' => 1])));
|
||||
|
||||
return $this->item($category->fresh(), new Transformer());
|
||||
return new Resource($category->fresh());
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable the specified resource in storage.
|
||||
*
|
||||
* @param Category $category
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function disable(Category $category)
|
||||
{
|
||||
try {
|
||||
$category = $this->dispatch(new UpdateCategory($category, request()->merge(['enabled' => 0])));
|
||||
|
||||
return $this->item($category->fresh(), new Transformer());
|
||||
return new Resource($category->fresh());
|
||||
} catch(\Exception $e) {
|
||||
$this->response->errorUnauthorized($e->getMessage());
|
||||
$this->errorUnauthorized($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@ -100,16 +100,16 @@ class Categories extends ApiController
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param Category $category
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function destroy(Category $category)
|
||||
{
|
||||
try {
|
||||
$this->dispatch(new DeleteCategory($category));
|
||||
|
||||
return $this->response->noContent();
|
||||
return $this->noContent();
|
||||
} catch(\Exception $e) {
|
||||
$this->response->errorUnauthorized($e->getMessage());
|
||||
$this->errorUnauthorized($e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,31 +4,31 @@ namespace App\Http\Controllers\Api\Settings;
|
||||
|
||||
use App\Abstracts\Http\ApiController;
|
||||
use App\Http\Requests\Setting\Currency as Request;
|
||||
use App\Http\Resources\Setting\Currency as Resource;
|
||||
use App\Jobs\Setting\CreateCurrency;
|
||||
use App\Jobs\Setting\DeleteCurrency;
|
||||
use App\Jobs\Setting\UpdateCurrency;
|
||||
use App\Models\Setting\Currency;
|
||||
use App\Transformers\Setting\Currency as Transformer;
|
||||
|
||||
class Currencies extends ApiController
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$currencies = Currency::collect();
|
||||
|
||||
return $this->response->paginator($currencies, new Transformer());
|
||||
return Resource::collection($currencies);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param int|string $id
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show($id)
|
||||
{
|
||||
@ -39,20 +39,20 @@ class Currencies extends ApiController
|
||||
$currency = Currency::where('code', $id)->first();
|
||||
}
|
||||
|
||||
return $this->item($currency, new Transformer());
|
||||
return new Resource($currency);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param $request
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$currency = $this->dispatch(new CreateCurrency($request));
|
||||
|
||||
return $this->response->created(route('api.currencies.show', $currency->id), $this->item($currency, new Transformer()));
|
||||
return $this->created(route('api.currencies.show', $currency->id), new Resource($currency));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -60,16 +60,16 @@ class Currencies extends ApiController
|
||||
*
|
||||
* @param $currency
|
||||
* @param $request
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Currency $currency, Request $request)
|
||||
{
|
||||
try {
|
||||
$currency = $this->dispatch(new UpdateCurrency($currency, $request));
|
||||
|
||||
return $this->item($currency->fresh(), new Transformer());
|
||||
return new Resource($currency->fresh());
|
||||
} catch(\Exception $e) {
|
||||
$this->response->errorUnauthorized($e->getMessage());
|
||||
$this->errorUnauthorized($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@ -77,29 +77,29 @@ class Currencies extends ApiController
|
||||
* Enable the specified resource in storage.
|
||||
*
|
||||
* @param Currency $currency
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function enable(Currency $currency)
|
||||
{
|
||||
$currency = $this->dispatch(new UpdateCurrency($currency, request()->merge(['enabled' => 1])));
|
||||
|
||||
return $this->item($currency->fresh(), new Transformer());
|
||||
return new Resource($currency->fresh());
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable the specified resource in storage.
|
||||
*
|
||||
* @param Currency $currency
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function disable(Currency $currency)
|
||||
{
|
||||
try {
|
||||
$currency = $this->dispatch(new UpdateCurrency($currency, request()->merge(['enabled' => 0])));
|
||||
|
||||
return $this->item($currency->fresh(), new Transformer());
|
||||
return new Resource($currency->fresh());
|
||||
} catch(\Exception $e) {
|
||||
$this->response->errorUnauthorized($e->getMessage());
|
||||
$this->errorUnauthorized($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@ -107,16 +107,16 @@ class Currencies extends ApiController
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param Currency $currency
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function destroy(Currency $currency)
|
||||
{
|
||||
try {
|
||||
$this->dispatch(new DeleteCurrency($currency));
|
||||
|
||||
return $this->response->noContent();
|
||||
return $this->noContent();
|
||||
} catch(\Exception $e) {
|
||||
$this->response->errorUnauthorized($e->getMessage());
|
||||
$this->errorUnauthorized($e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,14 +4,11 @@ namespace App\Http\Controllers\Api\Settings;
|
||||
|
||||
use App\Abstracts\Http\ApiController;
|
||||
use App\Http\Requests\Setting\Setting as Request;
|
||||
use App\Http\Resources\Setting\Setting as Resource;
|
||||
use App\Models\Setting\Setting;
|
||||
use App\Transformers\Setting\Setting as Transformer;
|
||||
use Dingo\Api\Routing\Helpers;
|
||||
|
||||
class Settings extends ApiController
|
||||
{
|
||||
use Helpers;
|
||||
|
||||
/**
|
||||
* Instantiate a new controller instance.
|
||||
*/
|
||||
@ -26,20 +23,20 @@ class Settings extends ApiController
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$settings = Setting::all();
|
||||
|
||||
return $this->response->collection($settings, new Transformer());
|
||||
return Resource::collection($settings);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param int|string $id
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show($id)
|
||||
{
|
||||
@ -50,20 +47,20 @@ class Settings extends ApiController
|
||||
$setting = Setting::where('key', $id)->first();
|
||||
}
|
||||
|
||||
return $this->item($setting, new Transformer());
|
||||
return new Resource($setting);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param $request
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$setting = Setting::create($request->all());
|
||||
|
||||
return $this->response->created(route('api.settings.show', $setting->id), $this->item($setting, new Transformer()));
|
||||
return $this->created(route('api.settings.show', $setting->id), new Resource($setting));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -71,25 +68,25 @@ class Settings extends ApiController
|
||||
*
|
||||
* @param $setting
|
||||
* @param $request
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Setting $setting, Request $request)
|
||||
{
|
||||
$setting->update($request->all());
|
||||
|
||||
return $this->item($setting->fresh(), new Transformer());
|
||||
return new Resource($setting->fresh());
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param Setting $setting
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function destroy(Setting $setting)
|
||||
{
|
||||
$setting->delete();
|
||||
|
||||
return $this->response->noContent();
|
||||
return $this->noContent();
|
||||
}
|
||||
}
|
||||
|
@ -4,48 +4,48 @@ namespace App\Http\Controllers\Api\Settings;
|
||||
|
||||
use App\Abstracts\Http\ApiController;
|
||||
use App\Http\Requests\Setting\Tax as Request;
|
||||
use App\Http\Resources\Setting\Tax as Resource;
|
||||
use App\Jobs\Setting\CreateTax;
|
||||
use App\Jobs\Setting\DeleteTax;
|
||||
use App\Jobs\Setting\UpdateTax;
|
||||
use App\Models\Setting\Tax;
|
||||
use App\Transformers\Setting\Tax as Transformer;
|
||||
|
||||
class Taxes extends ApiController
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$taxes = Tax::collect();
|
||||
|
||||
return $this->response->paginator($taxes, new Transformer());
|
||||
return Resource::collection($taxes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param Tax $tax
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show(Tax $tax)
|
||||
{
|
||||
return $this->item($tax, new Transformer());
|
||||
return new Resource($tax);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param $request
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$tax = $this->dispatch(new CreateTax($request));
|
||||
|
||||
return $this->response->created(route('api.taxes.show', $tax->id), $this->item($tax, new Transformer()));
|
||||
return $this->created(route('api.taxes.show', $tax->id), new Resource($tax));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -53,16 +53,16 @@ class Taxes extends ApiController
|
||||
*
|
||||
* @param $tax
|
||||
* @param $request
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Tax $tax, Request $request)
|
||||
{
|
||||
try {
|
||||
$tax = $this->dispatch(new UpdateTax($tax, $request));
|
||||
|
||||
return $this->item($tax->fresh(), new Transformer());
|
||||
return new Resource($tax->fresh());
|
||||
} catch(\Exception $e) {
|
||||
$this->response->errorUnauthorized($e->getMessage());
|
||||
$this->errorUnauthorized($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@ -70,29 +70,29 @@ class Taxes extends ApiController
|
||||
* Enable the specified resource in storage.
|
||||
*
|
||||
* @param Tax $tax
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function enable(Tax $tax)
|
||||
{
|
||||
$tax = $this->dispatch(new UpdateTax($tax, request()->merge(['enabled' => 1])));
|
||||
|
||||
return $this->item($tax->fresh(), new Transformer());
|
||||
return new Resource($tax->fresh());
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable the specified resource in storage.
|
||||
*
|
||||
* @param Tax $tax
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function disable(Tax $tax)
|
||||
{
|
||||
try {
|
||||
$tax = $this->dispatch(new UpdateTax($tax, request()->merge(['enabled' => 0])));
|
||||
|
||||
return $this->item($tax->fresh(), new Transformer());
|
||||
return new Resource($tax->fresh());
|
||||
} catch(\Exception $e) {
|
||||
$this->response->errorUnauthorized($e->getMessage());
|
||||
$this->errorUnauthorized($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@ -100,16 +100,16 @@ class Taxes extends ApiController
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param Tax $tax
|
||||
* @return \Dingo\Api\Http\Response
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function destroy(Tax $tax)
|
||||
{
|
||||
try {
|
||||
$this->dispatch(new DeleteTax($tax));
|
||||
|
||||
return $this->response->noContent();
|
||||
return $this->noContent();
|
||||
} catch(\Exception $e) {
|
||||
$this->response->errorUnauthorized($e->getMessage());
|
||||
$this->errorUnauthorized($e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -36,7 +36,7 @@ class Login extends Controller
|
||||
public function store(Request $request)
|
||||
{
|
||||
// Attempt to login
|
||||
if (!auth()->attempt($request->only('email', 'password'), $request->get('remember', false))) {
|
||||
if (! auth()->attempt($request->only('email', 'password'), $request->get('remember', false))) {
|
||||
return response()->json([
|
||||
'status' => null,
|
||||
'success' => false,
|
||||
@ -51,7 +51,7 @@ class Login extends Controller
|
||||
$user = user();
|
||||
|
||||
// Check if user is enabled
|
||||
if (!$user->enabled) {
|
||||
if (! $user->enabled) {
|
||||
$this->logout();
|
||||
|
||||
return response()->json([
|
||||
@ -69,7 +69,7 @@ class Login extends Controller
|
||||
});
|
||||
|
||||
// Logout if no company assigned
|
||||
if (!$company) {
|
||||
if (! $company) {
|
||||
$this->logout();
|
||||
|
||||
return response()->json([
|
||||
@ -95,7 +95,7 @@ class Login extends Controller
|
||||
'status' => null,
|
||||
'success' => true,
|
||||
'error' => false,
|
||||
'message' => null,
|
||||
'message' => trans('auth.login_redirect'),
|
||||
'data' => null,
|
||||
'redirect' => url($path),
|
||||
]);
|
||||
@ -108,7 +108,7 @@ class Login extends Controller
|
||||
'status' => null,
|
||||
'success' => true,
|
||||
'error' => false,
|
||||
'message' => null,
|
||||
'message' => trans('auth.login_redirect'),
|
||||
'data' => null,
|
||||
'redirect' => redirect()->intended($url)->getTargetUrl(),
|
||||
]);
|
||||
@ -128,6 +128,9 @@ class Login extends Controller
|
||||
// Session destroy is required if stored in database
|
||||
if (config('session.driver') == 'database') {
|
||||
$request = app('Illuminate\Http\Request');
|
||||
|
||||
$request->session()->invalidate();
|
||||
$request->session()->regenerateToken();
|
||||
$request->session()->getHandler()->destroy($request->session()->getId());
|
||||
}
|
||||
}
|
||||
|
@ -1,130 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Abstracts\Http\Controller;
|
||||
use App\Http\Requests\Auth\Permission as Request;
|
||||
use App\Jobs\Auth\CreatePermission;
|
||||
use App\Jobs\Auth\DeletePermission;
|
||||
use App\Jobs\Auth\UpdatePermission;
|
||||
use App\Models\Auth\Permission;
|
||||
|
||||
class Permissions extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$permissions = Permission::collect();
|
||||
|
||||
return $this->response('auth.permissions.index', compact('permissions'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
return view('auth.permissions.create');
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param Request $request
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$response = $this->ajaxDispatch(new CreatePermission($request));
|
||||
|
||||
if ($response['success']) {
|
||||
$response['redirect'] = route('permissions.index');
|
||||
|
||||
$message = trans('messages.success.added', ['type' => trans_choice('general.permissions', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
} else {
|
||||
$response['redirect'] = route('permissions.create');
|
||||
|
||||
$message = $response['message'];
|
||||
|
||||
flash($message)->error()->important();
|
||||
}
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*
|
||||
* @param Permission $permission
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function edit(Permission $permission)
|
||||
{
|
||||
return view('auth.permissions.edit', compact('permission'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
* @param Permission $permission
|
||||
* @param Request $request
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function update(Permission $permission, Request $request)
|
||||
{
|
||||
$response = $this->ajaxDispatch(new UpdatePermission($permission, $request));
|
||||
|
||||
if ($response['success']) {
|
||||
$response['redirect'] = route('permissions.index');
|
||||
|
||||
$message = trans('messages.success.updated', ['type' => $permission->display_name]);
|
||||
|
||||
flash($message)->success();
|
||||
} else {
|
||||
$response['redirect'] = route('permissions.edit', $permission->id);
|
||||
|
||||
$message = $response['message'];
|
||||
|
||||
flash($message)->error()->important();
|
||||
}
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param Permission $permission
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function destroy(Permission $permission)
|
||||
{
|
||||
$response = $this->ajaxDispatch(new DeletePermission($permission));
|
||||
|
||||
$response['redirect'] = route('permissions.index');
|
||||
|
||||
if ($response['success']) {
|
||||
$message = trans('messages.success.deleted', ['type' => $permission->display_name]);
|
||||
|
||||
flash($message)->success();
|
||||
} else {
|
||||
$message = $response['message'];
|
||||
|
||||
flash($message)->error()->important();
|
||||
}
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
}
|
84
app/Http/Controllers/Auth/Register.php
Normal file
84
app/Http/Controllers/Auth/Register.php
Normal file
@ -0,0 +1,84 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Abstracts\Http\Controller;
|
||||
use App\Http\Requests\Auth\Register as Request;
|
||||
use App\Jobs\Auth\DeleteInvitation;
|
||||
use App\Models\Auth\UserInvitation;
|
||||
use Illuminate\Auth\Events\Registered;
|
||||
use Illuminate\Foundation\Auth\RegistersUsers;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class Register extends Controller
|
||||
{
|
||||
use RegistersUsers;
|
||||
|
||||
/**
|
||||
* Where to redirect users after registration.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $redirectTo = '/';
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('guest');
|
||||
}
|
||||
|
||||
public function create($token)
|
||||
{
|
||||
$invitation = UserInvitation::token($token)->first();
|
||||
|
||||
if ($invitation) {
|
||||
return view('auth.register.create', ['token' => $token]);
|
||||
}
|
||||
|
||||
abort(403);
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$invitation = UserInvitation::token($request->get('token'))->first();
|
||||
|
||||
$user = $invitation->user;
|
||||
|
||||
$this->dispatch(new DeleteInvitation($invitation));
|
||||
|
||||
event(new Registered($user));
|
||||
|
||||
if ($response = $this->registered($request, $user)) {
|
||||
return $response;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The user has been registered.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param mixed $user
|
||||
* @return mixed
|
||||
*/
|
||||
protected function registered(Request $request, $user)
|
||||
{
|
||||
$user->forceFill([
|
||||
'password' => $request->password,
|
||||
'remember_token' => Str::random(60),
|
||||
])->save();
|
||||
|
||||
$this->guard()->login($user);
|
||||
|
||||
$message = trans('messages.success.connected', ['type' => trans_choice('general.users', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
|
||||
return response()->json([
|
||||
'redirect' => url($this->redirectPath()),
|
||||
]);
|
||||
}
|
||||
}
|
@ -90,7 +90,7 @@ class Reset extends Controller
|
||||
});
|
||||
|
||||
// Logout if no company assigned
|
||||
if (!$company) {
|
||||
if (! $company) {
|
||||
$this->guard()->logout();
|
||||
|
||||
return response()->json([
|
||||
|
@ -1,155 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Abstracts\Http\Controller;
|
||||
use App\Http\Requests\Auth\Role as Request;
|
||||
use App\Jobs\Auth\CreateRole;
|
||||
use App\Jobs\Auth\DeleteRole;
|
||||
use App\Jobs\Auth\UpdateRole;
|
||||
use App\Models\Auth\Permission;
|
||||
use App\Models\Auth\Role;
|
||||
|
||||
class Roles extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$roles = Role::collect();
|
||||
|
||||
return $this->response('auth.roles.index', compact('roles'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for viewing the specified resource.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function show()
|
||||
{
|
||||
return redirect()->route('roles.index');
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
$permissions = [];
|
||||
$actions = ['read', 'create', 'update', 'delete'];
|
||||
|
||||
foreach ($actions as $action) {
|
||||
$permissions[$action] = Permission::action($action)->get()->sortBy('title')->all();
|
||||
}
|
||||
|
||||
return view('auth.roles.create', compact('actions', 'permissions'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param Request $request
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$response = $this->ajaxDispatch(new CreateRole($request));
|
||||
|
||||
if ($response['success']) {
|
||||
$response['redirect'] = route('roles.index');
|
||||
|
||||
$message = trans('messages.success.added', ['type' => trans_choice('general.roles', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
} else {
|
||||
$response['redirect'] = route('roles.create');
|
||||
|
||||
$message = $response['message'];
|
||||
|
||||
flash($message)->error()->important();
|
||||
}
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*
|
||||
* @param Role $role
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function edit(Role $role)
|
||||
{
|
||||
$permissions = [];
|
||||
$actions = ['read', 'create', 'update', 'delete'];
|
||||
|
||||
foreach ($actions as $action) {
|
||||
$permissions[$action] = Permission::action($action)->get()->sortBy('title')->all();
|
||||
}
|
||||
|
||||
return view('auth.roles.edit', compact('role', 'actions', 'permissions'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
* @param Role $role
|
||||
* @param Request $request
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function update(Role $role, Request $request)
|
||||
{
|
||||
$response = $this->ajaxDispatch(new UpdateRole($role, $request));
|
||||
|
||||
if ($response['success']) {
|
||||
$response['redirect'] = route('roles.index');
|
||||
|
||||
$message = trans('messages.success.updated', ['type' => $role->display_name]);
|
||||
|
||||
flash($message)->success();
|
||||
} else {
|
||||
$response['redirect'] = route('roles.edit', $role->id);
|
||||
|
||||
$message = $response['message'];
|
||||
|
||||
flash($message)->error()->important();
|
||||
}
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param Role $role
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function destroy(Role $role)
|
||||
{
|
||||
$response = $this->ajaxDispatch(new DeleteRole($role));
|
||||
|
||||
$response['redirect'] = route('roles.index');
|
||||
|
||||
if ($response['success']) {
|
||||
$message = trans('messages.success.deleted', ['type' => $role->display_name]);
|
||||
|
||||
flash($message)->success();
|
||||
} else {
|
||||
$message = $response['message'];
|
||||
|
||||
flash($message)->error()->important();
|
||||
}
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
}
|
@ -5,17 +5,19 @@ namespace App\Http\Controllers\Auth;
|
||||
use App\Abstracts\Http\Controller;
|
||||
use App\Events\Auth\LandingPageShowing;
|
||||
use App\Http\Requests\Auth\User as Request;
|
||||
use App\Jobs\Auth\CreateInvitation;
|
||||
use App\Jobs\Auth\CreateUser;
|
||||
use App\Jobs\Auth\DeleteUser;
|
||||
use App\Jobs\Auth\UpdateUser;
|
||||
use App\Models\Auth\User;
|
||||
use App\Models\Auth\Role;
|
||||
use App\Models\Auth\User;
|
||||
use App\Traits\Cloud;
|
||||
use App\Traits\Uploads;
|
||||
use Illuminate\Http\Request as BaseRequest;
|
||||
|
||||
class Users extends Controller
|
||||
{
|
||||
use Uploads;
|
||||
use Cloud, Uploads;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
@ -66,11 +68,13 @@ class Users extends Controller
|
||||
|
||||
$roles = Role::all()->reject(function ($r) {
|
||||
return $r->hasPermission('read-client-portal');
|
||||
});
|
||||
})->pluck('display_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'));
|
||||
$roles_url = $this->getCloudRolesPageUrl();
|
||||
|
||||
return view('auth.users.create', compact('roles', 'companies', 'landing_pages', 'roles_url'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -87,7 +91,7 @@ class Users extends Controller
|
||||
if ($response['success']) {
|
||||
$response['redirect'] = route('users.index');
|
||||
|
||||
$message = trans('messages.success.added', ['type' => trans_choice('general.users', 1)]);
|
||||
$message = trans('messages.success.invited', ['type' => trans_choice('general.users', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
} else {
|
||||
@ -125,29 +129,33 @@ class Users extends Controller
|
||||
// Show only roles with customer permission
|
||||
$roles = Role::all()->reject(function ($r) {
|
||||
return !$r->hasPermission('read-client-portal');
|
||||
});
|
||||
})->pluck('display_name', 'id');
|
||||
} else {
|
||||
// Don't show roles with customer permission
|
||||
$roles = Role::all()->reject(function ($r) {
|
||||
return $r->hasPermission('read-client-portal');
|
||||
});
|
||||
})->pluck('display_name', 'id');
|
||||
}
|
||||
|
||||
$companies = user()->companies()->take(setting('default.select_limit'))->get()->sortBy('name')->pluck('name', 'id');
|
||||
|
||||
if ($user->company_ids) {
|
||||
foreach($user->company_ids as $company_id) {
|
||||
foreach ($user->company_ids as $company_id) {
|
||||
if ($companies->has($company_id)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$company = \App\Models\Common\Company::find($company_id);
|
||||
$company = company($company_id);
|
||||
|
||||
$companies->put($company->id, $company->name);
|
||||
}
|
||||
}
|
||||
|
||||
return view('auth.users.edit', compact('user', 'companies', 'roles', 'landing_pages'));
|
||||
$roles_url = $this->getCloudRolesPageUrl();
|
||||
|
||||
$route = (request()->route()->getName() == 'profile.edit') ? 'profile.update' : 'users.update';
|
||||
|
||||
return view('auth.users.edit', compact('user', 'companies', 'roles', 'landing_pages', 'roles_url', 'route'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -297,7 +305,7 @@ class Users extends Controller
|
||||
$column = $request['column'];
|
||||
$value = $request['value'];
|
||||
|
||||
if (!empty($column) && !empty($value)) {
|
||||
if (! empty($column) && ! empty($value)) {
|
||||
switch ($column) {
|
||||
case 'id':
|
||||
$user = User::find((int) $value);
|
||||
@ -310,14 +318,40 @@ class Users extends Controller
|
||||
}
|
||||
|
||||
$data = $user;
|
||||
} elseif (!empty($column) && empty($value)) {
|
||||
} elseif (! empty($column) && empty($value)) {
|
||||
$data = trans('validation.required', ['attribute' => $column]);
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'errors' => ($user) ? false : true,
|
||||
'success' => ($user) ? true : false,
|
||||
'data' => $data
|
||||
'data' => $data,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Process request for reinviting the specified resource.
|
||||
*
|
||||
* @param User $user
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function invite(User $user)
|
||||
{
|
||||
$response = $this->ajaxDispatch(new CreateInvitation($user, company()));
|
||||
|
||||
$response['redirect'] = route('users.index');
|
||||
|
||||
if ($response['success']) {
|
||||
$message = trans('messages.success.invited', ['type' => trans_choice('general.users', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
} else {
|
||||
$message = $response['message'];
|
||||
|
||||
flash($message)->error()->important();
|
||||
}
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
}
|
||||
|
@ -36,7 +36,7 @@ class Accounts extends Controller
|
||||
public function show(Account $account)
|
||||
{
|
||||
// Handle transactions
|
||||
$transactions = Transaction::with('account', 'category')->where('account_id', $account->id)->collect('paid_at');
|
||||
$transactions = Transaction::with('account', 'category')->where('account_id', $account->id)->isNotRecurring()->collect('paid_at');
|
||||
|
||||
$transfers = Transfer::with('expense_transaction', 'income_transaction')->get()->filter(function ($transfer) use($account) {
|
||||
if ($transfer->expense_account->id == $account->id || $transfer->income_account->id == $account->id) {
|
||||
@ -53,6 +53,7 @@ class Accounts extends Controller
|
||||
|
||||
return view('banking.accounts.show', compact('account', 'transactions', 'transfers'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*
|
||||
@ -60,11 +61,9 @@ class Accounts extends Controller
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
$currencies = Currency::enabled()->pluck('name', 'code');
|
||||
|
||||
$currency = Currency::where('code', '=', setting('default.currency'))->first();
|
||||
|
||||
return view('banking.accounts.create', compact('currencies', 'currency'));
|
||||
return view('banking.accounts.create', compact('currency'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -122,13 +121,11 @@ class Accounts extends Controller
|
||||
*/
|
||||
public function edit(Account $account)
|
||||
{
|
||||
$currencies = Currency::enabled()->pluck('name', 'code');
|
||||
|
||||
$account->default_account = ($account->id == setting('default.account')) ? 1 : 0;
|
||||
|
||||
$currency = Currency::where('code', '=', $account->currency_code)->first();
|
||||
|
||||
return view('banking.accounts.edit', compact('account', 'currencies', 'currency'));
|
||||
return view('banking.accounts.edit', compact('account', 'currency'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -222,18 +219,18 @@ class Accounts extends Controller
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
public function createRevenue(Account $account)
|
||||
public function createIncome(Account $account)
|
||||
{
|
||||
$data['account_id'] = $account->id;
|
||||
|
||||
return redirect()->route('revenues.create')->withInput($data);
|
||||
return redirect()->route('transactions.create', ['type' => 'income'])->withInput($data);
|
||||
}
|
||||
|
||||
public function createPayment(Account $account)
|
||||
public function createExpense(Account $account)
|
||||
{
|
||||
$data['account_id'] = $account->id;
|
||||
|
||||
return redirect()->route('payments.create')->withInput($data);
|
||||
return redirect()->route('transactions.create', ['type' => 'expense'])->withInput($data);
|
||||
}
|
||||
|
||||
public function createTransfer(Account $account)
|
||||
|
@ -11,7 +11,7 @@ use App\Jobs\Banking\UpdateReconciliation;
|
||||
use App\Models\Banking\Account;
|
||||
use App\Models\Banking\Reconciliation;
|
||||
use App\Models\Banking\Transaction;
|
||||
use Date;
|
||||
use App\Utilities\Date;
|
||||
|
||||
class Reconciliations extends Controller
|
||||
{
|
||||
@ -24,9 +24,7 @@ class Reconciliations extends Controller
|
||||
{
|
||||
$reconciliations = Reconciliation::with('account')->collect();
|
||||
|
||||
$accounts = collect(Account::enabled()->orderBy('name')->pluck('name', 'id'));
|
||||
|
||||
return $this->response('banking.reconciliations.index', compact('reconciliations', 'accounts'));
|
||||
return $this->response('banking.reconciliations.index', compact('reconciliations'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -46,8 +44,6 @@ class Reconciliations extends Controller
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
$accounts = Account::enabled()->pluck('name', 'id');
|
||||
|
||||
$account_id = request('account_id', setting('default.account'));
|
||||
$started_at = request('started_at', Date::now()->firstOfMonth()->toDateString());
|
||||
$ended_at = request('ended_at', Date::now()->endOfMonth()->toDateString());
|
||||
@ -60,7 +56,7 @@ class Reconciliations extends Controller
|
||||
|
||||
$opening_balance = $this->getOpeningBalance($account, $started_at);
|
||||
|
||||
return view('banking.reconciliations.create', compact('accounts', 'account', 'currency', 'opening_balance', 'transactions'));
|
||||
return view('banking.reconciliations.create', compact('account', 'currency', 'opening_balance', 'transactions'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
222
app/Http/Controllers/Banking/RecurringTransactions.php
Normal file
222
app/Http/Controllers/Banking/RecurringTransactions.php
Normal file
@ -0,0 +1,222 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Banking;
|
||||
|
||||
use App\Abstracts\Http\Controller;
|
||||
use App\Http\Requests\Banking\Transaction as Request;
|
||||
use App\Jobs\Banking\CreateTransaction;
|
||||
use App\Jobs\Banking\UpdateTransaction;
|
||||
use App\Models\Banking\Account;
|
||||
use App\Models\Banking\Transaction;
|
||||
use App\Models\Common\Recurring;
|
||||
use App\Models\Setting\Currency;
|
||||
use App\Traits\Currencies;
|
||||
use App\Traits\DateTime;
|
||||
use App\Traits\Transactions as TransactionsTrait;
|
||||
|
||||
class RecurringTransactions extends Controller
|
||||
{
|
||||
use Currencies, DateTime, TransactionsTrait;
|
||||
|
||||
/**
|
||||
* Instantiate a new controller instance.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
// Add CRUD permission check
|
||||
$this->middleware('permission:create-banking-transactions')->only('create', 'store', 'duplicate', 'import');
|
||||
$this->middleware('permission:read-banking-transactions')->only('index', 'show', 'edit', 'export');
|
||||
$this->middleware('permission:update-banking-transactions')->only('update', 'enable', 'disable');
|
||||
$this->middleware('permission:delete-banking-transactions')->only('destroy');
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$transactions = Transaction::with('category', 'recurring')->isRecurring()->collect(['paid_at'=> 'desc']);
|
||||
|
||||
return $this->response('banking.recurring_transactions.index', compact('transactions'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for viewing the specified resource.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function show(Transaction $recurring_transaction)
|
||||
{
|
||||
$recurring_transaction->load(['category', 'recurring', 'children']);
|
||||
|
||||
$title = ($recurring_transaction->type == 'income-recurring') ? trans_choice('general.recurring_incomes', 1) : trans_choice('general.recurring_expenses', 1);
|
||||
|
||||
return view('banking.recurring_transactions.show', compact('recurring_transaction', 'title'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
$type = request()->get('type', 'income-recurring');
|
||||
$real_type = request()->get('real_type', $this->getRealTypeOfRecurringTransaction($type));
|
||||
$contact_type = config('type.transaction.' . $real_type . '.contact_type');
|
||||
|
||||
$number = $this->getNextTransactionNumber('-recurring');
|
||||
|
||||
$account_currency_code = Account::where('id', setting('default.account'))->pluck('currency_code')->first();
|
||||
|
||||
$currency = Currency::where('code', $account_currency_code)->first();
|
||||
|
||||
return view('banking.recurring_transactions.create', compact(
|
||||
'type',
|
||||
'real_type',
|
||||
'number',
|
||||
'contact_type',
|
||||
'account_currency_code',
|
||||
'currency'
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param Request $request
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$response = $this->ajaxDispatch(new CreateTransaction($request->merge(['paid_at' => $request->get('recurring_started_at')])));
|
||||
|
||||
if ($response['success']) {
|
||||
$response['redirect'] = route('recurring-transactions.show', $response['data']->id);
|
||||
|
||||
$message = trans('messages.success.added', ['type' => trans_choice('general.transactions', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
} else {
|
||||
$response['redirect'] = route('recurring-transactions.create');
|
||||
|
||||
$message = $response['message'];
|
||||
|
||||
flash($message)->error()->important();
|
||||
}
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Duplicate the specified resource.
|
||||
*
|
||||
* @param Transaction $recurring_transaction
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function duplicate(Transaction $recurring_transaction)
|
||||
{
|
||||
$clone = $recurring_transaction->duplicate();
|
||||
|
||||
$message = trans('messages.success.duplicated', ['type' => trans_choice('general.transactions', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
|
||||
return redirect()->route('recurring-transactions.edit', $clone->id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*
|
||||
* @param Transaction $recurring_transaction
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function edit(Transaction $recurring_transaction)
|
||||
{
|
||||
$type = $recurring_transaction->type;
|
||||
$real_type = request()->get('real_type', $this->getRealTypeOfRecurringTransaction($type));
|
||||
$contact_type = config('type.transaction.' . $real_type . '.contact_type');
|
||||
|
||||
$number = $this->getNextTransactionNumber('-recurring');
|
||||
|
||||
$currency = Currency::where('code', $recurring_transaction->currency_code)->first();
|
||||
|
||||
$date_format = $this->getCompanyDateFormat();
|
||||
|
||||
return view('banking.recurring_transactions.edit', compact(
|
||||
'type',
|
||||
'real_type',
|
||||
'number',
|
||||
'contact_type',
|
||||
'recurring_transaction',
|
||||
'currency',
|
||||
'date_format'
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
* @param Transaction $recurring_transaction
|
||||
* @param Request $request
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function update(Transaction $recurring_transaction, Request $request)
|
||||
{
|
||||
$response = $this->ajaxDispatch(new UpdateTransaction($recurring_transaction, $request->merge(['paid_at' => $request->get('recurring_started_at')])));
|
||||
|
||||
if ($response['success']) {
|
||||
$response['redirect'] = route('recurring-transactions.show', $recurring_transaction->id);
|
||||
|
||||
$message = trans('messages.success.updated', ['type' => trans_choice('general.transactions', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
} else {
|
||||
$response['redirect'] = route('recurring-transactions.edit', $recurring_transaction->id);
|
||||
|
||||
$message = $response['message'];
|
||||
|
||||
flash($message)->error()->important();
|
||||
}
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* End recurring template.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function end(Transaction $recurring_transaction)
|
||||
{
|
||||
$response = $this->ajaxDispatch(new UpdateTransaction($recurring_transaction, [
|
||||
'recurring_frequency' => $recurring_transaction->recurring->frequency,
|
||||
'recurring_interval' => $recurring_transaction->recurring->interval,
|
||||
'recurring_started_at' => $recurring_transaction->recurring->started_at,
|
||||
'recurring_limit' => $recurring_transaction->recurring->limit,
|
||||
'recurring_limit_count' => $recurring_transaction->recurring->limit_count,
|
||||
'recurring_limit_date' => $recurring_transaction->recurring->limit_date,
|
||||
'created_from' => $recurring_transaction->created_from,
|
||||
'created_by' => $recurring_transaction->created_by,
|
||||
'recurring_status' => Recurring::END_STATUS,
|
||||
]));
|
||||
|
||||
if ($response['success']) {
|
||||
$message = trans('messages.success.ended', ['type' => trans_choice('general.recurring_transactions', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
} else {
|
||||
$message = $response['message'];
|
||||
|
||||
flash($message)->error()->important();
|
||||
}
|
||||
|
||||
return redirect()->route('recurring-transactions.index');
|
||||
}
|
||||
}
|
@ -3,16 +3,31 @@
|
||||
namespace App\Http\Controllers\Banking;
|
||||
|
||||
use App\Abstracts\Http\Controller;
|
||||
use App\Events\Banking\TransactionPrinting;
|
||||
use App\Events\Banking\TransactionSent;
|
||||
use App\Exports\Banking\Transactions as Export;
|
||||
use App\Http\Requests\Banking\Transaction as Request;
|
||||
use App\Http\Requests\Banking\TransactionConnect;
|
||||
use App\Http\Requests\Common\Import as ImportRequest;
|
||||
use App\Imports\Banking\Transactions as Import;
|
||||
use App\Jobs\Banking\CreateTransaction;
|
||||
use App\Jobs\Banking\DeleteTransaction;
|
||||
use App\Jobs\Banking\MatchBankingDocumentTransaction;
|
||||
use App\Jobs\Banking\SplitTransaction;
|
||||
use App\Jobs\Banking\UpdateTransaction;
|
||||
use App\Models\Banking\Account;
|
||||
use App\Models\Banking\Transaction;
|
||||
use App\Models\Setting\Category;
|
||||
use App\Models\Document\Document;
|
||||
use App\Models\Setting\Currency;
|
||||
use App\Notifications\Banking\Transaction as Notification;
|
||||
use App\Traits\Currencies;
|
||||
use App\Traits\DateTime;
|
||||
use App\Traits\Transactions as TransactionsTrait;
|
||||
|
||||
class Transactions extends Controller
|
||||
{
|
||||
use Currencies, DateTime, TransactionsTrait;
|
||||
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
@ -20,17 +35,115 @@ class Transactions extends Controller
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$accounts = Account::enabled()->orderBy('name')->pluck('name', 'id');
|
||||
$transactions = Transaction::with('account', 'category', 'contact')->isNotRecurring()->collect(['paid_at'=> 'desc']);
|
||||
|
||||
$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)]), '');
|
||||
$totals = [
|
||||
'income' => 0,
|
||||
'expense' => 0,
|
||||
'profit' => 0,
|
||||
];
|
||||
|
||||
$request_type = !request()->has('type') ? ['income', 'expense'] : request('type');
|
||||
$categories = Category::enabled()->type($request_type)->orderBy('name')->pluck('name', 'id');
|
||||
$transactions->each(function ($transaction) use (&$totals) {
|
||||
if ($transaction->isNotIncome() && $transaction->isNotExpense()) {
|
||||
return;
|
||||
}
|
||||
|
||||
$transactions = Transaction::with('account', 'category', 'contact')->collect(['paid_at'=> 'desc']);
|
||||
$totals[$transaction->type] += $transaction->getAmountConvertedToDefault();
|
||||
});
|
||||
|
||||
return $this->response('banking.transactions.index', compact('transactions', 'accounts', 'types', 'categories'));
|
||||
$totals['profit'] = $totals['income'] - $totals['expense'];
|
||||
|
||||
$translations = $this->getTranslationsForConnect('income');
|
||||
|
||||
return $this->response('banking.transactions.index', compact(
|
||||
'transactions',
|
||||
'translations',
|
||||
'totals'
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for viewing the specified resource.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function show(Transaction $transaction)
|
||||
{
|
||||
$title = ($transaction->type == 'income') ? trans_choice('general.receipts', 1) : trans('transactions.payment_made');
|
||||
|
||||
return view('banking.transactions.show', compact('transaction', 'title'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
$type = request()->get('type', 'income');
|
||||
|
||||
$number = $this->getNextTransactionNumber();
|
||||
|
||||
$contact_type = config('type.transaction.' . $type . '.contact_type');
|
||||
|
||||
$account_currency_code = Account::where('id', setting('default.account'))->pluck('currency_code')->first();
|
||||
|
||||
$currency = Currency::where('code', $account_currency_code)->first();
|
||||
|
||||
return view('banking.transactions.create', compact(
|
||||
'type',
|
||||
'number',
|
||||
'contact_type',
|
||||
'account_currency_code',
|
||||
'currency'
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param Request $request
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$response = $this->ajaxDispatch(new CreateTransaction($request));
|
||||
|
||||
if ($response['success']) {
|
||||
$response['redirect'] = route('transactions.show', $response['data']->id);
|
||||
|
||||
$message = trans('messages.success.added', ['type' => trans_choice('general.transactions', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
} else {
|
||||
$response['redirect'] = route('transactions.create');
|
||||
|
||||
$message = $response['message'];
|
||||
|
||||
flash($message)->error()->important();
|
||||
}
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Duplicate the specified resource.
|
||||
*
|
||||
* @param Transaction $transaction
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function duplicate(Transaction $transaction)
|
||||
{
|
||||
$clone = $transaction->duplicate();
|
||||
|
||||
$message = trans('messages.success.duplicated', ['type' => trans_choice('general.transactions', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
|
||||
return redirect()->route('transactions.edit', $clone->id);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -57,6 +170,60 @@ class Transactions extends Controller
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*
|
||||
* @param Transaction $transaction
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function edit(Transaction $transaction)
|
||||
{
|
||||
$type = $transaction->type;
|
||||
$contact_type = config('type.transaction.' . $type . '.contact_type');
|
||||
|
||||
$currency = Currency::where('code', $transaction->currency_code)->first();
|
||||
|
||||
$date_format = $this->getCompanyDateFormat();
|
||||
|
||||
return view('banking.transactions.edit', compact(
|
||||
'type',
|
||||
'contact_type',
|
||||
'transaction',
|
||||
'currency',
|
||||
'date_format'
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
* @param Transaction $transaction
|
||||
* @param Request $request
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function update(Transaction $transaction, Request $request)
|
||||
{
|
||||
$response = $this->ajaxDispatch(new UpdateTransaction($transaction, $request));
|
||||
|
||||
if ($response['success']) {
|
||||
$response['redirect'] = route('transactions.show', $transaction->id);
|
||||
|
||||
$message = trans('messages.success.updated', ['type' => trans_choice('general.transactions', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
} else {
|
||||
$response['redirect'] = route('transactions.edit', $transaction->id);
|
||||
|
||||
$message = $response['message'];
|
||||
|
||||
flash($message)->error()->important();
|
||||
}
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
@ -92,4 +259,100 @@ class Transactions extends Controller
|
||||
{
|
||||
return $this->exportExcel(new Export, trans_choice('general.transactions', 2));
|
||||
}
|
||||
|
||||
/**
|
||||
* Download the PDF file of transaction.
|
||||
*
|
||||
* @param Transaction $transaction
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function emailTransaction(Transaction $transaction)
|
||||
{
|
||||
if (empty($transaction->contact->email)) {
|
||||
return redirect()->back();
|
||||
}
|
||||
|
||||
// Notify the customer/vendor
|
||||
$transaction->contact->notify(new Notification($transaction, config('type.transaction.' . $transaction->type . '.email_template'), true));
|
||||
|
||||
event(new TransactionSent($transaction));
|
||||
|
||||
flash(trans('documents.messages.email_sent', ['type' => trans_choice('general.transactions', 1)]))->success();
|
||||
|
||||
return redirect()->back();
|
||||
}
|
||||
|
||||
/**
|
||||
* Print the transaction.
|
||||
*
|
||||
* @param Transaction $transaction
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function printTransaction(Transaction $transaction)
|
||||
{
|
||||
event(new TransactionPrinting($transaction));
|
||||
|
||||
$view = view('banking.transactions.print_default', compact('transaction'));
|
||||
|
||||
return mb_convert_encoding($view, 'HTML-ENTITIES', 'UTF-8');
|
||||
}
|
||||
|
||||
/**
|
||||
* Download the PDF file of transaction.
|
||||
*
|
||||
* @param Transaction $transaction
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function pdfTransaction(Transaction $transaction)
|
||||
{
|
||||
event(new TransactionPrinting($transaction));
|
||||
|
||||
$currency_style = true;
|
||||
|
||||
$view = view('banking.transactions.print_default', compact('transaction', 'currency_style'))->render();
|
||||
$html = mb_convert_encoding($view, 'HTML-ENTITIES', 'UTF-8');
|
||||
|
||||
$pdf = app('dompdf.wrapper');
|
||||
$pdf->loadHTML($html);
|
||||
|
||||
//$pdf->setPaper('A4', 'portrait');
|
||||
|
||||
$file_name = $this->getTransactionFileName($transaction);
|
||||
|
||||
return $pdf->download($file_name);
|
||||
}
|
||||
|
||||
public function connect(Transaction $transaction, TransactionConnect $request)
|
||||
{
|
||||
$total_items = count($request->data['items']);
|
||||
|
||||
if ($total_items == 1) {
|
||||
$document = Document::find($request->data['items'][0]['document_id']);
|
||||
|
||||
if (!is_null($document)) {
|
||||
$response = $this->ajaxDispatch(new MatchBankingDocumentTransaction($document, $transaction));
|
||||
}
|
||||
}
|
||||
|
||||
if ($total_items > 1) {
|
||||
$response = $this->ajaxDispatch(new SplitTransaction($transaction, $request->data));
|
||||
}
|
||||
|
||||
$response['redirect'] = route('transactions.index');
|
||||
|
||||
if ($response['success']) {
|
||||
$message = trans('messages.success.connected', ['type' => trans_choice('general.transactions', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
} else {
|
||||
$message = $response['message'];
|
||||
|
||||
flash($message)->error()->important();
|
||||
}
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
}
|
||||
|
@ -13,8 +13,6 @@ use App\Jobs\Banking\DeleteTransfer;
|
||||
use App\Models\Banking\Account;
|
||||
use App\Models\Banking\Transfer;
|
||||
use App\Models\Setting\Currency;
|
||||
use App\Utilities\Modules;
|
||||
use Date;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class Transfers extends Controller
|
||||
@ -52,13 +50,9 @@ class Transfers extends Controller
|
||||
{
|
||||
$accounts = Account::enabled()->orderBy('name')->pluck('name', 'id');
|
||||
|
||||
$payment_methods = Modules::getPaymentMethods();
|
||||
|
||||
$currency = Currency::where('code', setting('default.currency'))->first();
|
||||
|
||||
$file_types = $this->prepeareFileTypes();
|
||||
|
||||
return view('banking.transfers.create', compact('accounts', 'payment_methods', 'currency', 'file_types'));
|
||||
return view('banking.transfers.create', compact('accounts', 'currency'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -142,15 +136,11 @@ class Transfers extends Controller
|
||||
{
|
||||
$accounts = Account::enabled()->orderBy('name')->pluck('name', 'id');
|
||||
|
||||
$payment_methods = Modules::getPaymentMethods();
|
||||
$currency_code = ($transfer->expense_transaction->account) ? $transfer->expense_transaction->account->currency_code : setting('default.currency');
|
||||
|
||||
$account = $transfer->expense_transaction->account;
|
||||
$currency = Currency::where('code', $currency_code)->first();
|
||||
|
||||
$currency = Currency::where('code', $account->currency_code)->first();
|
||||
|
||||
$file_types = $this->prepeareFileTypes();
|
||||
|
||||
return view('banking.transfers.edit', compact('transfer', 'accounts', 'payment_methods', 'currency', 'file_types'));
|
||||
return view('banking.transfers.edit', compact('transfer', 'accounts', 'currency'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -259,19 +249,4 @@ class Transfers extends Controller
|
||||
|
||||
return $pdf->download($file_name);
|
||||
}
|
||||
|
||||
protected function prepeareFileTypes()
|
||||
{
|
||||
$file_type_mimes = explode(',', config('filesystems.mimes'));
|
||||
|
||||
$file_types = [];
|
||||
|
||||
foreach ($file_type_mimes as $mime) {
|
||||
$file_types[] = '.' . $mime;
|
||||
}
|
||||
|
||||
$file_types = implode(',', $file_types);
|
||||
|
||||
return $file_types;
|
||||
}
|
||||
}
|
||||
|
@ -20,7 +20,9 @@ class BulkActions extends Controller
|
||||
*/
|
||||
public function action($group, $type, Request $request)
|
||||
{
|
||||
if ($request->get('handle', '*') == '*') {
|
||||
$handle = $request->get('handle', '*');
|
||||
|
||||
if ($handle == '*') {
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'redirect' => true,
|
||||
@ -32,17 +34,20 @@ class BulkActions extends Controller
|
||||
|
||||
// Check is module
|
||||
$module = module($group);
|
||||
$page = ucfirst($type);
|
||||
|
||||
if ($module instanceof \Akaunting\Module\Module) {
|
||||
$tmp = explode('.', $type);
|
||||
$file_name = !empty($tmp[1]) ? Str::studly($tmp[0]) . '\\' . Str::studly($tmp[1]) : Str::studly($tmp[0]);
|
||||
|
||||
$bulk_actions = app('Modules\\' . $module->getStudlyName() . '\BulkActions\\' . $file_name);
|
||||
|
||||
$page = ucfirst($file_name);
|
||||
} else {
|
||||
$bulk_actions = app('App\BulkActions\\' . ucfirst($group) . '\\' . ucfirst($type));
|
||||
}
|
||||
|
||||
if (isset($bulk_actions->actions[$request->get('handle')]['permission']) && !user()->can($bulk_actions->actions[$request->get('handle')]['permission'])) {
|
||||
if (isset($bulk_actions->actions[$handle]['permission']) && !user()->can($bulk_actions->actions[$handle]['permission'])) {
|
||||
flash(trans('errors.message.403'))->error()->important();
|
||||
|
||||
return response()->json([
|
||||
@ -54,11 +59,21 @@ class BulkActions extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
$result = $bulk_actions->{$request->get('handle')}($request);
|
||||
$result = $bulk_actions->{$handle}($request);
|
||||
|
||||
$message = trans($bulk_actions->messages['general'], ['type' => $handle, 'count' => count($request->get('selected'))]);
|
||||
|
||||
if (array_key_exists($handle, $bulk_actions->messages)) {
|
||||
$message = trans($bulk_actions->messages[$handle], ['type' => $page]);
|
||||
}
|
||||
|
||||
if (! empty($result) && ($result instanceof \Symfony\Component\HttpFoundation\BinaryFileResponse)) {
|
||||
flash($message)->success();
|
||||
|
||||
if (!empty($result) && ($result instanceof \Symfony\Component\HttpFoundation\BinaryFileResponse)) {
|
||||
return $result;
|
||||
} elseif (!empty($result) && ($result instanceof RedirectResponse)) {
|
||||
} elseif (! empty($result) && ($result instanceof RedirectResponse)) {
|
||||
flash($message)->success();
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'redirect' => $result->getTargetUrl(),
|
||||
@ -67,6 +82,8 @@ class BulkActions extends Controller
|
||||
'message' => ''
|
||||
]);
|
||||
} else {
|
||||
flash($message)->success();
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'redirect' => true,
|
||||
|
@ -8,7 +8,6 @@ use App\Jobs\Common\CreateCompany;
|
||||
use App\Jobs\Common\DeleteCompany;
|
||||
use App\Jobs\Common\UpdateCompany;
|
||||
use App\Models\Common\Company;
|
||||
use App\Models\Setting\Currency;
|
||||
use App\Traits\Uploads;
|
||||
use App\Traits\Users;
|
||||
|
||||
@ -45,9 +44,7 @@ class Companies extends Controller
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
$currencies = Currency::enabled()->pluck('name', 'code');
|
||||
|
||||
return view('common.companies.create', compact('currencies'));
|
||||
return view('common.companies.create');
|
||||
}
|
||||
|
||||
/**
|
||||
@ -95,9 +92,7 @@ class Companies extends Controller
|
||||
return redirect()->route('companies.index');
|
||||
}
|
||||
|
||||
$currencies = Currency::enabled()->pluck('name', 'code');
|
||||
|
||||
return view('common.companies.edit', compact('company', 'currencies'));
|
||||
return view('common.companies.edit', compact('company'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -214,7 +209,7 @@ class Companies extends Controller
|
||||
event(new \App\Events\Common\CompanySwitched($company, $old_company_id));
|
||||
|
||||
// Check wizard
|
||||
if (!setting('wizard.completed', false)) {
|
||||
if (! setting('wizard.completed', false)) {
|
||||
return redirect()->route('wizard.edit', ['company_id' => $company->id]);
|
||||
}
|
||||
}
|
||||
|
@ -71,14 +71,16 @@ class Dashboards extends Controller
|
||||
return Widgets::canShow($widget->class);
|
||||
});
|
||||
|
||||
$user_dashboards = user()->dashboards()->enabled()->get();
|
||||
|
||||
$date_picker_shortcuts = $this->getDatePickerShortcuts();
|
||||
|
||||
if (!request()->has('start_date')) {
|
||||
if (! request()->has('start_date')) {
|
||||
request()->merge(['start_date' => $date_picker_shortcuts[trans('reports.this_year')]['start']]);
|
||||
request()->merge(['end_date' => $date_picker_shortcuts[trans('reports.this_year')]['end']]);
|
||||
}
|
||||
|
||||
return view('common.dashboards.show', compact('dashboard', 'widgets', 'date_picker_shortcuts'));
|
||||
return view('common.dashboards.show', compact('dashboard', 'widgets', 'user_dashboards', 'date_picker_shortcuts'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -88,7 +90,11 @@ class Dashboards extends Controller
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
$users = company()->users()->get()->sortBy('name');
|
||||
$users = company()->users()->get()->reject(function ($user) {
|
||||
if ($user->cannot('read-admin-panel')) {
|
||||
return true;
|
||||
}
|
||||
})->sortBy('name');
|
||||
|
||||
return view('common.dashboards.create', compact('users'));
|
||||
}
|
||||
@ -133,7 +139,11 @@ class Dashboards extends Controller
|
||||
return redirect()->route('dashboards.index');
|
||||
}
|
||||
|
||||
$users = company()->users()->get()->sortBy('name');
|
||||
$users = company()->users()->get()->reject(function ($user) {
|
||||
if ($user->cannot('read-admin-panel')) {
|
||||
return true;
|
||||
}
|
||||
})->sortBy('name');
|
||||
|
||||
return view('common.dashboards.edit', compact('dashboard', 'users'));
|
||||
}
|
||||
|
@ -38,9 +38,11 @@ class Import extends Controller
|
||||
'role' => 'form',
|
||||
'class' => 'form-loading-button',
|
||||
'novalidate' => true,
|
||||
'route' => '',
|
||||
'url' => '',
|
||||
];
|
||||
|
||||
if (!empty($route)) {
|
||||
if (! empty($route)) {
|
||||
$form_params['route'] = $route;
|
||||
} else {
|
||||
$form_params['url'] = $path . '/import';
|
||||
|
@ -6,14 +6,11 @@ use App\Abstracts\Http\Controller;
|
||||
use App\Exports\Common\Items as Export;
|
||||
use App\Http\Requests\Common\Item as Request;
|
||||
use App\Http\Requests\Common\Import as ImportRequest;
|
||||
use App\Http\Requests\Common\TotalItem as TotalRequest;
|
||||
use App\Imports\Common\Items as Import;
|
||||
use App\Jobs\Common\CreateItem;
|
||||
use App\Jobs\Common\DeleteItem;
|
||||
use App\Jobs\Common\UpdateItem;
|
||||
use App\Models\Common\Item;
|
||||
use App\Models\Setting\Category;
|
||||
use App\Models\Setting\Currency;
|
||||
use App\Models\Setting\Tax;
|
||||
use App\Traits\Uploads;
|
||||
|
||||
@ -28,7 +25,7 @@ class Items extends Controller
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$items = Item::with('category', 'media')->collect();
|
||||
$items = Item::with('category', 'media', 'taxes')->collect();
|
||||
|
||||
return $this->response('common.items.index', compact('items'));
|
||||
}
|
||||
@ -50,11 +47,9 @@ class Items extends Controller
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
$categories = Category::item()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
|
||||
|
||||
$taxes = Tax::enabled()->orderBy('name')->get()->pluck('title', 'id');
|
||||
|
||||
return view('common.items.create', compact('categories', 'taxes'));
|
||||
return view('common.items.create', compact('taxes'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -135,15 +130,9 @@ class Items extends Controller
|
||||
*/
|
||||
public function edit(Item $item)
|
||||
{
|
||||
$categories = Category::item()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
|
||||
|
||||
if ($item->category && !$categories->has($item->category_id)) {
|
||||
$categories->put($item->category->id, $item->category->name);
|
||||
}
|
||||
|
||||
$taxes = Tax::enabled()->orderBy('name')->get()->pluck('title', 'id');
|
||||
|
||||
return view('common.items.edit', compact('item', 'categories', 'taxes'));
|
||||
return view('common.items.edit', compact('item', 'taxes'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,101 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Common;
|
||||
|
||||
use App\Abstracts\Http\Controller;
|
||||
use App\Http\Requests\Common\Notification as Request;
|
||||
use App\Traits\Modules;
|
||||
use App\Utilities\Date;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class Notifications extends Controller
|
||||
{
|
||||
use Modules;
|
||||
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
return view('common.notifications.index');
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for viewing the specified resource.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function readAll()
|
||||
{
|
||||
$notifications = user()->unreadNotifications;
|
||||
|
||||
foreach ($notifications as $notification) {
|
||||
$notification->markAsRead();
|
||||
}
|
||||
|
||||
// Hide New Apps Notifications
|
||||
$module_notifications = $this->getNotifications('new-apps');
|
||||
|
||||
foreach ($module_notifications as $module_notification) {
|
||||
$prefix = 'notifications.' . user()->id . '.' . $module_notification->alias;
|
||||
|
||||
setting()->set([
|
||||
$prefix . '.name' => $module_notification->name,
|
||||
$prefix . '.message' => $module_notification->alias,
|
||||
$prefix . '.date' => Date::now(),
|
||||
$prefix . '.status' => '0',
|
||||
]);
|
||||
}
|
||||
|
||||
setting()->save();
|
||||
|
||||
$message = trans('messages.success.clear_all', ['type' => Str::lower(trans_choice('general.notifications', 2))]);
|
||||
|
||||
flash($message)->success();
|
||||
|
||||
return redirect()->route('dashboard');
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable the specified resource.
|
||||
*
|
||||
* @param Company $company
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function disable(Request $request)
|
||||
{
|
||||
$id = $request['id'];
|
||||
$path = str_replace('#', '/', $request['path']);
|
||||
|
||||
$notifications = $this->getNotifications($path);
|
||||
|
||||
foreach ($notifications as $notification) {
|
||||
if ($notification->id == $id) {
|
||||
$prefix = 'notifications.' . $path . '.' . $id;
|
||||
|
||||
setting()->set([
|
||||
$prefix . '.name' => $notification->name,
|
||||
$prefix . '.message' => $notification->message,
|
||||
$prefix . '.date' => Date::now(),
|
||||
$prefix . '.status' => '0',
|
||||
]);
|
||||
|
||||
setting()->save();
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'message' => trans('messages.success.disabled', [
|
||||
'type' => Str::lower(trans_choice('general.notifications', 2))
|
||||
]),
|
||||
'success' => true,
|
||||
'error' => false,
|
||||
'data' => null,
|
||||
]);
|
||||
}
|
||||
}
|
@ -9,7 +9,6 @@ use App\Jobs\Common\DeleteReport;
|
||||
use App\Jobs\Common\UpdateReport;
|
||||
use App\Models\Common\Report;
|
||||
use App\Utilities\Reports as Utility;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
|
||||
class Reports extends Controller
|
||||
{
|
||||
@ -37,7 +36,7 @@ class Reports extends Controller
|
||||
$reports = Report::orderBy('name')->get();
|
||||
|
||||
foreach ($reports as $report) {
|
||||
if (!Utility::canShow($report->class)) {
|
||||
if (Utility::cannotShow($report->class)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -47,17 +46,20 @@ class Reports extends Controller
|
||||
continue;
|
||||
}
|
||||
|
||||
$ttl = 3600 * 6; // 6 hours
|
||||
|
||||
$totals[$report->id] = Cache::remember('reports.totals.' . $report->id, $ttl, function () use ($class) {
|
||||
return $class->getGrandTotal();
|
||||
});
|
||||
|
||||
$icons[$report->id] = $class->getIcon();
|
||||
$categories[$class->getCategory()][] = $report;
|
||||
|
||||
if (empty($categories[$class->getCategory()])) {
|
||||
$categories[$class->getCategory()] = [
|
||||
'name' => $class->getCategory(),
|
||||
'description' => $class->getCategoryDescription(),
|
||||
'reports' => [$report],
|
||||
];
|
||||
} else {
|
||||
$categories[$class->getCategory()]['reports'][] = $report;
|
||||
}
|
||||
}
|
||||
|
||||
return $this->response('common.reports.index', compact('categories', 'totals', 'icons'));
|
||||
return $this->response('common.reports.index', compact('categories', 'icons'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -68,15 +70,12 @@ class Reports extends Controller
|
||||
*/
|
||||
public function show(Report $report)
|
||||
{
|
||||
if (!Utility::canShow($report->class)) {
|
||||
if (Utility::cannotShow($report->class)) {
|
||||
abort(403);
|
||||
}
|
||||
|
||||
$class = Utility::getClassInstance($report);
|
||||
|
||||
// Update cache
|
||||
Cache::put('reports.totals.' . $report->id, $class->getGrandTotal());
|
||||
|
||||
return $class->show();
|
||||
}
|
||||
|
||||
@ -215,7 +214,7 @@ class Reports extends Controller
|
||||
*/
|
||||
public function print(Report $report)
|
||||
{
|
||||
if (!Utility::canShow($report->class)) {
|
||||
if (Utility::cannotShow($report->class)) {
|
||||
abort(403);
|
||||
}
|
||||
|
||||
@ -230,7 +229,7 @@ class Reports extends Controller
|
||||
*/
|
||||
public function export(Report $report)
|
||||
{
|
||||
if (!Utility::canShow($report->class)) {
|
||||
if (Utility::cannotShow($report->class)) {
|
||||
abort(403);
|
||||
}
|
||||
|
||||
@ -257,7 +256,7 @@ class Reports extends Controller
|
||||
|
||||
$fields = (new $class())->getFields();
|
||||
|
||||
$html = view('partials.reports.fields', compact('fields'))->render();
|
||||
$html = view('components.reports.fields', compact('fields'))->render();
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
@ -266,23 +265,4 @@ class Reports extends Controller
|
||||
'html' => $html,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear the cache of the resource.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function clear(Report $report)
|
||||
{
|
||||
$data = Utility::getClassInstance($report)->getGrandTotal();
|
||||
|
||||
Cache::put('reports.totals.' . $report->id, $data);
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'error' => false,
|
||||
'data' => $data,
|
||||
'message' => '',
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
@ -82,7 +82,7 @@ class Uploads extends Controller
|
||||
|
||||
$file = $media;
|
||||
|
||||
$html = view('partials.media.file', compact('file', 'column_name', 'options'))->render();
|
||||
$html = view('components.media.file', compact('file', 'column_name', 'options'))->render();
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
|
@ -3,9 +3,9 @@
|
||||
namespace App\Http\Controllers\Install;
|
||||
|
||||
use App\Http\Requests\Install\Setting as Request;
|
||||
use App\Http\Requests\Install\Setting;
|
||||
use App\Utilities\Installer;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class Settings extends Controller
|
||||
{
|
||||
@ -22,17 +22,19 @@ class Settings extends Controller
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param Setting $request
|
||||
* @param $request
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function store(Setting $request)
|
||||
public function store(Request $request)
|
||||
{
|
||||
// Create company
|
||||
Installer::createCompany($request->get('company_name'), $request->get('company_email'), session('locale'));
|
||||
DB::transaction(function () use ($request) {
|
||||
// Create company
|
||||
Installer::createCompany($request->get('company_name'), $request->get('company_email'), session('locale'));
|
||||
|
||||
// Create user
|
||||
Installer::createUser($request->get('user_email'), $request->get('user_password'), session('locale'));
|
||||
// Create user
|
||||
Installer::createUser($request->get('user_email'), $request->get('user_password'), session('locale'));
|
||||
});
|
||||
|
||||
// Make the final touches
|
||||
Installer::finalTouches();
|
||||
|
@ -5,7 +5,6 @@ namespace App\Http\Controllers\Modals;
|
||||
use App\Abstracts\Http\Controller;
|
||||
use App\Http\Requests\Banking\Account as Request;
|
||||
use App\Jobs\Banking\CreateAccount;
|
||||
use App\Models\Banking\Account;
|
||||
use App\Models\Setting\Currency;
|
||||
|
||||
class Accounts extends Controller
|
||||
@ -29,11 +28,9 @@ class Accounts extends Controller
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
$currencies = Currency::enabled()->pluck('name', 'code');
|
||||
|
||||
$currency = Currency::where('code', '=', setting('default.currency'))->first();
|
||||
|
||||
$html = view('modals.accounts.create', compact('currencies', 'currency'))->render();
|
||||
$html = view('modals.accounts.create', compact('currency'))->render();
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
|
@ -14,7 +14,7 @@ class Companies extends Controller
|
||||
{
|
||||
// Add CRUD permission check
|
||||
$this->middleware('permission:read-settings-company')->only('index', 'show', 'edit', 'export');
|
||||
$this->middleware('permission:update-settings-settings')->only('update', 'enable', 'disable');
|
||||
$this->middleware('permission:update-settings-company')->only('update', 'enable', 'disable');
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -7,7 +7,6 @@ use App\Http\Requests\Common\Contact as Request;
|
||||
use App\Models\Common\Contact;
|
||||
use App\Jobs\Common\CreateContact;
|
||||
use App\Jobs\Common\UpdateContact;
|
||||
use App\Models\Setting\Currency;
|
||||
|
||||
class Customers extends Controller
|
||||
{
|
||||
@ -30,17 +29,13 @@ class Customers extends Controller
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
$currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code')->toArray();
|
||||
|
||||
$contact_selector = false;
|
||||
|
||||
if (request()->has('contact_selector')) {
|
||||
$contact_selector = request()->get('contact_selector');
|
||||
}
|
||||
|
||||
$rand = rand();
|
||||
|
||||
$html = view('modals.customers.create', compact('currencies', 'contact_selector', 'rand'))->render();
|
||||
$html = view('modals.customers.create', compact('contact_selector'))->render();
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
@ -80,17 +75,13 @@ class Customers extends Controller
|
||||
*/
|
||||
public function edit(Contact $customer)
|
||||
{
|
||||
$currencies = Currency::enabled()->pluck('name', 'code');
|
||||
|
||||
$contact_selector = false;
|
||||
|
||||
if (request()->has('contact_selector')) {
|
||||
$contact_selector = request()->get('contact_selector');
|
||||
}
|
||||
|
||||
$rand = rand();
|
||||
|
||||
$html = view('modals.customers.edit', compact('customer', 'currencies', 'contact_selector', 'rand'))->render();
|
||||
$html = view('modals.customers.edit', compact('customer', 'contact_selector'))->render();
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
|
@ -15,8 +15,8 @@ class DocumentItemColumns extends Controller
|
||||
public function __construct()
|
||||
{
|
||||
// Add CRUD permission check
|
||||
$this->middleware('permission:read-settings-settings')->only('index', 'edit');
|
||||
$this->middleware('permission:update-settings-settings')->only('update', 'enable', 'disable');
|
||||
$this->middleware('permission:read-settings-invoice')->only('index', 'edit');
|
||||
$this->middleware('permission:update-settings-invoice')->only('update', 'enable', 'disable');
|
||||
}
|
||||
|
||||
/**
|
||||
@ -31,6 +31,7 @@ class DocumentItemColumns extends Controller
|
||||
$type = request()->get('type', 'invoice');
|
||||
|
||||
$item_names = [
|
||||
'hide' => trans('settings.invoice.hide.item_name'),
|
||||
'settings.invoice.item' => trans('settings.' . $type . '.item'),
|
||||
'settings.invoice.product' => trans('settings.' . $type . '.product'),
|
||||
'settings.invoice.service' => trans('settings.' . $type . '.service'),
|
||||
@ -38,12 +39,14 @@ class DocumentItemColumns extends Controller
|
||||
];
|
||||
|
||||
$price_names = [
|
||||
'hide' => trans('settings.invoice.hide.price'),
|
||||
'settings.invoice.price' => trans('settings.' . $type . '.price'),
|
||||
'settings.invoice.rate' => trans('settings.' . $type . '.rate'),
|
||||
'custom' => trans('settings.invoice.custom'),
|
||||
];
|
||||
|
||||
$quantity_names = [
|
||||
'hide' => trans('settings.invoice.hide.quantity'),
|
||||
'settings.invoice.quantity' => trans('settings.' . $type . '.quantity'),
|
||||
'custom' => trans('settings.invoice.custom'),
|
||||
];
|
||||
|
@ -5,16 +5,18 @@ namespace App\Http\Controllers\Modals;
|
||||
use App\Abstracts\Http\Controller;
|
||||
use App\Http\Requests\Banking\Transaction as Request;
|
||||
use App\Jobs\Banking\CreateBankingDocumentTransaction;
|
||||
use App\Models\Banking\Account;
|
||||
use App\Jobs\Banking\UpdateBankingDocumentTransaction;
|
||||
use App\Models\Banking\Transaction;
|
||||
use App\Models\Document\Document;
|
||||
use App\Models\Setting\Currency;
|
||||
use App\Utilities\Modules;
|
||||
use App\Traits\Uploads;
|
||||
use App\Traits\Transactions;
|
||||
|
||||
|
||||
class DocumentTransactions extends Controller
|
||||
{
|
||||
use Uploads;
|
||||
use Uploads, Transactions;
|
||||
|
||||
/**
|
||||
* Instantiate a new controller instance.
|
||||
@ -37,16 +39,12 @@ class DocumentTransactions extends Controller
|
||||
*/
|
||||
public function create(Document $document)
|
||||
{
|
||||
$accounts = Account::enabled()->orderBy('name')->pluck('name', 'id');
|
||||
|
||||
$currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code')->toArray();
|
||||
|
||||
$currency = Currency::where('code', $document->currency_code)->first();
|
||||
|
||||
$payment_methods = Modules::getPaymentMethods();
|
||||
|
||||
$paid = $document->paid;
|
||||
|
||||
$number = $this->getNextTransactionNumber();
|
||||
|
||||
// Get document Totals
|
||||
foreach ($document->totals as $document_total) {
|
||||
$document->{$document_total->code} = $document_total->amount;
|
||||
@ -56,11 +54,29 @@ class DocumentTransactions extends Controller
|
||||
|
||||
$document->grand_total = money($total, $currency->code)->getAmount();
|
||||
|
||||
if (!empty($paid)) {
|
||||
if (! empty($paid)) {
|
||||
$document->grand_total = round($document->total - $paid, $currency->precision);
|
||||
}
|
||||
|
||||
$html = view('modals.documents.payment', compact('document', 'accounts', 'currencies', 'currency', 'payment_methods'))->render();
|
||||
$buttons = [
|
||||
'cancel' => [
|
||||
'text' => trans('general.cancel'),
|
||||
'class' => 'btn-outline-secondary'
|
||||
],
|
||||
'payment' => [
|
||||
'text' => trans('invoices.accept_payments'),
|
||||
'class' => 'long-texts',
|
||||
'url' => route('apps.categories.show', 'payment-method')
|
||||
],
|
||||
'confirm' => [
|
||||
'text' => trans('general.save'),
|
||||
'class' => 'disabled:bg-green-100'
|
||||
],
|
||||
];
|
||||
|
||||
$route = ['modals.documents.document.transactions.store', $document->id];
|
||||
|
||||
$html = view('modals.documents.payment', compact('document', 'route', 'currency', 'number'))->render();
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
@ -69,21 +85,7 @@ class DocumentTransactions extends Controller
|
||||
'html' => $html,
|
||||
'data' => [
|
||||
'title' => trans('general.title.new', ['type' => trans_choice('general.payments', 1)]),
|
||||
'buttons' => [
|
||||
'cancel' => [
|
||||
'text' => trans('general.cancel'),
|
||||
'class' => 'btn-outline-secondary'
|
||||
],
|
||||
'payment' => [
|
||||
'text' => trans('invoices.accept_payments'),
|
||||
'class' => 'long-texts',
|
||||
'url' => route('apps.categories.show', 'payment-method')
|
||||
],
|
||||
'confirm' => [
|
||||
'text' => trans('general.save'),
|
||||
'class' => 'btn-success'
|
||||
]
|
||||
]
|
||||
'buttons' => $buttons,
|
||||
]
|
||||
]);
|
||||
}
|
||||
@ -101,9 +103,99 @@ class DocumentTransactions extends Controller
|
||||
$response = $this->ajaxDispatch(new CreateBankingDocumentTransaction($document, $request));
|
||||
|
||||
if ($response['success']) {
|
||||
$route = config('type.' . $document->type . '.route.prefix');
|
||||
$route = config('type.document.' . $document->type . '.route.prefix');
|
||||
|
||||
if ($alias = config('type.' . $document->type . '.alias')) {
|
||||
if ($alias = config('type.document.' . $document->type . '.alias')) {
|
||||
$route = $alias . '.' . $route;
|
||||
}
|
||||
|
||||
$response['redirect'] = route($route . '.show', $document->id);
|
||||
|
||||
$message = trans('messages.success.added', ['type' => trans_choice('general.payments', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
} else {
|
||||
$response['redirect'] = null;
|
||||
}
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*
|
||||
* @param Document $document
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function edit(Document $document, Transaction $transaction)
|
||||
{
|
||||
$currency = Currency::where('code', $document->currency_code)->first();
|
||||
|
||||
$paid = $document->paid;
|
||||
|
||||
$number = $this->getNextTransactionNumber();
|
||||
|
||||
// Get document Totals
|
||||
foreach ($document->totals as $document_total) {
|
||||
$document->{$document_total->code} = $document_total->amount;
|
||||
}
|
||||
|
||||
$total = money($document->total, $currency->code, true)->format();
|
||||
|
||||
$document->grand_total = money($total, $currency->code)->getAmount();
|
||||
|
||||
if (! empty($paid)) {
|
||||
$document->grand_total = round($document->total - $paid, $currency->precision);
|
||||
}
|
||||
|
||||
$buttons = [
|
||||
'cancel' => [
|
||||
'text' => trans('general.cancel'),
|
||||
'class' => 'btn-outline-secondary'
|
||||
],
|
||||
'payment' => [
|
||||
'text' => trans('invoices.accept_payments'),
|
||||
'class' => 'long-texts',
|
||||
'url' => route('apps.categories.show', 'payment-method')
|
||||
],
|
||||
'confirm' => [
|
||||
'text' => trans('general.save'),
|
||||
'class' => 'disabled:bg-green-100'
|
||||
],
|
||||
];
|
||||
|
||||
$route = ['modals.documents.document.transactions.update', $document->id, $transaction->id];
|
||||
|
||||
$html = view('modals.documents.payment', compact('document', 'transaction', 'route', 'currency', 'number'))->render();
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'error' => false,
|
||||
'message' => 'null',
|
||||
'html' => $html,
|
||||
'data' => [
|
||||
'title' => trans('general.title.edit', ['type' => trans_choice('general.payments', 1)]),
|
||||
'buttons' => $buttons,
|
||||
]
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
* @param $item
|
||||
* @param $request
|
||||
* @return Response
|
||||
*/
|
||||
public function update(Document $document, Transaction $transaction, Request $request)
|
||||
{
|
||||
$response = $this->ajaxDispatch(new UpdateBankingDocumentTransaction($document, $transaction, $request));
|
||||
|
||||
if ($response['success']) {
|
||||
$route = config('type.document.' . $document->type . '.route.prefix');
|
||||
|
||||
if ($alias = config('type.document.' . $document->type . '.alias')) {
|
||||
$route = $alias . '.' . $route;
|
||||
}
|
||||
|
||||
|
92
app/Http/Controllers/Modals/InvoiceEmails.php
Normal file
92
app/Http/Controllers/Modals/InvoiceEmails.php
Normal file
@ -0,0 +1,92 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Modals;
|
||||
|
||||
use App\Abstracts\Http\Controller;
|
||||
use App\Models\Document\Document;
|
||||
use App\Notifications\Sale\Invoice as Notification;
|
||||
use App\Jobs\Document\SendDocumentAsCustomMail;
|
||||
use App\Http\Requests\Common\CustomMail as Request;
|
||||
|
||||
class InvoiceEmails extends Controller
|
||||
{
|
||||
/**
|
||||
* Instantiate a new controller instance.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
// Add CRUD permission check
|
||||
$this->middleware('permission:create-sales-invoices')->only('create', 'store', 'duplicate', 'import');
|
||||
$this->middleware('permission:read-sales-invoices')->only('index', 'show', 'edit', 'export');
|
||||
$this->middleware('permission:update-sales-invoices')->only('update', 'enable', 'disable');
|
||||
$this->middleware('permission:delete-sales-invoices')->only('destroy');
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*
|
||||
* @param Document $invoice
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function create(Document $invoice)
|
||||
{
|
||||
$notification = new Notification($invoice, 'invoice_new_customer', true);
|
||||
|
||||
$store_route = 'modals.invoices.emails.store';
|
||||
|
||||
$html = view('modals.invoices.email', compact('invoice', 'notification', 'store_route'))->render();
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'error' => false,
|
||||
'message' => 'null',
|
||||
'html' => $html,
|
||||
'data' => [
|
||||
'title' => trans('general.title.new', ['type' => trans_choice('general.email', 1)]),
|
||||
'buttons' => [
|
||||
'cancel' => [
|
||||
'text' => trans('general.cancel'),
|
||||
'class' => 'btn-outline-secondary',
|
||||
],
|
||||
'confirm' => [
|
||||
'text' => trans('general.send'),
|
||||
'class' => 'disabled:bg-green-100',
|
||||
]
|
||||
]
|
||||
]
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param Request $request
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$response = $this->ajaxDispatch(new SendDocumentAsCustomMail($request, 'invoice_new_customer'));
|
||||
|
||||
if ($response['success']) {
|
||||
$invoice = Document::find($request->get('document_id'));
|
||||
|
||||
$route = config('type.document.' . $invoice->type . '.route.prefix');
|
||||
|
||||
if ($alias = config('type.document.' . $invoice->type . '.alias')) {
|
||||
$route = $alias . '.' . $route;
|
||||
}
|
||||
|
||||
$response['redirect'] = route($route . '.show', $invoice->id);
|
||||
|
||||
$message = trans('documents.messages.email_sent', ['type' => trans_choice('general.invoices', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
} else {
|
||||
$response['redirect'] = null;
|
||||
}
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
}
|
81
app/Http/Controllers/Modals/InvoiceShare.php
Normal file
81
app/Http/Controllers/Modals/InvoiceShare.php
Normal file
@ -0,0 +1,81 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Modals;
|
||||
|
||||
use App\Abstracts\Http\Controller;
|
||||
use App\Models\Document\Document;
|
||||
use Illuminate\Support\Facades\URL;
|
||||
|
||||
class InvoiceShare extends Controller
|
||||
{
|
||||
/**
|
||||
* Instantiate a new controller instance.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
// Add CRUD permission check
|
||||
$this->middleware('permission:create-sales-invoices')->only('create', 'store', 'duplicate', 'import');
|
||||
$this->middleware('permission:read-sales-invoices')->only('index', 'show', 'edit', 'export');
|
||||
$this->middleware('permission:update-sales-invoices')->only('update', 'enable', 'disable');
|
||||
$this->middleware('permission:delete-sales-invoices')->only('destroy');
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*
|
||||
* @param Document $invoice
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function create(Document $invoice)
|
||||
{
|
||||
$page = config('type.document.' . $invoice->type . '.route.prefix');
|
||||
$alias = config('type.document.' . $invoice->type . '.alias');
|
||||
|
||||
$route = '';
|
||||
|
||||
if (! empty($alias)) {
|
||||
$route .= $alias . '.';
|
||||
}
|
||||
|
||||
$preview_route = $route . 'preview.' . $page . '.show';
|
||||
$signed_route = $route . 'signed.' . $page . '.show';
|
||||
|
||||
try {
|
||||
$previewUrl = route($preview_route, $invoice->id);
|
||||
} catch (\Exception $e) {
|
||||
$previewUrl = '';
|
||||
}
|
||||
|
||||
try {
|
||||
route($signed_route, [$this->document->id, 'company_id' => company_id()]);
|
||||
|
||||
$signedUrl = URL::signedRoute($signed_route, [$invoice->id]);
|
||||
} catch (\Exception $e) {
|
||||
$signedUrl = URL::signedRoute('signed.invoices.show', [$invoice->id]);
|
||||
}
|
||||
|
||||
$html = view('modals.invoices.share', compact('invoice', 'previewUrl', 'signedUrl'))->render();
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'error' => false,
|
||||
'message' => 'null',
|
||||
'html' => $html,
|
||||
'data' => [
|
||||
'title' => trans('general.title.new', ['type' => trans('general.share_link')]),
|
||||
'success_message' => trans('invoices.share.success_message'),
|
||||
'buttons' => [
|
||||
'cancel' => [
|
||||
'text' => trans('general.cancel'),
|
||||
'class' => 'btn-outline-secondary',
|
||||
],
|
||||
'confirm' => [
|
||||
'text' => trans('general.copy_link'),
|
||||
'class' => 'disabled:bg-green-100',
|
||||
],
|
||||
]
|
||||
]
|
||||
]);
|
||||
}
|
||||
}
|
@ -12,10 +12,10 @@ class InvoiceTemplates extends Controller
|
||||
public function __construct()
|
||||
{
|
||||
// Add CRUD permission check
|
||||
$this->middleware('permission:create-settings-settings')->only('create', 'store');
|
||||
$this->middleware('permission:read-settings-settings')->only('index', 'edit');
|
||||
$this->middleware('permission:update-settings-settings')->only('update', 'enable', 'disable');
|
||||
$this->middleware('permission:delete-settings-settings')->only('destroy');
|
||||
$this->middleware('permission:create-settings-invoice')->only('create', 'store');
|
||||
$this->middleware('permission:read-settings-invoice')->only('index', 'edit');
|
||||
$this->middleware('permission:update-settings-invoice')->only('update', 'enable', 'disable');
|
||||
$this->middleware('permission:delete-settings-invoice')->only('destroy');
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -4,7 +4,6 @@ namespace App\Http\Controllers\Modals;
|
||||
|
||||
use App\Abstracts\Http\Controller;
|
||||
use App\Jobs\Common\CreateItem;
|
||||
use App\Models\Setting\Category;
|
||||
use App\Models\Setting\Currency;
|
||||
use App\Models\Setting\Tax;
|
||||
use Illuminate\Http\Request as IRequest;
|
||||
@ -30,13 +29,11 @@ class Items extends Controller
|
||||
*/
|
||||
public function create(IRequest $request)
|
||||
{
|
||||
$categories = Category::item()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
|
||||
|
||||
$taxes = Tax::enabled()->orderBy('name')->get()->pluck('title', 'id');
|
||||
|
||||
$currency = Currency::where('code', setting('default.currency'))->first();
|
||||
|
||||
$html = view('modals.items.create', compact('categories', 'taxes', 'currency'))->render();
|
||||
$html = view('modals.items.create', compact('taxes', 'currency'))->render();
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
|
96
app/Http/Controllers/Modals/TransactionEmails.php
Normal file
96
app/Http/Controllers/Modals/TransactionEmails.php
Normal file
@ -0,0 +1,96 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Modals;
|
||||
|
||||
use App\Abstracts\Http\Controller;
|
||||
use App\Models\Banking\Transaction;
|
||||
use App\Notifications\Banking\Transaction as Notification;
|
||||
use App\Jobs\Banking\SendTransactionAsCustomMail;
|
||||
use App\Http\Requests\Common\CustomMail as Request;
|
||||
|
||||
class TransactionEmails extends Controller
|
||||
{
|
||||
/**
|
||||
* Instantiate a new controller instance.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
// Add CRUD permission check
|
||||
$this->middleware('permission:create-banking-transactions')->only('create', 'store', 'duplicate', 'import');
|
||||
$this->middleware('permission:read-banking-transactions')->only('index', 'show', 'edit', 'export');
|
||||
$this->middleware('permission:update-banking-transactions')->only('update', 'enable', 'disable');
|
||||
$this->middleware('permission:delete-banking-transactions')->only('destroy');
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*
|
||||
* @param Transaction $transaction
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function create(Transaction $transaction)
|
||||
{
|
||||
$email_template = config('type.transaction.' . $transaction->type . '.email_template');
|
||||
|
||||
$notification = new Notification($transaction, $email_template, true);
|
||||
|
||||
$store_route = 'modals.transactions.emails.store';
|
||||
|
||||
$html = view('modals.transactions.email', compact('transaction', 'notification', 'store_route'))->render();
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'error' => false,
|
||||
'message' => 'null',
|
||||
'html' => $html,
|
||||
'data' => [
|
||||
'title' => trans('general.title.new', ['type' => trans_choice('general.email', 1)]),
|
||||
'buttons' => [
|
||||
'cancel' => [
|
||||
'text' => trans('general.cancel'),
|
||||
'class' => 'btn-outline-secondary',
|
||||
],
|
||||
'confirm' => [
|
||||
'text' => trans('general.send'),
|
||||
'class' => 'disabled:bg-green-100',
|
||||
]
|
||||
]
|
||||
]
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param Request $request
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$transaction = Transaction::find($request->get('transaction_id'));
|
||||
|
||||
$email_template = config('type.transaction.' . $transaction->type . '.email_template');
|
||||
|
||||
$response = $this->ajaxDispatch(new SendTransactionAsCustomMail($request, $email_template));
|
||||
|
||||
if ($response['success']) {
|
||||
$route = config('type.transaction.' . $transaction->type . '.route.prefix');
|
||||
|
||||
if ($alias = config('type.transaction.' . $transaction->type . '.alias')) {
|
||||
$route = $alias . '.' . $route;
|
||||
}
|
||||
|
||||
$response['redirect'] = route($route . '.show', $transaction->id);
|
||||
|
||||
$message = trans('documents.messages.email_sent', ['type' => trans_choice('general.transactions', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
} else {
|
||||
$response['redirect'] = null;
|
||||
}
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
}
|
80
app/Http/Controllers/Modals/TransactionShare.php
Normal file
80
app/Http/Controllers/Modals/TransactionShare.php
Normal file
@ -0,0 +1,80 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Modals;
|
||||
|
||||
use App\Abstracts\Http\Controller;
|
||||
use App\Models\Banking\Transaction;
|
||||
use Illuminate\Support\Facades\URL;
|
||||
|
||||
class TransactionShare extends Controller
|
||||
{
|
||||
/**
|
||||
* Instantiate a new controller instance.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
// Add CRUD permission check
|
||||
$this->middleware('permission:create-banking-transactions')->only('create', 'store', 'duplicate', 'import');
|
||||
$this->middleware('permission:read-banking-transactions')->only('index', 'show', 'edit', 'export');
|
||||
$this->middleware('permission:update-banking-transactions')->only('update', 'enable', 'disable');
|
||||
$this->middleware('permission:delete-banking-transactions')->only('destroy');
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*
|
||||
* @param Transaction $transaction
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function create(Transaction $transaction)
|
||||
{
|
||||
$alias = config('type.transaction.' . $transaction->type . '.alias');
|
||||
|
||||
$route = '';
|
||||
|
||||
if (! empty($alias)) {
|
||||
$route .= $alias . '.';
|
||||
}
|
||||
|
||||
$preview_route = $route . 'preview.payments.show';
|
||||
$signed_route = $route . 'signed.payments.show';
|
||||
|
||||
try {
|
||||
$previewUrl = route($preview_route, $transaction->id);
|
||||
} catch (\Exception $e) {
|
||||
$previewUrl = '';
|
||||
}
|
||||
|
||||
try {
|
||||
route($signed_route, [$this->document->id, 'company_id' => company_id()]);
|
||||
|
||||
$signedUrl = URL::signedRoute($signed_route, [$transaction->id]);
|
||||
} catch (\Exception $e) {
|
||||
$signedUrl = URL::signedRoute('signed.payments.show', [$transaction->id]);
|
||||
}
|
||||
|
||||
$html = view('modals.transactions.share', compact('transaction', 'previewUrl', 'signedUrl'))->render();
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'error' => false,
|
||||
'message' => 'null',
|
||||
'html' => $html,
|
||||
'data' => [
|
||||
'title' => trans('general.title.new', ['type' => trans('general.share_link')]),
|
||||
'success_message' => trans('invoices.share.success_message'),
|
||||
'buttons' => [
|
||||
'cancel' => [
|
||||
'text' => trans('general.cancel'),
|
||||
'class' => 'btn-outline-secondary',
|
||||
],
|
||||
'confirm' => [
|
||||
'text' => trans('general.copy_link'),
|
||||
'class' => 'disabled:bg-green-100',
|
||||
],
|
||||
]
|
||||
]
|
||||
]);
|
||||
}
|
||||
}
|
@ -12,10 +12,10 @@ class TransferTemplates extends Controller
|
||||
public function __construct()
|
||||
{
|
||||
// Add CRUD permission check
|
||||
$this->middleware('permission:create-settings-settings')->only('create', 'store');
|
||||
$this->middleware('permission:read-settings-settings')->only('index', 'edit');
|
||||
$this->middleware('permission:update-settings-settings')->only('update', 'enable', 'disable');
|
||||
$this->middleware('permission:delete-settings-settings')->only('destroy');
|
||||
$this->middleware('permission:create-banking-transfers')->only('create', 'store');
|
||||
$this->middleware('permission:read-banking-transfers')->only('index', 'edit');
|
||||
$this->middleware('permission:update-banking-transfers')->only('update', 'enable', 'disable');
|
||||
$this->middleware('permission:delete-banking-transfers')->only('destroy');
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -7,7 +7,6 @@ use App\Http\Requests\Common\Contact as Request;
|
||||
use App\Models\Common\Contact;
|
||||
use App\Jobs\Common\CreateContact;
|
||||
use App\Jobs\Common\UpdateContact;
|
||||
use App\Models\Setting\Currency;
|
||||
|
||||
class Vendors extends Controller
|
||||
{
|
||||
@ -30,17 +29,13 @@ class Vendors extends Controller
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
$currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code')->toArray();
|
||||
|
||||
$contact_selector = false;
|
||||
|
||||
if (request()->has('contact_selector')) {
|
||||
$contact_selector = request()->get('contact_selector');
|
||||
}
|
||||
|
||||
$rand = rand();
|
||||
|
||||
$html = view('modals.vendors.create', compact('currencies', 'contact_selector', 'rand'))->render();
|
||||
$html = view('modals.vendors.create', compact('contact_selector'))->render();
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
@ -79,17 +74,13 @@ class Vendors extends Controller
|
||||
*/
|
||||
public function edit(Contact $vendor)
|
||||
{
|
||||
$currencies = Currency::enabled()->pluck('name', 'code');
|
||||
|
||||
$contact_selector = false;
|
||||
|
||||
if (request()->has('contact_selector')) {
|
||||
$contact_selector = request()->get('contact_selector');
|
||||
}
|
||||
|
||||
$rand = rand();
|
||||
|
||||
$html = view('modals.vendors.edit', compact('vendor', 'currencies', 'contact_selector', 'rand'))->render();
|
||||
$html = view('modals.vendors.edit', compact('vendor','contact_selector'))->render();
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
|
@ -3,13 +3,9 @@
|
||||
namespace App\Http\Controllers\Modules;
|
||||
|
||||
use App\Abstracts\Http\Controller;
|
||||
use App\Traits\Modules;
|
||||
use App\Models\Module\Module;
|
||||
|
||||
class Home extends Controller
|
||||
{
|
||||
use Modules;
|
||||
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
@ -17,19 +13,7 @@ class Home extends Controller
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$data = [
|
||||
'query' => [
|
||||
'limit' => 4
|
||||
]
|
||||
];
|
||||
|
||||
$pre_sale = $this->getPreSaleModules($data);
|
||||
$paid = $this->getPaidModules($data);
|
||||
$new = $this->getNewModules($data);
|
||||
$free = $this->getFreeModules($data);
|
||||
$installed = Module::all()->pluck('enabled', 'alias')->toArray();
|
||||
|
||||
return $this->response('modules.home.index', compact('pre_sale', 'paid', 'new', 'free', 'installed'));
|
||||
return $this->response('modules.home.index');
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -276,10 +276,10 @@ class Item extends Controller
|
||||
public function uninstall($alias)
|
||||
{
|
||||
try {
|
||||
$name = module($alias)->getName();
|
||||
|
||||
$this->dispatch(new UninstallModule($alias, company_id()));
|
||||
|
||||
$name = module($alias)->getName();
|
||||
|
||||
$message = trans('modules.uninstalled', ['module' => $name]);
|
||||
|
||||
flash($message)->success();
|
||||
@ -295,9 +295,9 @@ class Item extends Controller
|
||||
public function enable($alias)
|
||||
{
|
||||
try {
|
||||
$name = module($alias)->getName();
|
||||
|
||||
$this->dispatch(new EnableModule($alias, company_id()));
|
||||
|
||||
$name = module($alias)->getName();
|
||||
|
||||
$message = trans('modules.enabled', ['module' => $name]);
|
||||
|
||||
@ -314,10 +314,10 @@ class Item extends Controller
|
||||
public function disable($alias)
|
||||
{
|
||||
try {
|
||||
$name = module($alias)->getName();
|
||||
|
||||
$this->dispatch(new DisableModule($alias, company_id()));
|
||||
|
||||
$name = module($alias)->getName();
|
||||
|
||||
$message = trans('modules.disabled', ['module' => $name]);
|
||||
|
||||
flash($message)->success();
|
||||
@ -340,7 +340,7 @@ class Item extends Controller
|
||||
|
||||
$releases = $this->getModuleReleases($alias, $data);
|
||||
|
||||
$html = view('partials.modules.releases', compact('releases'))->render();
|
||||
$html = view('components.layouts.modules.releases', compact('releases'))->render();
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
@ -361,7 +361,7 @@ class Item extends Controller
|
||||
|
||||
$reviews = $this->getModuleReviews($alias, $data);
|
||||
|
||||
$html = view('partials.modules.reviews', compact('reviews'))->render();
|
||||
$html = view('components.layouts.modules.reviews', compact('reviews'))->render();
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
|
@ -3,13 +3,9 @@
|
||||
namespace App\Http\Controllers\Modules;
|
||||
|
||||
use App\Abstracts\Http\Controller;
|
||||
use App\Models\Module\Module;
|
||||
use App\Traits\Modules;
|
||||
|
||||
class My extends Controller
|
||||
{
|
||||
use Modules;
|
||||
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
@ -17,10 +13,6 @@ class My extends Controller
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$purchased = $this->getMyModules();
|
||||
$modules = $this->getInstalledModules();
|
||||
$installed = Module::where('company_id', '=', company_id())->pluck('enabled', 'alias')->toArray();
|
||||
|
||||
return $this->response('modules.my.index', compact('purchased', 'modules', 'installed'));
|
||||
return $this->response('modules.my.index');
|
||||
}
|
||||
}
|
||||
|
@ -3,10 +3,10 @@
|
||||
namespace App\Http\Controllers\Modules;
|
||||
|
||||
use App\Traits\Modules;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Module\Module;
|
||||
use App\Abstracts\Http\Controller;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class Tiles extends Controller
|
||||
{
|
||||
@ -23,13 +23,13 @@ class Tiles extends Controller
|
||||
{
|
||||
$page = request('page', 1);
|
||||
|
||||
$request = [
|
||||
$data = [
|
||||
'query' => [
|
||||
'page' => $page,
|
||||
]
|
||||
];
|
||||
|
||||
$data = $this->getModulesByCategory($alias, $request);
|
||||
$data = $this->getModulesByCategory($alias, $data);
|
||||
|
||||
if (empty($data)) {
|
||||
return redirect()->route('apps.home.index')->send();
|
||||
@ -39,7 +39,7 @@ class Tiles extends Controller
|
||||
$modules = !empty($data->modules) ? $data->modules : [];
|
||||
$installed = Module::all()->pluck('enabled', 'alias')->toArray();
|
||||
|
||||
return view('modules.tiles.index', compact('title', 'modules', 'installed'));
|
||||
return $this->response('modules.tiles.index', compact('modules', 'title', 'installed'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -53,19 +53,19 @@ class Tiles extends Controller
|
||||
{
|
||||
$page = request('page', 1);
|
||||
|
||||
$request = [
|
||||
$data = [
|
||||
'query' => [
|
||||
'page' => $page,
|
||||
]
|
||||
];
|
||||
|
||||
$data = $this->getModulesByVendor($alias, $request);
|
||||
$data = $this->getModulesByVendor($alias, $data);
|
||||
|
||||
$title = !empty($data->vendor) ? $data->vendor->name : Str::studly($alias);
|
||||
$modules = !empty($data->modules) ? $data->modules : [];
|
||||
$installed = Module::all()->pluck('enabled', 'alias')->toArray();
|
||||
|
||||
return view('modules.tiles.index', compact('title', 'modules', 'installed'));
|
||||
return $this->response('modules.tiles.index', compact('modules', 'title', 'installed'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -87,7 +87,7 @@ class Tiles extends Controller
|
||||
$modules = $this->getPaidModules($data);
|
||||
$installed = Module::all()->pluck('enabled', 'alias')->toArray();
|
||||
|
||||
return view('modules.tiles.index', compact('title', 'modules', 'installed'));
|
||||
return $this->response('modules.tiles.index', compact('modules', 'title', 'installed'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -109,7 +109,7 @@ class Tiles extends Controller
|
||||
$modules = $this->getNewModules($data);
|
||||
$installed = Module::all()->pluck('enabled', 'alias')->toArray();
|
||||
|
||||
return view('modules.tiles.index', compact('title', 'modules', 'installed'));
|
||||
return $this->response('modules.tiles.index', compact('modules', 'title', 'installed'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -131,7 +131,7 @@ class Tiles extends Controller
|
||||
$modules = $this->getFreeModules($data);
|
||||
$installed = Module::all()->pluck('enabled', 'alias')->toArray();
|
||||
|
||||
return view('modules.tiles.index', compact('title', 'modules', 'installed'));
|
||||
return $this->response('modules.tiles.index', compact('modules', 'title','installed'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -141,8 +141,8 @@ class Tiles extends Controller
|
||||
*/
|
||||
public function searchModules(Request $request)
|
||||
{
|
||||
$keyword = $request['keyword'];
|
||||
$page = request('page', 1);
|
||||
$keyword = $request->get('keyword');
|
||||
$page = $request->get('page', 1);
|
||||
|
||||
$data = [
|
||||
'query' => [
|
||||
@ -157,4 +157,87 @@ class Tiles extends Controller
|
||||
|
||||
return view('modules.tiles.index', compact('title', 'modules', 'keyword', 'installed'));
|
||||
}
|
||||
|
||||
public function loadMore($type, Request $request)
|
||||
{
|
||||
$page = $request->get('page', 1);
|
||||
|
||||
$modules = [];
|
||||
|
||||
$data = [
|
||||
'query' => [
|
||||
'page' => $page,
|
||||
]
|
||||
];
|
||||
|
||||
$last_page = 1;
|
||||
|
||||
switch ($type) {
|
||||
case 'categories':
|
||||
$alias = $request->get('alias');
|
||||
$response = $this->getModulesByCategory($alias, $data);
|
||||
|
||||
$response = !empty($response->modules) ? $response->modules : [];
|
||||
$last_page = ! empty($response) ? $response->last_page : 1;
|
||||
|
||||
$modules = $this->prepareModules($response);
|
||||
break;
|
||||
case 'vendors':
|
||||
$alias = $request->get('alias');
|
||||
$response = $this->getModulesByVendor($alias, $data);
|
||||
|
||||
$response = !empty($response->modules) ? $response->modules : [];
|
||||
$last_page = ! empty($response) ? $response->last_page : 1;
|
||||
|
||||
$modules = $this->prepareModules($response);
|
||||
break;
|
||||
case 'paid':
|
||||
$response = $this->getPaidModules($data);
|
||||
|
||||
$last_page = $response->last_page;
|
||||
$modules = $this->prepareModules($response);
|
||||
break;
|
||||
case 'new':
|
||||
$response = $this->getNewModules($data);
|
||||
|
||||
$last_page = $response->last_page;
|
||||
$modules = $this->prepareModules($response);
|
||||
|
||||
break;
|
||||
case 'free':
|
||||
$response = $this->getFreeModules($data);
|
||||
|
||||
$last_page = $response->last_page;
|
||||
$modules = $this->prepareModules($response);
|
||||
break;
|
||||
case 'search':
|
||||
$data['query']['keyword'] = $request->get('keyword');
|
||||
|
||||
$response = $this->getSearchModules($data);
|
||||
|
||||
$last_page = $response->last_page;
|
||||
$modules = $this->prepareModules($response);
|
||||
break;
|
||||
}
|
||||
|
||||
$html = view('components.modules.raw_items', compact('modules'))->render();
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'error' => false,
|
||||
'message' => 'null',
|
||||
'modules' => $modules,
|
||||
'last_page' => $last_page,
|
||||
'html' => $html,
|
||||
]);
|
||||
}
|
||||
|
||||
protected function prepareModules($response)
|
||||
{
|
||||
if (! empty($response->data)) {
|
||||
return $response->data;
|
||||
}
|
||||
|
||||
return $response;
|
||||
}
|
||||
}
|
||||
|
@ -5,7 +5,6 @@ namespace App\Http\Controllers\Portal;
|
||||
use App\Models\Document\Document;
|
||||
use App\Traits\Charts;
|
||||
use App\Traits\DateTime;
|
||||
use App\Utilities\Chartjs;
|
||||
use Date;
|
||||
|
||||
class Dashboard
|
||||
@ -38,82 +37,10 @@ class Dashboard
|
||||
|
||||
//$invoices = Document::invoice()->accrued()->where('contact_id', $contact->id)->get();
|
||||
$invoices = Document::invoice()->accrued()->whereBetween('due_at', [$start, $end])->where('contact_id', $contact->id)->get();
|
||||
|
||||
$start_month = $start->month;
|
||||
$end_month = $end->month;
|
||||
|
||||
// look cashFlow widget
|
||||
$end_month = $end->diffInMonths($start);
|
||||
$start_month = 0;
|
||||
// Monthly
|
||||
$labels = [];
|
||||
|
||||
$s = clone $start;
|
||||
|
||||
for ($j = $end_month; $j >= $start_month; $j--) {
|
||||
$labels[$end_month - $j] = $s->format('M Y');
|
||||
|
||||
$s->addMonth();
|
||||
}
|
||||
|
||||
|
||||
$amounts = $this->calculateAmounts($invoices, $start, $end);
|
||||
|
||||
$grand = array_sum($amounts['unpaid']) + array_sum($amounts['paid']) + array_sum($amounts['overdue']);
|
||||
|
||||
$totals = [
|
||||
'paid' => money(array_sum($amounts['paid']), setting('default.currency'), true),
|
||||
'unpaid' => money(array_sum($amounts['unpaid']), setting('default.currency'), true),
|
||||
'overdue' => money(array_sum($amounts['overdue']), setting('default.currency'), true),
|
||||
];
|
||||
|
||||
$progress = [
|
||||
'paid' => !empty($grand) ? (100 / $grand) * array_sum($amounts['paid']) : '0',
|
||||
'unpaid' => !empty($grand) ? (100 / $grand) * array_sum($amounts['unpaid']) : '0',
|
||||
'overdue' => !empty($grand) ? (100 / $grand) * array_sum($amounts['overdue']) : '0',
|
||||
];
|
||||
|
||||
$chart = new Chartjs();
|
||||
$chart->type('line')
|
||||
->width(0)
|
||||
->height(300)
|
||||
->options($this->getLineChartOptions())
|
||||
->labels(array_values($labels));
|
||||
|
||||
$chart->dataset(trans('general.paid'), 'line', array_values($amounts['paid']))
|
||||
->backgroundColor('#6da252')
|
||||
->color('#6da252')
|
||||
->options([
|
||||
'borderWidth' => 4,
|
||||
'pointStyle' => 'line',
|
||||
])
|
||||
->fill(false);
|
||||
|
||||
$chart->dataset(trans('general.unpaid'), 'line', array_values($amounts['unpaid']))
|
||||
->backgroundColor('#efad32')
|
||||
->color('#efad32')
|
||||
->options([
|
||||
'borderWidth' => 4,
|
||||
'pointStyle' => 'line',
|
||||
])
|
||||
->fill(false);
|
||||
|
||||
$chart->dataset(trans('general.overdue'), 'line', array_values($amounts['overdue']))
|
||||
->backgroundColor('#ef3232')
|
||||
->color('#ef3232')
|
||||
->options([
|
||||
'borderWidth' => 4,
|
||||
'pointStyle' => 'line',
|
||||
])
|
||||
->fill(false);
|
||||
|
||||
$date_picker_shortcuts = $this->getDatePickerShortcuts();
|
||||
|
||||
if (!request()->has('start_date')) {
|
||||
request()->merge(['start_date' => $date_picker_shortcuts[trans('reports.this_year')]['start']]);
|
||||
request()->merge(['end_date' => $date_picker_shortcuts[trans('reports.this_year')]['end']]);
|
||||
}
|
||||
|
||||
return view('portal.dashboard.index', compact('contact', 'invoices', 'totals', 'progress', 'chart', 'date_picker_shortcuts'));
|
||||
return view('portal.dashboard.index', compact('contact', 'invoices'));
|
||||
}
|
||||
|
||||
private function calculateAmounts($invoices, $start, $end)
|
||||
|
@ -5,7 +5,6 @@ namespace App\Http\Controllers\Portal;
|
||||
use App\Abstracts\Http\Controller;
|
||||
use App\Http\Requests\Portal\InvoiceShow as Request;
|
||||
use App\Models\Document\Document;
|
||||
use App\Models\Setting\Category;
|
||||
use App\Traits\Currencies;
|
||||
use App\Traits\DateTime;
|
||||
use App\Traits\Documents;
|
||||
@ -33,11 +32,7 @@ class Invoices extends Controller
|
||||
->accrued()->where('contact_id', user()->contact->id)
|
||||
->collect(['document_number'=> 'desc']);
|
||||
|
||||
$categories = collect(Category::income()->enabled()->orderBy('name')->pluck('name', 'id'));
|
||||
|
||||
$statuses = $this->getDocumentStatuses(Document::INVOICE_TYPE);
|
||||
|
||||
return $this->response('portal.invoices.index', compact('invoices', 'categories', 'statuses'));
|
||||
return $this->response('portal.invoices.index', compact('invoices'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -56,6 +51,20 @@ class Invoices extends Controller
|
||||
return view('portal.invoices.show', compact('invoice', 'payment_methods'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for viewing the specified resource.
|
||||
*
|
||||
* @param Document $invoice
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function finish(Document $invoice, Request $request)
|
||||
{
|
||||
$layout = $request->isPortal($invoice->company_id) ? 'portal' : 'signed';
|
||||
|
||||
return view('portal.invoices.finish', compact('invoice', 'layout'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for viewing the specified resource.
|
||||
*
|
||||
@ -98,6 +107,27 @@ class Invoices extends Controller
|
||||
return $pdf->download($file_name);
|
||||
}
|
||||
|
||||
public function preview(Document $invoice)
|
||||
{
|
||||
if (empty($invoice)) {
|
||||
return redirect()->route('login');
|
||||
}
|
||||
|
||||
$payment_actions = [];
|
||||
|
||||
$payment_methods = Modules::getPaymentMethods();
|
||||
|
||||
foreach ($payment_methods as $payment_method_key => $payment_method_value) {
|
||||
$codes = explode('.', $payment_method_key);
|
||||
|
||||
if (!isset($payment_actions[$codes[0]])) {
|
||||
$payment_actions[$codes[0]] = URL::signedRoute('signed.' . $codes[0] . '.invoices.show', [$invoice->id]);
|
||||
}
|
||||
}
|
||||
|
||||
return view('portal.invoices.preview', compact('invoice', 'payment_methods', 'payment_actions'));
|
||||
}
|
||||
|
||||
public function signed(Document $invoice)
|
||||
{
|
||||
if (empty($invoice)) {
|
||||
@ -119,7 +149,10 @@ class Invoices extends Controller
|
||||
$print_action = URL::signedRoute('signed.invoices.print', [$invoice->id]);
|
||||
$pdf_action = URL::signedRoute('signed.invoices.pdf', [$invoice->id]);
|
||||
|
||||
event(new \App\Events\Document\DocumentViewed($invoice));
|
||||
// Guest or Invoice contact user track the invoice viewed.
|
||||
if (empty(user()) || user()->id == $invoice->contact->user_id) {
|
||||
event(new \App\Events\Document\DocumentViewed($invoice));
|
||||
}
|
||||
|
||||
return view('portal.invoices.signed', compact('invoice', 'payment_methods', 'payment_actions', 'print_action', 'pdf_action'));
|
||||
}
|
||||
|
@ -3,6 +3,7 @@
|
||||
namespace App\Http\Controllers\Portal;
|
||||
|
||||
use App\Abstracts\Http\Controller;
|
||||
use App\Events\Banking\TransactionPrinting;
|
||||
use App\Models\Banking\Transaction;
|
||||
use App\Models\Setting\Currency;
|
||||
use App\Http\Requests\Portal\PaymentShow as Request;
|
||||
@ -65,10 +66,10 @@ class Payments extends Controller
|
||||
*/
|
||||
public function printPayment(Transaction $payment, Request $request)
|
||||
{
|
||||
event(new \App\Events\Banking\TransactionPrinting($payment));
|
||||
event(new TransactionPrinting($payment));
|
||||
|
||||
$revenue = $payment;
|
||||
$view = view($payment->template_path, compact('revenue'));
|
||||
$transaction = $payment;
|
||||
$view = view('banking.transactions.print_default', compact('transaction'));
|
||||
|
||||
return mb_convert_encoding($view, 'HTML-ENTITIES', 'UTF-8');
|
||||
}
|
||||
@ -82,12 +83,12 @@ class Payments extends Controller
|
||||
*/
|
||||
public function pdfPayment(Transaction $payment, Request $request)
|
||||
{
|
||||
event(new \App\Events\Banking\TransactionPrinting($payment));
|
||||
event(new TransactionPrinting($payment));
|
||||
|
||||
$currency_style = true;
|
||||
|
||||
$revenue = $payment;
|
||||
$view = view($payment->template_path, compact('revenue', 'currency_style'))->render();
|
||||
$transaction = $payment;
|
||||
$view = view('banking.transactions.print_default', compact('transaction', 'currency_style'))->render();
|
||||
$html = mb_convert_encoding($view, 'HTML-ENTITIES', 'UTF-8');
|
||||
|
||||
$pdf = app('dompdf.wrapper');
|
||||
@ -100,6 +101,15 @@ class Payments extends Controller
|
||||
return $pdf->download($file_name);
|
||||
}
|
||||
|
||||
public function preview(Transaction $payment)
|
||||
{
|
||||
if (empty($payment)) {
|
||||
return redirect()->route('login');
|
||||
}
|
||||
|
||||
return view('portal.payments.preview', compact('payment'));
|
||||
}
|
||||
|
||||
public function signed(Transaction $payment)
|
||||
{
|
||||
if (empty($payment)) {
|
||||
|
@ -47,6 +47,7 @@ class Profile extends Controller
|
||||
|
||||
// Do not reset password if not entered/changed
|
||||
if (empty($request['password'])) {
|
||||
unset($request['current_password']);
|
||||
unset($request['password']);
|
||||
unset($request['password_confirmation']);
|
||||
}
|
||||
|
@ -13,9 +13,7 @@ use App\Jobs\Document\DeleteDocument;
|
||||
use App\Jobs\Document\DuplicateDocument;
|
||||
use App\Jobs\Document\UpdateDocument;
|
||||
use App\Models\Document\Document;
|
||||
use App\Models\Setting\Currency;
|
||||
use App\Traits\Documents;
|
||||
use File;
|
||||
|
||||
class Bills extends Controller
|
||||
{
|
||||
@ -283,30 +281,6 @@ class Bills extends Controller
|
||||
return $pdf->download($file_name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Mark the bill as paid.
|
||||
*
|
||||
* @param Document $bill
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function markPaid(Document $bill)
|
||||
{
|
||||
try {
|
||||
$this->dispatch(new CreateBankingDocumentTransaction($bill, ['type' => 'expense']));
|
||||
|
||||
$message = trans('documents.messages.marked_paid', ['type' => trans_choice('general.bills', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
} catch(\Exception $e) {
|
||||
$message = $e->getMessage();
|
||||
|
||||
flash($message)->error()->important();
|
||||
}
|
||||
|
||||
return redirect()->back();
|
||||
}
|
||||
|
||||
protected function prepareBill(Document $bill)
|
||||
{
|
||||
$paid = 0;
|
||||
|
@ -1,326 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Purchases;
|
||||
|
||||
use App\Abstracts\Http\Controller;
|
||||
use App\Exports\Purchases\Payments as Export;
|
||||
use App\Http\Requests\Banking\Transaction as Request;
|
||||
use App\Http\Requests\Common\Import as ImportRequest;
|
||||
use App\Imports\Purchases\Payments as Import;
|
||||
use App\Jobs\Banking\CreateTransaction;
|
||||
use App\Jobs\Banking\DeleteTransaction;
|
||||
use App\Jobs\Banking\UpdateTransaction;
|
||||
use App\Models\Banking\Account;
|
||||
use App\Models\Banking\Transaction;
|
||||
use App\Models\Common\Contact;
|
||||
use App\Models\Setting\Category;
|
||||
use App\Models\Setting\Currency;
|
||||
use App\Traits\Currencies;
|
||||
use App\Traits\DateTime;
|
||||
use App\Traits\Transactions;
|
||||
use App\Utilities\Modules;
|
||||
|
||||
class Payments extends Controller
|
||||
{
|
||||
use Currencies, DateTime, Transactions;
|
||||
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$payments = Transaction::with('account', 'bill', 'category', 'contact')->expense()->isNotTransfer()->collect(['paid_at'=> 'desc']);
|
||||
|
||||
return $this->response('purchases.payments.index', compact('payments'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for viewing the specified resource.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function show(Transaction $payment)
|
||||
{
|
||||
return view('purchases.payments.show', compact('payment'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
$accounts = Account::enabled()->orderBy('name')->pluck('name', 'id');
|
||||
|
||||
$currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code')->toArray();
|
||||
|
||||
$account_currency_code = Account::where('id', setting('default.account'))->pluck('currency_code')->first();
|
||||
|
||||
$currency = Currency::where('code', $account_currency_code)->first();
|
||||
|
||||
$vendors = Contact::vendor()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
|
||||
|
||||
$categories = Category::expense()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
|
||||
|
||||
$payment_methods = Modules::getPaymentMethods();
|
||||
|
||||
$file_type_mimes = explode(',', config('filesystems.mimes'));
|
||||
|
||||
$file_types = [];
|
||||
|
||||
foreach ($file_type_mimes as $mime) {
|
||||
$file_types[] = '.' . $mime;
|
||||
}
|
||||
|
||||
$file_types = implode(',', $file_types);
|
||||
|
||||
return view('purchases.payments.create', compact('accounts', 'currencies', 'account_currency_code', 'currency', 'vendors', 'categories', 'payment_methods', 'file_types'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param Request $request
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$response = $this->ajaxDispatch(new CreateTransaction($request));
|
||||
|
||||
if ($response['success']) {
|
||||
$response['redirect'] = route('payments.show', $response['data']->id);
|
||||
|
||||
$message = trans('messages.success.added', ['type' => trans_choice('general.payments', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
} else {
|
||||
$response['redirect'] = route('payments.create');
|
||||
|
||||
$message = $response['message'];
|
||||
|
||||
flash($message)->error()->important();
|
||||
}
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Duplicate the specified resource.
|
||||
*
|
||||
* @param Transaction $payment
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function duplicate(Transaction $payment)
|
||||
{
|
||||
$clone = $payment->duplicate();
|
||||
|
||||
$message = trans('messages.success.duplicated', ['type' => trans_choice('general.payments', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
|
||||
return redirect()->route('payments.edit', $clone->id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Import the specified resource.
|
||||
*
|
||||
* @param ImportRequest $request
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function import(ImportRequest $request)
|
||||
{
|
||||
$response = $this->importExcel(new Import, $request, trans_choice('general.payments', 2));
|
||||
|
||||
if ($response['success']) {
|
||||
$response['redirect'] = route('payments.index');
|
||||
|
||||
flash($response['message'])->success();
|
||||
} else {
|
||||
$response['redirect'] = route('import.create', ['purchases', 'payments']);
|
||||
|
||||
flash($response['message'])->error()->important();
|
||||
}
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*
|
||||
* @param Transaction $payment
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function edit(Transaction $payment)
|
||||
{
|
||||
$accounts = Account::enabled()->orderBy('name')->pluck('name', 'id');
|
||||
|
||||
$currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code')->toArray();
|
||||
|
||||
$currency = Currency::where('code', $payment->currency_code)->first();
|
||||
|
||||
$vendors = Contact::vendor()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
|
||||
|
||||
if ($payment->contact && !$vendors->has($payment->contact_id)) {
|
||||
$vendors->put($payment->contact->id, $payment->contact->name);
|
||||
}
|
||||
|
||||
$categories = Category::expense()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
|
||||
|
||||
if ($payment->category && !$categories->has($payment->category_id)) {
|
||||
$categories->put($payment->category->id, $payment->category->name);
|
||||
}
|
||||
|
||||
$payment_methods = Modules::getPaymentMethods();
|
||||
|
||||
$date_format = $this->getCompanyDateFormat();
|
||||
|
||||
$file_type_mimes = explode(',', config('filesystems.mimes'));
|
||||
|
||||
$file_types = [];
|
||||
|
||||
foreach ($file_type_mimes as $mime) {
|
||||
$file_types[] = '.' . $mime;
|
||||
}
|
||||
|
||||
$file_types = implode(',', $file_types);
|
||||
|
||||
return view('purchases.payments.edit', compact('payment', 'accounts', 'currencies', 'currency', 'vendors', 'categories', 'payment_methods', 'date_format', 'file_types'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
* @param Transaction $payment
|
||||
* @param Request $request
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function update(Transaction $payment, Request $request)
|
||||
{
|
||||
$response = $this->ajaxDispatch(new UpdateTransaction($payment, $request));
|
||||
|
||||
if ($response['success']) {
|
||||
$response['redirect'] = route('payments.show', $payment->id);
|
||||
|
||||
$message = trans('messages.success.updated', ['type' => trans_choice('general.payments', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
} else {
|
||||
$response['redirect'] = route('payments.edit', $payment->id);
|
||||
|
||||
$message = $response['message'];
|
||||
|
||||
flash($message)->error()->important();
|
||||
}
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param Transaction $payment
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function destroy(Transaction $payment)
|
||||
{
|
||||
$response = $this->ajaxDispatch(new DeleteTransaction($payment));
|
||||
|
||||
$response['redirect'] = route('payments.index');
|
||||
|
||||
if ($response['success']) {
|
||||
$message = trans('messages.success.deleted', ['type' => trans_choice('general.payments', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
} else {
|
||||
$message = $response['message'];
|
||||
|
||||
flash($message)->error()->important();
|
||||
}
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Export the specified resource.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function export()
|
||||
{
|
||||
return $this->exportExcel(new Export, trans_choice('general.payments', 2));
|
||||
}
|
||||
|
||||
/**
|
||||
* Download the PDF file of payment.
|
||||
*
|
||||
* @param Transaction $payment
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function emailPayment(Transaction $payment)
|
||||
{
|
||||
if (empty($payment->contact->email)) {
|
||||
return redirect()->back();
|
||||
}
|
||||
|
||||
// Notify the customer
|
||||
$payment->contact->notify(new Notification($payment, 'payment_new_customer', true));
|
||||
|
||||
event(new \App\Events\Banking\TransactionSent($payment));
|
||||
|
||||
flash(trans('documents.messages.email_sent', ['type' => trans_choice('general.payments', 1)]))->success();
|
||||
|
||||
return redirect()->back();
|
||||
}
|
||||
|
||||
/**
|
||||
* Print the payment.
|
||||
*
|
||||
* @param Transaction $payment
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function printPayment(Transaction $payment)
|
||||
{
|
||||
event(new \App\Events\Banking\TransactionPrinting($payment));
|
||||
|
||||
$view = view($payment->template_path, compact('payment'));
|
||||
|
||||
return mb_convert_encoding($view, 'HTML-ENTITIES', 'UTF-8');
|
||||
}
|
||||
|
||||
/**
|
||||
* Download the PDF file of payment.
|
||||
*
|
||||
* @param Transaction $payment
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function pdfPayment(Transaction $payment)
|
||||
{
|
||||
event(new \App\Events\Banking\TransactionPrinting($payment));
|
||||
|
||||
$currency_style = true;
|
||||
|
||||
$view = view($payment->template_path, compact('payment', 'currency_style'))->render();
|
||||
$html = mb_convert_encoding($view, 'HTML-ENTITIES', 'UTF-8');
|
||||
|
||||
$pdf = app('dompdf.wrapper');
|
||||
$pdf->loadHTML($html);
|
||||
|
||||
//$pdf->setPaper('A4', 'portrait');
|
||||
|
||||
$file_name = $this->getTransactionFileName($payment);
|
||||
|
||||
return $pdf->download($file_name);
|
||||
}
|
||||
}
|
189
app/Http/Controllers/Purchases/RecurringBills.php
Normal file
189
app/Http/Controllers/Purchases/RecurringBills.php
Normal file
@ -0,0 +1,189 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Purchases;
|
||||
|
||||
use App\Abstracts\Http\Controller;
|
||||
use App\Http\Requests\Document\Document as Request;
|
||||
use App\Jobs\Document\CreateDocument;
|
||||
use App\Jobs\Document\DuplicateDocument;
|
||||
use App\Jobs\Document\UpdateDocument;
|
||||
use App\Models\Common\Recurring;
|
||||
use App\Models\Document\Document;
|
||||
use App\Traits\Documents;
|
||||
|
||||
class RecurringBills extends Controller
|
||||
{
|
||||
use Documents;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public $type = Document::BILL_RECURRING_TYPE;
|
||||
|
||||
/**
|
||||
* Instantiate a new controller instance.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
// Add CRUD permission check
|
||||
$this->middleware('permission:create-purchases-bills')->only('create', 'store', 'duplicate', 'import');
|
||||
$this->middleware('permission:read-purchases-bills')->only('index', 'show', 'edit', 'export');
|
||||
$this->middleware('permission:update-purchases-bills')->only('update', 'enable', 'disable');
|
||||
$this->middleware('permission:delete-purchases-bills')->only('destroy');
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$bills = Document::with('contact', 'transactions', 'recurring')->billRecurring()->collect(['issued_at' => 'desc']);
|
||||
|
||||
return $this->response('purchases.recurring_bills.index', compact('bills'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for viewing the specified resource.
|
||||
*
|
||||
* @param Document $recurring_bill
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function show(Document $recurring_bill)
|
||||
{
|
||||
$recurring_bill->load(['category', 'recurring', 'children']);
|
||||
|
||||
return view('purchases.recurring_bills.show', compact('recurring_bill'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
return view('purchases.recurring_bills.create');
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param Request $request
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$response = $this->ajaxDispatch(new CreateDocument($request->merge(['issued_at' => $request->get('recurring_started_at')])));
|
||||
|
||||
if ($response['success']) {
|
||||
$response['redirect'] = route('recurring-bills.show', $response['data']->id);
|
||||
|
||||
$message = trans('messages.success.added', ['type' => trans_choice('general.recurring_bills', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
} else {
|
||||
$response['redirect'] = route('recurring-bills.create');
|
||||
|
||||
$message = $response['message'];
|
||||
|
||||
flash($message)->error()->important();
|
||||
}
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Duplicate the specified resource.
|
||||
*
|
||||
* @param Document $recurring_bill
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function duplicate(Document $recurring_bill)
|
||||
{
|
||||
$clone = $this->dispatch(new DuplicateDocument($recurring_bill));
|
||||
|
||||
$message = trans('messages.success.duplicated', ['type' => trans_choice('general.recurring_bills', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
|
||||
return redirect()->route('recurring-bills.edit', $clone->id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*
|
||||
* @param Document $recurring_bill
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function edit(Document $recurring_bill)
|
||||
{
|
||||
return view('purchases.recurring_bills.edit', compact('recurring_bill'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
* @param Document $recurring_bill
|
||||
* @param Request $request
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function update(Document $recurring_bill, Request $request)
|
||||
{
|
||||
$response = $this->ajaxDispatch(new UpdateDocument($recurring_bill, $request->merge(['issued_at' => $request->get('recurring_started_at')])));
|
||||
|
||||
if ($response['success']) {
|
||||
$response['redirect'] = route('recurring-bills.show', $response['data']->id);
|
||||
|
||||
$message = trans('messages.success.updated', ['type' => trans_choice('general.recurring_bills', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
} else {
|
||||
$response['redirect'] = route('recurring-bills.edit', $recurring_bill->id);
|
||||
|
||||
$message = $response['message'];
|
||||
|
||||
flash($message)->error()->important();
|
||||
}
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* End recurring template.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function end(Document $recurring_bill)
|
||||
{
|
||||
$response = $this->ajaxDispatch(new UpdateDocument($recurring_bill, [
|
||||
'recurring_frequency' => $recurring_bill->recurring->frequency,
|
||||
'recurring_interval' => $recurring_bill->recurring->interval,
|
||||
'recurring_started_at' => $recurring_bill->recurring->started_at,
|
||||
'recurring_limit' => $recurring_bill->recurring->limit,
|
||||
'recurring_limit_count' => $recurring_bill->recurring->limit_count,
|
||||
'recurring_limit_date' => $recurring_bill->recurring->limit_date,
|
||||
'created_from' => $recurring_bill->created_from,
|
||||
'created_by' => $recurring_bill->created_by,
|
||||
'recurring_status' => Recurring::END_STATUS,
|
||||
]));
|
||||
|
||||
if ($response['success']) {
|
||||
$message = trans('messages.success.ended', ['type' => trans_choice('general.recurring_bills', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
} else {
|
||||
$message = $response['message'];
|
||||
|
||||
flash($message)->error()->important();
|
||||
}
|
||||
|
||||
return redirect()->route('recurring-bills.index');
|
||||
}
|
||||
}
|
@ -9,11 +9,11 @@ use App\Http\Requests\Common\Import as ImportRequest;
|
||||
use App\Imports\Purchases\Vendors as Import;
|
||||
use App\Jobs\Common\CreateContact;
|
||||
use App\Jobs\Common\DeleteContact;
|
||||
use App\Jobs\Common\DuplicateContact;
|
||||
use App\Jobs\Common\UpdateContact;
|
||||
use App\Models\Banking\Transaction;
|
||||
use App\Models\Common\Contact;
|
||||
use App\Models\Document\Document;
|
||||
use App\Models\Setting\Currency;
|
||||
use App\Traits\Contacts;
|
||||
use App\Utilities\Date;
|
||||
|
||||
@ -21,6 +21,11 @@ class Vendors extends Controller
|
||||
{
|
||||
use Contacts;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public $type = Contact::VENDOR_TYPE;
|
||||
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
@ -42,56 +47,7 @@ class Vendors extends Controller
|
||||
*/
|
||||
public function show(Contact $vendor)
|
||||
{
|
||||
$amounts = [
|
||||
'paid' => 0,
|
||||
'open' => 0,
|
||||
'overdue' => 0,
|
||||
];
|
||||
|
||||
$counts = [];
|
||||
|
||||
// Handle bills
|
||||
$bills = Document::bill()->with('transactions')->where('contact_id', $vendor->id)->get();
|
||||
|
||||
$counts['bills'] = $bills->count();
|
||||
|
||||
$today = Date::today()->toDateString();
|
||||
|
||||
foreach ($bills as $item) {
|
||||
// Already in transactions
|
||||
if ($item->status == 'paid' || $item->status == 'cancelled') {
|
||||
continue;
|
||||
}
|
||||
|
||||
$transactions = 0;
|
||||
|
||||
foreach ($item->transactions as $transaction) {
|
||||
$transactions += $transaction->getAmountConvertedToDefault();
|
||||
}
|
||||
|
||||
// Check if it's open or overdue invoice
|
||||
if ($item->due_at > $today) {
|
||||
$amounts['open'] += $item->getAmountConvertedToDefault() - $transactions;
|
||||
} else {
|
||||
$amounts['overdue'] += $item->getAmountConvertedToDefault() - $transactions;
|
||||
}
|
||||
}
|
||||
|
||||
// Handle payments
|
||||
$transactions = Transaction::with('account', 'category')->where('contact_id', $vendor->id)->expense()->get();
|
||||
|
||||
$counts['transactions'] = $transactions->count();
|
||||
|
||||
// Prepare data
|
||||
$transactions->each(function ($item) use (&$amounts) {
|
||||
$amounts['paid'] += $item->getAmountConvertedToDefault();
|
||||
});
|
||||
|
||||
$limit = (int) request('limit', setting('default.list_limit', '25'));
|
||||
$transactions = $this->paginate($transactions->sortByDesc('paid_at'), $limit);
|
||||
$bills = $this->paginate($bills->sortByDesc('issued_at'), $limit);
|
||||
|
||||
return view('purchases.vendors.show', compact('vendor', 'counts', 'amounts', 'transactions', 'bills'));
|
||||
return view('purchases.vendors.show', compact('vendor'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -101,9 +57,7 @@ class Vendors extends Controller
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
$currencies = Currency::enabled()->pluck('name', 'code');
|
||||
|
||||
return view('purchases.vendors.create', compact('currencies'));
|
||||
return view('purchases.vendors.create');
|
||||
}
|
||||
|
||||
/**
|
||||
@ -143,7 +97,7 @@ class Vendors extends Controller
|
||||
*/
|
||||
public function duplicate(Contact $vendor)
|
||||
{
|
||||
$clone = $vendor->duplicate();
|
||||
$clone = $this->dispatch(new DuplicateContact($vendor));
|
||||
|
||||
$message = trans('messages.success.duplicated', ['type' => trans_choice('general.vendors', 1)]);
|
||||
|
||||
@ -185,9 +139,7 @@ class Vendors extends Controller
|
||||
*/
|
||||
public function edit(Contact $vendor)
|
||||
{
|
||||
$currencies = Currency::enabled()->pluck('name', 'code');
|
||||
|
||||
return view('purchases.vendors.edit', compact('vendor', 'currencies'));
|
||||
return view('purchases.vendors.edit', compact('vendor'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -298,10 +250,10 @@ class Vendors extends Controller
|
||||
return redirect()->route('bills.create')->withInput($data);
|
||||
}
|
||||
|
||||
public function createPayment(Contact $vendor)
|
||||
public function createExpense(Contact $vendor)
|
||||
{
|
||||
$data['contact'] = $vendor;
|
||||
|
||||
return redirect()->route('payments.create')->withInput($data);
|
||||
return redirect()->route('transactions.create', ['type' => 'expense'])->withInput($data);
|
||||
}
|
||||
}
|
||||
|
@ -9,15 +9,23 @@ use App\Http\Requests\Common\Import as ImportRequest;
|
||||
use App\Imports\Sales\Customers as Import;
|
||||
use App\Jobs\Common\CreateContact;
|
||||
use App\Jobs\Common\DeleteContact;
|
||||
use App\Jobs\Common\DuplicateContact;
|
||||
use App\Jobs\Common\UpdateContact;
|
||||
use App\Models\Banking\Transaction;
|
||||
use App\Models\Common\Contact;
|
||||
use App\Models\Document\Document;
|
||||
use App\Models\Setting\Currency;
|
||||
use App\Traits\Contacts;
|
||||
use App\Utilities\Date;
|
||||
|
||||
class Customers extends Controller
|
||||
{
|
||||
use Contacts;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public $type = Contact::CUSTOMER_TYPE;
|
||||
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
@ -25,7 +33,7 @@ class Customers extends Controller
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$customers = Contact::with('invoices.transactions')->customer()->collect();
|
||||
$customers = Contact::customer()->with('invoices.transactions')->collect();
|
||||
|
||||
return $this->response('sales.customers.index', compact('customers'));
|
||||
}
|
||||
@ -39,56 +47,7 @@ class Customers extends Controller
|
||||
*/
|
||||
public function show(Contact $customer)
|
||||
{
|
||||
$amounts = [
|
||||
'paid' => 0,
|
||||
'open' => 0,
|
||||
'overdue' => 0,
|
||||
];
|
||||
|
||||
$counts = [];
|
||||
|
||||
// Handle invoices
|
||||
$invoices = Document::invoice()->with('transactions')->where('contact_id', $customer->id)->get();
|
||||
|
||||
$counts['invoices'] = $invoices->count();
|
||||
|
||||
$today = Date::today()->toDateString();
|
||||
|
||||
foreach ($invoices as $item) {
|
||||
// Already in transactions
|
||||
if ($item->status == 'paid' || $item->status == 'cancelled') {
|
||||
continue;
|
||||
}
|
||||
|
||||
$transactions = 0;
|
||||
|
||||
foreach ($item->transactions as $transaction) {
|
||||
$transactions += $transaction->getAmountConvertedToDefault();
|
||||
}
|
||||
|
||||
// Check if it's open or overdue invoice
|
||||
if ($item->due_at > $today) {
|
||||
$amounts['open'] += $item->getAmountConvertedToDefault() - $transactions;
|
||||
} else {
|
||||
$amounts['overdue'] += $item->getAmountConvertedToDefault() - $transactions;
|
||||
}
|
||||
}
|
||||
|
||||
// Handle transactions
|
||||
$transactions = Transaction::with('account', 'category')->where('contact_id', $customer->id)->income()->get();
|
||||
|
||||
$counts['transactions'] = $transactions->count();
|
||||
|
||||
// Prepare data
|
||||
$transactions->each(function ($item) use (&$amounts) {
|
||||
$amounts['paid'] += $item->getAmountConvertedToDefault();
|
||||
});
|
||||
|
||||
$limit = (int) request('limit', setting('default.list_limit', '25'));
|
||||
$transactions = $this->paginate($transactions->sortByDesc('paid_at'), $limit);
|
||||
$invoices = $this->paginate($invoices->sortByDesc('issued_at'), $limit);
|
||||
|
||||
return view('sales.customers.show', compact('customer', 'counts', 'amounts', 'transactions', 'invoices'));
|
||||
return view('sales.customers.show', compact('customer'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -98,9 +57,7 @@ class Customers extends Controller
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
$currencies = Currency::enabled()->pluck('name', 'code');
|
||||
|
||||
return view('sales.customers.create', compact('currencies'));
|
||||
return view('sales.customers.create');
|
||||
}
|
||||
|
||||
/**
|
||||
@ -140,7 +97,7 @@ class Customers extends Controller
|
||||
*/
|
||||
public function duplicate(Contact $customer)
|
||||
{
|
||||
$clone = $customer->duplicate();
|
||||
$clone = $this->dispatch(new DuplicateContact($customer));
|
||||
|
||||
$message = trans('messages.success.duplicated', ['type' => trans_choice('general.customers', 1)]);
|
||||
|
||||
@ -182,9 +139,7 @@ class Customers extends Controller
|
||||
*/
|
||||
public function edit(Contact $customer)
|
||||
{
|
||||
$currencies = Currency::enabled()->pluck('name', 'code');
|
||||
|
||||
return view('sales.customers.edit', compact('customer', 'currencies'));
|
||||
return view('sales.customers.edit', compact('customer'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -295,10 +250,10 @@ class Customers extends Controller
|
||||
return redirect()->route('invoices.create')->withInput($data);
|
||||
}
|
||||
|
||||
public function createRevenue(Contact $customer)
|
||||
public function createIncome(Contact $customer)
|
||||
{
|
||||
$data['contact'] = $customer;
|
||||
|
||||
return redirect()->route('revenues.create')->withInput($data);
|
||||
return redirect()->route('transactions.create', ['type' => 'income'])->withInput($data);
|
||||
}
|
||||
}
|
||||
|
@ -288,13 +288,13 @@ class Invoices extends Controller
|
||||
* @return Response
|
||||
*/
|
||||
public function pdfInvoice(Document $invoice)
|
||||
{
|
||||
{
|
||||
event(new \App\Events\Document\DocumentPrinting($invoice));
|
||||
|
||||
$currency_style = true;
|
||||
|
||||
$view = view($invoice->template_path, compact('invoice', 'currency_style'))->render();
|
||||
|
||||
|
||||
$html = mb_convert_encoding($view, 'HTML-ENTITIES', 'UTF-8');
|
||||
|
||||
$pdf = app('dompdf.wrapper');
|
||||
@ -306,28 +306,4 @@ class Invoices extends Controller
|
||||
|
||||
return $pdf->download($file_name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Mark the invoice as paid.
|
||||
*
|
||||
* @param Document $invoice
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function markPaid(Document $invoice)
|
||||
{
|
||||
try {
|
||||
event(new \App\Events\Document\PaymentReceived($invoice, ['type' => 'income', 'mark_paid' => 'invoice']));
|
||||
|
||||
$message = trans('documents.messages.marked_paid', ['type' => trans_choice('general.invoices', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
} catch(\Exception $e) {
|
||||
$message = $e->getMessage();
|
||||
|
||||
flash($message)->error()->important();
|
||||
}
|
||||
|
||||
return redirect()->back();
|
||||
}
|
||||
}
|
||||
|
189
app/Http/Controllers/Sales/RecurringInvoices.php
Normal file
189
app/Http/Controllers/Sales/RecurringInvoices.php
Normal file
@ -0,0 +1,189 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Sales;
|
||||
|
||||
use App\Abstracts\Http\Controller;
|
||||
use App\Http\Requests\Document\Document as Request;
|
||||
use App\Jobs\Document\CreateDocument;
|
||||
use App\Jobs\Document\DuplicateDocument;
|
||||
use App\Jobs\Document\UpdateDocument;
|
||||
use App\Models\Common\Recurring;
|
||||
use App\Models\Document\Document;
|
||||
use App\Traits\Documents;
|
||||
|
||||
class RecurringInvoices extends Controller
|
||||
{
|
||||
use Documents;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public $type = Document::INVOICE_RECURRING_TYPE;
|
||||
|
||||
/**
|
||||
* Instantiate a new controller instance.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
// Add CRUD permission check
|
||||
$this->middleware('permission:create-sales-invoices')->only('create', 'store', 'duplicate', 'import');
|
||||
$this->middleware('permission:read-sales-invoices')->only('index', 'show', 'edit', 'export');
|
||||
$this->middleware('permission:update-sales-invoices')->only('update', 'enable', 'disable');
|
||||
$this->middleware('permission:delete-sales-invoices')->only('destroy');
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$invoices = Document::with('contact', 'transactions', 'recurring')->invoiceRecurring()->collect(['issued_at' => 'desc']);
|
||||
|
||||
return $this->response('sales.recurring_invoices.index', compact('invoices'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for viewing the specified resource.
|
||||
*
|
||||
* @param Document $recurring_invoice
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function show(Document $recurring_invoice)
|
||||
{
|
||||
$recurring_invoice->load(['category', 'recurring', 'children']);
|
||||
|
||||
return view('sales.recurring_invoices.show', compact('recurring_invoice'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
return view('sales.recurring_invoices.create');
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param Request $request
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$response = $this->ajaxDispatch(new CreateDocument($request->merge(['issued_at' => $request->get('recurring_started_at')])));
|
||||
|
||||
if ($response['success']) {
|
||||
$response['redirect'] = route('recurring-invoices.show', $response['data']->id);
|
||||
|
||||
$message = trans('messages.success.added', ['type' => trans_choice('general.recurring_invoices', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
} else {
|
||||
$response['redirect'] = route('recurring-invoices.create');
|
||||
|
||||
$message = $response['message'];
|
||||
|
||||
flash($message)->error()->important();
|
||||
}
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Duplicate the specified resource.
|
||||
*
|
||||
* @param Document $recurring_invoice
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function duplicate(Document $recurring_invoice)
|
||||
{
|
||||
$clone = $this->dispatch(new DuplicateDocument($recurring_invoice));
|
||||
|
||||
$message = trans('messages.success.duplicated', ['type' => trans_choice('general.recurring_invoices', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
|
||||
return redirect()->route('recurring-invoices.edit', $clone->id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*
|
||||
* @param Document $recurring_invoice
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function edit(Document $recurring_invoice)
|
||||
{
|
||||
return view('sales.recurring_invoices.edit', compact('recurring_invoice'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
* @param Document $recurring_invoice
|
||||
* @param Request $request
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function update(Document $recurring_invoice, Request $request)
|
||||
{
|
||||
$response = $this->ajaxDispatch(new UpdateDocument($recurring_invoice, $request->merge(['issued_at' => $request->get('recurring_started_at')])));
|
||||
|
||||
if ($response['success']) {
|
||||
$response['redirect'] = route('recurring-invoices.show', $response['data']->id);
|
||||
|
||||
$message = trans('messages.success.updated', ['type' => trans_choice('general.recurring_invoices', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
} else {
|
||||
$response['redirect'] = route('recurring-invoices.edit', $recurring_invoice->id);
|
||||
|
||||
$message = $response['message'];
|
||||
|
||||
flash($message)->error()->important();
|
||||
}
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* End recurring template.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function end(Document $recurring_invoice)
|
||||
{
|
||||
$response = $this->ajaxDispatch(new UpdateDocument($recurring_invoice, [
|
||||
'recurring_frequency' => $recurring_invoice->recurring->frequency,
|
||||
'recurring_interval' => $recurring_invoice->recurring->interval,
|
||||
'recurring_started_at' => $recurring_invoice->recurring->started_at,
|
||||
'recurring_limit' => $recurring_invoice->recurring->limit,
|
||||
'recurring_limit_count' => $recurring_invoice->recurring->limit_count,
|
||||
'recurring_limit_date' => $recurring_invoice->recurring->limit_date,
|
||||
'created_from' => $recurring_invoice->created_from,
|
||||
'created_by' => $recurring_invoice->created_by,
|
||||
'recurring_status' => Recurring::END_STATUS,
|
||||
]));
|
||||
|
||||
if ($response['success']) {
|
||||
$message = trans('messages.success.ended', ['type' => trans_choice('general.recurring_invoices', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
} else {
|
||||
$message = $response['message'];
|
||||
|
||||
flash($message)->error()->important();
|
||||
}
|
||||
|
||||
return redirect()->route('recurring-invoices.index');
|
||||
}
|
||||
}
|
@ -1,327 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Sales;
|
||||
|
||||
use App\Abstracts\Http\Controller;
|
||||
use App\Exports\Sales\Revenues as Export;
|
||||
use App\Http\Requests\Banking\Transaction as Request;
|
||||
use App\Http\Requests\Common\Import as ImportRequest;
|
||||
use App\Imports\Sales\Revenues as Import;
|
||||
use App\Jobs\Banking\CreateTransaction;
|
||||
use App\Jobs\Banking\DeleteTransaction;
|
||||
use App\Jobs\Banking\UpdateTransaction;
|
||||
use App\Models\Banking\Account;
|
||||
use App\Models\Banking\Transaction;
|
||||
use App\Models\Common\Contact;
|
||||
use App\Models\Setting\Category;
|
||||
use App\Models\Setting\Currency;
|
||||
use App\Notifications\Sale\Revenue as Notification;
|
||||
use App\Traits\Currencies;
|
||||
use App\Traits\DateTime;
|
||||
use App\Traits\Transactions;
|
||||
use App\Utilities\Modules;
|
||||
|
||||
class Revenues extends Controller
|
||||
{
|
||||
use Currencies, DateTime, Transactions;
|
||||
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$revenues = Transaction::with('account', 'category', 'contact', 'invoice')->income()->isNotTransfer()->collect(['paid_at'=> 'desc']);
|
||||
|
||||
return $this->response('sales.revenues.index', compact('revenues'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for viewing the specified resource.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function show(Transaction $revenue)
|
||||
{
|
||||
return view('sales.revenues.show', compact('revenue'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
$accounts = Account::enabled()->orderBy('name')->pluck('name', 'id');
|
||||
|
||||
$currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code')->toArray();
|
||||
|
||||
$account_currency_code = Account::where('id', setting('default.account'))->pluck('currency_code')->first();
|
||||
|
||||
$currency = Currency::where('code', $account_currency_code)->first();
|
||||
|
||||
$customers = Contact::customer()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
|
||||
|
||||
$categories = Category::income()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
|
||||
|
||||
$payment_methods = Modules::getPaymentMethods();
|
||||
|
||||
$file_type_mimes = explode(',', config('filesystems.mimes'));
|
||||
|
||||
$file_types = [];
|
||||
|
||||
foreach ($file_type_mimes as $mime) {
|
||||
$file_types[] = '.' . $mime;
|
||||
}
|
||||
|
||||
$file_types = implode(',', $file_types);
|
||||
|
||||
return view('sales.revenues.create', compact('accounts', 'currencies', 'account_currency_code', 'currency', 'customers', 'categories', 'payment_methods', 'file_types'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param Request $request
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$response = $this->ajaxDispatch(new CreateTransaction($request));
|
||||
|
||||
if ($response['success']) {
|
||||
$response['redirect'] = route('revenues.show', $response['data']->id);
|
||||
|
||||
$message = trans('messages.success.added', ['type' => trans_choice('general.revenues', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
} else {
|
||||
$response['redirect'] = route('revenues.create');
|
||||
|
||||
$message = $response['message'];
|
||||
|
||||
flash($message)->error()->important();
|
||||
}
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Duplicate the specified resource.
|
||||
*
|
||||
* @param Transaction $revenue
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function duplicate(Transaction $revenue)
|
||||
{
|
||||
$clone = $revenue->duplicate();
|
||||
|
||||
$message = trans('messages.success.duplicated', ['type' => trans_choice('general.revenues', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
|
||||
return redirect()->route('revenues.edit', $clone->id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Import the specified resource.
|
||||
*
|
||||
* @param ImportRequest $request
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function import(ImportRequest $request)
|
||||
{
|
||||
$response = $this->importExcel(new Import, $request, trans_choice('general.revenues', 2));
|
||||
|
||||
if ($response['success']) {
|
||||
$response['redirect'] = route('revenues.index');
|
||||
|
||||
flash($response['message'])->success();
|
||||
} else {
|
||||
$response['redirect'] = route('import.create', ['sales', 'revenues']);
|
||||
|
||||
flash($response['message'])->error()->important();
|
||||
}
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*
|
||||
* @param Transaction $revenue
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function edit(Transaction $revenue)
|
||||
{
|
||||
$accounts = Account::enabled()->orderBy('name')->pluck('name', 'id');
|
||||
|
||||
$currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code')->toArray();
|
||||
|
||||
$currency = Currency::where('code', $revenue->currency_code)->first();
|
||||
|
||||
$customers = Contact::customer()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
|
||||
|
||||
if ($revenue->contact && !$customers->has($revenue->contact_id)) {
|
||||
$customers->put($revenue->contact->id, $revenue->contact->name);
|
||||
}
|
||||
|
||||
$categories = Category::income()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
|
||||
|
||||
if ($revenue->category && !$categories->has($revenue->category_id)) {
|
||||
$categories->put($revenue->category->id, $revenue->category->name);
|
||||
}
|
||||
|
||||
$payment_methods = Modules::getPaymentMethods();
|
||||
|
||||
$date_format = $this->getCompanyDateFormat();
|
||||
|
||||
$file_type_mimes = explode(',', config('filesystems.mimes'));
|
||||
|
||||
$file_types = [];
|
||||
|
||||
foreach ($file_type_mimes as $mime) {
|
||||
$file_types[] = '.' . $mime;
|
||||
}
|
||||
|
||||
$file_types = implode(',', $file_types);
|
||||
|
||||
return view('sales.revenues.edit', compact('revenue', 'accounts', 'currencies', 'currency', 'customers', 'categories', 'payment_methods', 'date_format', 'file_types'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
* @param Transaction $revenue
|
||||
* @param Request $request
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function update(Transaction $revenue, Request $request)
|
||||
{
|
||||
$response = $this->ajaxDispatch(new UpdateTransaction($revenue, $request));
|
||||
|
||||
if ($response['success']) {
|
||||
$response['redirect'] = route('revenues.show', $revenue->id);
|
||||
|
||||
$message = trans('messages.success.updated', ['type' => trans_choice('general.revenues', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
} else {
|
||||
$response['redirect'] = route('revenues.edit', $revenue->id);
|
||||
|
||||
$message = $response['message'];
|
||||
|
||||
flash($message)->error()->important();
|
||||
}
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param Transaction $revenue
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function destroy(Transaction $revenue)
|
||||
{
|
||||
$response = $this->ajaxDispatch(new DeleteTransaction($revenue));
|
||||
|
||||
$response['redirect'] = route('revenues.index');
|
||||
|
||||
if ($response['success']) {
|
||||
$message = trans('messages.success.deleted', ['type' => trans_choice('general.revenues', 1)]);
|
||||
|
||||
flash($message)->success();
|
||||
} else {
|
||||
$message = $response['message'];
|
||||
|
||||
flash($message)->error()->important();
|
||||
}
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Export the specified resource.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function export()
|
||||
{
|
||||
return $this->exportExcel(new Export, trans_choice('general.revenues', 2));
|
||||
}
|
||||
|
||||
/**
|
||||
* Download the PDF file of revenue.
|
||||
*
|
||||
* @param Transaction $revenue
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function emailRevenue(Transaction $revenue)
|
||||
{
|
||||
if (empty($revenue->contact->email)) {
|
||||
return redirect()->back();
|
||||
}
|
||||
|
||||
// Notify the customer
|
||||
$revenue->contact->notify(new Notification($revenue, 'revenue_new_customer', true));
|
||||
|
||||
event(new \App\Events\Banking\TransactionSent($revenue));
|
||||
|
||||
flash(trans('documents.messages.email_sent', ['type' => trans_choice('general.revenues', 1)]))->success();
|
||||
|
||||
return redirect()->back();
|
||||
}
|
||||
|
||||
/**
|
||||
* Print the revenue.
|
||||
*
|
||||
* @param Transaction $revenue
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function printRevenue(Transaction $revenue)
|
||||
{
|
||||
event(new \App\Events\Banking\TransactionPrinting($revenue));
|
||||
|
||||
$view = view($revenue->template_path, compact('revenue'));
|
||||
|
||||
return mb_convert_encoding($view, 'HTML-ENTITIES', 'UTF-8');
|
||||
}
|
||||
|
||||
/**
|
||||
* Download the PDF file of revenue.
|
||||
*
|
||||
* @param Transaction $revenue
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function pdfRevenue(Transaction $revenue)
|
||||
{
|
||||
event(new \App\Events\Banking\TransactionPrinting($revenue));
|
||||
|
||||
$currency_style = true;
|
||||
|
||||
$view = view($revenue->template_path, compact('revenue', 'currency_style'))->render();
|
||||
$html = mb_convert_encoding($view, 'HTML-ENTITIES', 'UTF-8');
|
||||
|
||||
$pdf = app('dompdf.wrapper');
|
||||
$pdf->loadHTML($html);
|
||||
|
||||
//$pdf->setPaper('A4', 'portrait');
|
||||
|
||||
$file_name = $this->getTransactionFileName($revenue);
|
||||
|
||||
return $pdf->download($file_name);
|
||||
}
|
||||
}
|
@ -24,7 +24,7 @@ class Categories extends Controller
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$categories = Category::collect();
|
||||
$categories = Category::with('sub_categories')->collect();
|
||||
|
||||
$transfer_id = Category::transfer();
|
||||
|
||||
@ -52,7 +52,21 @@ class Categories extends Controller
|
||||
{
|
||||
$types = $this->getCategoryTypes();
|
||||
|
||||
return view('settings.categories.create', compact('types'));
|
||||
$categories = [];
|
||||
|
||||
foreach (config('type.category') as $type => $config) {
|
||||
$categories[$type] = [];
|
||||
}
|
||||
|
||||
Category::enabled()->orderBy('name')->get()->each(function ($category) use (&$categories) {
|
||||
$categories[$category->type][] = [
|
||||
'id' => $category->id,
|
||||
'title' => $category->name,
|
||||
'level' => $category->level,
|
||||
];
|
||||
});
|
||||
|
||||
return view('settings.categories.create', compact('types', 'categories'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -120,7 +134,25 @@ class Categories extends Controller
|
||||
|
||||
$type_disabled = (Category::where('type', $category->type)->count() == 1) ?: false;
|
||||
|
||||
return view('settings.categories.edit', compact('category', 'types', 'type_disabled'));
|
||||
$edited_category_id = $category->id;
|
||||
|
||||
$categories = [];
|
||||
|
||||
foreach (config('type.category') as $type => $config) {
|
||||
$categories[$type] = [];
|
||||
}
|
||||
|
||||
Category::enabled()->orderBy('name')->get()->each(function ($category) use (&$categories, $edited_category_id) {
|
||||
if ($edited_category_id != $category->id) {
|
||||
$categories[$category->type][] = [
|
||||
'id' => $category->id,
|
||||
'title' => $category->name,
|
||||
'level' => $category->level,
|
||||
];
|
||||
}
|
||||
});
|
||||
|
||||
return view('settings.categories.edit', compact('category', 'types', 'type_disabled', 'categories'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -131,8 +163,10 @@ class Categories extends Controller
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function update(Category $category, Request $request)
|
||||
public function update($category_id, Request $request)
|
||||
{
|
||||
$category = $this->getCategoryWithoutChildren($category_id);
|
||||
|
||||
$response = $this->ajaxDispatch(new UpdateCategory($category, $request));
|
||||
|
||||
if ($response['success']) {
|
||||
@ -142,7 +176,7 @@ class Categories extends Controller
|
||||
|
||||
flash($message)->success();
|
||||
} else {
|
||||
$response['redirect'] = route('categories.edit', $category->id);
|
||||
$response['redirect'] = route('categories.edit', $category_id);
|
||||
|
||||
$message = $response['message'];
|
||||
|
||||
@ -159,8 +193,10 @@ class Categories extends Controller
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function enable(Category $category)
|
||||
public function enable($category_id)
|
||||
{
|
||||
$category = $this->getCategoryWithoutChildren($category_id);
|
||||
|
||||
$response = $this->ajaxDispatch(new UpdateCategory($category, request()->merge(['enabled' => 1])));
|
||||
|
||||
if ($response['success']) {
|
||||
@ -177,8 +213,10 @@ class Categories extends Controller
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function disable(Category $category)
|
||||
public function disable($category_id)
|
||||
{
|
||||
$category = $this->getCategoryWithoutChildren($category_id);
|
||||
|
||||
$response = $this->ajaxDispatch(new UpdateCategory($category, request()->merge(['enabled' => 0])));
|
||||
|
||||
if ($response['success']) {
|
||||
|
@ -2,9 +2,9 @@
|
||||
|
||||
namespace App\Http\Controllers\Settings;
|
||||
|
||||
use App\Abstracts\Http\Controller;
|
||||
use App\Abstracts\Http\SettingController;
|
||||
|
||||
class Company extends Controller
|
||||
class Company extends SettingController
|
||||
{
|
||||
public function edit()
|
||||
{
|
||||
|
@ -2,26 +2,19 @@
|
||||
|
||||
namespace App\Http\Controllers\Settings;
|
||||
|
||||
use App\Abstracts\Http\Controller;
|
||||
use App\Models\Banking\Account;
|
||||
use App\Abstracts\Http\SettingController;
|
||||
use App\Models\Setting\Category;
|
||||
use App\Models\Setting\Currency;
|
||||
use App\Models\Setting\Tax;
|
||||
use App\Utilities\Modules;
|
||||
|
||||
class Defaults extends Controller
|
||||
class Defaults extends SettingController
|
||||
{
|
||||
public function edit()
|
||||
{
|
||||
$accounts = Account::enabled()->orderBy('name')->pluck('name', 'id');
|
||||
|
||||
$currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code');
|
||||
|
||||
$sales_categories = Category::income()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
|
||||
$sales_categories = Category::income()->enabled()->orderBy('name')->take(setting('default.select_limit'))->get();
|
||||
|
||||
$sale_category_id = setting('default.income_category');
|
||||
|
||||
if ($sale_category_id && !$sales_categories->has($sale_category_id)) {
|
||||
if ($sale_category_id && !$sales_categories->pluck('id')->flip()->has($sale_category_id)) {
|
||||
$category = Category::find($sale_category_id);
|
||||
|
||||
if ($category) {
|
||||
@ -29,11 +22,11 @@ class Defaults extends Controller
|
||||
}
|
||||
}
|
||||
|
||||
$purchases_categories = Category::expense()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
|
||||
$purchases_categories = Category::expense()->enabled()->orderBy('name')->take(setting('default.select_limit'))->get();
|
||||
|
||||
$expense_category_id = setting('default.expense_category');
|
||||
|
||||
if ($expense_category_id && !$purchases_categories->has($expense_category_id)) {
|
||||
if ($expense_category_id && !$purchases_categories->pluck('id')->flip()->has($expense_category_id)) {
|
||||
$category = Category::find($expense_category_id);
|
||||
|
||||
if ($category) {
|
||||
@ -43,15 +36,10 @@ class Defaults extends Controller
|
||||
|
||||
$taxes = Tax::enabled()->orderBy('name')->get()->pluck('title', 'id');
|
||||
|
||||
$payment_methods = Modules::getPaymentMethods();
|
||||
|
||||
return view('settings.default.edit', compact(
|
||||
'accounts',
|
||||
'currencies',
|
||||
'sales_categories',
|
||||
'purchases_categories',
|
||||
'taxes',
|
||||
'payment_methods'
|
||||
));
|
||||
}
|
||||
}
|
||||
|
@ -2,50 +2,15 @@
|
||||
|
||||
namespace App\Http\Controllers\Settings;
|
||||
|
||||
use App\Abstracts\Http\Controller;
|
||||
use App\Abstracts\Http\SettingController;
|
||||
use App\Http\Requests\Setting\Setting as Request;
|
||||
use App\Jobs\Setting\UpdateEmailTemplate;
|
||||
use App\Models\Common\Company;
|
||||
use App\Models\Common\EmailTemplate;
|
||||
use App\Traits\Modules;
|
||||
use App\Utilities\Installer;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class Email extends Controller
|
||||
class Email extends SettingController
|
||||
{
|
||||
use Modules;
|
||||
|
||||
public $skip_keys = ['company_id', '_method', '_token', '_prefix'];
|
||||
|
||||
/**
|
||||
* Instantiate a new controller instance.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
// No need to check for permission in console
|
||||
if (app()->runningInConsole()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Add CRUD permission check
|
||||
$this->middleware('permission:create-settings-settings')->only('create', 'store', 'duplicate', 'import');
|
||||
$this->middleware('permission:read-settings-email')->only('index', 'show', 'edit', 'export');
|
||||
$this->middleware('permission:update-settings-settings')->only('update', 'enable', 'disable');
|
||||
$this->middleware('permission:delete-settings-settings')->only('destroy');
|
||||
}
|
||||
|
||||
public function edit()
|
||||
{
|
||||
$templates = EmailTemplate::all()->reject(function($template) {
|
||||
if (Str::startsWith($template->class, 'App')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$class = explode('\\', $template->class);
|
||||
|
||||
return $this->moduleIsDisabled(Str::kebab($class[1]));
|
||||
})->all();
|
||||
|
||||
$email_protocols = [
|
||||
'mail' => trans('settings.email.php'),
|
||||
'smtp' => trans('settings.email.smtp.name'),
|
||||
@ -53,105 +18,6 @@ class Email extends Controller
|
||||
'log' => trans('settings.email.log'),
|
||||
];
|
||||
|
||||
return view('settings.email.edit', compact(
|
||||
'templates',
|
||||
'email_protocols'
|
||||
));
|
||||
}
|
||||
|
||||
public function update(Request $request)
|
||||
{
|
||||
$fields = $request->all();
|
||||
$prefix = $request->get('_prefix', 'email');
|
||||
|
||||
$total_companies = Company::count();
|
||||
|
||||
foreach ($fields as $key => $value) {
|
||||
$real_key = $prefix . '.' . $key;
|
||||
|
||||
// Don't process unwanted keys
|
||||
if (in_array($key, $this->skip_keys)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (Str::startsWith($key, 'template_')) {
|
||||
$this->updateEmailTemplate($key, $fields);
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($total_companies == 1) {
|
||||
$this->oneCompany($real_key, $value);
|
||||
}
|
||||
|
||||
setting()->set($real_key, $value);
|
||||
}
|
||||
|
||||
// Save all settings
|
||||
setting()->save();
|
||||
|
||||
$message = trans('messages.success.updated', ['type' => trans_choice('general.settings', 2)]);
|
||||
|
||||
$response = [
|
||||
'status' => null,
|
||||
'success' => true,
|
||||
'error' => false,
|
||||
'message' => $message,
|
||||
'data' => null,
|
||||
'redirect' => route('settings.index'),
|
||||
];
|
||||
|
||||
flash($message)->success();
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
public function updateEmailTemplate($key, &$fields)
|
||||
{
|
||||
$alias = str_replace(['template_', '_subject', '_body'], '', $key);
|
||||
$subject_key = 'template_' . $alias . '_subject';
|
||||
$body_key = 'template_' . $alias . '_body';
|
||||
|
||||
if (empty($fields[$subject_key]) || empty($fields[$body_key])) {
|
||||
return;
|
||||
}
|
||||
|
||||
$template = EmailTemplate::alias($alias)->first();
|
||||
|
||||
$this->dispatch(new UpdateEmailTemplate($template, [
|
||||
'subject' => $fields[$subject_key],
|
||||
'body' => $fields[$body_key],
|
||||
]));
|
||||
|
||||
unset($fields[$subject_key]);
|
||||
unset($fields[$body_key]);
|
||||
}
|
||||
|
||||
protected function oneCompany($real_key, $value)
|
||||
{
|
||||
if (empty($value)) {
|
||||
return;
|
||||
}
|
||||
|
||||
switch ($real_key) {
|
||||
case 'email.protocol':
|
||||
Installer::updateEnv(['MAIL_MAILER' => '"' . $value . '"']);
|
||||
break;
|
||||
case 'email.smtp_host':
|
||||
Installer::updateEnv(['MAIL_HOST' => '"' . $value . '"']);
|
||||
break;
|
||||
case 'email.smtp_port':
|
||||
Installer::updateEnv(['MAIL_PORT' => '"' . $value . '"']);
|
||||
break;
|
||||
case 'email.smtp_username':
|
||||
Installer::updateEnv(['MAIL_USERNAME' => '"' . $value . '"']);
|
||||
break;
|
||||
case 'email.smtp_password':
|
||||
Installer::updateEnv(['MAIL_PASSWORD' => '"' . $value . '"']);
|
||||
break;
|
||||
case 'email.smtp_encryption':
|
||||
Installer::updateEnv(['MAIL_ENCRYPTION' => '"' . $value . '"']);
|
||||
break;
|
||||
}
|
||||
return view('settings.email.edit', compact('email_protocols'));
|
||||
}
|
||||
}
|
||||
|
84
app/Http/Controllers/Settings/EmailTemplates.php
Normal file
84
app/Http/Controllers/Settings/EmailTemplates.php
Normal file
@ -0,0 +1,84 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Settings;
|
||||
|
||||
use App\Abstracts\Http\Controller;
|
||||
use App\Http\Requests\Setting\EmailTemplate as Request;
|
||||
use App\Jobs\Setting\UpdateEmailTemplate;
|
||||
use App\Models\Setting\EmailTemplate;
|
||||
use App\Traits\Modules;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class EmailTemplates extends Controller
|
||||
{
|
||||
use Modules;
|
||||
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function edit()
|
||||
{
|
||||
$templates = [];
|
||||
|
||||
EmailTemplate::all()->reject(function($template) {
|
||||
if (Str::startsWith($template->class, 'App')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$class = explode('\\', $template->class);
|
||||
|
||||
return $this->moduleIsDisabled(Str::kebab($class[1]));
|
||||
})->each(function ($template) use (&$templates) {
|
||||
$templates[$template->group][$template->id] = $template;
|
||||
});
|
||||
|
||||
ksort($templates);
|
||||
|
||||
return view('settings.email-templates.edit', compact('templates'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
* @param Request $request
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function update(Request $request)
|
||||
{
|
||||
$template = EmailTemplate::find($request->id);
|
||||
|
||||
$response = $this->ajaxDispatch(new UpdateEmailTemplate($template, $request));
|
||||
|
||||
if ($response['success']) {
|
||||
$response['redirect'] = url()->previous();;
|
||||
|
||||
$message = trans('messages.success.updated', ['type' => trans($template->name)]);
|
||||
|
||||
flash($message)->success();
|
||||
} else {
|
||||
$response['redirect'] = url()->previous();;
|
||||
|
||||
$message = $response['message'];
|
||||
|
||||
flash($message)->error()->important();
|
||||
}
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
public function get()
|
||||
{
|
||||
$template = EmailTemplate::find(request()->id);
|
||||
|
||||
$template->tags = trans('settings.email.templates.tags', ['tag_list'=> implode(', ', app($template->class)->getTags())]);
|
||||
|
||||
return response()->json([
|
||||
'errors' => false,
|
||||
'success' => true,
|
||||
'data' => $template,
|
||||
]);
|
||||
}
|
||||
}
|
@ -2,13 +2,14 @@
|
||||
|
||||
namespace App\Http\Controllers\Settings;
|
||||
|
||||
use App\Abstracts\Http\Controller;
|
||||
use App\Abstracts\Http\SettingController;
|
||||
|
||||
class Invoice extends Controller
|
||||
class Invoice extends SettingController
|
||||
{
|
||||
public function edit()
|
||||
{
|
||||
$item_names = [
|
||||
'hide' => trans('settings.invoice.hide.item_name'),
|
||||
'settings.invoice.item' => trans('settings.invoice.item'),
|
||||
'settings.invoice.product' => trans('settings.invoice.product'),
|
||||
'settings.invoice.service' => trans('settings.invoice.service'),
|
||||
@ -16,12 +17,14 @@ class Invoice extends Controller
|
||||
];
|
||||
|
||||
$price_names = [
|
||||
'hide' => trans('settings.invoice.hide.price'),
|
||||
'settings.invoice.price' => trans('settings.invoice.price'),
|
||||
'settings.invoice.rate' => trans('settings.invoice.rate'),
|
||||
'custom' => trans('settings.invoice.custom'),
|
||||
];
|
||||
|
||||
$quantity_names = [
|
||||
'hide' => trans('settings.invoice.hide.quantity'),
|
||||
'settings.invoice.quantity' => trans('settings.invoice.quantity'),
|
||||
'custom' => trans('settings.invoice.custom'),
|
||||
];
|
||||
|
@ -2,10 +2,10 @@
|
||||
|
||||
namespace App\Http\Controllers\Settings;
|
||||
|
||||
use App\Abstracts\Http\Controller;
|
||||
use App\Abstracts\Http\SettingController;
|
||||
use App\Traits\DateTime;
|
||||
|
||||
class Localisation extends Controller
|
||||
class Localisation extends SettingController
|
||||
{
|
||||
use DateTime;
|
||||
|
||||
|
@ -72,7 +72,7 @@ class Modules extends Controller
|
||||
'error' => false,
|
||||
'message' => $message,
|
||||
'data' => null,
|
||||
'redirect' => route('settings.index')//('settings/apps/' . $alias),
|
||||
'redirect' => route('settings.module.edit', $alias)//('settings/apps/' . $alias),
|
||||
];
|
||||
|
||||
flash($message)->success();
|
||||
|
@ -2,9 +2,9 @@
|
||||
|
||||
namespace App\Http\Controllers\Settings;
|
||||
|
||||
use App\Abstracts\Http\Controller;
|
||||
use App\Abstracts\Http\SettingController;
|
||||
|
||||
class Schedule extends Controller
|
||||
class Schedule extends SettingController
|
||||
{
|
||||
public function edit()
|
||||
{
|
||||
|
@ -1,186 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Settings;
|
||||
|
||||
use App\Abstracts\Http\Controller;
|
||||
use App\Http\Requests\Setting\Setting as Request;
|
||||
use App\Models\Common\Company;
|
||||
use App\Models\Module\Module;
|
||||
use App\Models\Setting\Currency;
|
||||
use App\Traits\DateTime;
|
||||
use App\Traits\Uploads;
|
||||
use App\Utilities\Installer;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class Settings extends Controller
|
||||
{
|
||||
use DateTime, Uploads;
|
||||
|
||||
public $skip_keys = ['company_id', '_method', '_token', '_prefix'];
|
||||
|
||||
public $file_keys = ['company.logo', 'invoice.logo'];
|
||||
|
||||
public $uploaded_file_keys = ['company.uploaded_logo', 'invoice.uploaded_logo'];
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$modules = new \stdClass();
|
||||
$modules->settings = [];
|
||||
|
||||
// Get enabled modules
|
||||
$enabled_modules = Module::enabled()->get();
|
||||
|
||||
foreach ($enabled_modules as $module) {
|
||||
$m = module($module->alias);
|
||||
|
||||
// Check if the module exists and has settings
|
||||
if (!$m || empty($m->get('settings'))) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$modules->settings[$m->getAlias()] = [
|
||||
'name' => $m->getName(),
|
||||
'description' => $m->getDescription(),
|
||||
'url' => route('settings.module.edit', ['alias' => $m->getAlias()]),
|
||||
'icon' => $m->get('icon', 'fa fa-cog'),
|
||||
];
|
||||
}
|
||||
|
||||
event(new \App\Events\Module\SettingShowing($modules));
|
||||
|
||||
$settings = [];
|
||||
|
||||
foreach ($modules->settings as $alias => $setting) {
|
||||
$permission = !empty($setting['permission']) ? $setting['permission'] : 'read-' . $alias . '-settings';
|
||||
|
||||
if (!user()->can($permission)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$settings[$alias] = $setting;
|
||||
}
|
||||
|
||||
return $this->response('settings.settings.index', ['modules' => $settings]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
* @param Request $request
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function update(Request $request)
|
||||
{
|
||||
$fields = $request->all();
|
||||
$prefix = $request->get('_prefix', 'general');
|
||||
$company_id = $request->get('company_id');
|
||||
|
||||
if (empty($company_id)) {
|
||||
$company_id = company_id();
|
||||
}
|
||||
|
||||
$company = Company::find($company_id);
|
||||
|
||||
$total_companies = Company::count();
|
||||
|
||||
foreach ($fields as $key => $value) {
|
||||
$real_key = $prefix . '.' . $key;
|
||||
|
||||
// Don't process unwanted keys
|
||||
if (in_array($key, $this->skip_keys)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// change dropzone middleware already uploaded file
|
||||
if (in_array($real_key, $this->uploaded_file_keys)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Process file uploads
|
||||
if (in_array($real_key, $this->file_keys)) {
|
||||
// Upload attachment
|
||||
if ($request->file($key)) {
|
||||
$media = $this->getMedia($request->file($key), 'settings');
|
||||
|
||||
$company->attachMedia($media, Str::snake($real_key));
|
||||
|
||||
$value = $media->id;
|
||||
}
|
||||
|
||||
// Prevent reset
|
||||
if (empty($value)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if ($real_key == 'default.locale') {
|
||||
if (!in_array($value, config('language.allowed'))) {
|
||||
continue;
|
||||
}
|
||||
|
||||
user()->setAttribute('locale', $value)->save();
|
||||
}
|
||||
|
||||
if ($real_key == 'default.currency') {
|
||||
$currencies = Currency::enabled()->pluck('code')->toArray();
|
||||
|
||||
if (!in_array($value, $currencies)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$currency = Currency::code($value)->first();
|
||||
$currency->rate = '1';
|
||||
$currency->save();
|
||||
}
|
||||
|
||||
// If only 1 company
|
||||
if ($total_companies == 1) {
|
||||
$this->oneCompany($real_key, $value);
|
||||
}
|
||||
|
||||
setting()->set($real_key, $value);
|
||||
}
|
||||
|
||||
// Save all settings
|
||||
setting()->save();
|
||||
|
||||
$message = trans('messages.success.updated', ['type' => trans_choice('general.settings', 2)]);
|
||||
|
||||
$response = [
|
||||
'status' => null,
|
||||
'success' => true,
|
||||
'error' => false,
|
||||
'message' => $message,
|
||||
'data' => null,
|
||||
'redirect' => route('settings.index'),
|
||||
];
|
||||
|
||||
flash($message)->success();
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
protected function oneCompany($real_key, $value)
|
||||
{
|
||||
switch ($real_key) {
|
||||
case 'company.name':
|
||||
Installer::updateEnv(['MAIL_FROM_NAME' => '"' . $value . '"']);
|
||||
break;
|
||||
case 'company.email':
|
||||
Installer::updateEnv(['MAIL_FROM_ADDRESS' => '"' . $value . '"']);
|
||||
break;
|
||||
case 'default.locale':
|
||||
Installer::updateEnv(['APP_LOCALE' => '"' . $value . '"']);
|
||||
break;
|
||||
case 'schedule.time':
|
||||
Installer::updateEnv(['APP_SCHEDULE_TIME' => '"' . $value . '"']);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
@ -3,7 +3,10 @@
|
||||
namespace App\Http\Controllers\Settings;
|
||||
|
||||
use App\Abstracts\Http\Controller;
|
||||
use App\Exports\Settings\Taxes as Export;
|
||||
use App\Http\Requests\Common\Import as ImportRequest;
|
||||
use App\Http\Requests\Setting\Tax as Request;
|
||||
use App\Imports\Settings\Taxes as Import;
|
||||
use App\Jobs\Setting\CreateTax;
|
||||
use App\Jobs\Setting\DeleteTax;
|
||||
use App\Jobs\Setting\UpdateTax;
|
||||
@ -11,7 +14,6 @@ use App\Models\Setting\Tax;
|
||||
|
||||
class Taxes extends Controller
|
||||
{
|
||||
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
@ -94,6 +96,30 @@ class Taxes extends Controller
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Import the specified resource.
|
||||
*
|
||||
* @param ImportRequest $request
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function import(ImportRequest $request)
|
||||
{
|
||||
$response = $this->importExcel(new Import, $request, trans_choice('general.taxes', 2));
|
||||
|
||||
if ($response['success']) {
|
||||
$response['redirect'] = route('taxes.index');
|
||||
|
||||
flash($response['message'])->success();
|
||||
} else {
|
||||
$response['redirect'] = route('import.create', ['settings', 'taxes']);
|
||||
|
||||
flash($response['message'])->error()->important();
|
||||
}
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*
|
||||
@ -210,4 +236,14 @@ class Taxes extends Controller
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Export the specified resource.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function export()
|
||||
{
|
||||
return $this->exportExcel(new Export, trans_choice('general.taxes', 2));
|
||||
}
|
||||
}
|
||||
|
@ -32,7 +32,7 @@ class Finish extends Controller
|
||||
|
||||
$data = [
|
||||
'query' => [
|
||||
'limit' => 4
|
||||
'limit' => 6
|
||||
]
|
||||
];
|
||||
|
||||
|
Reference in New Issue
Block a user