Browse Source

Create project fee payment

pull/1/head
Nafies Luthfi 8 years ago
parent
commit
95f58c6ddf
  1. 41
      app/Http/Controllers/Projects/FeesController.php
  2. 2
      resources/lang/id/payment.php
  3. 86
      resources/views/projects/fees/create.blade.php
  4. 3
      resources/views/projects/payments.blade.php
  5. 12
      routes/web/projects.php
  6. 47
      tests/Feature/Payments/ManageProjectFeesTest.php

41
app/Http/Controllers/Projects/FeesController.php

@ -0,0 +1,41 @@
<?php
namespace App\Http\Controllers\Projects;
use App\Entities\Payments\Payment;
use App\Entities\Projects\Project;
use App\Entities\Users\User;
use App\Http\Controllers\Controller;
/**
* Project Fees Controller
*
* @author Nafies Luthfi <nafiesl@gmail.com>
*/
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);
}
}

2
resources/lang/id/payment.php

@ -4,6 +4,7 @@ return [
// Labels // Labels
'payment' => 'Pembayaran', 'payment' => 'Pembayaran',
'payments' => 'Daftar Pembayaran', 'payments' => 'Daftar Pembayaran',
'list' => 'List Pembayaran',
'found' => 'Pembayaran ditemukan', 'found' => 'Pembayaran ditemukan',
'not_found' => 'Pembayaran tidak ditemukan', 'not_found' => 'Pembayaran tidak ditemukan',
'empty' => 'Belum ada Pembayaran', 'empty' => 'Belum ada Pembayaran',
@ -15,6 +16,7 @@ return [
// Actions // Actions
'create' => 'Input Pembayaran Baru', 'create' => 'Input Pembayaran Baru',
'create_fee' => 'Input Pembayaran Fee',
'created' => 'Input Pembayaran baru telah berhasil.', 'created' => 'Input Pembayaran baru telah berhasil.',
'show' => 'Lihat Detail Pembayaran', 'show' => 'Lihat Detail Pembayaran',
'detail' => 'Detail Pembayaran', 'detail' => 'Detail Pembayaran',

86
resources/views/projects/fees/create.blade.php

@ -0,0 +1,86 @@
@extends('layouts.app')
@section('title', trans('payment.create_fee'))
@section('content')
<ul class="breadcrumb hidden-print">
<li>
{{ link_to_route(
'projects.index',
trans('project.projects'),
['status' => request('status', $project->status_id)]
) }}</li>
<li>{{ $project->nameLink() }}</li>
<li>{{ link_to_route('projects.payments', trans('payment.list'), [$project->id]) }}</li>
<li class="active">{{ trans('payment.create_fee') }}</li>
</ul>
<div class="row">
<div class="col-md-6">
{!! Form::open(['route' => ['projects.fees.store', $project->id]]) !!}
<div class="panel panel-default">
<div class="panel-heading"><h3 class="panel-title">{{ trans('payment.create_fee') }}</h3></div>
<div class="panel-body">
<div class="row">
<div class="col-md-4">
{!! FormField::select(
'partner_id',
$partners,
[
'placeholder' => 'Pilih Pekerja',
'label' => trans('payment.customer'),
'value' => Request::get('customer_id'),
]
) !!}
</div>
<div class="col-md-4">
{!! FormField::text('date',['label'=> trans('payment.date')]) !!}
</div>
<div class="col-md-4">
{!! FormField::price('amount', ['label'=> trans('payment.amount')]) !!}
</div>
</div>
<div class="row">
<div class="col-md-4">
{!! FormField::radios(
'type_id',
PaymentType::toArray(),
['label' => trans('payment.type'), 'value' => 1, 'list_style' => 'unstyled']
) !!}
</div>
<div class="col-md-8">
{!! FormField::textarea('description', ['label' => trans('payment.description'), 'rows' => 3]) !!}
</div>
</div>
</div>
<div class="panel-footer">
{!! Form::submit(trans('payment.create'), ['class'=>'btn btn-primary']) !!}
{{ link_to_route('projects.payments', trans('app.cancel'), [$project->id], ['class'=>'btn btn-default']) }}
</div>
</div>
{!! Form::close() !!}
</div>
</div>
@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')
<script>
(function() {
$('#date').datetimepicker({
timepicker:false,
format:'Y-m-d',
closeOnDateSelect: true
});
})();
</script>
@endsection

3
resources/views/projects/payments.blade.php

@ -3,11 +3,12 @@
@section('title', trans('project.payments') . ' | ' . $project->name) @section('title', trans('project.payments') . ' | ' . $project->name)
@section('content') @section('content')
@include('projects.partials.breadcrumb',['title' => trans('project.payments')])
@include('projects.partials.breadcrumb', ['title' => trans('project.payments')])
<h1 class="page-header"> <h1 class="page-header">
<div class="pull-right"> <div class="pull-right">
{!! 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('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']) !!}
</div> </div>
{{ $project->name }} <small>{{ trans('project.payments') }}</small> {{ $project->name }} <small>{{ trans('project.payments') }}</small>
</h1> </h1>

12
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}/delete', ['as' => 'projects.delete', 'uses' => 'ProjectsController@delete']);
Route::get('projects/{id}/jobs', ['as' => 'projects.jobs', 'uses' => 'ProjectsController@jobs']); 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}/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::get('projects/{id}/subscriptions', ['as' => 'projects.subscriptions', 'uses' => 'ProjectsController@subscriptions']);
Route::post('projects/{id}/jobs-reorder', ['as' => 'projects.jobs-reorder', 'uses' => 'ProjectsController@jobsReorder']); 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::patch('projects/{id}/status-update', ['as' => 'projects.status-update', 'uses' => 'ProjectsController@statusUpdate']);
Route::resource('projects', 'ProjectsController'); 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 * Project Invoices Routes
*/ */
Route::get('projects/{project}/invoices', ['as' => 'projects.invoices', 'uses' => 'InvoicesController@index']); Route::get('projects/{project}/invoices', ['as' => 'projects.invoices', 'uses' => 'InvoicesController@index']);

47
tests/Feature/Payments/ManageProjectFeesTest.php

@ -0,0 +1,47 @@
<?php
namespace Tests\Feature\Payments;
use App\Entities\Projects\Project;
use App\Entities\Users\User;
use Tests\TestCase;
class ManageProjectFeesTest extends TestCase
{
/** @test */
public function admin_can_entry_project_fee_payment()
{
$user = $this->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,
]);
}
}
Loading…
Cancel
Save