diff --git a/app/Http/Controllers/Expenses/Bills.php b/app/Http/Controllers/Expenses/Bills.php index 1fb79fd06..18d535fcb 100644 --- a/app/Http/Controllers/Expenses/Bills.php +++ b/app/Http/Controllers/Expenses/Bills.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Expenses; use App\Events\BillCreated; +//use App\Events\BillPrinting; use App\Events\BillUpdated; use App\Http\Controllers\Controller; use App\Http\Requests\Expense\Bill as Request; @@ -19,12 +20,16 @@ use App\Models\Item\Item; use App\Models\Setting\Category; use App\Models\Setting\Currency; use App\Models\Setting\Tax; +use App\Models\Common\Media; use App\Traits\Currencies; use App\Traits\DateTime; use App\Traits\Uploads; use App\Utilities\ImportFile; use App\Utilities\Modules; use Date; +use File; +use Image; +use Storage; class Bills extends Controller { @@ -394,10 +399,10 @@ class Bills extends Controller $bill->attachMedia($media, 'attachment'); } - // Delete previous invoice totals + // Delete previous bill totals BillTotal::where('bill_id', $bill->id)->delete(); - // Add invoice totals + // Add bill totals $this->addTotals($bill, $request, $taxes, $sub_total, $tax_total); // Fire the event to make it extendible @@ -465,17 +470,11 @@ class Bills extends Controller */ public function printBill(Bill $bill) { - $paid = 0; + $bill = $this->prepareBill($bill); - foreach ($bill->payments as $item) { - $item->default_currency_code = $bill->currency_code; + $logo = $this->getLogo($bill); - $paid += $item->getDynamicConvertedAmount(); - } - - $bill->paid = $paid; - - return view('expenses.bills.bill', compact('bill')); + return view($bill->template_path, compact('bill', 'logo')); } /** @@ -487,22 +486,16 @@ class Bills extends Controller */ public function pdfBill(Bill $bill) { - $paid = 0; + $bill = $this->prepareBill($bill); - foreach ($bill->payments as $item) { - $item->default_currency_code = $bill->currency_code; + $logo = $this->getLogo($bill); - $paid += $item->getDynamicConvertedAmount(); - } - - $bill->paid = $paid; - - $html = view('expenses.bills.bill', compact('bill'))->render(); + $html = view($bill->template_path, compact('bill', 'logo'))->render(); $pdf = \App::make('dompdf.wrapper'); $pdf->loadHTML($html); - $file_name = 'bill_'.time().'.pdf'; + $file_name = 'bill_' . time() . '.pdf'; return $pdf->download($file_name); } @@ -615,6 +608,25 @@ class Bills extends Controller return redirect()->back(); } + protected function prepareBill(Bill $bill) + { + $paid = 0; + + foreach ($bill->payments as $item) { + $item->default_currency_code = $bill->currency_code; + + $paid += $item->getDynamicConvertedAmount(); + } + + $bill->paid = $paid; + + $bill->template_path = 'expenses.bills.bill'; + + //event(new BillPrinting($bill)); + + return $bill; + } + protected function addTotals($bill, $request, $taxes, $sub_total, $tax_total) { $sort_order = 1; @@ -658,26 +670,26 @@ class Bills extends Controller ]); } - protected function getLogo() + protected function getLogo($bill) { $logo = ''; $media_id = setting('general.company_logo'); - if (setting('general.invoice_logo')) { - $media_id = setting('general.invoice_logo'); + if (isset($bill->vendor->logo) && !empty($bill->vendor->logo->id)) { + $media_id = $bill->vendor->logo->id; } $media = Media::find($media_id); - if (empty($media)) { - return $logo; - } + if (!empty($media)) { + $path = Storage::path($media->getDiskPath()); - $path = Storage::path($media->getDiskPath()); - - if (!is_file($path)) { - return $logo; + if (!is_file($path)) { + return $logo; + } + } else { + $path = asset('public/img/company.png'); } $image = Image::make($path)->encode()->getEncoded(); diff --git a/app/Http/Controllers/Expenses/Vendors.php b/app/Http/Controllers/Expenses/Vendors.php index 3f412300b..76aa73dc1 100644 --- a/app/Http/Controllers/Expenses/Vendors.php +++ b/app/Http/Controllers/Expenses/Vendors.php @@ -6,10 +6,12 @@ use App\Http\Controllers\Controller; use App\Http\Requests\Expense\Vendor as Request; use App\Models\Expense\Vendor; use App\Models\Setting\Currency; +use App\Traits\Uploads; use App\Utilities\ImportFile; class Vendors extends Controller { + use Uploads; /** * Display a listing of the resource. @@ -48,7 +50,14 @@ class Vendors extends Controller $request['email'] = ''; } - Vendor::create($request->all()); + $vendor = Vendor::create($request->all()); + + // Upload logo + if ($request->file('logo')) { + $media = $this->getMedia($request->file('logo'), 'vendors'); + + $vendor->attachMedia($media, 'logo'); + } $message = trans('messages.success.added', ['type' => trans_choice('general.vendors', 1)]); @@ -135,6 +144,13 @@ class Vendors extends Controller $vendor->update($request->all()); + // Upload logo + if ($request->file('logo')) { + $media = $this->getMedia($request->file('logo'), 'vendors'); + + $vendor->attachMedia($media, 'logo'); + } + $message = trans('messages.success.updated', ['type' => trans_choice('general.vendors', 1)]); flash($message)->success(); diff --git a/app/Models/Expense/Vendor.php b/app/Models/Expense/Vendor.php index bc2090da0..3c5d246f5 100644 --- a/app/Models/Expense/Vendor.php +++ b/app/Models/Expense/Vendor.php @@ -5,10 +5,11 @@ namespace App\Models\Expense; use App\Models\Model; use Bkwld\Cloner\Cloneable; use Sofa\Eloquence\Eloquence; +use App\Traits\Media; class Vendor extends Model { - use Cloneable, Eloquence; + use Cloneable, Eloquence, Media; protected $table = 'vendors'; @@ -53,4 +54,20 @@ class Vendor extends Model { return $this->belongsTo('App\Models\Setting\Currency', 'currency_code', 'code'); } + + /** + * Get the current balance. + * + * @return string + */ + public function getLogoAttribute($value) + { + if (!empty($value) && !$this->hasMedia('logo')) { + return $value; + } elseif (!$this->hasMedia('logo')) { + return false; + } + + return $this->getMedia('logo')->last(); + } } diff --git a/resources/lang/en-GB/general.php b/resources/lang/en-GB/general.php index f699e91c9..627a417e7 100644 --- a/resources/lang/en-GB/general.php +++ b/resources/lang/en-GB/general.php @@ -26,6 +26,7 @@ return [ 'companies' => 'Company|Companies', 'profits' => 'Profit|Profits', 'taxes' => 'Tax|Taxes', + 'logos' => 'Logo|Logos', 'pictures' => 'Picture|Pictures', 'types' => 'Type|Types', 'payment_methods' => 'Payment Method|Payment Methods', diff --git a/resources/views/expenses/bills/bill.blade.php b/resources/views/expenses/bills/bill.blade.php index f04a05afd..c35c2142d 100644 --- a/resources/views/expenses/bills/bill.blade.php +++ b/resources/views/expenses/bills/bill.blade.php @@ -6,10 +6,8 @@
- @if (setting('general.invoice_logo')) - - @else - + @if ($logo) + @endif
diff --git a/resources/views/expenses/bills/show.blade.php b/resources/views/expenses/bills/show.blade.php index 46508b6e2..66c2d21f9 100644 --- a/resources/views/expenses/bills/show.blade.php +++ b/resources/views/expenses/bills/show.blade.php @@ -9,10 +9,10 @@
- @if (setting('general.invoice_logo')) - + @if (isset($bill->vendor->logo) && !empty($bill->vendor->logo->id)) + @else - + @endif
diff --git a/resources/views/expenses/vendors/create.blade.php b/resources/views/expenses/vendors/create.blade.php index fd0f12fb2..faee66d82 100644 --- a/resources/views/expenses/vendors/create.blade.php +++ b/resources/views/expenses/vendors/create.blade.php @@ -5,7 +5,7 @@ @section('content')
- {!! Form::open(['url' => 'expenses/vendors', 'role' => 'form']) !!} + {!! Form::open(['url' => 'expenses/vendors', 'files' => true, 'role' => 'form']) !!}
{{ Form::textGroup('name', trans('general.name'), 'id-card-o') }} @@ -22,6 +22,8 @@ {{ Form::textareaGroup('address', trans('general.address')) }} + {{ Form::fileGroup('logo', trans_choice('general.pictures', 1)) }} + {{ Form::radioGroup('enabled', trans('general.enabled')) }}
@@ -35,6 +37,14 @@
@endsection +@push('js') + +@endpush + +@push('css') + +@endpush + @push('scripts') @endpush diff --git a/resources/views/expenses/vendors/edit.blade.php b/resources/views/expenses/vendors/edit.blade.php index 082969e78..48c1682db 100644 --- a/resources/views/expenses/vendors/edit.blade.php +++ b/resources/views/expenses/vendors/edit.blade.php @@ -7,6 +7,7 @@
{!! Form::model($vendor, [ 'method' => 'PATCH', + 'files' => true, 'url' => ['expenses/vendors', $vendor->id], 'role' => 'form' ]) !!} @@ -26,6 +27,8 @@ {{ Form::textareaGroup('address', trans('general.address')) }} + {{ Form::fileGroup('logo', trans_choice('general.logos', 1)) }} + {{ Form::radioGroup('enabled', trans('general.enabled')) }}
@@ -40,6 +43,14 @@
@endsection +@push('js') + +@endpush + +@push('css') + +@endpush + @push('scripts') @endpush