diff --git a/app/Http/Controllers/Auth/Users.php b/app/Http/Controllers/Auth/Users.php index 75933b591..af89e32f6 100644 --- a/app/Http/Controllers/Auth/Users.php +++ b/app/Http/Controllers/Auth/Users.php @@ -7,11 +7,14 @@ use App\Http\Requests\Auth\User as Request; use Illuminate\Http\Request as ARequest; use App\Models\Auth\User; use App\Models\Auth\Role; +use App\Traits\Uploads; use Auth; class Users extends Controller { + use Uploads; + /** * Display a listing of the resource. * @@ -34,11 +37,12 @@ class Users extends Controller */ public function create() { - $roles = Role::all()->reject(function($r) { + $roles = Role::all()->reject(function ($r) { return $r->hasPermission('read-customer-panel'); }); $companies = Auth::user()->companies()->get()->sortBy('name'); + foreach ($companies as $company) { $company->setSettings(); } @@ -55,15 +59,16 @@ class Users extends Controller */ public function store(Request $request) { - // Upload picture - $picture = $request->file('picture'); - if ($picture && $picture->isValid()) { - $request['picture'] = $picture->store('uploads/users'); - } - // Create user $user = User::create($request->input()); + // Upload picture + if ($request->file('picture')) { + $media = $this->getMedia($request->file('picture'), 'users'); + + $user->attachMedia($media, 'picture'); + } + // Attach roles $user->roles()->attach($request['roles']); @@ -88,17 +93,18 @@ class Users extends Controller { if ($user->customer) { // Show only roles with customer permission - $roles = Role::all()->reject(function($r) { + $roles = Role::all()->reject(function ($r) { return !$r->hasPermission('read-customer-panel'); }); } else { // Don't show roles with customer permission - $roles = Role::all()->reject(function($r) { + $roles = Role::all()->reject(function ($r) { return $r->hasPermission('read-customer-panel'); }); } $companies = Auth::user()->companies()->get()->sortBy('name'); + foreach ($companies as $company) { $company->setSettings(); } @@ -116,12 +122,6 @@ class Users extends Controller */ public function update(User $user, Request $request) { - // Upload picture - $picture = $request->file('picture'); - if ($picture && $picture->isValid()) { - $request['picture'] = $picture->store('users'); - } - // Do not reset password if not entered/changed if (empty($request['password'])) { unset($request['password']); @@ -131,6 +131,13 @@ class Users extends Controller // Update user $user->update($request->input()); + // Upload picture + if ($request->file('picture')) { + $media = $this->getMedia($request->file('picture'), 'users'); + + $user->attachMedia($media, 'picture'); + } + // Sync roles $user->roles()->sync($request['roles']); diff --git a/app/Http/Controllers/Companies/Companies.php b/app/Http/Controllers/Companies/Companies.php index c36f832a4..4ca09d084 100644 --- a/app/Http/Controllers/Companies/Companies.php +++ b/app/Http/Controllers/Companies/Companies.php @@ -65,9 +65,7 @@ class Companies extends Controller if ($logo) { $company->attachMedia($logo, 'logo'); - $logo_path = $logo->directory . '/' . $logo->basename; - - setting()->set('general.company_logo', $logo_path); + setting()->set('general.company_logo', $logo->id); } } @@ -148,9 +146,7 @@ class Companies extends Controller if ($logo) { $company->attachMedia($logo, 'logo'); - $logo_path = $logo->directory . '/' . $logo->basename; - - setting()->set('general.company_logo', $logo_path); + setting()->set('general.company_logo', $logo->id); } } diff --git a/app/Http/Controllers/Expenses/Bills.php b/app/Http/Controllers/Expenses/Bills.php index 2e389ac66..3ed135125 100644 --- a/app/Http/Controllers/Expenses/Bills.php +++ b/app/Http/Controllers/Expenses/Bills.php @@ -132,7 +132,7 @@ class Bills extends Controller // Upload attachment if ($request->file('attachment')) { - $media = $this->getMedia($request->file('attachment'), 'revenues'); + $media = $this->getMedia($request->file('attachment'), 'bills'); $bill->attachMedia($media, 'attachment'); } @@ -597,13 +597,6 @@ class Bills extends Controller $bill = Bill::find($request['bill_id']); - // Upload attachment - if ($request->file('attachment')) { - $media = $this->getMedia($request->file('attachment'), 'payments'); - - $bill->attachMedia($media, 'attachment'); - } - $total_amount = $bill->amount; $amount = (double) $request['amount']; @@ -640,6 +633,13 @@ class Bills extends Controller $bill_payment = BillPayment::create($request->input()); + // Upload attachment + if ($request->file('attachment')) { + $media = $this->getMedia($request->file('attachment'), 'bills'); + + $bill_payment->attachMedia($media, 'attachment'); + } + $request['status_code'] = $bill->bill_status_code; $request['notify'] = 0; diff --git a/app/Http/Controllers/Incomes/Invoices.php b/app/Http/Controllers/Incomes/Invoices.php index 870c7625f..772216f00 100644 --- a/app/Http/Controllers/Incomes/Invoices.php +++ b/app/Http/Controllers/Incomes/Invoices.php @@ -141,7 +141,7 @@ class Invoices extends Controller // Upload attachment if ($request->file('attachment')) { - $media = $this->getMedia($request->file('attachment'), 'revenues'); + $media = $this->getMedia($request->file('attachment'), 'invoices'); $invoice->attachMedia($media, 'attachment'); } diff --git a/app/Http/Controllers/Settings/Settings.php b/app/Http/Controllers/Settings/Settings.php index aeb075f48..5f7c849e2 100644 --- a/app/Http/Controllers/Settings/Settings.php +++ b/app/Http/Controllers/Settings/Settings.php @@ -8,6 +8,7 @@ use App\Models\Banking\Account; use App\Models\Company\Company; use App\Models\Setting\Currency; use App\Models\Setting\Setting; +use App\Models\Common\Media; use App\Models\Setting\Tax; use App\Traits\DateTime; use App\Traits\Uploads; @@ -26,11 +27,20 @@ class Settings extends Controller public function edit() { /*$setting = Setting::all()->pluck('value', 'key');*/ - $setting = Setting::all()->map(function($s) { + $setting = Setting::all()->map(function ($s) { $s->key = str_replace('general.', '', $s->key); + return $s; })->pluck('value', 'key'); + $company_logo = $setting->pull('company_logo'); + + $setting['company_logo'] = Media::find($company_logo); + + $invoice_logo = $setting->pull('invoice_logo'); + + $setting['invoice_logo'] = Media::find($invoice_logo); + $timezones = $this->getTimezones(); $accounts = Account::enabled()->pluck('name', 'id'); @@ -88,7 +98,13 @@ class Settings extends Controller { $fields = $request->all(); $company_id = $request->get('company_id'); - + + if (empty($company_id)) { + $company_id = session('company_id'); + } + + $company = Company::find($company_id); + $skip_keys = ['company_id', '_method', '_token']; $file_keys = ['company_logo', 'invoice_logo']; @@ -102,7 +118,14 @@ class Settings extends Controller // Process file uploads if (in_array($key, $file_keys)) { - $value = $this->getUploadedFilePath($request->file($key), 'settings'); + // Upload attachment + if ($request->file($key)) { + $media = $this->getMedia($request->file($key), 'settings'); + + $company->attachMedia($media, $key); + + $value = $media->id; + } // Prevent reset if (empty($value)) { @@ -133,5 +156,4 @@ class Settings extends Controller return redirect('settings/settings'); } - } diff --git a/app/Models/Auth/User.php b/app/Models/Auth/User.php index e760f724d..ce0b5f87d 100644 --- a/app/Models/Auth/User.php +++ b/app/Models/Auth/User.php @@ -12,12 +12,13 @@ use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Laratrust\Traits\LaratrustUserTrait; use Kyslik\ColumnSortable\Sortable; +use Plank\Mediable\Mediable; use Request; use Route; class User extends Authenticatable { - use Filterable, LaratrustUserTrait, Notifiable, SoftDeletes, Sortable; + use Filterable, LaratrustUserTrait, Notifiable, SoftDeletes, Sortable, Mediable; protected $table = 'users'; @@ -88,7 +89,11 @@ class User extends Authenticatable } } - return $value; + if (!$this->hasMedia('picture')) { + return false; + } + + return $this->getMedia('picture')->last(); } /** diff --git a/app/Models/Item/Item.php b/app/Models/Item/Item.php index 9095186b9..8ab9706d3 100644 --- a/app/Models/Item/Item.php +++ b/app/Models/Item/Item.php @@ -6,10 +6,11 @@ use App\Models\Model; use App\Traits\Currencies; use Bkwld\Cloner\Cloneable; use Sofa\Eloquence\Eloquence; +use Plank\Mediable\Mediable; class Item extends Model { - use Cloneable, Currencies, Eloquence; + use Cloneable, Currencies, Eloquence, Mediable; protected $table = 'items'; @@ -111,4 +112,18 @@ class Item extends Model ->orderBy('name', $direction) ->select('items.*'); } + + /** + * Get the current balance. + * + * @return string + */ + public function getPictureAttribute() + { + if (!$this->hasMedia('picture')) { + return false; + } + + return $this->getMedia('picture')->last(); + } } diff --git a/resources/views/auth/users/edit.blade.php b/resources/views/auth/users/edit.blade.php index ba44e9bf7..1c2d1b9b0 100644 --- a/resources/views/auth/users/edit.blade.php +++ b/resources/views/auth/users/edit.blade.php @@ -71,9 +71,34 @@ $('#picture').fancyfile({ text : '{{ trans('general.form.select.file') }}', style : 'btn-default', - placeholder : 'picture; ?>' + @if($user->picture) + placeholder : 'picture->basename; ?>' + @else + placeholder : '{{ trans('general.form.no_file_selected') }}' + @endif }); + @if($user->picture) + picture_html = ''; + picture_html += ' '; + picture_html += ' '; + picture_html += ' {{ $user->picture->basename }}'; + picture_html += ' '; + picture_html += ' '; + picture_html += ' {!! Form::open(['id' => 'picture-' . $user->picture->id, 'method' => 'DELETE', 'url' => [url('uploads/' . $user->picture->id)], 'style' => 'display:inline']) !!}'; + picture_html += ' '; + picture_html += ' '; + picture_html += ' '; + picture_html += ' {!! Form::close() !!}'; + picture_html += ''; + + $('.fancy-file .fake-file').append(picture_html); + + $(document).on('click', '#remove-picture', function (e) { + confirmDelete("#picture-{!! $user->picture->id !!}", "{!! trans('general.attachment') !!}", "{!! trans('general.delete_confirm', ['name' => '' . $user->picture->basename . '', 'type' => strtolower(trans('general.attachment'))]) !!}", "{!! trans('general.cancel') !!}", "{!! trans('general.delete') !!}"); + }); + @endif + $('input[type=checkbox]').iCheck({ checkboxClass: 'icheckbox_square-green', radioClass: 'iradio_square-green', diff --git a/resources/views/auth/users/index.blade.php b/resources/views/auth/users/index.blade.php index 5504819a4..6b71dedab 100644 --- a/resources/views/auth/users/index.blade.php +++ b/resources/views/auth/users/index.blade.php @@ -44,7 +44,7 @@ @if ($item->picture) - {{ $item->name }} + {{ $item->name }} @endif {{ $item->name }} diff --git a/resources/views/companies/companies/edit.blade.php b/resources/views/companies/companies/edit.blade.php index f3f64f50b..3cb4cdc69 100644 --- a/resources/views/companies/companies/edit.blade.php +++ b/resources/views/companies/companies/edit.blade.php @@ -63,6 +63,8 @@ style : 'btn-default', @if($company->logo) placeholder : 'logo->basename; ?>' + @else + placeholder : '{{ trans('general.form.no_file_selected') }}' @endif }); diff --git a/resources/views/customers/profile/edit.blade.php b/resources/views/customers/profile/edit.blade.php index aaf544b35..72bcf67d2 100644 --- a/resources/views/customers/profile/edit.blade.php +++ b/resources/views/customers/profile/edit.blade.php @@ -62,7 +62,11 @@ $('#picture').fancyfile({ text : '{{ trans('general.form.select.file') }}', style : 'btn-default', + @if($user->picture) placeholder : 'picture; ?>' + @else + placeholder : '{{ trans('general.form.no_file_selected') }}' + @endif }); }); diff --git a/resources/views/expenses/bills/edit.blade.php b/resources/views/expenses/bills/edit.blade.php index 5c87e0524..93d52a6a6 100644 --- a/resources/views/expenses/bills/edit.blade.php +++ b/resources/views/expenses/bills/edit.blade.php @@ -206,6 +206,8 @@ style : 'btn-default', @if($bill->attachment) placeholder : 'attachment->basename; ?>' + @else + placeholder : '{{ trans('general.form.no_file_selected') }}' @endif }); diff --git a/resources/views/expenses/payments/edit.blade.php b/resources/views/expenses/payments/edit.blade.php index 92f723f77..f32d3fdc1 100644 --- a/resources/views/expenses/payments/edit.blade.php +++ b/resources/views/expenses/payments/edit.blade.php @@ -94,6 +94,8 @@ style : 'btn-default', @if($payment->attachment) placeholder : 'attachment->basename; ?>' + @else + placeholder : '{{ trans('general.form.no_file_selected') }}' @endif }); diff --git a/resources/views/incomes/invoices/edit.blade.php b/resources/views/incomes/invoices/edit.blade.php index 7834e0cf8..a5b949116 100644 --- a/resources/views/incomes/invoices/edit.blade.php +++ b/resources/views/incomes/invoices/edit.blade.php @@ -205,6 +205,8 @@ style : 'btn-default', @if($invoice->attachment) placeholder : 'attachment->basename; ?>' + @else + placeholder : '{{ trans('general.form.no_file_selected') }}' @endif }); diff --git a/resources/views/incomes/revenues/edit.blade.php b/resources/views/incomes/revenues/edit.blade.php index c25a3d437..1fa8bac12 100644 --- a/resources/views/incomes/revenues/edit.blade.php +++ b/resources/views/incomes/revenues/edit.blade.php @@ -94,6 +94,8 @@ style : 'btn-default', @if($revenue->attachment) placeholder : 'attachment->basename; ?>' + @else + placeholder : '{{ trans('general.form.no_file_selected') }}' @endif }); diff --git a/resources/views/items/items/edit.blade.php b/resources/views/items/items/edit.blade.php index f85595288..555b74e36 100644 --- a/resources/views/items/items/edit.blade.php +++ b/resources/views/items/items/edit.blade.php @@ -70,8 +70,33 @@ $('#picture').fancyfile({ text : '{{ trans('general.form.select.file') }}', style : 'btn-default', - placeholder : 'picture; ?>' + @if($item->picture) + placeholder : 'picture->basename; ?>' + @else + placeholder : '{{ trans('general.form.no_file_selected') }}' + @endif }); + + @if($item->picture) + picture_html = ''; + picture_html += ' '; + picture_html += ' '; + picture_html += ' {{ $item->picture->basename }}'; + picture_html += ' '; + picture_html += ' '; + picture_html += ' {!! Form::open(['id' => 'picture-' . $item->picture->id, 'method' => 'DELETE', 'url' => [url('uploads/' . $item->picture->id)], 'style' => 'display:inline']) !!}'; + picture_html += ' '; + picture_html += ' '; + picture_html += ' '; + picture_html += ' {!! Form::close() !!}'; + picture_html += ''; + + $('.fancy-file .fake-file').append(picture_html); + + $(document).on('click', '#remove-picture', function (e) { + confirmDelete("#picture-{!! $item->picture->id !!}", "{!! trans('general.attachment') !!}", "{!! trans('general.delete_confirm', ['name' => '' . $item->picture->basename . '', 'type' => strtolower(trans('general.attachment'))]) !!}", "{!! trans('general.cancel') !!}", "{!! trans('general.delete') !!}"); + }); + @endif }); @endpush diff --git a/resources/views/items/items/index.blade.php b/resources/views/items/items/index.blade.php index 74271f61e..bedfa54b6 100644 --- a/resources/views/items/items/index.blade.php +++ b/resources/views/items/items/index.blade.php @@ -46,7 +46,7 @@ @foreach($items as $item) - {{ $item->name }} + {{ $item->name }} {{ $item->name }} {{ $item->category ? $item->category->name : trans('general.na') }} {{ $item->quantity }} diff --git a/resources/views/partials/admin/header.blade.php b/resources/views/partials/admin/header.blade.php index da4735265..7da62347f 100644 --- a/resources/views/partials/admin/header.blade.php +++ b/resources/views/partials/admin/header.blade.php @@ -166,7 +166,7 @@ @if (setting('general.use_gravatar', '0') == '1') User Image @else - User Image + User Image @endif @else @@ -182,7 +182,7 @@ @if (setting('general.use_gravatar', '0') == '1') User Image @else - User Image + User Image @endif @else diff --git a/resources/views/partials/customer/header.blade.php b/resources/views/partials/customer/header.blade.php index 27d5c3437..f7cd661bf 100644 --- a/resources/views/partials/customer/header.blade.php +++ b/resources/views/partials/customer/header.blade.php @@ -60,7 +60,7 @@
  • @if ($user->picture) - User Image + User Image @else @endif diff --git a/resources/views/settings/settings/edit.blade.php b/resources/views/settings/settings/edit.blade.php index bea4802c4..1ecbeca75 100644 --- a/resources/views/settings/settings/edit.blade.php +++ b/resources/views/settings/settings/edit.blade.php @@ -203,15 +203,64 @@ $('#company_logo').fancyfile({ text : '{{ trans('general.form.select.file') }}', style : 'btn-default', - placeholder : 'pull('company_logo'); ?>' + @if($setting['company_logo']) + placeholder : 'basename; ?>' + @else + placeholder : '{{ trans('general.form.no_file_selected') }}' + @endif }); + @if($setting['company_logo']) + company_logo_html = ''; + company_logo_html += ' '; + company_logo_html += ' '; + company_logo_html += ' {!! Form::open(['id' => 'company_logo-' . $setting['company_logo']->id, 'method' => 'DELETE', 'url' => [url('uploads/' . $setting['company_logo']->id)], 'style' => 'display:inline']) !!}'; + company_logo_html += ' '; + company_logo_html += ' {!! Form::close() !!}'; + company_logo_html += ''; + + $('#company .fancy-file .fake-file').append(company_logo_html); + + $(document).on('click', '#remove-company_logo', function (e) { + confirmDelete("#company_logo-{!! $setting['company_logo']->id !!}", "{!! trans('general.attachment') !!}", "{!! trans('general.delete_confirm', ['name' => '' . $setting['company_logo']->basename . '', 'type' => strtolower(trans('general.attachment'))]) !!}", "{!! trans('general.cancel') !!}", "{!! trans('general.delete') !!}"); + }); + @endif + $('#invoice_logo').fancyfile({ text : '{{ trans('general.form.select.file') }}', style : 'btn-default', - placeholder : 'pull('invoice_logo'); ?>' + @if($setting['invoice_logo']) + placeholder : 'basename; ?>' + @else + placeholder : '{{ trans('general.form.no_file_selected') }}' + @endif }); + @if($setting['invoice_logo']) + invoice_logo_html = ''; + + $('#invoice .fancy-file .fake-file').append(invoice_logo_html); + + $(document).on('click', '#remove-invoice_logo', function (e) { + confirmDelete("#invoice_logo-{!! $setting['invoice_logo']->id !!}", "{!! trans('general.attachment') !!}", "{!! trans('general.delete_confirm', ['name' => '' . $setting['invoice_logo']->basename . '', 'type' => strtolower(trans('general.attachment'))]) !!}", "{!! trans('general.cancel') !!}", "{!! trans('general.delete') !!}"); + }); + @endif $("select[name='email_protocol']").on('change', function() { var selection = $(this).val();