Browse Source

Add dueDateDescription method on subscription model

Fix some view files related to subscription entity
pull/1/head
Nafies Luthfi 8 years ago
parent
commit
3f08e2f61e
  1. 8
      app/Entities/Subscriptions/Subscription.php
  2. 13
      app/Http/Controllers/SubscriptionsController.php
  3. 4
      app/Queries/AdminDashboardQuery.php
  4. 1
      resources/lang/id/subscription.php
  5. 43
      resources/views/pages/home.blade.php
  6. 10
      resources/views/projects/partials/nav-tabs.blade.php
  7. 20
      resources/views/projects/subscriptions.blade.php
  8. 4
      resources/views/subscriptions/edit.blade.php
  9. 5
      resources/views/subscriptions/index.blade.php
  10. 12
      resources/views/subscriptions/show.blade.php
  11. 12
      tests/Unit/Models/SubscriptionTest.php

8
app/Entities/Subscriptions/Subscription.php

@ -33,6 +33,14 @@ class Subscription extends Model
return $this->nearOfDueDate() ? '<i class="fa fa-exclamation-circle" style="color: red"></i>' : '';
}
public function dueDateDescription()
{
$dueDateDescription = trans('subscription.start_date').' : '.dateId($this->start_date)."\n";
$dueDateDescription .= trans('subscription.due_date').' : '.dateId($this->due_date);
return $dueDateDescription;
}
public function project()
{
return $this->belongsTo('App\Entities\Projects\Project');

13
app/Http/Controllers/SubscriptionsController.php

@ -44,7 +44,9 @@ class SubscriptionsController extends Controller
public function show(Subscription $subscription)
{
return view('subscriptions.show', compact('subscription'));
$pageTitle = $this->getPageTitle('detail', $subscription);
return view('subscriptions.show', compact('subscription', 'pageTitle'));
}
public function edit(Subscription $subscription)
@ -53,7 +55,7 @@ class SubscriptionsController extends Controller
$vendors = $this->repo->getVendorsList();
$subscriptionTypes = $this->getSubscriptionTypes();
$pageTitle = trans('subscription.edit').' - '.$subscription->name.' - '.$subscription->customer->name;
$pageTitle = $this->getPageTitle('edit', $subscription);
return view('subscriptions.edit', compact('subscription', 'projects', 'vendors', 'subscriptionTypes', 'pageTitle'));
}
@ -74,7 +76,7 @@ class SubscriptionsController extends Controller
return redirect()->route('subscriptions.index');
}
public function getSubscriptionTypes()
private function getSubscriptionTypes()
{
return [
1 => trans('subscription.types.domain'),
@ -82,4 +84,9 @@ class SubscriptionsController extends Controller
];
}
private function getPageTitle($pageType, $subscription)
{
return trans('subscription.'.$pageType).' - '.$subscription->name.' - '.$subscription->customer->name;
}
}

4
app/Queries/AdminDashboardQuery.php

@ -79,13 +79,13 @@ class AdminDashboardQuery
*/
public function upcomingSubscriptionDueDatesList()
{
$subscriptions = Subscription::get();
$subscriptions = Subscription::orderBy('due_date', 'asc')->get();
$filteredSubscriptions = $subscriptions->filter(function ($subscription) {
return $subscription->status_id == 1
&& Carbon::parse($subscription->due_date)->diffInDays(Carbon::now()) < 60;
});
return $filteredSubscriptions;
return $filteredSubscriptions->load('customer');
}
}

1
resources/lang/id/subscription.php

