Browse Source

Update 2017-01-19.12.34

pull/1/head
Nafies Luthfi 9 years ago
parent
commit
d628f66621
  1. 39
      app/Http/Controllers/Api/ProjectsController.php
  2. 2
      app/Http/Controllers/Projects/FeaturesController.php
  3. 2
      app/Http/Controllers/Projects/ProjectsController.php
  4. 2
      config/session.php
  5. 2
      public/assets/css/app.s.css
  6. 1
      resources/lang/id/project.php
  7. 2
      resources/views/features/show.blade.php
  8. 10
      resources/views/projects/features-export-progress-excel.blade.php
  9. 8
      resources/views/projects/features.blade.php
  10. 33
      resources/views/projects/partials/project-stats.blade.php
  11. 1
      resources/views/projects/show.blade.php
  12. 3
      routes/api.php
  13. 4
      routes/api/projects.php
  14. 23
      tests/api/ApiManageProjectsTest.php
  15. 2
      tests/functional/ManageFeaturesTest.php

39
app/Http/Controllers/Api/ProjectsController.php

@ -0,0 +1,39 @@
<?php
namespace App\Http\Controllers\Api;
use App\Entities\Projects\ProjectsRepository;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class ProjectsController extends Controller
{
private $repo;
public function __construct(ProjectsRepository $repo)
{
$this->repo = $repo;
}
public function index(Request $request)
{
return $this->repo->getProjects($request->get('q'), $request->get('status_id'));
}
public function show($id)
{
return $this->repo->requireById($id);
}
public function features($id)
{
$project = $this->repo->requireById($id);
// $project->load('features.tasks');
$response = fractal()
->item($project->toArray())
->transformWith(function($project) {
return $project;
})
->toArray();
return $response;
}
}

2
app/Http/Controllers/Projects/FeaturesController.php

@ -86,7 +86,7 @@ class FeaturesController extends Controller {
{
$feature = $this->repo->update($req->except(['_method','_token']), $featureId);
flash()->success(trans('feature.updated'));
return redirect()->route('projects.features', $feature->project_id);
return redirect()->route('features.show', $feature->id);
}
public function delete($featureId)

2
app/Http/Controllers/Projects/ProjectsController.php

@ -110,6 +110,8 @@ class ProjectsController extends Controller {
$sheet->loadView('projects.features-export-excel',compact('project','features'));
});
})->download('xls');
} elseif ($exportType == 'excel-progress') {
return view('projects.features-export-progress-excel', compact('project','features'));
} else {
return view('projects.features-export-html', compact('project','features'));
}

2
config/session.php

