Files
pollux/app/Http/Controllers/PersonTargetsController.php

174 lines
5.0 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\PersonTarget;
use App\IOType;
use App\Person;
use App\Http\Requests\PersonTargetCreateOrUpdate;
class PersonTargetsController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$personTargets['receivables'] = PersonTarget::receivable();
$personTargets['debts'] = PersonTarget::debt();
foreach ($personTargets as $personTargetsList) {
$personTargetsList->load('person:id,name_or_company,surname',
'ioType:id,factor',
'actuals:id,person_target_id,account_type_id,amount',
'actuals.accountType:id,account_class_id',
'actuals.accountType.accountClass:id,io_type_id',
'actuals.accountType.accountClass.ioType:id,factor');
}
$sums['receivables'] = 0;
$sums['debts'] = 0;
foreach ($personTargets as $type => $personTargetsList) {
foreach ($personTargetsList as $personTarget) {
$sums[$type] += $personTarget->difference();
}
}
return view('personTargets.index', compact('personTargets', 'sums'));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
$personTarget = new PersonTarget();
$formArrays = PersonTargetsController::loadFormArrays();
return view('personTargets.create', array_merge(compact('personTarget'), $formArrays));
}
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\PersonTargetCreateOrUpdate $request
* @return \Illuminate\Http\Response
*/
public function store(PersonTargetCreateOrUpdate $request)
{
foreach (request('person_id') as $personId) {
$personTarget = new PersonTarget();
$personTarget->reference = request('reference');
$personTarget->amount = request('amount');
$personTarget->date = request('date');
$personTarget->io_type_id = request('io_type_id');
$personTarget->person_id = $personId;
$personTarget->save();
}
return redirect('/targets');
}
/**
* Display the specified resource.
*
* @param \App\PersonTarget $personTarget
* @return \Illuminate\Http\Response
*/
public function show(PersonTarget $personTarget)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\PersonTarget $personTarget
* @return \Illuminate\Http\Response
*/
public function edit(PersonTarget $personTarget)
{
$formArrays = PersonTargetsController::loadFormArrays();
return view('personTargets.edit', array_merge(compact('personTarget'), $formArrays));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\PersonTarget $personTarget
* @return \Illuminate\Http\Response
*/
public function update(PersonTargetCreateOrUpdate $request,
PersonTarget $personTarget)
{
$personTarget->reference = request('reference');
$personTarget->amount = request('amount');
$personTarget->date = request('date');
$personTarget->io_type_id = request('io_type_id');
$personTarget->person_id = request('person_id');
$personTarget->save();
return redirect('/targets');
}
/**
* Show the dialog for deleting the specified resource.
*
* @param \App\PersonTarget $personTarget
* @return \Illuminate\Http\Response
*/
public function delete(PersonTarget $personTarget)
{
return view('personTargets.delete', compact('personTarget'));
}
/**
* Remove the specified resource from storage.
*
* @param \App\PersonTarget $personTarget
* @return \Illuminate\Http\Response
*/
public function destroy(PersonTarget $personTarget)
{
$personTarget->delete();
return redirect('/targets');
}
/**
* Load the data about people and IO types and return them as an array, such
* that the data can be used as input for a form dropdowndown field.
*
* @return array
*/
private function loadFormArrays()
{
$ioTypes = IOType::all();
$ioTypesArray = [];
foreach ($ioTypes as $ioType) {
$ioTypesArray[$ioType->id] = $ioType->name;
}
$people = Person::all('id', 'name_or_company', 'surname')->sortBy('name_or_company');
$peopleArray = [];
foreach ($people as $person) {
$peopleArray[$person->id] = $person->fullName(true);
}
return compact('ioTypesArray', 'peopleArray');
}
}