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')
+
+
+ -
+ {{ link_to_route(
+ 'projects.index',
+ trans('project.projects'),
+ ['status' => request('status', $project->status_id)]
+ ) }}
+ - {{ $project->nameLink() }}
+ - {{ link_to_route('projects.payments', trans('payment.list'), [$project->id]) }}
+ - {{ trans('payment.create_fee') }}
+
+
+
+
+ {!! 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')])
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,
+ ]);
+ }
+
+}