diff --git a/app/Entities/Subscriptions/Subscription.php b/app/Entities/Subscriptions/Subscription.php index 19e02ee..e479378 100755 --- a/app/Entities/Subscriptions/Subscription.php +++ b/app/Entities/Subscriptions/Subscription.php @@ -2,6 +2,7 @@ namespace App\Entities\Subscriptions; +use Carbon\Carbon; use Illuminate\Database\Eloquent\Model; use Laracasts\Presenter\PresentableTrait; @@ -12,6 +13,26 @@ class Subscription extends Model protected $presenter = 'App\Entities\Subscriptions\SubscriptionPresenter'; protected $guarded = ['id', 'created_at', 'updated_at']; + public function nameLink() + { + return link_to_route('subscriptions.show', $this->name, [$this->id], [ + 'title' => trans( + 'app.show_detail_title', + ['name' => $this->name, 'type' => trans('subscription.subscription')] + ), + ]); + } + + public function nearOfDueDate() + { + return Carbon::parse($this->due_date)->diffInDays(Carbon::now()) < 60; + } + + public function nearOfDueDateSign() + { + return $this->nearOfDueDate() ? '' : ''; + } + public function project() { return $this->belongsTo('App\Entities\Projects\Project'); diff --git a/app/Http/Controllers/SubscriptionsController.php b/app/Http/Controllers/SubscriptionsController.php index 546f320..db1daeb 100755 --- a/app/Http/Controllers/SubscriptionsController.php +++ b/app/Http/Controllers/SubscriptionsController.php @@ -5,9 +5,7 @@ namespace App\Http\Controllers; use App\Entities\Subscriptions\Subscription; use App\Entities\Subscriptions\SubscriptionsRepository; use App\Http\Controllers\Controller; -use App\Http\Requests\Subscriptions\CreateRequest; -use App\Http\Requests\Subscriptions\DeleteRequest; -use App\Http\Requests\Subscriptions\UpdateRequest; +use App\Http\Requests\SubscriptionRequest as FormRequest; use Illuminate\Http\Request; class SubscriptionsController extends Controller @@ -36,21 +34,9 @@ class SubscriptionsController extends Controller return view('subscriptions.create', compact('projects', 'vendors', 'subscriptionTypes')); } - public function store(CreateRequest $request) + public function store(FormRequest $subscriptionCreateRequest) { - $project = \App\Entities\Projects\Project::findOrFail($request->get('project_id')); - - $subscription = new Subscription; - $subscription->project_id = $project->id; - $subscription->vendor_id = $request->get('vendor_id'); - $subscription->customer_id = $project->customer_id; - $subscription->name = $request->get('name'); - $subscription->price = $request->get('price'); - $subscription->start_date = $request->get('start_date'); - $subscription->due_date = $request->get('due_date'); - $subscription->type_id = $request->get('type_id'); - $subscription->notes = $request->get('notes'); - $subscription->save(); + $subscriptionCreateRequest->approveFor(new Subscription); flash()->success(trans('subscription.created')); return redirect()->route('subscriptions.index'); @@ -67,36 +53,24 @@ class SubscriptionsController extends Controller $vendors = $this->repo->getVendorsList(); $subscriptionTypes = $this->getSubscriptionTypes(); - return view('subscriptions.edit', compact('subscription', 'projects', 'vendors', 'subscriptionTypes')); + $pageTitle = trans('subscription.edit').' - '.$subscription->name.' - '.$subscription->customer->name; + + return view('subscriptions.edit', compact('subscription', 'projects', 'vendors', 'subscriptionTypes', 'pageTitle')); } - public function update(UpdateRequest $request, Subscription $subscription) + public function update(FormRequest $subscriptionUpdateRequest, Subscription $subscription) { - $project = \App\Entities\Projects\Project::findOrFail($request->get('project_id')); - - $subscriptionData = $request->except(['_method', '_token']); - $subscriptionData['customer_id'] = $project->customer_id; - - $subscription->update($subscriptionData); + $subscriptionUpdateRequest->approveFor($subscription); flash()->success(trans('subscription.updated')); return redirect()->route('subscriptions.edit', $subscription->id); } - public function delete(Subscription $subscription) - { - return view('subscriptions.delete', compact('subscription')); - } - - public function destroy(DeleteRequest $request, Subscription $subscription) + public function destroy(FormRequest $subscriptionDeleteRequest, Subscription $subscription) { - if ($subscription->id == $request->get('subscription_id')) { - $subscription->delete(); - flash()->success(trans('subscription.deleted')); - } else { - flash()->error(trans('subscription.undeleted')); - } + $subscriptionDeleteRequest->approveToDelete($subscription); + flash()->success(trans('subscription.deleted')); return redirect()->route('subscriptions.index'); } diff --git a/app/Http/Requests/SubscriptionRequest.php b/app/Http/Requests/SubscriptionRequest.php new file mode 100644 index 0000000..4cde10a --- /dev/null +++ b/app/Http/Requests/SubscriptionRequest.php @@ -0,0 +1,117 @@ +user()->can('manage_subscriptions'); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + switch ($this->method()) { + case 'POST': + return $this->getCreateRules(); + break; + + case 'PATCH': + return $this->getUpdateRules(); + break; + + case 'DELETE': + return $this->getDeleteRules(); + break; + + default: + break; + } + } + + public function getCreateRules() + { + return [ + 'name' => 'required|max:60', + 'price' => 'required|numeric', + 'start_date' => 'required|date|date_format:Y-m-d', + 'due_date' => 'required|date|date_format:Y-m-d', + 'project_id' => 'required|numeric|exists:projects,id', + 'vendor_id' => 'required|numeric|exists:vendors,id', + 'type_id' => 'required|numeric', + 'remark' => 'max:255', + ]; + } + + public function getUpdateRules() + { + return [ + 'name' => 'required|max:60', + 'price' => 'required|numeric', + 'start_date' => 'required|date|date_format:Y-m-d', + 'due_date' => 'required|date|date_format:Y-m-d', + 'project_id' => 'required|numeric|exists:projects,id', + 'vendor_id' => 'required|numeric|exists:vendors,id', + 'type_id' => 'required|numeric', + 'remark' => 'max:255', + ]; + } + + public function getDeleteRules() + { + // dd($this->route('subscription')); + // dd($this->all(), $this->segment(2)); + return [ + 'subscription_id' => 'required|in:'.$this->segment(2), + ]; + } + + public function approveFor(Subscription $subscription) + { + $project = Project::findOrFail($this->get('project_id')); + + if ($subscription->exists) { + $subscriptionData = $this->except(['_method', '_token']); + $subscriptionData['customer_id'] = $project->customer_id; + + $subscription->update($subscriptionData); + + } else { + + $subscription->project_id = $project->id; + $subscription->vendor_id = $this->get('vendor_id'); + $subscription->customer_id = $project->customer_id; + $subscription->name = $this->get('name'); + $subscription->price = $this->get('price'); + $subscription->start_date = $this->get('start_date'); + $subscription->due_date = $this->get('due_date'); + $subscription->type_id = $this->get('type_id'); + $subscription->notes = $this->get('notes'); + + $subscription->save(); + } + + return $subscription; + } + + public function approveToDelete(Subscription $subscription) + { + $subscription->delete(); + } + +} diff --git a/app/Http/Requests/Subscriptions/CreateRequest.php b/app/Http/Requests/Subscriptions/CreateRequest.php deleted file mode 100644 index a883dd3..0000000 --- a/app/Http/Requests/Subscriptions/CreateRequest.php +++ /dev/null @@ -1,39 +0,0 @@ -user()->can('manage_subscriptions'); - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules() - { - return [ - 'name' => 'required|max:60', - 'price' => 'required|numeric', - 'start_date' => 'required|date|date_format:Y-m-d', - 'due_date' => 'required|date|date_format:Y-m-d', - 'project_id' => 'required|numeric|exists:projects,id', - 'vendor_id' => 'required|numeric|exists:vendors,id', - 'type_id' => 'required|numeric', - 'remark' => 'max:255', - ]; - } - -} diff --git a/app/Http/Requests/Subscriptions/DeleteRequest.php b/app/Http/Requests/Subscriptions/DeleteRequest.php deleted file mode 100644 index 675db2a..0000000 --- a/app/Http/Requests/Subscriptions/DeleteRequest.php +++ /dev/null @@ -1,31 +0,0 @@ -user()->can('manage_subscriptions'); - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules() - { - return [ - 'subscription_id' => 'required' - ]; - } - -} diff --git a/app/Http/Requests/Subscriptions/UpdateRequest.php b/app/Http/Requests/Subscriptions/UpdateRequest.php deleted file mode 100644 index bc9b4ea..0000000 --- a/app/Http/Requests/Subscriptions/UpdateRequest.php +++ /dev/null @@ -1,39 +0,0 @@ -user()->can('manage_subscriptions'); - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules() - { - return [ - 'name' => 'required|max:60', - 'price' => 'required|numeric', - 'start_date' => 'required|date|date_format:Y-m-d', - 'due_date' => 'required|date|date_format:Y-m-d', - 'project_id' => 'required|numeric', - 'vendor_id' => 'required|numeric', - 'type_id' => 'required|numeric', - 'remark' => 'max:255', - ]; - } - -} diff --git a/resources/lang/id/subscription.php b/resources/lang/id/subscription.php index f2d32ee..f5763c9 100644 --- a/resources/lang/id/subscription.php +++ b/resources/lang/id/subscription.php @@ -5,6 +5,8 @@ return [ // Labels 'subscription' => 'Langganan', 'subscriptions' => 'Daftar Langganan', + 'list' => 'Daftar Langganan', + 'detail' => 'Detail Langganan', 'search' => 'Cari Langganan', 'found' => 'Langganan ditemukan', 'not_found' => 'Langganan tidak ditemukan', @@ -14,7 +16,7 @@ return [ // Actions 'create' => 'Input Langganan Baru', 'created' => 'Input Langganan baru telah berhasil.', - 'show' => 'Detail Langganan', + 'show' => 'Lihat Detail Langganan', 'edit' => 'Edit Langganan', 'update' => 'Update Langganan', 'updated' => 'Update data Langganan telah berhasil.', diff --git a/resources/views/subscriptions/delete.blade.php b/resources/views/subscriptions/delete.blade.php deleted file mode 100755 index c00d4da..0000000 --- a/resources/views/subscriptions/delete.blade.php +++ /dev/null @@ -1,18 +0,0 @@ -@extends('layouts.app') - -@section('title', trans('subscription.delete')) - -@section('content') -
{!! link_to_route('subscriptions.show', trans('subscription.show'), [$subscription->id], ['class' => 'btn btn-info']) !!}
+{!! link_to_route('subscriptions.index', trans('subscription.back_to_index'), [], ['class' => 'btn btn-default']) !!}
+{!! link_to_route('subscriptions.edit', trans('subscription.delete'), [$subscription->id, 'action' => 'delete'], ['class'=>'btn btn-danger']) !!}
+| {{ trans('subscription.project') }} | {{ $subscription->project->name }} |
| {{ trans('subscription.name') }} | {{ $subscription->name }} |
| {{ trans('subscription.price') }} | {{ formatRp($subscription->price) }} |
| {{ trans('subscription.type') }} | {{ $subscription->type }} |
| {{ trans('subscription.start_date') }} | {{ dateId($subscription->start_date) }} |
| {{ trans('subscription.due_date') }} | {{ dateId($subscription->due_date) }} |
| {{ trans('subscription.customer') }} | {{ $subscription->customer->name }} |
| {{ trans('subscription.project') }} | -- {{ link_to_route('projects.subscriptions', $subscription->project->name, [$subscription->project_id], ['target' => '_blank']) }} - | -
| {{ trans('subscription.notes') }} | {!! nl2br($subscription->notes) !!} |
| {{ trans('subscription.project') }} | {{ $subscription->project->name }} |
| {{ trans('subscription.name') }} | {{ $subscription->name }} |
| {{ trans('subscription.price') }} | {{ formatRp($subscription->price) }} |
| {{ trans('subscription.type') }} | {{ $subscription->type }} |
| {{ trans('subscription.start_date') }} | {{ dateId($subscription->start_date) }} |
| {{ trans('subscription.due_date') }} | {{ dateId($subscription->due_date) }} |
| {{ trans('subscription.customer') }} | {{ $subscription->customer->name }} |
| {{ trans('subscription.project') }} | ++ {{ link_to_route('projects.subscriptions', $subscription->project->name, [$subscription->project_id], ['target' => '_blank']) }} + | +
| {{ trans('subscription.notes') }} | {!! nl2br($subscription->notes) !!} |