Browse Source

Add agency has many projects relation

Add global scope for payment by owner agency projects
Remove owner_id column on payments table
pull/1/head
Nafies Luthfi 8 years ago
parent
commit
e40e53e42b
  1. 5
      app/Entities/Agencies/Agency.php
  2. 13
      app/Entities/Payments/Payment.php
  3. 3
      app/Entities/Payments/PaymentsRepository.php
  4. 21
      app/Entities/Reports/ReportsRepository.php
  5. 4
      app/Traits/OwnedByAgency.php
  6. 4
      database/factories/PaymentFactory.php
  7. 1
      database/migrations/2016_11_15_151228_create_payments_table.php
  8. 8
      resources/views/reports/payments/daily.blade.php
  9. 2
      tests/Feature/ManageProjectsTest.php
  10. 6
      tests/Feature/Payments/ManagePaymentsTest.php
  11. 8
      tests/Feature/Payments/PaymentSearchTest.php
  12. 12
      tests/Unit/Models/AgencyTest.php

5
app/Entities/Agencies/Agency.php

@ -12,4 +12,9 @@ class Agency extends Model
{
return $this->belongsTo('App\Entities\Users\User');
}
public function projects()
{
return $this->hasMany('App\Entities\Projects\Project', 'owner_id');
}
}

13
app/Entities/Payments/Payment.php

@ -5,6 +5,7 @@ namespace App\Entities\Payments;
use App\Entities\Partners\Partner;
use App\Entities\Payments\PaymentPresenter;
use App\Entities\Projects\Project;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Laracasts\Presenter\PresentableTrait;
@ -15,6 +16,18 @@ class Payment extends Model
protected $presenter = PaymentPresenter::class;
protected $guarded = ['id', 'created_at', 'updated_at'];
protected static function boot()
{
parent::boot();
static::addGlobalScope('by_owner_project', function (Builder $builder) {
if (auth()->user() && auth()->user()->agency) {
$projectIds = auth()->user()->agency->projects->pluck('id')->all();
$builder->whereIn('project_id', $projectIds);
}
});
}
public function project()
{
return $this->belongsTo(Project::class);

3
app/Entities/Payments/PaymentsRepository.php

@ -35,8 +35,7 @@ class PaymentsRepository extends BaseRepository
public function create($paymentData)
{
$paymentData['owner_id'] = auth()->id();
$paymentData['amount'] = str_replace('.', '', $paymentData['amount']);
$paymentData['amount'] = str_replace('.', '', $paymentData['amount']);
return $this->storeArray($paymentData);
}

21
app/Entities/Reports/ReportsRepository.php

@ -8,8 +8,8 @@ use App\Entities\Projects\Project;
use DB;
/**
* Reports Repository Class
*/
* Reports Repository Class
*/
class ReportsRepository extends BaseRepository
{
protected $model;
@ -21,10 +21,9 @@ class ReportsRepository extends BaseRepository
public function getDailyReports($date, $q)
{
return Payment::orderBy('date','desc')
return Payment::orderBy('date', 'desc')
->where('date', $date)
->with('customer','project')
->where('owner_id',auth()->id())
->with('partner', 'project')
->get();
}
@ -34,8 +33,7 @@ class ReportsRepository extends BaseRepository
->where(DB::raw('YEAR(date)'), $year)
->where(DB::raw('MONTH(date)'), $month)
->groupBy('date')
->orderBy('date','asc')
->where('owner_id',auth()->id())
->orderBy('date', 'asc')
->get();
}
@ -45,18 +43,17 @@ class ReportsRepository extends BaseRepository
->where(DB::raw('YEAR(date)'), $year)
->groupBy(DB::raw('YEAR(date)'))
->groupBy(DB::raw('MONTH(date)'))
->orderBy('date','asc')
->where('owner_id',auth()->id())
->orderBy('date', 'asc')
->get();
}
public function getCurrentCredits()
{
// On Progress, Done, On Hold
$projects = Project::whereIn('status_id',[2,3,6])->with('payments','customer')->get();
return $projects->filter(function($project) {
$projects = Project::whereIn('status_id', [2, 3, 6])->with('payments', 'customer')->get();
return $projects->filter(function ($project) {
return $project->cashInTotal() < $project->project_value;
})->values();
}
}
}

