diff --git a/app/Http/Controllers/Projects/FeesController.php b/app/Http/Controllers/Projects/FeesController.php new file mode 100644 index 0000000..7add015 --- /dev/null +++ b/app/Http/Controllers/Projects/FeesController.php @@ -0,0 +1,41 @@ + + */ +class FeesController extends Controller +{ + public function create(Project $project) + { + $partners = User::pluck('name', 'id')->all(); + return view('projects.fees.create', compact('project', 'partners')); + } + + public function store(Project $project) + { + $newPaymentData = request()->validate([ + 'type_id' => 'required|numeric', + 'date' => 'required|date', + 'amount' => 'required|numeric', + 'partner_id' => 'required|exists:users,id', + 'description' => 'required|string', + ]); + $newPaymentData['in_out'] = 0; + $newPaymentData['project_id'] = $project->id; + $newPaymentData['partner_type'] = User::class; + + Payment::create($newPaymentData); + + flash()->success(trans('payment.created')); + return redirect()->route('projects.payments', $project->id); + } +} diff --git a/resources/lang/id/payment.php b/resources/lang/id/payment.php index 893bfda..9f6a935 100644 --- a/resources/lang/id/payment.php +++ b/resources/lang/id/payment.php @@ -4,6 +4,7 @@ return [ // Labels 'payment' => 'Pembayaran', 'payments' => 'Daftar Pembayaran', + 'list' => 'List Pembayaran', 'found' => 'Pembayaran ditemukan', 'not_found' => 'Pembayaran tidak ditemukan', 'empty' => 'Belum ada Pembayaran', @@ -14,18 +15,19 @@ return [ 'words_amount' => 'Terbilang', // Actions - 'create' => 'Input Pembayaran Baru', - 'created' => 'Input Pembayaran baru telah berhasil.', - 'show' => 'Lihat Detail Pembayaran', - 'detail' => 'Detail Pembayaran', - 'edit' => 'Edit Pembayaran', - 'update' => 'Update Pembayaran', - 'updated' => 'Update data Pembayaran telah berhasil.', - 'delete' => 'Hapus Pembayaran', - 'deleted' => 'Hapus data Pembayaran telah berhasil.', - 'undeleted' => 'Data Pembayaran gagal dihapus.', - 'search' => 'Cari Pembayaran Project', - 'print' => 'Cetak Kuitansi', + 'create' => 'Input Pembayaran Baru', + 'create_fee' => 'Input Pembayaran Fee', + 'created' => 'Input Pembayaran baru telah berhasil.', + 'show' => 'Lihat Detail Pembayaran', + 'detail' => 'Detail Pembayaran', + 'edit' => 'Edit Pembayaran', + 'update' => 'Update Pembayaran', + 'updated' => 'Update data Pembayaran telah berhasil.', + 'delete' => 'Hapus Pembayaran', + 'deleted' => 'Hapus data Pembayaran telah berhasil.', + 'undeleted' => 'Data Pembayaran gagal dihapus.', + 'search' => 'Cari Pembayaran Project', + 'print' => 'Cetak Kuitansi', // Attrubutes 'id' => 'ID Pembayaran', diff --git a/resources/views/projects/fees/create.blade.php b/resources/views/projects/fees/create.blade.php new file mode 100644 index 0000000..4fba10f --- /dev/null +++ b/resources/views/projects/fees/create.blade.php @@ -0,0 +1,86 @@ +@extends('layouts.app') + +@section('title', trans('payment.create_fee')) + +@section('content') + + + +
+
+ {!! Form::open(['route' => ['projects.fees.store', $project->id]]) !!} +
+

{{ trans('payment.create_fee') }}

+
+
+
+ {!! FormField::select( + 'partner_id', + $partners, + [ + 'placeholder' => 'Pilih Pekerja', + 'label' => trans('payment.customer'), + 'value' => Request::get('customer_id'), + ] + ) !!} +
+
+ {!! FormField::text('date',['label'=> trans('payment.date')]) !!} +
+
+ {!! FormField::price('amount', ['label'=> trans('payment.amount')]) !!} +
+
+
+
+ {!! FormField::radios( + 'type_id', + PaymentType::toArray(), + ['label' => trans('payment.type'), 'value' => 1, 'list_style' => 'unstyled'] + ) !!} +
+
+ {!! FormField::textarea('description', ['label' => trans('payment.description'), 'rows' => 3]) !!} +
+
+
+ + +
+ {!! Form::close() !!} +
+
+@endsection + +@section('ext_css') + {!! Html::style(url('assets/css/plugins/jquery.datetimepicker.css')) !!} +@endsection + +@section('ext_js') + {!! Html::script(url('assets/js/plugins/jquery.datetimepicker.js')) !!} +@endsection + +@section('script') + +@endsection diff --git a/resources/views/projects/payments.blade.php b/resources/views/projects/payments.blade.php index 5a2c77b..8d4e789 100755 --- a/resources/views/projects/payments.blade.php +++ b/resources/views/projects/payments.blade.php @@ -3,11 +3,12 @@ @section('title', trans('project.payments') . ' | ' . $project->name) @section('content') -@include('projects.partials.breadcrumb',['title' => trans('project.payments')]) +@include('projects.partials.breadcrumb', ['title' => trans('project.payments')])

{!! html_link_to_route('payments.create', trans('payment.create'), ['project_id' => $project->id,'customer_id' => $project->customer_id], ['class' => 'btn btn-success','icon' => 'plus']) !!} + {!! html_link_to_route('projects.fees.create', trans('payment.create_fee'), ['project_id' => $project->id], ['class' => 'btn btn-default','icon' => 'plus']) !!}
{{ $project->name }} {{ trans('project.payments') }}

diff --git a/routes/web/projects.php b/routes/web/projects.php index a88f60d..a766333 100644 --- a/routes/web/projects.php +++ b/routes/web/projects.php @@ -7,13 +7,23 @@ Route::group(['middleware' => ['web', 'auth'], 'namespace' => 'Projects'], funct Route::get('projects/{id}/delete', ['as' => 'projects.delete', 'uses' => 'ProjectsController@delete']); Route::get('projects/{id}/jobs', ['as' => 'projects.jobs', 'uses' => 'ProjectsController@jobs']); Route::get('projects/{id}/jobs-export/{type?}', ['as' => 'projects.jobs-export', 'uses' => 'ProjectsController@jobsExport']); - Route::get('projects/{id}/payments', ['as' => 'projects.payments', 'uses' => 'ProjectsController@payments']); Route::get('projects/{id}/subscriptions', ['as' => 'projects.subscriptions', 'uses' => 'ProjectsController@subscriptions']); Route::post('projects/{id}/jobs-reorder', ['as' => 'projects.jobs-reorder', 'uses' => 'ProjectsController@jobsReorder']); Route::patch('projects/{id}/status-update', ['as' => 'projects.status-update', 'uses' => 'ProjectsController@statusUpdate']); Route::resource('projects', 'ProjectsController'); /** + * Project Payments Routes + */ + Route::get('projects/{id}/payments', ['as' => 'projects.payments', 'uses' => 'ProjectsController@payments']); + + /** + * Project Fees Routes + */ + Route::get('projects/{project}/fees/create', ['as' => 'projects.fees.create', 'uses' => 'FeesController@create']); + Route::post('projects/{project}/fees/store', ['as' => 'projects.fees.store', 'uses' => 'FeesController@store']); + + /** * Project Invoices Routes */ Route::get('projects/{project}/invoices', ['as' => 'projects.invoices', 'uses' => 'InvoicesController@index']); diff --git a/tests/Feature/Payments/ManageProjectFeesTest.php b/tests/Feature/Payments/ManageProjectFeesTest.php new file mode 100644 index 0000000..2b43304 --- /dev/null +++ b/tests/Feature/Payments/ManageProjectFeesTest.php @@ -0,0 +1,47 @@ +adminUserSigningIn(); + $worker = factory(User::class)->create(); + $project = factory(Project::class)->create(); + + $this->visit(route('projects.payments', $project->id)); + $this->seePageIs(route('projects.payments', $project->id)); + + $this->click(trans('payment.create_fee')); + $this->seePageIs(route('projects.fees.create', $project->id)); + + // // Fill Form + $this->submitForm(trans('payment.create'), [ + 'date' => '2015-05-01', + 'type_id' => 1, + 'amount' => 1000000, + 'partner_id' => $worker->id, + 'description' => 'Honor pengerjaan fitur a project '.$project->name, + ]); + + $this->see(trans('payment.created')); + $this->seePageIs(route('projects.payments', $project->id)); + + $this->seeInDatabase('payments', [ + 'project_id' => $project->id, + 'amount' => 1000000, + 'type_id' => 1, + 'in_out' => 0, + 'date' => '2015-05-01', + 'partner_type' => User::class, + 'partner_id' => $worker->id, + ]); + } + +}