moved folders to common directory

This commit is contained in:
denisdulici 2018-06-10 02:48:51 +03:00
parent 7fa629e8b5
commit b1fd49c507
71 changed files with 719 additions and 647 deletions

View File

@ -2,7 +2,7 @@
namespace App\Console\Commands;
use App\Models\Company\Company;
use App\Models\Common\Company;
use App\Models\Expense\Bill;
use App\Notifications\Expense\Bill as Notification;
use App\Utilities\Overrider;

View File

@ -2,7 +2,7 @@
namespace App\Console\Commands;
use App\Models\Company\Company;
use App\Models\Common\Company;
use App\Models\Income\Invoice;
use App\Notifications\Income\Invoice as Notification;
use App\Utilities\Overrider;

View File

@ -2,7 +2,7 @@
namespace App\Console\Commands;
use App\Models\Company\Company;
use App\Models\Common\Company;
use App\Models\Expense\BillHistory;
use App\Models\Income\InvoiceHistory;
use App\Notifications\Expense\Bill as BillNotification;

View File

@ -1,6 +1,6 @@
<?php
namespace App\Filters\Companies;
namespace App\Filters\Common;
use EloquentFilter\ModelFilter;

View File

@ -1,6 +1,6 @@
<?php
namespace App\Filters\Items;
namespace App\Filters\Common;
use EloquentFilter\ModelFilter;

View File

@ -1,11 +1,11 @@
<?php
namespace App\Http\Controllers\Api\Companies;
namespace App\Http\Controllers\Api\Common;
use App\Http\Controllers\ApiController;
use App\Http\Requests\Company\Company as Request;
use App\Models\Company\Company;
use App\Transformers\Company\Company as Transformer;
use App\Http\Requests\Common\Company as Request;
use App\Models\Common\Company;
use App\Transformers\Common\Company as Transformer;
use Dingo\Api\Routing\Helpers;
class Companies extends ApiController

View File

@ -1,11 +1,11 @@
<?php
namespace App\Http\Controllers\Api\Items;
namespace App\Http\Controllers\Api\Common;
use App\Http\Controllers\ApiController;
use App\Http\Requests\Item\Item as Request;
use App\Models\Item\Item;
use App\Transformers\Item\Item as Transformer;
use App\Http\Requests\Common\Item as Request;
use App\Models\Common\Item;
use App\Transformers\Common\Item as Transformer;
use Dingo\Api\Routing\Helpers;
class Items extends ApiController

View File

@ -11,7 +11,7 @@ use App\Models\Expense\BillHistory;
use App\Models\Expense\BillItem;
use App\Models\Expense\BillPayment;
use App\Models\Expense\BillStatus;
use App\Models\Item\Item;
use App\Models\Common\Item;
use App\Models\Setting\Tax;
use App\Transformers\Expense\Bill as Transformer;
use Dingo\Api\Routing\Helpers;

View File

@ -11,9 +11,9 @@ use App\Models\Income\InvoiceHistory;
use App\Models\Income\InvoiceItem;
use App\Models\Income\InvoicePayment;
use App\Models\Income\InvoiceTotal;
use App\Models\Item\Item;
use App\Models\Common\Item;
use App\Models\Setting\Tax;
use App\Notifications\Item\Item as ItemNotification;
use App\Notifications\Common\Item as ItemNotification;
use App\Transformers\Income\Invoice as Transformer;
use Dingo\Api\Routing\Helpers;

View File