@ -109,7 +109,7 @@ return [
|
*/
'cookie' => 'laravel_session',
'cookie' => 'nfs_project',
/*
|--------------------------------------------------------------------------

2
public/assets/css/app.s.css

@ -248,7 +248,7 @@ html {
-webkit-tap-highlight-color: transparent; }
body {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-family: "Liberation Serif", Helvetica, Arial, sans-serif;
font-size: 14px;
line-height: 1.428571429;
color: #333333;

1
resources/lang/id/project.php

@ -26,6 +26,7 @@ return [
'features' => 'Daftar Fitur',
'features_export_html' => 'Export HTML',
'features_export_excel' => 'Export Excel',
'features_export_progress_excel' => 'Export Progress',
'subscriptions' => 'Langganan',
'worker' => 'Pekerja',
'status' => 'Status Project',

2
resources/views/features/show.blade.php

@ -8,7 +8,7 @@
<h1 class="page-header">
<div class="pull-right">
{!! link_to_route('features.edit', trans('feature.edit'), [$feature->id], ['class' => 'btn btn-warning']) !!}
{!! link_to_route('projects.features', trans('feature.back_to_index'), [$feature->project_id], ['class' => 'btn btn-default']) !!}
{!! link_to_route('projects.features', trans('feature.back_to_index'), [$feature->project_id, '#' . $feature->id], ['class' => 'btn btn-default']) !!}
</div>
{{ $feature->name }} <small>{{ trans('feature.show') }}</small>
</h1>

10
resources/views/projects/features-export-progress-excel.blade.php

@ -29,7 +29,7 @@
<th>{{ trans('feature.name') }}</th>
<th class="text-center">{{ trans('feature.progress') }}</th>
{{-- <th class="text-right">{{ trans('feature.price') }}</th> --}}
<th>{{ trans('app.description') }}</th>
{{-- <th>{{ trans('app.description') }}</th> --}}
</tr>
</thead>
<tbody id="sort-features">
@ -41,19 +41,21 @@
</td>
<td class="text-center">{{ $feature->progress = $feature->tasks->avg('progress')/100 }}</td>
{{-- <td class="text-right">{{ $feature->price }}</td> --}}
<td style="wrap-text: true;">{!! nl2br($feature->description) !!}</td>
{{-- <td style="wrap-text: true;">{!! nl2br($feature->description) !!}</td> --}}
</tr>
<?php /*
@if ($feature->tasks->count())
@foreach($feature->tasks as $task)
<tr>
<td></td>
<td>{{ $task->name }}</td>
<td></td>
<td style="wrap-text: true;">{!! nl2br($task->description) !!}</td>
{{-- <td style="wrap-text: true;">{!! nl2br($task->description) !!}</td> --}}
</tr>
@endforeach
@endif
*/ ?>
@empty
<tr><td colspan="7">{{ trans('feature.empty') }}</td></tr>
@endforelse
@ -63,7 +65,7 @@
<th class="text-right" colspan="2">Total</th>
<th class="text-center">{{ $project->getFeatureOveralProgress() }} %</th>
{{-- <th class="text-right">{{ $features->sum('price') }}</th> --}}
<th></th>
{{-- <th></th> --}}
</tr>
</tfoot>
</table>

8
resources/views/projects/features.blade.php

@ -21,7 +21,8 @@
<div class="panel-heading">
<div class="pull-right">
{!! link_to_route('projects.features-export', trans('project.features_export_html'), [$project->id, 'html', 'feature_type' => $key], ['class' => '','target' => '_blank']) !!} |
{!! link_to_route('projects.features-export', trans('project.features_export_excel'), [$project->id, 'excel', 'feature_type' => $key], ['class' => '']) !!}
{!! link_to_route('projects.features-export', trans('project.features_export_excel'), [$project->id, 'excel', 'feature_type' => $key], ['class' => '','target' => '_blank']) !!} |
{!! link_to_route('projects.features-export', trans('project.features_export_progress_excel'), [$project->id, 'excel-progress', 'feature_type' => $key], ['class' => '','target' => '_blank']) !!}
</div>
<h3 class="panel-title">
{{ $key == 1 ? 'Daftar Fitur' : 'Fitur Tambahan' }}
@ -69,7 +70,10 @@
<tr>
<th class="text-right" colspan="2">Total</th>
<th class="text-center">{{ $groupedFeatures->sum('tasks_count') }}</th>
<th class="text-center">{{ formatDecimal($project->getFeatureOveralProgress()) }} %</th>
<th class="text-center">
<span title="Total Progress">{{ formatDecimal($groupedFeatures->sum('progress') / $groupedFeatures->count()) }} %</span>
<span title="Overal Progress" style="font-weight:300">({{ formatDecimal($project->getFeatureOveralProgress()) }} %)</span>
</th>
<th class="text-right">{{ formatRp($groupedFeatures->sum('price')) }}</th>
<th colspan="2"></th>
</tr>

33
resources/views/projects/partials/project-stats.blade.php

@ -0,0 +1,33 @@
<div class="row">
<div class="col-lg-6 col-md-12">
<a href="{{ route('projects.features',[$project->id]) }}" title="Progress Berdasarkan Index Bobot Biaya Fitur">
<div class="panel panel-info">
<div class="panel-heading">
<div class="row">
<div class="col-xs-3"><i class="fa fa-tasks fa-4x"></i></div>
<div class="col-xs-9 text-right">
<div class="huge">{{ formatDecimal($project->getFeatureOveralProgress()) }} %</div>
<div class="lead">Overall Progress</div>
</div>
</div>
</div>
</div>
</a>
</div>
<div class="col-lg-6 col-md-12">
<a href="{{ route('projects.features',[$project->id]) }}" title="Progress Berdasarkan Index Bobot Biaya Fitur">
<div class="panel panel-default">
<div class="panel-heading">
<div class="row">
<div class="col-xs-3"><i class="fa fa-paperclip fa-4x"></i></div>
<div class="col-xs-9 text-right">
<div class="huge">{{ $project->features->count() }}</div>
<div class="lead">Total Fitur</div>
</div>
</div>
</div>
</div>
</a>
</div>
<div class="clearfix"></div>
</div>

1
resources/views/projects/show.blade.php

@ -20,6 +20,7 @@
@include('projects.partials.project-show')
</div>
<div class="col-md-6">
@include('projects.partials.project-stats')
{!! Form::model($project, ['route' => ['projects.status-update', $project->id], 'method' => 'patch','class' => 'well well-sm form-inline']) !!}
{!! FormField::select('status_id', getProjectStatusesList(), ['label' => trans('project.status')]) !!}
{!! Form::submit('Update Project Status', ['class' => 'btn btn-info']) !!}

3
routes/api.php

@ -1,8 +1,9 @@
<?php
Route::group(['prefix' => 'v1','namespace' => 'Api', 'as' => 'api.', 'middleware' => ['auth:api']], function() {
require __DIR__ . '/api/projects.php';
/**
* Savety Calendar
* Calendar
*/
Route::get('get-events', ['as' => 'events.index', 'uses' => 'EventsController@index']);
Route::post('events', ['as' => 'events.store', 'uses' => 'EventsController@store']);

4
routes/api/projects.php

@ -0,0 +1,4 @@
<?php
Route::resource('projects', 'ProjectsController');
Route::get('projects/{project}/features', ['as' => 'projects.features', 'uses' => 'ProjectsController@features']);

23
tests/api/ApiManageProjectsTest.php

@ -0,0 +1,23 @@
<?php
use App\Entities\Projects\Project;
use App\Entities\Users\User;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Foundation\Testing\WithoutMiddleware;
class ApiManageProjectsTest extends TestCase
{
/** @test */
public function user_can_get_project_lists()
{
$user = factory(User::class)->create();
$project = factory(Project::class, 5)->create(['owner_id' => $user->id]);
$this->getJson(route('api.projects.index'), [
'Authorization' => 'Bearer ' . $user->api_token
]);
$this->seeStatusCode(200);
}
}

2
tests/functional/ManageFeaturesTest.php

@ -71,7 +71,7 @@ class ManageFeaturesTest extends TestCase
$this->select(2, 'type_id');
$this->press(trans('feature.update'));
$this->seePageIs('projects/' . $project->id . '/features');
$this->seePageIs('features/' . $feature->id);
$this->see(trans('feature.updated'));
$this->seeInDatabase('features', [
'name' => 'Nama Fitur Edit',

Loading…
Cancel
Save