4
app/Traits/OwnedByAgency.php

@ -9,10 +9,8 @@ trait OwnedByAgency
public static function bootOwnedByAgency()
{
static::addGlobalScope('by_owner', function (Builder $builder) {
if ( ! is_null(auth()->user()->agency)) {
if (auth()->user() && auth()->user()->agency) {
$builder->where('owner_id', auth()->user()->agency->id);
} else {
$builder->where('owner_id', 0);
}
});
}

4
database/factories/PaymentFactory.php

@ -3,7 +3,6 @@
use App\Entities\Partners\Partner;
use App\Entities\Payments\Payment;
use App\Entities\Projects\Project;
use App\Entities\Users\User;
use Faker\Generator as Faker;
$factory->define(Payment::class, function (Faker $faker) {
@ -17,9 +16,6 @@ $factory->define(Payment::class, function (Faker $faker) {
'type_id' => rand(1, 3),
'date' => $faker->dateTimeBetween('-1 year', '-1 month')->format('Y-m-d'),
'description' => $faker->paragraph,
'owner_id' => function () {
return factory(User::class)->create()->id;
},
'partner_id' => function () {
return factory(Partner::class)->create()->id;
},

1
database/migrations/2016_11_15_151228_create_payments_table.php

@ -22,7 +22,6 @@ class CreatePaymentsTable extends Migration
$table->date('date');
$table->string('description');
$table->integer('partner_id')->unsigned();
$table->integer('owner_id')->unsigned();
$table->timestamps();
});
}

8
resources/views/reports/payments/daily.blade.php

@ -3,7 +3,7 @@
@section('title', 'Laporan Harian : ' . dateId($date))
@section('content')
<?php $dt = Carbon::parse($date) ?>
<?php $dt = Carbon::parse($date)?>
<ul class="breadcrumb hidden-print">
<li>{{ link_to_route('reports.payments.yearly', 'Laporan Tahun ' . $dt->year, ['year' => $dt->year]) }}</li>
@ -31,20 +31,20 @@
<th class="col-md-1">{{ trans('app.action') }}</th>
</thead>
<tbody>
<?php $total = 0; ?>
<?php $total = 0;?>
@forelse($payments as $key => $payment)
<tr>
<td>{{ 1 + $key }}</td>
<td>{{ $payment->project->present()->projectLink() }}</td>
<td class="text-center">{{ $payment->date }}</td>
<td class="text-right">{{ $payment->present()->amount }}</td>
<td class="text-center">{{ $payment->customer->name }}</td>
<td class="text-center">{{ $payment->partner->name }}</td>
<td>{{ $payment->description }} [{{ $payment->type() }}]</td>
<td>
{!! link_to_route('payments.show','Lihat',[$payment->id],['title' => 'Lihat Detail Pembayaran','target' => '_blank','class'=>'btn btn-info btn-xs']) !!}
</td>
</tr>
<?php $total = $payment->in_out == 0 ? $total - $payment->amount : $total + $payment->amount ?>
<?php $total = $payment->in_out == 0 ? $total - $payment->amount : $total + $payment->amount?>
@empty
<tr><td colspan="5">{{ trans('payment.not_found') }}</td></tr>
@endforelse

2
tests/Feature/ManageProjectsTest.php

@ -80,7 +80,7 @@ class ManageProjectsTest extends TestCase
$project = factory(Project::class)->create(['owner_id' => $user->agency->id]);
$feature = factory(Feature::class)->create(['project_id' => $project->id]);
$task = factory(Task::class)->create(['feature_id' => $feature->id]);
$payment = factory(Payment::class)->create(['project_id' => $project->id, 'owner_id' => $user->agency->id]);
$payment = factory(Payment::class)->create(['project_id' => $project->id]);
$this->visit('projects/'.$project->id);
$this->click(trans('app.edit'));

6
tests/Feature/Payments/ManagePaymentsTest.php

@ -82,7 +82,6 @@ class ManagePaymentsTest extends TestCase
$payment = factory(Payment::class)->create([
'partner_id' => $customer->id,
'project_id' => $project->id,
'owner_id' => $user->agency->id,
]);
$this->visit(route('payments.edit', $payment->id));
@ -111,7 +110,6 @@ class ManagePaymentsTest extends TestCase
$project = factory(Project::class)->create(['owner_id' => $user->agency->id]);
$payment = factory(Payment::class)->create([
'project_id' => $project->id,
'owner_id' => $user->agency->id,
]);
$this->visit(route('payments.index'));
@ -127,8 +125,8 @@ class ManagePaymentsTest extends TestCase
{
$user = $this->adminUserSigningIn();
$project = factory(Project::class)->create(['owner_id' => $user->id]);
$payment = factory(Payment::class)->create(['project_id' => $project->id, 'owner_id' => $user->id]);
$project = factory(Project::class)->create(['owner_id' => $user->agency->id]);
$payment = factory(Payment::class)->create(['project_id' => $project->id]);
$this->visit(route('payments.index'));
$this->click(trans('app.show'));

8
tests/Feature/Payments/PaymentSearchTest.php

@ -13,9 +13,9 @@ class PaymentSearchTest extends TestCase
{
$admin = $this->adminUserSigningIn();
$project = factory(Project::class)->create(['owner_id' => $admin->agency->id, 'name' => 'Project']);
$payment = factory(Payment::class)->create(['owner_id' => $admin->agency->id, 'project_id' => $project->id]);
$payment = factory(Payment::class)->create(['project_id' => $project->id]);
$project2 = factory(Project::class)->create(['owner_id' => $admin->agency->id]);
$unShownPayment = factory(Payment::class)->create(['owner_id' => $admin->agency->id, 'project_id' => $project2->id]);
$unShownPayment = factory(Payment::class)->create(['project_id' => $project2->id]);
$this->visit(route('payments.index'));
$this->submitForm(trans('app.search'), [
@ -33,9 +33,9 @@ class PaymentSearchTest extends TestCase
{
$admin = $this->adminUserSigningIn();
$project = factory(Project::class)->create(['owner_id' => $admin->agency->id, 'name' => 'Project']);
$payment = factory(Payment::class)->create(['owner_id' => $admin->agency->id, 'project_id' => $project->id]);
$payment = factory(Payment::class)->create(['project_id' => $project->id]);
$project2 = factory(Project::class)->create(['owner_id' => $admin->agency->id]);
$unShownPayment = factory(Payment::class)->create(['owner_id' => $admin->agency->id, 'project_id' => $project2->id]);
$unShownPayment = factory(Payment::class)->create(['project_id' => $project2->id]);
$this->visit(route('payments.index'));
$this->submitForm(trans('app.search'), [

12
tests/Unit/Models/AgencyTest.php

@ -3,7 +3,9 @@
namespace Tests\Unit\Models;
use App\Entities\Agencies\Agency;
use App\Entities\Projects\Project;
use App\Entities\Users\User;
use Illuminate\Support\Collection;
use Tests\TestCase;
class AgencyTest extends TestCase
@ -14,4 +16,14 @@ class AgencyTest extends TestCase
$agency = factory(Agency::class)->create();
$this->assertTrue($agency->owner instanceof User);
}
/** @test */
public function agency_has_many_projects()
{
$agency = factory(Agency::class)->create();
$project = factory(Project::class)->create(['owner_id' => $agency->id]);
$this->assertTrue($agency->projects instanceof Collection);
$this->assertTrue($agency->projects->first() instanceof Project);
}
}
Loading…
Cancel
Save