@ -236,7 +236,7 @@ class Users extends Controller
// Mark item notifications as read
foreach ($user->unreadNotifications as $notification) {
// Not an item notification
if ($notification->getAttribute('type') != 'App\Notifications\Item\Item') {
if ($notification->getAttribute('type') != 'App\Notifications\Common\Item') {
continue;
}

View File

@ -1,11 +1,11 @@
<?php
namespace App\Http\Controllers\Companies;
namespace App\Http\Controllers\Common;
use App\Events\CompanySwitched;
use App\Http\Controllers\Controller;
use App\Http\Requests\Company\Company as Request;
use App\Models\Company\Company;
use App\Http\Requests\Common\Company as Request;
use App\Models\Common\Company;
use App\Models\Setting\Currency;
use App\Traits\Uploads;
@ -26,7 +26,7 @@ class Companies extends Controller
$company->setSettings();
}
return view('companies.companies.index', compact('companies'));
return view('common.companies.index', compact('companies'));
}
/**
@ -36,7 +36,7 @@ class Companies extends Controller
*/
public function show()
{
return redirect('companies/companies');
return redirect('common/companies');
}
/**
@ -48,7 +48,7 @@ class Companies extends Controller
{
$currencies = Currency::enabled()->pluck('name', 'code');
return view('companies.companies.create', compact('currencies'));
return view('common.companies.create', compact('currencies'));
}
/**
@ -91,7 +91,7 @@ class Companies extends Controller
flash($message)->success();
return redirect('companies/companies');
return redirect('common/companies');
}
/**
@ -109,14 +109,14 @@ class Companies extends Controller
flash($message)->error();
return redirect('companies/companies');
return redirect('common/companies');
}
$company->setSettings();
$currencies = Currency::enabled()->pluck('name', 'code');
return view('companies.companies.edit', compact('company', 'currencies'));
return view('common.companies.edit', compact('company', 'currencies'));
}
/**
@ -135,7 +135,7 @@ class Companies extends Controller
flash($message)->error();
return redirect('companies/companies');
return redirect('common/companies');
}
// Update company
@ -171,7 +171,7 @@ class Companies extends Controller
flash($message)->success();
return redirect('companies/companies');
return redirect('common/companies');
}
/**
@ -189,7 +189,7 @@ class Companies extends Controller
flash($message)->error();
return redirect('companies/companies');
return redirect('common/companies');
}
$company->delete();
@ -198,7 +198,7 @@ class Companies extends Controller
flash($message)->success();
return redirect('companies/companies');
return redirect('common/companies');
}
/**

View File

@ -1,6 +1,6 @@
<?php
namespace App\Http\Controllers\Dashboard;
namespace App\Http\Controllers\Common;
use App\Http\Controllers\Controller;
use App\Models\Banking\Account;
@ -46,7 +46,7 @@ class Dashboard extends Controller
$latest_expenses = $this->getLatestExpenses();
return view('dashboard.dashboard.index', compact(
return view('common.dashboard.index', compact(
'total_incomes',
'total_expenses',
'total_profit',

View File

@ -1,10 +1,10 @@
<?php
namespace App\Http\Controllers\Items;
namespace App\Http\Controllers\Common;
use App\Http\Controllers\Controller;
use App\Http\Requests\Item\Item as Request;
use App\Models\Item\Item;
use App\Http\Requests\Common\Item as Request;
use App\Models\Common\Item;
use App\Models\Setting\Category;
use App\Models\Setting\Currency;
use App\Models\Setting\Tax;
@ -27,7 +27,7 @@ class Items extends Controller
$categories = Category::enabled()->type('item')->pluck('name', 'id')
->prepend(trans('general.all_type', ['type' => trans_choice('general.categories', 2)]), '');
return view('items.items.index', compact('items', 'categories'));
return view('common.items.index', compact('items', 'categories'));
}
/**
@ -37,7 +37,7 @@ class Items extends Controller
*/
public function show()
{
return redirect('items/items');
return redirect('common/items');
}
/**
@ -51,7 +51,7 @@ class Items extends Controller
$taxes = Tax::enabled()->get()->pluck('title', 'id');
return view('items.items.create', compact('categories', 'taxes'));
return view('common.items.create', compact('categories', 'taxes'));
}
/**
@ -76,7 +76,7 @@ class Items extends Controller
flash($message)->success();
return redirect('items/items');
return redirect('common/items');
}
/**
@ -94,7 +94,7 @@ class Items extends Controller
flash($message)->success();
return redirect('items/items/' . $clone->id . '/edit');
return redirect('common/items/' . $clone->id . '/edit');
}
/**
@ -119,7 +119,7 @@ class Items extends Controller
flash($message)->success();
return redirect('items/items');
return redirect('common/items');
}
/**
@ -135,7 +135,7 @@ class Items extends Controller
$taxes = Tax::enabled()->get()->pluck('title', 'id');
return view('items.items.edit', compact('item', 'categories', 'taxes'));
return view('common.items.edit', compact('item', 'categories', 'taxes'));
}
/**
@ -161,7 +161,7 @@ class Items extends Controller
flash($message)->success();
return redirect('items/items');
return redirect('common/items');
}
/**
@ -190,7 +190,7 @@ class Items extends Controller
flash($message)->warning();
}
return redirect('items/items');
return redirect('common/items');
}
public function autocomplete()

View File

@ -1,6 +1,6 @@
<?php
namespace App\Http\Controllers\Search;
namespace App\Http\Controllers\Common;
use App\Http\Controllers\Controller;
use App\Models\Banking\Account;
@ -10,7 +10,7 @@ use App\Models\Expense\Vendor;
use App\Models\Income\Invoice;
use App\Models\Income\Revenue;
use App\Models\Income\Customer;
use App\Models\Item\Item;
use App\Models\Common\Item;
class Search extends Controller
{

View File

@ -43,7 +43,7 @@ class Controller extends BaseController
$controller .= kebab_case($arr[0]);
// Skip ACL
$skip = ['dashboard-dashboard', 'customers-dashboard'];
$skip = ['common-dashboard', 'customers-dashboard'];
if (in_array($controller, $skip)) {
return;
}

View File

@ -16,7 +16,7 @@ use App\Models\Expense\BillItem;
use App\Models\Expense\BillTotal;
use App\Models\Expense\BillHistory;
use App\Models\Expense\BillPayment;
use App\Models\Item\Item;
use App\Models\Common\Item;
use App\Models\Setting\Category;
use App\Models\Setting\Currency;
use App\Models\Setting\Tax;

View File

@ -16,13 +16,13 @@ use App\Models\Income\InvoiceItem;
use App\Models\Income\InvoiceTotal;
use App\Models\Income\InvoicePayment;
use App\Models\Income\InvoiceStatus;
use App\Models\Item\Item;
use App\Models\Common\Item;
use App\Models\Setting\Category;
use App\Models\Setting\Currency;
use App\Models\Setting\Tax;
use App\Models\Common\Media;
use App\Notifications\Income\Invoice as Notification;
use App\Notifications\Item\Item as ItemNotification;
use App\Notifications\Common\Item as ItemNotification;
use App\Traits\Currencies;
use App\Traits\DateTime;
use App\Traits\Incomes;

View File

@ -5,7 +5,7 @@ namespace App\Http\Controllers\Settings;
use App\Http\Controllers\Controller;
use App\Http\Requests\Setting\Setting as Request;
use App\Models\Banking\Account;
use App\Models\Company\Company;
use App\Models\Common\Company;
use App\Models\Setting\Currency;
use App\Models\Setting\Setting;
use App\Models\Common\Media;

View File

@ -41,9 +41,9 @@ class AdminMenu
]);
// Items
if ($user->can('read-items-items')) {
if ($user->can('read-common-items')) {
$menu->add([
'url' => 'items/items',
'url' => 'common/items',
'title' => trans_choice('general.items', 2),
'icon' => 'fa fa-cubes',
'order' => 2,

View File

@ -1,6 +1,6 @@
<?php
namespace App\Http\Requests\Company;
namespace App\Http\Requests\Common;
use Illuminate\Foundation\Http\FormRequest;

View File

@ -1,6 +1,6 @@
<?php
namespace App\Http\Requests\Item;
namespace App\Http\Requests\Common;
use App\Http\Requests\Request;

View File

@ -51,7 +51,7 @@ class Header
$invoices[$data['invoice_id']] = $data['amount'];
$notifications++;
break;
case 'App\Notifications\Item\Item':
case 'App\Notifications\Common\Item':
$items[$data['item_id']] = $data['name'];
$notifications++;
break;

View File

@ -3,7 +3,7 @@
namespace App\Listeners\Updates;
use App\Events\UpdateFinished;
use App\Models\Company\Company;
use App\Models\Common\Company;
use App\Models\Expense\Bill;
use App\Models\Expense\BillStatus;

View File

@ -3,7 +3,7 @@
namespace App\Listeners\Updates;
use App\Events\UpdateFinished;
use App\Models\Company\Company;
use App\Models\Common\Company;
use Artisan;
class Version109 extends Listener

View File

@ -3,7 +3,7 @@
namespace App\Listeners\Updates;
use App\Events\UpdateFinished;
use App\Models\Company\Company;
use App\Models\Common\Company;
use DotenvEditor;
class Version112 extends Listener

View File

@ -63,7 +63,7 @@ class Version119 extends Listener
$migrations = [
'\App\Models\Auth\User' => 'picture',
'\App\Models\Item\Item' => 'picture',
'\App\Models\Common\Item' => 'picture',
'\App\Models\Expense\Bill' => 'attachment',
'\App\Models\Expense\BillPayment' => 'attachment',
'\App\Models\Expense\Payment' => 'attachment',
@ -138,7 +138,7 @@ class Version119 extends Listener
}
if (!empty($path) && Storage::exists($path)) {
$company = \App\Models\Company\Company::find($item->company_id);
$company = \App\Models\Common\Company::find($item->company_id);
$media = \App\Models\Common\Media::where('filename', '=', pathinfo(basename($path), PATHINFO_FILENAME))->first();

View File

@ -5,7 +5,7 @@ namespace App\Listeners\Updates;
use App\Events\UpdateFinished;
use App\Models\Auth\Role;
use App\Models\Auth\Permission;
use App\Models\Company\Company;
use App\Models\Common\Company;
use App\Models\Expense\Bill;
use App\Models\Income\Invoice;
use App\Models\Setting\Category;

View File

@ -0,0 +1,52 @@
<?php
namespace App\Listeners\Updates;
use App\Events\UpdateFinished;
use App\Models\Auth\Permission;
use File;
class Version127 extends Listener
{
const ALIAS = 'core';
const VERSION = '1.2.7';
/**
* Handle the event.
*
* @param $event
* @return void
*/
public function handle(UpdateFinished $event)
{
// Check if should listen
if (!$this->check($event)) {
return;
}
// Update permissions
$permissions = Permission::all();
foreach ($permissions as $permission) {
if (strstr($permission->name, '-companies-companies')) {
$permission->name = str_replace('-companies-companies', '-common-companies', $permission->name);
$permission->save();
}
if (strstr($permission->name, '-items-items')) {
$permission->name = str_replace('-items-items', '-common-items', $permission->name);
$permission->save();
}
}
// Delete folders
$dirs = ['dashboard', 'search', 'companies', 'items'];
foreach ($dirs as $dir) {
File::deleteDirectory(app_path('Filters/' . ucfirst($dir)));
File::deleteDirectory(app_path('Http/Controllers/' . ucfirst($dir)));
File::deleteDirectory(app_path('Http/Requests/' . ucfirst(str_singular($dir))));
File::deleteDirectory(app_path('Transformers/' . ucfirst(str_singular($dir))));
File::deleteDirectory(resource_path('views/' . $dir));
}
}
}

View File

@ -51,7 +51,7 @@ class User extends Authenticatable
public function companies()
{
return $this->morphToMany('App\Models\Company\Company', 'user', 'user_companies', 'user_id', 'company_id');
return $this->morphToMany('App\Models\Common\Company', 'user', 'user_companies', 'user_id', 'company_id');
}
public function customer()

View File