@ -11,6 +11,7 @@ return [
'found' => 'Langganan ditemukan',
'not_found' => 'Langganan tidak ditemukan',
'empty' => 'Belum ada Langganan',
'back_to_show' => 'Kembali ke Detail Langganan',
'back_to_index' => 'Kembali ke daftar Langganan',
// Actions

43
resources/views/pages/home.blade.php

@ -9,11 +9,11 @@
<?php use Facades\App\Queries\AdminDashboardQuery;?>
<div class="row">
<div class="col-lg-6">
<div class="col-lg-4">
<legend style="border-bottom: none" class="text-center">Project Status Stats</legend>
<div class="row">
@foreach($projectStatuses::all() as $statusId => $status)
<div class="col-md-4 col-xs-6">
<div class="col-lg-6 col-md-4 col-xs-6">
@include('view-components.dashboard-panel', [
'class' => $projectStatuses->getColorById($statusId),
'icon' => $projectStatuses->getIconById($statusId),
@ -25,7 +25,7 @@
@endforeach
</div>
</div>
<div class="col-lg-6">
<div class="col-lg-8">
<legend style="border-bottom: none" class="text-center">Earnings Stats</legend>
<div class="panel panel-default table-responsive hidden-xs">
<table class="table table-condensed table-bordered">
@ -35,17 +35,32 @@
<td class="col-xs-2 text-center">Receiveable Earnings</td>
</tr>
<tr>
<td class="text-center text-primary lead" style="border-top: none;">{{ $totalEarnings = formatRp(AdminDashboardQuery::totalEarnings($queriedYear)) }}</td>
<td class="text-center text-primary lead" style="border-top: none;">{{ $totalFinishedProjects = AdminDashboardQuery::totalFinishedProjects($queriedYear) }} Projects</td>
<td class="text-center text-primary lead" style="border-top: none;">{{ $currentOutstandingCustomerPayment = formatRp(AdminDashboardQuery::currentOutstandingCustomerPayment($queriedYear)) }}</td>
<td class="text-center text-primary lead" style="border-top: none;">
{{ $totalEarnings = formatRp(AdminDashboardQuery::totalEarnings($queriedYear)) }}
</td>
<td class="text-center text-primary lead" style="border-top: none;">
{{ $totalFinishedProjects = AdminDashboardQuery::totalFinishedProjects($queriedYear) }} Projects
</td>
<td class="text-center text-primary lead" style="border-top: none;">
{{ $currentOutstandingCustomerPayment = formatRp(AdminDashboardQuery::currentOutstandingCustomerPayment($queriedYear)) }}
</td>
</tr>
</table>
</div>
<ul class="list-group visible-xs">
<li class="list-group-item">Yearly Earnings ({{ $queriedYear }}) <span class="pull-right text-primary">{{ $totalEarnings }}</span></li>
<li class="list-group-item">Finished Projects ({{ $queriedYear }}) <span class="pull-right text-primary">{{ $totalFinishedProjects }} Projects</span></li>
<li class="list-group-item">Receiveable Earnings <span class="pull-right text-primary">{{ $currentOutstandingCustomerPayment }}</span></li>
<li class="list-group-item">
Yearly Earnings ({{ $queriedYear }})
<span class="pull-right text-primary">{{ $totalEarnings }}</span>
</li>
<li class="list-group-item">
Finished Projects ({{ $queriedYear }})
<span class="pull-right text-primary">{{ $totalFinishedProjects }} Projects</span>
</li>
<li class="list-group-item">
Receiveable Earnings
<span class="pull-right text-primary">{{ $currentOutstandingCustomerPayment }}</span>
</li>
</ul>
<legend style="border-bottom: none" class="text-center">Upcoming Subscriptions Due Dates</legend>
@ -53,19 +68,19 @@
<div class="panel panel-default table-responsive">
<table class="table table-condensed">
<tr>
<th class="col-xs-3">@lang('subscription.subscription')</th>
<th class="col-xs-3">@lang('customer.customer')</th>
<th class="col-xs-3 text-right">@lang('invoice.amount')</th>
<th class="col-xs-5 text-center">@lang('subscription.due_date')</th>
</tr>
@foreach(AdminDashboardQuery::upcomingSubscriptionDueDatesList() as $subscription)
<tr>
<td>{{ link_to_route('subscriptions.show', $subscription->domain_name, [$subscription->id]) }}</td>
<td class="text-right">{{ formatRp($subscription->domain_price + $subscription->hosting_price) }}</td>
<td>{{ $subscription->nameLink() }}</td>
<td>{{ $subscription->customer->name }}</td>
<td class="text-right">{{ formatRp($subscription->price) }}</td>
<td class="text-center">
{{ $subscription->due_date }}
<strong class="text-danger hidden-xs">
({{ Carbon::parse($subscription->due_date)->diffForHumans() }})
</strong>
{!! $subscription->nearOfDueDateSign() !!}
</td>
</tr>
@endforeach

10
resources/views/projects/partials/nav-tabs.blade.php

@ -4,19 +4,19 @@
{!! link_to_route('projects.show', trans('project.show'), [$project->id]) !!}
</li>
<li class="{{ Request::segment(3) == 'features' ? 'active' : '' }}">
{!! link_to_route('projects.features', trans('project.features') . ' (' . $project->features->count() . ')', [$project->id]) !!}
{!! link_to_route('projects.features', trans('project.features').' ('.$project->features->count().')', [$project->id]) !!}
</li>
<li class="{{ Request::segment(3) == 'payments' ? 'active' : '' }}">
{!! link_to_route('projects.payments', trans('project.payments') . ' (' . $project->payments->count() . ')', [$project->id]) !!}
{!! link_to_route('projects.payments', trans('project.payments').' ('.$project->payments->count().')', [$project->id]) !!}
</li>
<li class="{{ Request::segment(3) == 'subscriptions' ? 'active' : '' }}">
{!! link_to_route('projects.subscriptions', trans('project.subscriptions'), [$project->id]) !!}
{!! link_to_route('projects.subscriptions', trans('project.subscriptions').' ('.$project->subscriptions->count().')', [$project->id]) !!}
</li>
<li class="{{ Request::segment(3) == 'invoices' ? 'active' : '' }}">
{!! link_to_route('projects.invoices', trans('project.invoices') . ' (' . $project->invoices->count() . ')', [$project->id]) !!}
{!! link_to_route('projects.invoices', trans('project.invoices').' ('.$project->invoices->count().')', [$project->id]) !!}
</li>
<li class="{{ Request::segment(3) == 'files' ? 'active' : '' }}">
{!! link_to_route('projects.files', trans('project.files') . ' (' . $project->files->count() . ')', [$project->id]) !!}
{!! link_to_route('projects.files', trans('project.files').' ('.$project->files->count().')', [$project->id]) !!}
</li>
</ul>
<br>

20
resources/views/projects/subscriptions.blade.php

@ -18,22 +18,22 @@
<table class="table table-condensed">
<thead>
<th>{{ trans('app.table_no') }}</th>
<th>{{ trans('subscription.domain_name') }}</th>
<th class="text-center">{{ trans('subscription.hosting_capacity') }}</th>
<th>{{ trans('subscription.start_date') }}</th>
<th>{{ trans('subscription.due_date') }}</th>
<th class="text-center">{{ trans('subscription.type') }}</th>
<th>{{ trans('subscription.subscription') }}</th>
<th class="text-right">{{ trans('subscription.start_date') }}</th>
<th class="text-right">{{ trans('subscription.due_date') }}</th>
<th class="text-right">{{ trans('subscription.extension_price') }}</th>
<th>{{ trans('app.action') }}</th>
</thead>
<tbody>
@foreach($project->subscriptions as $key => $subscription)
<tr {{ Carbon::parse($subscription->due_date)->diffInDays(Carbon::now()) < 60 ? 'class=bg-danger' : '' }}>
<tr>
<td>{{ 1 + $key }}</td>
<td>{{ $subscription->domain_name }}</td>
<td class="text-center">{{ $subscription->hosting_capacity }}</td>
<td>{{ dateId($subscription->start_date) }}</td>
<td>{{ dateId($subscription->due_date) }}</td>
<td class="text-right">{{ formatRp($subscription->domain_price + $subscription->hosting_price) }}</td>
<td class="text-center">{{ $subscription->type }}</td>
<td>{{ $subscription->nameLink() }}</td>
<td class="text-right">{{ dateId($subscription->start_date) }}</td>
<td class="text-right">{{ dateId($subscription->due_date) }} {!! $subscription->nearOfDueDateSign() !!}</td>
<td class="text-right">{{ formatRp($subscription->price) }}</td>
<td>
{!! link_to_route('subscriptions.show',trans('app.show'),[$subscription->id],['class'=>'btn btn-info btn-xs']) !!}
{!! link_to_route('subscriptions.edit',trans('app.edit'),[$subscription->id],['class'=>'btn btn-warning btn-xs']) !!}

4
resources/views/subscriptions/edit.blade.php

@ -9,7 +9,7 @@
@if (request('action') == null)
<div class="row">
<div class="col-md-6 col-md-offset-3">
<div class="col-md-6">
{!! Form::model($subscription, ['route'=>['subscriptions.update', $subscription->id], 'method' => 'patch']) !!}
<div class="panel panel-default">
<div class="panel-heading"><h3 class="panel-title">{{ $pageTitle }}</h3></div>
@ -47,7 +47,7 @@
</div>
<div class="col-md-3 text-center">
<legend>@lang('app.action')</legend>
<p>{!! link_to_route('subscriptions.show', trans('subscription.show'), [$subscription->id], ['class' => 'btn btn-info']) !!}</p>
<p>{!! link_to_route('subscriptions.show', trans('subscription.back_to_show'), [$subscription->id], ['class' => 'btn btn-info']) !!}</p>
<p>{!! link_to_route('subscriptions.index', trans('subscription.back_to_index'), [], ['class' => 'btn btn-default']) !!}</p>
<p>{!! link_to_route('subscriptions.edit', trans('subscription.delete'), [$subscription->id, 'action' => 'delete'], ['class'=>'btn btn-danger']) !!}</p>
</div>

5
resources/views/subscriptions/index.blade.php

@ -31,10 +31,7 @@
<td>{{ $subscriptions->firstItem() + $key }}</td>
<td>{{ $subscription->nameLink() }}</td>
<td>{{ $subscription->customer->name }}</td>
<td class="text-right" title="
{{ trans('subscription.start_date') }} : {{ dateId($subscription->start_date) }}
{{ trans('subscription.due_date') }} : {{ dateId($subscription->due_date) }}
">
<td class="text-right" title="{!! $subscription->dueDateDescription() !!}">
{{ dateId($subscription->due_date) }} {!! $subscription->nearOfDueDateSign() !!}
</td>
<td class="text-right">{{ formatRp($subscription->price) }}</td>

12
resources/views/subscriptions/show.blade.php

@ -1,21 +1,21 @@
@extends('layouts.app')
@section('title', trans('subscription.detail'))
@section('title', $pageTitle)
@section('content')
@include('subscriptions.partials.breadcrumb')
<h1 class="page-header">{{ $subscription->name }} <small>{{ trans('subscription.detail') }}</small></h1>
<div class="row">
<div class="col-md-6">
<div class="panel panel-default">
<div class="panel-heading"><h3 class="panel-title">{{ trans('subscription.detail') }}</h3></div>
<div class="panel-heading"><h3 class="panel-title">{{ $pageTitle }}</h3></div>
@include('subscriptions.partials.subscription-show')
<div class="panel-footer">
{!! link_to_route('subscriptions.edit', trans('subscription.edit'), [$subscription->id], ['class' => 'btn btn-warning']) !!}
{!! link_to_route('subscriptions.index', trans('subscription.back_to_index'), [], ['class' => 'btn btn-default']) !!}
</div>
</div>
<div class="col-md-3 text-center">
<legend>@lang('app.action')</legend>
<p>{!! link_to_route('subscriptions.edit', trans('subscription.edit'), [$subscription->id], ['class' => 'btn btn-warning']) !!}</p>
<p>{!! link_to_route('subscriptions.index', trans('subscription.back_to_index'), [], ['class' => 'btn btn-default']) !!}</p>
</div>
</div>
@endsection

12
tests/Unit/Models/SubscriptionTest.php

@ -60,6 +60,18 @@ class SubscriptionTest extends TestCase
}
/** @test */
public function it_has_due_date_description_method()
{
$next3Months = Carbon::now()->addMonths(2)->format('Y-m-d');
$subscription = factory(Subscription::class)->make(['due_date' => $next3Months]);
$dueDateDescription = trans('subscription.start_date').' : '.dateId($subscription->start_date)."\n";
$dueDateDescription .= trans('subscription.due_date').' : '.dateId($subscription->due_date);
$this->assertEquals($dueDateDescription, $subscription->dueDateDescription());
}
/** @test */
public function it_has_project_relation()
{
$subscription = factory(Subscription::class)->create();

Loading…
Cancel
Save