@ -0,0 +1,260 @@
<?php
namespace App\Models\Common;
use Auth;
use EloquentFilter\Filterable;
use Illuminate\Database\Eloquent\Model as Eloquent;
use Illuminate\Database\Eloquent\SoftDeletes;
use Kyslik\ColumnSortable\Sortable;
use App\Traits\Media;
class Company extends Eloquent
{
use Filterable, SoftDeletes, Sortable, Media;
protected $table = 'companies';
protected $dates = ['deleted_at'];
protected $fillable = ['domain', 'enabled'];
/**
* Sortable columns.
*
* @var array
*/
public $sortable = ['name', 'domain', 'email', 'enabled', 'created_at'];
public function accounts()
{
return $this->hasMany('App\Models\Banking\Account');
}
public function bill_histories()
{
return $this->hasMany('App\Models\Expense\BillHistory');
}
public function bill_items()
{
return $this->hasMany('App\Models\Expense\BillItem');
}
public function bill_payments()
{
return $this->hasMany('App\Models\Expense\BillPayment');
}
public function bill_statuses()
{
return $this->hasMany('App\Models\Expense\BillStatus');
}
public function bills()
{
return $this->hasMany('App\Models\Expense\Bill');
}
public function categories()
{
return $this->hasMany('App\Models\Setting\Category');
}
public function currencies()
{
return $this->hasMany('App\Models\Setting\Currency');
}
public function customers()
{
return $this->hasMany('App\Models\Income\Customer');
}
public function invoice_histories()
{
return $this->hasMany('App\Models\Income\InvoiceHistory');
}
public function invoice_items()
{
return $this->hasMany('App\Models\Income\InvoiceItem');
}
public function invoice_payments()
{
return $this->hasMany('App\Models\Income\InvoicePayment');
}
public function invoice_statuses()
{
return $this->hasMany('App\Models\Income\InvoiceStatus');
}
public function invoices()
{
return $this->hasMany('App\Models\Income\Invoice');
}
public function items()
{
return $this->hasMany('App\Models\Common\Item');
}
public function payments()
{
return $this->hasMany('App\Models\Expense\Payment');
}
public function recurring()
{
return $this->hasMany('App\Models\Common\Recurring');
}
public function revenues()
{
return $this->hasMany('App\Models\Income\Revenue');
}
public function settings()
{
return $this->hasMany('App\Models\Setting\Setting');
}
public function taxes()
{
return $this->hasMany('App\Models\Setting\Tax');
}
public function transfers()
{
return $this->hasMany('App\Models\Banking\Transfer');
}
public function users()
{
return $this->morphedByMany('App\Models\Auth\User', 'user', 'user_companies', 'company_id', 'user_id');
}
public function vendors()
{
return $this->hasMany('App\Models\Expense\Vendor');
}
public function setSettings()
{
$settings = $this->settings;
foreach ($settings as $setting) {
list($group, $key) = explode('.', $setting->getAttribute('key'));
// Load only general settings
if ($group != 'general') {
continue;
}
$value = $setting->getAttribute('value');
if (($key == 'company_logo') && empty($value)) {
$value = 'public/img/company.png';
}
$this->setAttribute($key, $value);
}
// Set default default company logo if empty
if ($this->getAttribute('company_logo') == '') {
$this->setAttribute('company_logo', 'public/img/company.png');
}
}
/**
* Define the filter provider globally.
*
* @return ModelFilter
*/
public function modelFilter()
{
list($folder, $file) = explode('/', \Route::current()->uri());
if (empty($folder) || empty($file)) {
return $this->provideFilter();
}
$class = '\App\Filters\\' . ucfirst($folder) .'\\' . ucfirst($file);
return $this->provideFilter($class);
}
/**
* Scope to get all rows filtered, sorted and paginated.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @param $sort
*
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeCollect($query, $sort = 'name')
{
$request = request();
$input = $request->input();
$limit = $request->get('limit', setting('general.list_limit', '25'));
return Auth::user()->companies()->filter($input)->sortable($sort)->paginate($limit);
}
/**
* Scope to only include companies of a given enabled value.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @param mixed $value
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeEnabled($query, $value = 1)
{
return $query->where('enabled', $value);
}
/**
* Sort by company name
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @param $direction
*
* @return \Illuminate\Database\Eloquent\Builder
*/
public function nameSortable($query, $direction)
{
return $query->join('settings', 'companies.id', '=', 'settings.company_id')
->where('key', 'general.company_name')
->orderBy('value', $direction)
->select('companies.*');
}
/**
* Sort by company email
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @param $direction
*
* @return \Illuminate\Database\Eloquent\Builder
*/
public function emailSortable($query, $direction)
{
return $query->join('settings', 'companies.id', '=', 'settings.company_id')
->where('key', 'general.company_email')
->orderBy('value', $direction)
->select('companies.*');
}
/**
* Get the current balance.
*
* @return string
*/
public function getCompanyLogoAttribute()
{
return $this->getMedia('company_logo')->last();
}
}

158
app/Models/Common/Item.php Normal file
View File

@ -0,0 +1,158 @@
<?php
namespace App\Models\Common;
use App\Models\Model;
use App\Traits\Currencies;
use Bkwld\Cloner\Cloneable;
use Sofa\Eloquence\Eloquence;
use App\Traits\Media;
class Item extends Model
{
use Cloneable, Currencies, Eloquence, Media;
protected $table = 'items';
/**
* The accessors to append to the model's array form.
*
* @var array
*/
protected $appends = ['item_id'];
/**
* Attributes that should be mass-assignable.
*
* @var array
*/
protected $fillable = ['company_id', 'name', 'sku', 'description', 'sale_price', 'purchase_price', 'quantity', 'category_id', 'tax_id', 'enabled'];
/**
* Sortable columns.
*
* @var array
*/
protected $sortable = ['name', 'category', 'quantity', 'sale_price', 'purchase_price', 'enabled'];
/**
* Searchable rules.
*
* @var array
*/
protected $searchableColumns = [
'name' => 10,
'sku' => 5,
'description' => 2,
];
public function category()
{
return $this->belongsTo('App\Models\Setting\Category');
}
public function tax()
{
return $this->belongsTo('App\Models\Setting\Tax');
}
public function bill_items()
{
return $this->hasMany('App\Models\Expense\BillItem');
}
public function invoice_items()
{
return $this->hasMany('App\Models\Income\InvoiceItem');
}
/**
* Convert sale price to double.
*
* @param string $value
* @return void
*/
public function setSalePriceAttribute($value)
{
$this->attributes['sale_price'] = (double) $value;
}
/**
* Convert purchase price to double.
*
* @param string $value
* @return void
*/
public function setPurchasePriceAttribute($value)
{
$this->attributes['purchase_price'] = (double) $value;
}
/**
* Get the item id.
*
* @return string
*/
public function getItemIdAttribute()
{
return $this->id;
}
/**
* Scope autocomplete.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @param array $filter
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeAutocomplete($query, $filter)
{
return $query->where(function ($query) use ($filter) {
foreach ($filter as $key => $value) {
$query->orWhere($key, 'LIKE', "%" . $value . "%");
}
});
}
/**
* Scope quantity.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeQuantity($query)
{
return $query->where('quantity', '>', '0');
}
/**
* Sort by category name
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @param $direction
*
* @return \Illuminate\Database\Eloquent\Builder
*/
public function categorySortable($query, $direction)
{
return $query->join('categories', 'categories.id', '=', 'items.category_id')
->orderBy('name', $direction)
->select('items.*');
}
/**
* Get the current balance.
*
* @return string
*/
public function getPictureAttribute($value)
{
if (!empty($value) && !$this->hasMedia('picture')) {
return $value;
} elseif (!$this->hasMedia('picture')) {
return false;
}
return $this->getMedia('picture')->last();
}
}

View File

@ -2,259 +2,9 @@
namespace App\Models\Company;
use Auth;
use EloquentFilter\Filterable;
use Illuminate\Database\Eloquent\Model as Eloquent;
use Illuminate\Database\Eloquent\SoftDeletes;
use Kyslik\ColumnSortable\Sortable;
use App\Traits\Media;
use App\Models\Common\Company as C;
class Company extends Eloquent
{
use Filterable, SoftDeletes, Sortable, Media;
protected $table = 'companies';
protected $dates = ['deleted_at'];
protected $fillable = ['domain', 'enabled'];
/**
* Sortable columns.
*
* @var array
*/
public $sortable = ['name', 'domain', 'email', 'enabled', 'created_at'];
public function accounts()
{
return $this->hasMany('App\Models\Banking\Account');
}
public function bill_histories()
{
return $this->hasMany('App\Models\Expense\BillHistory');
}
public function bill_items()
{
return $this->hasMany('App\Models\Expense\BillItem');
}
public function bill_payments()
{
return $this->hasMany('App\Models\Expense\BillPayment');
}
public function bill_statuses()
{
return $this->hasMany('App\Models\Expense\BillStatus');
}
public function bills()
{
return $this->hasMany('App\Models\Expense\Bill');
}
public function categories()
{
return $this->hasMany('App\Models\Setting\Category');
}
public function currencies()
{
return $this->hasMany('App\Models\Setting\Currency');
}
public function customers()
{
return $this->hasMany('App\Models\Income\Customer');
}
public function invoice_histories()
{
return $this->hasMany('App\Models\Income\InvoiceHistory');
}
public function invoice_items()
{
return $this->hasMany('App\Models\Income\InvoiceItem');
}
public function invoice_payments()
{
return $this->hasMany('App\Models\Income\InvoicePayment');
}
public function invoice_statuses()
{
return $this->hasMany('App\Models\Income\InvoiceStatus');
}
public function invoices()
{
return $this->hasMany('App\Models\Income\Invoice');
}
public function items()
{
return $this->hasMany('App\Models\Item\Item');
}
public function payments()
{
return $this->hasMany('App\Models\Expense\Payment');
}
public function recurring()
{
return $this->hasMany('App\Models\Common\Recurring');
}
public function revenues()
{
return $this->hasMany('App\Models\Income\Revenue');
}
public function settings()
{
return $this->hasMany('App\Models\Setting\Setting');
}
public function taxes()
{
return $this->hasMany('App\Models\Setting\Tax');
}
public function transfers()
{
return $this->hasMany('App\Models\Banking\Transfer');
}
public function users()
{
return $this->morphedByMany('App\Models\Auth\User', 'user', 'user_companies', 'company_id', 'user_id');
}
public function vendors()
{
return $this->hasMany('App\Models\Expense\Vendor');
}
public function setSettings()
{
$settings = $this->settings;
foreach ($settings as $setting) {
list($group, $key) = explode('.', $setting->getAttribute('key'));
// Load only general settings
if ($group != 'general') {
continue;
}
$value = $setting->getAttribute('value');
if (($key == 'company_logo') && empty($value)) {
$value = 'public/img/company.png';
}
$this->setAttribute($key, $value);
}
// Set default default company logo if empty
if ($this->getAttribute('company_logo') == '') {
$this->setAttribute('company_logo', 'public/img/company.png');
}
}
/**
* Define the filter provider globally.
*
* @return ModelFilter
*/
public function modelFilter()
{
list($folder, $file) = explode('/', \Route::current()->uri());
if (empty($folder) || empty($file)) {
return $this->provideFilter();
}
$class = '\App\Filters\\' . ucfirst($folder) .'\\' . ucfirst($file);
return $this->provideFilter($class);
}
/**
* Scope to get all rows filtered, sorted and paginated.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @param $sort
*
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeCollect($query, $sort = 'name')
{
$request = request();
$input = $request->input();
$limit = $request->get('limit', setting('general.list_limit', '25'));
return Auth::user()->companies()->filter($input)->sortable($sort)->paginate($limit);
}
/**
* Scope to only include companies of a given enabled value.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @param mixed $value
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeEnabled($query, $value = 1)
{
return $query->where('enabled', $value);
}
/**
* Sort by company name
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @param $direction
*
* @return \Illuminate\Database\Eloquent\Builder
*/
public function nameSortable($query, $direction)
{
return $query->join('settings', 'companies.id', '=', 'settings.company_id')
->where('key', 'general.company_name')
->orderBy('value', $direction)
->select('companies.*');
}
/**
* Sort by company email
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @param $direction
*
* @return \Illuminate\Database\Eloquent\Builder
*/
public function emailSortable($query, $direction)
{
return $query->join('settings', 'companies.id', '=', 'settings.company_id')
->where('key', 'general.company_email')
->orderBy('value', $direction)
->select('companies.*');
}
/**
* Get the current balance.
*
* @return string
*/
public function getCompanyLogoAttribute()
{
return $this->getMedia('company_logo')->last();
}
}
/**
* @deprecated since 1.2.7 version. use Common\Company instead.
*/
class Company extends C {}

View File

@ -26,7 +26,7 @@ class BillHistory extends Model
public function item()
{
return $this->belongsTo('App\Models\Item\Item');
return $this->belongsTo('App\Models\Common\Item');
}
public function tax()

View File

@ -26,7 +26,7 @@ class BillItem extends Model
public function item()
{
return $this->belongsTo('App\Models\Item\Item');
return $this->belongsTo('App\Models\Common\Item');
}
public function tax()

View File

@ -39,7 +39,7 @@ class BillPayment extends Model
public function item()
{
return $this->belongsTo('App\Models\Item\Item');
return $this->belongsTo('App\Models\Common\Item');
}
public function tax()

View File

@ -26,7 +26,7 @@ class InvoiceHistory extends Model
public function item()
{
return $this->belongsTo('App\Models\Item\Item');
return $this->belongsTo('App\Models\Common\Item');
}
public function tax()

View File

@ -26,7 +26,7 @@ class InvoiceItem extends Model
public function item()
{
return $this->belongsTo('App\Models\Item\Item');
return $this->belongsTo('App\Models\Common\Item');
}
public function tax()

View File

@ -39,7 +39,7 @@ class InvoicePayment extends Model
public function item()
{
return $this->belongsTo('App\Models\Item\Item');
return $this->belongsTo('App\Models\Common\Item');
}
public function tax()

View File

@ -2,157 +2,9 @@
namespace App\Models\Item;
use App\Models\Model;
use App\Traits\Currencies;
use Bkwld\Cloner\Cloneable;
use Sofa\Eloquence\Eloquence;
use App\Traits\Media;
use App\Models\Common\Item as I;
class Item extends Model
{
use Cloneable, Currencies, Eloquence, Media;
protected $table = 'items';
/**
* The accessors to append to the model's array form.
*
* @var array
*/
protected $appends = ['item_id'];
/**
* Attributes that should be mass-assignable.
*
* @var array
*/
protected $fillable = ['company_id', 'name', 'sku', 'description', 'sale_price', 'purchase_price', 'quantity', 'category_id', 'tax_id', 'enabled'];
/**
* Sortable columns.
*
* @var array
*/
protected $sortable = ['name', 'category', 'quantity', 'sale_price', 'purchase_price', 'enabled'];
/**
* Searchable rules.
*
* @var array
*/
protected $searchableColumns = [
'name' => 10,
'sku' => 5,
'description' => 2,
];
public function category()
{
return $this->belongsTo('App\Models\Setting\Category');
}
public function tax()
{
return $this->belongsTo('App\Models\Setting\Tax');
}
public function bill_items()
{
return $this->hasMany('App\Models\Expense\BillItem');
}
public function invoice_items()
{
return $this->hasMany('App\Models\Income\InvoiceItem');
}
/**
* Convert sale price to double.
*
* @param string $value
* @return void
*/
public function setSalePriceAttribute($value)
{
$this->attributes['sale_price'] = (double) $value;
}
/**
* Convert purchase price to double.
*
* @param string $value
* @return void
*/
public function setPurchasePriceAttribute($value)
{
$this->attributes['purchase_price'] = (double) $value;
}
/**
* Get the item id.
*
* @return string
*/
public function getItemIdAttribute()
{
return $this->id;
}
/**
* Scope autocomplete.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @param array $filter
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeAutocomplete($query, $filter)
{
return $query->where(function ($query) use ($filter) {
foreach ($filter as $key => $value) {
$query->orWhere($key, 'LIKE', "%" . $value . "%");
}
});
}
/**
* Scope quantity.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeQuantity($query)
{
return $query->where('quantity', '>', '0');
}
/**
* Sort by category name
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @param $direction
*
* @return \Illuminate\Database\Eloquent\Builder
*/
public function categorySortable($query, $direction)
{
return $query->join('categories', 'categories.id', '=', 'items.category_id')
->orderBy('name', $direction)
->select('items.*');
}
/**
* Get the current balance.
*
* @return string
*/
public function getPictureAttribute($value)
{
if (!empty($value) && !$this->hasMedia('picture')) {
return $value;
} elseif (!$this->hasMedia('picture')) {
return false;
}
return $this->getMedia('picture')->last();
}
}
/**
* @deprecated since 1.2.7 version. use Common\Item instead.
*/
class Item extends I {}

View File

@ -35,7 +35,7 @@ class Model extends Eloquent
*/
public function company()
{
return $this->belongsTo('App\Models\Company\Company');
return $this->belongsTo('App\Models\Common\Company');
}
/**

View File

@ -34,7 +34,7 @@ class Category extends Model
public function items()
{
return $this->hasMany('App\Models\Item\Item');
return $this->hasMany('App\Models\Common\Item');
}
public function payments()

View File

@ -43,7 +43,7 @@ class Setting extends Model
*/
public function company()
{
return $this->belongsTo('App\Models\Company\Company');
return $this->belongsTo('App\Models\Common\Company');
}
/**

View File

@ -32,7 +32,7 @@ class Tax extends Model
public function items()
{
return $this->hasMany('App\Models\Item\Item');
return $this->hasMany('App\Models\Common\Item');
}
public function bill_items()

View File

@ -1,6 +1,6 @@
<?php
namespace App\Notifications\Item;
namespace App\Notifications\Common;
use Illuminate\Notifications\Notification;
use Illuminate\Notifications\Messages\MailMessage;

View File

@ -2,7 +2,7 @@
namespace App\Observers;
use App\Models\Company\Company as Model;
use App\Models\Common\Company as Model;
use Artisan;
use Auth;

View File

@ -24,6 +24,7 @@ class EventServiceProvider extends ServiceProvider
'App\Listeners\Updates\Version119',
'App\Listeners\Updates\Version120',
'App\Listeners\Updates\Version126',
'App\Listeners\Updates\Version127',
],
'Illuminate\Auth\Events\Login' => [
'App\Listeners\Auth\Login',

View File

@ -2,8 +2,7 @@
namespace App\Providers;
use App\Models\Company\Company;
use App\Models\Common\Company;
use Illuminate\Support\ServiceProvider;
class ObserverServiceProvider extends ServiceProvider

View File

@ -1,8 +1,8 @@
<?php
namespace App\Transformers\Company;
namespace App\Transformers\Common;
use App\Models\Company\Company as Model;
use App\Models\Common\Company as Model;
use League\Fractal\TransformerAbstract;
class Company extends TransformerAbstract

View File

@ -1,10 +1,10 @@
<?php
namespace App\Transformers\Item;
namespace App\Transformers\Common;
use App\Transformers\Setting\Category;
use App\Transformers\Setting\Tax;
use App\Models\Item\Item as Model;
use App\Models\Common\Item as Model;
use League\Fractal\TransformerAbstract;
class Item extends TransformerAbstract

View File

@ -3,7 +3,7 @@
namespace App\Utilities;
use DB;
use App\Models\Company\Company;
use App\Models\Common\Company;
class Info
{

View File

@ -3,7 +3,7 @@
namespace App\Utilities;
use App\Models\Auth\User;
use App\Models\Company\Company;
use App\Models\Common\Company;
use Artisan;
use Config;
use DB;

175
composer.lock generated
View File

@ -127,22 +127,27 @@
},
{
"name": "akaunting/setting",
"version": "1.0.4",
"version": "1.0.5",
"source": {
"type": "git",
"url": "https://github.com/akaunting/setting.git",
"reference": "23276f2efb3fd355d4a53a80e792c757d427b857"
"reference": "ebe1552b6cd97fa762432285efa04f87be803898"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/akaunting/setting/zipball/23276f2efb3fd355d4a53a80e792c757d427b857",
"reference": "23276f2efb3fd355d4a53a80e792c757d427b857",
"url": "https://api.github.com/repos/akaunting/setting/zipball/ebe1552b6cd97fa762432285efa04f87be803898",
"reference": "ebe1552b6cd97fa762432285efa04f87be803898",
"shasum": ""
},
"require": {
"laravel/framework": "5.2.* || 5.3.* || 5.4.* || 5.5.*",
"laravel/framework": ">=5.2 <6.0",
"php": ">=5.5.9"
},
"require-dev": {
"laravel/framework": ">=5.2 <6.0",
"mockery/mockery": "0.9.*",
"phpunit/phpunit": ">=4.8, <6"
},
"type": "library",
"extra": {
"laravel": {
@ -181,7 +186,7 @@
"laravel",
"persistent"
],
"time": "2018-04-19T11:11:57+00:00"
"time": "2018-06-01T07:02:27+00:00"
},
{
"name": "akaunting/version",
@ -822,30 +827,30 @@
},
{
"name": "doctrine/annotations",
"version": "v1.4.0",
"version": "v1.6.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/annotations.git",
"reference": "54cacc9b81758b14e3ce750f205a393d52339e97"
"reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/annotations/zipball/54cacc9b81758b14e3ce750f205a393d52339e97",
"reference": "54cacc9b81758b14e3ce750f205a393d52339e97",
"url": "https://api.github.com/repos/doctrine/annotations/zipball/c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5",
"reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5",
"shasum": ""
},
"require": {
"doctrine/lexer": "1.*",
"php": "^5.6 || ^7.0"
"php": "^7.1"
},
"require-dev": {
"doctrine/cache": "1.*",
"phpunit/phpunit": "^5.7"
"phpunit/phpunit": "^6.4"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.4.x-dev"
"dev-master": "1.6.x-dev"
}
},
"autoload": {
@ -886,37 +891,41 @@
"docblock",
"parser"
],
"time": "2017-02-24T16:22:25+00:00"
"time": "2017-12-06T07:11:42+00:00"
},
{
"name": "doctrine/cache",
"version": "v1.6.2",
"version": "v1.7.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/cache.git",
"reference": "eb152c5100571c7a45470ff2a35095ab3f3b900b"
"reference": "b3217d58609e9c8e661cd41357a54d926c4a2a1a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/cache/zipball/eb152c5100571c7a45470ff2a35095ab3f3b900b",
"reference": "eb152c5100571c7a45470ff2a35095ab3f3b900b",
"url": "https://api.github.com/repos/doctrine/cache/zipball/b3217d58609e9c8e661cd41357a54d926c4a2a1a",
"reference": "b3217d58609e9c8e661cd41357a54d926c4a2a1a",
"shasum": ""
},
"require": {
"php": "~5.5|~7.0"
"php": "~7.1"
},
"conflict": {
"doctrine/common": ">2.2,<2.4"
},
"require-dev": {
"phpunit/phpunit": "~4.8|~5.0",
"predis/predis": "~1.0",
"satooshi/php-coveralls": "~0.6"
"alcaeus/mongo-php-adapter": "^1.1",
"mongodb/mongodb": "^1.1",
"phpunit/phpunit": "^5.7",
"predis/predis": "~1.0"
},
"suggest": {
"alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.6.x-dev"
"dev-master": "1.7.x-dev"
}
},
"autoload": {
@ -956,24 +965,24 @@
"cache",
"caching"
],
"time": "2017-07-22T12:49:21+00:00"
"time": "2017-08-25T07:02:50+00:00"
},
{
"name": "doctrine/collections",
"version": "v1.4.0",
"version": "v1.5.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/collections.git",
"reference": "1a4fb7e902202c33cce8c55989b945612943c2ba"
"reference": "a01ee38fcd999f34d9bfbcee59dbda5105449cbf"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/collections/zipball/1a4fb7e902202c33cce8c55989b945612943c2ba",
"reference": "1a4fb7e902202c33cce8c55989b945612943c2ba",
"url": "https://api.github.com/repos/doctrine/collections/zipball/a01ee38fcd999f34d9bfbcee59dbda5105449cbf",
"reference": "a01ee38fcd999f34d9bfbcee59dbda5105449cbf",
"shasum": ""
},
"require": {
"php": "^5.6 || ^7.0"
"php": "^7.1"
},
"require-dev": {
"doctrine/coding-standard": "~0.1@dev",
@ -1023,7 +1032,7 @@
"collections",
"iterator"
],
"time": "2017-01-03T10:49:41+00:00"
"time": "2017-07-22T10:37:32+00:00"
},
{
"name": "doctrine/common",
@ -1171,33 +1180,33 @@
},
{
"name": "doctrine/inflector",
"version": "v1.1.0",
"version": "v1.3.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/inflector.git",
"reference": "90b2128806bfde671b6952ab8bea493942c1fdae"
"reference": "5527a48b7313d15261292c149e55e26eae771b0a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae",
"reference": "90b2128806bfde671b6952ab8bea493942c1fdae",
"url": "https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a",
"reference": "5527a48b7313d15261292c149e55e26eae771b0a",
"shasum": ""
},
"require": {
"php": ">=5.3.2"
"php": "^7.1"
},
"require-dev": {
"phpunit/phpunit": "4.*"
"phpunit/phpunit": "^6.2"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.1.x-dev"
"dev-master": "1.3.x-dev"
}
},
"autoload": {
"psr-0": {
"Doctrine\\Common\\Inflector\\": "lib/"
"psr-4": {
"Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector"
}
},
"notification-url": "https://packagist.org/downloads/",
@ -1234,7 +1243,7 @@
"singularize",
"string"
],
"time": "2015-11-06T14:35:42+00:00"
"time": "2018-01-09T20:05:19+00:00"
},
{
"name": "doctrine/lexer",
@ -2766,16 +2775,16 @@
},
{
"name": "nesbot/carbon",
"version": "1.28.0",
"version": "1.29.2",
"source": {
"type": "git",
"url": "https://github.com/briannesbitt/Carbon.git",
"reference": "00149d95fc91ef10f19d3a66889bc3bb7500fa7b"
"reference": "ed6aa898982f441ccc9b2acdec51490f2bc5d337"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/00149d95fc91ef10f19d3a66889bc3bb7500fa7b",
"reference": "00149d95fc91ef10f19d3a66889bc3bb7500fa7b",
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/ed6aa898982f441ccc9b2acdec51490f2bc5d337",
"reference": "ed6aa898982f441ccc9b2acdec51490f2bc5d337",
"shasum": ""
},
"require": {
@ -2810,28 +2819,28 @@
"datetime",
"time"
],
"time": "2018-05-18T15:26:18+00:00"
"time": "2018-05-29T15:23:46+00:00"
},
{
"name": "nikic/php-parser",
"version": "v3.1.5",
"version": "v4.0.2",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
"reference": "bb87e28e7d7b8d9a7fda231d37457c9210faf6ce"
"reference": "35b8caf75e791ba1b2d24fec1552168d72692b12"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/bb87e28e7d7b8d9a7fda231d37457c9210faf6ce",
"reference": "bb87e28e7d7b8d9a7fda231d37457c9210faf6ce",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/35b8caf75e791ba1b2d24fec1552168d72692b12",
"reference": "35b8caf75e791ba1b2d24fec1552168d72692b12",
"shasum": ""
},
"require": {
"ext-tokenizer": "*",
"php": ">=5.5"
"php": ">=7.0"
},
"require-dev": {
"phpunit/phpunit": "~4.0|~5.0"
"phpunit/phpunit": "^6.5 || ^7.0"
},
"bin": [
"bin/php-parse"
@ -2839,7 +2848,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.0-dev"
"dev-master": "4.0-dev"
}
},
"autoload": {
@ -2861,7 +2870,7 @@
"parser",
"php"
],
"time": "2018-02-28T20:30:58+00:00"
"time": "2018-06-03T11:33:10+00:00"
},
{
"name": "nwidart/laravel-menus",
@ -3084,16 +3093,16 @@
},
{
"name": "phenx/php-svg-lib",
"version": "v0.3",
"version": "v0.3.2",
"source": {
"type": "git",
"url": "https://github.com/PhenX/php-svg-lib.git",
"reference": "a85f7fe9fe08d093a4a8583cdd306b553ff918aa"
"reference": "ccc46ef6340d4b8a4a68047e68d8501ea961442c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/PhenX/php-svg-lib/zipball/a85f7fe9fe08d093a4a8583cdd306b553ff918aa",
"reference": "a85f7fe9fe08d093a4a8583cdd306b553ff918aa",
"url": "https://api.github.com/repos/PhenX/php-svg-lib/zipball/ccc46ef6340d4b8a4a68047e68d8501ea961442c",
"reference": "ccc46ef6340d4b8a4a68047e68d8501ea961442c",
"shasum": ""
},
"require": {
@ -3120,7 +3129,7 @@
],
"description": "A library to read, parse and export to PDF SVG files.",
"homepage": "https://github.com/PhenX/php-svg-lib",
"time": "2017-05-24T10:07:27+00:00"
"time": "2018-06-03T10:10:03+00:00"
},
{
"name": "phpdocumentor/reflection-common",
@ -3490,16 +3499,16 @@
},
{
"name": "psy/psysh",
"version": "v0.9.4",
"version": "v0.9.5",
"source": {
"type": "git",
"url": "https://github.com/bobthecow/psysh.git",
"reference": "4d969a0e08e1e05e7207c07cb4207017ecc9a331"
"reference": "0951e91ac04ca28cf317f3997a0adfc319e80106"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/bobthecow/psysh/zipball/4d969a0e08e1e05e7207c07cb4207017ecc9a331",
"reference": "4d969a0e08e1e05e7207c07cb4207017ecc9a331",
"url": "https://api.github.com/repos/bobthecow/psysh/zipball/0951e91ac04ca28cf317f3997a0adfc319e80106",
"reference": "0951e91ac04ca28cf317f3997a0adfc319e80106",
"shasum": ""
},
"require": {
@ -3558,7 +3567,7 @@
"interactive",
"shell"
],
"time": "2018-05-22T06:48:07+00:00"
"time": "2018-06-02T16:39:22+00:00"
},
{
"name": "ramsey/uuid",
@ -4021,7 +4030,7 @@
},
{
"name": "symfony/class-loader",
"version": "v3.4.10",
"version": "v3.4.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/class-loader.git",
@ -4077,7 +4086,7 @@
},
{
"name": "symfony/console",
"version": "v3.4.10",
"version": "v3.4.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
@ -4146,7 +4155,7 @@
},
{
"name": "symfony/css-selector",
"version": "v3.4.10",
"version": "v3.4.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
@ -4199,7 +4208,7 @@
},
{
"name": "symfony/debug",
"version": "v3.4.10",
"version": "v3.4.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug.git",
@ -4255,7 +4264,7 @@
},
{
"name": "symfony/event-dispatcher",
"version": "v3.4.10",
"version": "v3.4.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
@ -4318,7 +4327,7 @@
},
{
"name": "symfony/finder",
"version": "v3.4.10",
"version": "v3.4.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
@ -4367,16 +4376,16 @@
},
{
"name": "symfony/http-foundation",
"version": "v3.4.10",
"version": "v3.4.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
"reference": "9a7469ec3e0225e7f0e14264bcd9e838e16186fe"
"reference": "a7b5fc605d1c215cea1122359044b1e682eb70c0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/9a7469ec3e0225e7f0e14264bcd9e838e16186fe",
"reference": "9a7469ec3e0225e7f0e14264bcd9e838e16186fe",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/a7b5fc605d1c215cea1122359044b1e682eb70c0",
"reference": "a7b5fc605d1c215cea1122359044b1e682eb70c0",
"shasum": ""
},
"require": {
@ -4417,20 +4426,20 @@
],
"description": "Symfony HttpFoundation Component",
"homepage": "https://symfony.com",
"time": "2018-05-16T08:49:21+00:00"
"time": "2018-05-25T11:07:31+00:00"
},
{
"name": "symfony/http-kernel",
"version": "v3.4.10",
"version": "v3.4.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
"reference": "66644bc7d17cc071d796efab9b950adbb86da134"
"reference": "3dac45df55ee0c5134c457a730cd68e2a2ce0445"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/66644bc7d17cc071d796efab9b950adbb86da134",
"reference": "66644bc7d17cc071d796efab9b950adbb86da134",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/3dac45df55ee0c5134c457a730cd68e2a2ce0445",
"reference": "3dac45df55ee0c5134c457a730cd68e2a2ce0445",
"shasum": ""
},
"require": {
@ -4506,7 +4515,7 @@
],
"description": "Symfony HttpKernel Component",
"homepage": "https://symfony.com",
"time": "2018-05-21T13:44:03+00:00"
"time": "2018-05-25T13:16:28+00:00"
},
{
"name": "symfony/polyfill-ctype",
@ -4791,7 +4800,7 @@
},
{
"name": "symfony/process",
"version": "v3.4.10",
"version": "v3.4.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
@ -4840,7 +4849,7 @@
},
{
"name": "symfony/routing",
"version": "v3.4.10",
"version": "v3.4.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
@ -4918,7 +4927,7 @@
},
{
"name": "symfony/translation",
"version": "v3.4.10",
"version": "v3.4.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
@ -4986,7 +4995,7 @@
},
{
"name": "symfony/var-dumper",
"version": "v3.4.10",
"version": "v3.4.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",

View File

@ -34,10 +34,10 @@ class Roles extends Seeder
'auth-roles' => 'c,r,u,d',
'auth-permissions' => 'c,r,u,d',
'auth-profile' => 'r,u',
'companies-companies' => 'c,r,u,d',
'common-companies' => 'c,r,u,d',
'common-import' => 'c',
'common-items' => 'c,r,u,d',
'common-uploads' => 'd',
'items-items' => 'c,r,u,d',
'incomes-invoices' => 'c,r,u,d',
'incomes-revenues' => 'c,r,u,d',
'incomes-customers' => 'c,r,u,d',
@ -68,9 +68,9 @@ class Roles extends Seeder
'manager' => [
'admin-panel' => 'r',
'auth-profile' => 'r,u',
'companies-companies' => 'c,r,u,d',
'common-companies' => 'c,r,u,d',
'common-import' => 'c',
'items-items' => 'c,r,u,d',
'common-items' => 'c,r,u,d',
'incomes-invoices' => 'c,r,u,d',
'incomes-revenues' => 'c,r,u,d',
'incomes-customers' => 'c,r,u,d',

View File

@ -4,7 +4,7 @@ namespace Database\Seeds;
use App\Models\Model;
use App\Models\Auth\User;
use App\Models\Company\Company;
use App\Models\Common\Company;
use Jenssegers\Date\Date;
use Illuminate\Database\Seeder;
use Setting;

View File

@ -5,7 +5,7 @@
@section('content')
<!-- Default box -->
<div class="box box-success">
{!! Form::open(['url' => 'companies/companies', 'files' => true, 'role' => 'form']) !!}
{!! Form::open(['url' => 'common/companies', 'files' => true, 'role' => 'form']) !!}
<div class="box-body">
{{ Form::textGroup('company_name', trans('general.name'), 'id-card-o') }}
@ -24,7 +24,7 @@
<!-- /.box-body -->
<div class="box-footer">
{{ Form::saveButtons('companies/companies') }}
{{ Form::saveButtons('common/companies') }}
</div>
<!-- /.box-footer -->

View File

@ -7,7 +7,7 @@
<div class="box box-success">
{!! Form::model($company, [
'method' => 'PATCH',
'url' => ['companies/companies', $company->id],
'url' => ['common/companies', $company->id],
'files' => true,
'role' => 'form'
]) !!}
@ -29,9 +29,9 @@
</div>
<!-- /.box-body -->
@permission('update-companies-companies')
@permission('update-common-companies')
<div class="box-footer">
{{ Form::saveButtons('companies/companies') }}
{{ Form::saveButtons('common/companies') }}
</div>
<!-- /.box-footer -->
@endpermission

View File

@ -2,9 +2,9 @@
@section('title', trans_choice('general.companies', 2))
@permission('create-companies-companies')
@permission('create-common-companies')
@section('new_button')
<span class="new-button"><a href="{{ url('companies/companies/create') }}" class="btn btn-success btn-sm"><span class="fa fa-plus"></span> &nbsp;{{ trans('general.add_new') }}</a></span>
<span class="new-button"><a href="{{ url('common/companies/create') }}" class="btn btn-success btn-sm"><span class="fa fa-plus"></span> &nbsp;{{ trans('general.add_new') }}</a></span>
@endsection
@endpermission
@ -13,7 +13,7 @@
<div class="box box-success">
<div class="box-header with-border">
{!! Form::open(['url' => 'companies/companies', 'role' => 'form', 'method' => 'GET']) !!}
{!! Form::open(['url' => 'common/companies', 'role' => 'form', 'method' => 'GET']) !!}
<div class="pull-left">
<span class="title-filter hidden-xs">{{ trans('general.search') }}:</span>
{!! Form::text('search', request('search'), ['class' => 'form-control input-filter input-sm', 'placeholder' => trans('general.search_placeholder')]) !!}
@ -45,7 +45,7 @@
@foreach($companies as $item)
<tr>
<td class="hidden-xs">{{ $item->id }}</td>
<td><a href="{{ url('companies/companies/' . $item->id . '/edit') }}">{{ $item->company_name }}</a></td>
<td><a href="{{ url('common/companies/' . $item->id . '/edit') }}">{{ $item->company_name }}</a></td>
<td class="hidden-xs">{{ $item->domain }}</td>
<td class="hidden-xs">{{ $item->company_email }}</td>
<td class="hidden-xs">{{ Date::parse($item->created_at)->format($date_format) }}</td>
@ -63,11 +63,11 @@
</button>
<ul class="dropdown-menu dropdown-menu-right">
@if ($item->enabled)
<li><a href="{{ url('companies/companies/' . $item->id . '/set') }}">{{ trans('general.switch') }}</a></li>
<li><a href="{{ url('common/companies/' . $item->id . '/set') }}">{{ trans('general.switch') }}</a></li>
@endif
<li><a href="{{ url('companies/companies/' . $item->id . '/edit') }}">{{ trans('general.edit') }}</a></li>
@permission('delete-companies-companies')
<li>{!! Form::deleteLink($item, 'companies/companies', '', 'company_name') !!}</li>
<li><a href="{{ url('common/companies/' . $item->id . '/edit') }}">{{ trans('general.edit') }}</a></li>
@permission('delete-common-companies')
<li>{!! Form::deleteLink($item, 'common/companies', '', 'company_name') !!}</li>
@endpermission
</ul>
</div>

View File

@ -267,7 +267,7 @@
var period = $('#period').val();
$.ajax({
url: '{{ url("dashboard/dashboard/cashflow") }}',
url: '{{ url("common/dashboard/cashflow") }}',
type: 'get',
dataType: 'html',
data: 'period=' + period + '&start=' + picker.startDate.format('YYYY-MM-DD') + '&end=' + picker.endDate.format('YYYY-MM-DD'),
@ -283,7 +283,7 @@
$('#period').val('month');
$.ajax({
url: '{{ url("dashboard/dashboard/cashflow") }}',
url: '{{ url("common/dashboard/cashflow") }}',
type: 'get',
dataType: 'html',
data: 'period=month&start=' + picker.startDate.format('YYYY-MM-DD') + '&end=' + picker.endDate.format('YYYY-MM-DD'),
@ -299,7 +299,7 @@
$('#period').val('quarter');
$.ajax({
url: '{{ url("dashboard/dashboard/cashflow") }}',
url: '{{ url("common/dashboard/cashflow") }}',
type: 'get',
dataType: 'html',
data: 'period=quarter&start=' + picker.startDate.format('YYYY-MM-DD') + '&end=' + picker.endDate.format('YYYY-MM-DD'),

View File

@ -5,7 +5,7 @@
@section('content')
<!-- Default box -->
<div class="box box-success">
{!! Form::open(['url' => 'items/items', 'files' => true, 'role' => 'form']) !!}
{!! Form::open(['url' => 'common/items', 'files' => true, 'role' => 'form']) !!}
<div class="box-body">
{{ Form::textGroup('name', trans('general.name'), 'id-card-o') }}
@ -41,7 +41,7 @@
<!-- /.box-body -->
<div class="box-footer">
{{ Form::saveButtons('items/items') }}
{{ Form::saveButtons('common/items') }}
</div>
<!-- /.box-footer -->

View File

@ -8,7 +8,7 @@
{!! Form::model($item, [
'method' => 'PATCH',
'files' => true,
'url' => ['items/items', $item->id],
'url' => ['common/items', $item->id],
'role' => 'form'
]) !!}
@ -35,9 +35,9 @@
</div>
<!-- /.box-body -->
@permission('update-items-items')
@permission('update-common-items')
<div class="box-footer">
{{ Form::saveButtons('items/items') }}
{{ Form::saveButtons('common/items') }}
</div>
<!-- /.box-footer -->
@endpermission

View File

@ -2,10 +2,10 @@
@section('title', trans_choice('general.items', 2))
@permission('create-items-items')
@permission('create-common-items')
@section('new_button')
<span class="new-button"><a href="{{ url('items/items/create') }}" class="btn btn-success btn-sm"><span class="fa fa-plus"></span> &nbsp;{{ trans('general.add_new') }}</a></span>
<span><a href="{{ url('common/import/items/items') }}" class="btn btn-success btn-sm"><span class="fa fa-download"></span> &nbsp;{{ trans('import.import') }}</a></span>
<span class="new-button"><a href="{{ url('common/items/create') }}" class="btn btn-success btn-sm"><span class="fa fa-plus"></span> &nbsp;{{ trans('general.add_new') }}</a></span>
<span><a href="{{ url('common/import/common/items') }}" class="btn btn-success btn-sm"><span class="fa fa-download"></span> &nbsp;{{ trans('import.import') }}</a></span>
@endsection
@endpermission
@ -13,7 +13,7 @@
<!-- Default box -->
<div class="box box-success">
<div class="box-header with-border">
{!! Form::open(['url' => 'items/items', 'role' => 'form', 'method' => 'GET']) !!}
{!! Form::open(['url' => 'common/items', 'role' => 'form', 'method' => 'GET']) !!}
<div class="pull-left">
<span class="title-filter hidden-xs">{{ trans('general.search') }}:</span>
{!! Form::text('search', request('search'), ['class' => 'form-control input-filter input-sm', 'placeholder' => trans('general.search_placeholder')]) !!}
@ -47,7 +47,7 @@
@foreach($items as $item)
<tr>
<td class="hidden-xs"><img src="{{ $item->picture ? Storage::url($item->picture->id) : asset('public/img/akaunting-logo-green.png') }}" class="img-thumbnail" width="50" alt="{{ $item->name }}"></td>
<td><a href="{{ url('items/items/' . $item->id . '/edit') }}">{{ $item->name }}</a></td>
<td><a href="{{ url('common/items/' . $item->id . '/edit') }}">{{ $item->name }}</a></td>
<td class="hidden-xs">{{ $item->category ? $item->category->name : trans('general.na') }}</td>
<td class="hidden-xs">{{ $item->quantity }}</td>
<td class="text-right amount-space">{{ money($item->sale_price, setting('general.default_currency'), true) }}</td>
@ -65,14 +65,14 @@
<i class="fa fa-ellipsis-h"></i>
</button>
<ul class="dropdown-menu dropdown-menu-right">
<li><a href="{{ url('items/items/' . $item->id . '/edit') }}">{{ trans('general.edit') }}</a></li>
<li><a href="{{ url('common/items/' . $item->id . '/edit') }}">{{ trans('general.edit') }}</a></li>
<li class="divider"></li>
@permission('create-items-items')
<li><a href="{{ url('items/items/' . $item->id . '/duplicate') }}">{{ trans('general.duplicate') }}</a></li>
@permission('create-common-items')
<li><a href="{{ url('common/items/' . $item->id . '/duplicate') }}">{{ trans('general.duplicate') }}</a></li>
<li class="divider"></li>
@endpermission
@permission('delete-items-items')
<li>{!! Form::deleteLink($item, 'items/items') !!}</li>
@permission('delete-common-items')
<li>{!! Form::deleteLink($item, 'common/items') !!}</li>
@endpermission
</ul>
</div>

View File

@ -220,7 +220,7 @@
placeholder : '{{ trans('general.form.no_file_selected') }}'
});
var autocomplete_path = "{{ url('items/items/autocomplete') }}";
var autocomplete_path = "{{ url('common/items/autocomplete') }}";
$(document).on('click', '.form-control.typeahead', function() {
input_id = $(this).attr('id').split('-');
@ -336,7 +336,7 @@
function totalItem() {
$.ajax({
url: '{{ url("items/items/totalItem") }}',
url: '{{ url("common/items/totalItem") }}',
type: 'POST',
dataType: 'JSON',
data: $('#currency_code, #discount input[type=\'number\'], #items input[type=\'text\'],#items input[type=\'number\'],#items input[type=\'hidden\'], #items textarea, #items select'),

View File

@ -253,7 +253,7 @@
});
@endif
var autocomplete_path = "{{ url('items/items/autocomplete') }}";
var autocomplete_path = "{{ url('common/items/autocomplete') }}";
$(document).on('click', '.form-control.typeahead', function() {
input_id = $(this).attr('id').split('-');
@ -369,7 +369,7 @@
function totalItem() {
$.ajax({
url: '{{ url("items/items/totalItem") }}',
url: '{{ url("common/items/totalItem") }}',
type: 'POST',
dataType: 'JSON',
data: $('#currency_code, #discount input[type=\'number\'], #items input[type=\'text\'],#items input[type=\'number\'],#items input[type=\'hidden\'], #items textarea, #items select'),

View File

@ -221,7 +221,7 @@
placeholder : '{{ trans('general.form.no_file_selected') }}'
});
var autocomplete_path = "{{ url('items/items/autocomplete') }}";
var autocomplete_path = "{{ url('common/items/autocomplete') }}";
$(document).on('click', '.form-control.typeahead', function() {
input_id = $(this).attr('id').split('-');
@ -337,7 +337,7 @@
function totalItem() {
$.ajax({
url: '{{ url("items/items/totalItem") }}',
url: '{{ url("common/items/totalItem") }}',
type: 'POST',
dataType: 'JSON',
data: $('#currency_code, #discount input[type=\'number\'], #items input[type=\'text\'],#items input[type=\'number\'],#items input[type=\'hidden\'], #items textarea, #items select'),

View File

@ -252,7 +252,7 @@
});
@endif
var autocomplete_path = "{{ url('items/items/autocomplete') }}";
var autocomplete_path = "{{ url('common/items/autocomplete') }}";
$(document).on('click', '.form-control.typeahead', function() {
input_id = $(this).attr('id').split('-');
@ -368,7 +368,7 @@
function totalItem() {
$.ajax({
url: '{{ url("items/items/totalItem") }}',
url: '{{ url("common/items/totalItem") }}',
type: 'POST',
dataType: 'JSON',
data: $('#currency_code, #discount input[type=\'number\'], #items input[type=\'text\'],#items input[type=\'number\'],#items input[type=\'hidden\'], #items textarea, #items select'),

View File

@ -57,7 +57,7 @@
<script src="{{ asset('public/js/app.js?v=1.0') }}"></script>
<script type="text/javascript"><!--
var url_search = '{{ url("search/search/search") }}';
var url_search = '{{ url("common/search/search") }}';
//--></script>
@stack('js')

View File

@ -8,15 +8,15 @@
</div>
<div class="pull-left info">
<p>{{ str_limit(setting('general.company_name'), 22) }}</p>
@permission('read-companies-companies')
@permission('read-common-companies')
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><span class="caret"></span> &nbsp;{{ trans('general.switch') }}</a>
<ul class="dropdown-menu">
@foreach($companies as $com)
<li><a href="{{ url('companies/companies/'. $com->id .'/set') }}">{{ str_limit($com->company_name, 18) }}</a></li>
<li><a href="{{ url('common/companies/'. $com->id .'/set') }}">{{ str_limit($com->company_name, 18) }}</a></li>
@endforeach
@permission('update-companies-companies')
@permission('update-common-companies')
<li role="separator" class="divider"></li>
<li><a href="{{ url('companies/companies') }}">{{ trans('companies.manage') }}</a></li>
<li><a href="{{ url('common/companies') }}">{{ trans('companies.manage') }}</a></li>
@endpermission
</ul>
@endpermission

View File

@ -62,7 +62,7 @@
<script src="{{ asset('public/js/app.js?v=1.0') }}"></script>
<script type="text/javascript"><!--
var url_search = '{{ url("search/search/search") }}';
var url_search = '{{ url("common/search/search") }}';
//--></script>
@stack('js')

View File

@ -58,7 +58,7 @@
<script src="{{ asset('public/js/app.js?v=1.0') }}"></script>
<script type="text/javascript"><!--
var url_search = '{{ url("search/search/search") }}';
var url_search = '{{ url("common/search/search") }}';
//--></script>
<script type="text/javascript">

View File

@ -5,10 +5,10 @@ $api = app('Dingo\Api\Routing\Router');
$api->version('v1', ['middleware' => ['api']], function($api) {
$api->group(['namespace' => 'App\Http\Controllers\Api'], function($api) {
// Companies
$api->resource('companies', 'Companies\Companies');
$api->resource('companies', 'Common\Companies');
// Items
$api->resource('items', 'Items\Items');
$api->resource('items', 'Common\Items');
// Incomes
$api->resource('customers', 'Incomes\Customers');

View File

@ -8,28 +8,24 @@ Route::group(['middleware' => 'language'], function () {
});
Route::group(['middleware' => ['adminmenu', 'permission:read-admin-panel']], function () {
Route::get('/', 'Dashboard\Dashboard@index');
Route::get('dashboard/dashboard/cashflow', 'Dashboard\Dashboard@cashFlow');
Route::get('/', 'Common\Dashboard@index');
Route::group(['prefix' => 'uploads'], function () {
Route::delete('{id}', 'Common\Uploads@destroy');
});
Route::group(['prefix' => 'search'], function () {
Route::get('search/search', 'Search\Search@search');
Route::resource('search', 'Search\Search');
});
Route::group(['prefix' => 'common'], function () {
Route::get('companies/{company}/set', 'Common\Companies@set');
Route::resource('companies', 'Common\Companies');
Route::get('dashboard/cashflow', 'Common\Dashboard@cashFlow');
Route::get('import/{group}/{type}', 'Common\Import@create');
});
Route::group(['prefix' => 'items'], function () {
Route::get('items/autocomplete', 'Items\Items@autocomplete');
Route::post('items/totalItem', 'Items\Items@totalItem');
Route::get('items/{item}/duplicate', 'Items\Items@duplicate');
Route::post('items/import', 'Items\Items@import');
Route::resource('items', 'Items\Items');
Route::get('items/autocomplete', 'Common\Items@autocomplete');
Route::post('items/totalItem', 'Common\Items@totalItem');
Route::get('items/{item}/duplicate', 'Common\Items@duplicate');
Route::post('items/import', 'Common\Items@import');
Route::resource('items', 'Common\Items');
Route::get('search/search', 'Common\Search@search');
Route::resource('search', 'Common\Search');
});
Route::group(['prefix' => 'auth'], function () {
@ -43,11 +39,6 @@ Route::group(['middleware' => 'language'], function () {
Route::resource('permissions', 'Auth\Permissions');
});
Route::group(['prefix' => 'companies'], function () {
Route::get('companies/{company}/set', 'Companies\Companies@set');
Route::resource('companies', 'Companies\Companies');
});
Route::group(['prefix' => 'incomes'], function () {
Route::get('invoices/{invoice}/sent', 'Incomes\Invoices@markSent');
Route::get('invoices/{invoice}/email', 'Incomes\Invoices@emailInvoice');