1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-09-20 08:21:34 +02:00
invoiceninja/app/Models/Task.php

156 lines
3.0 KiB
PHP
Raw Normal View History

2015-05-27 18:52:10 +02:00
<?php namespace App\Models;
2015-07-12 21:43:45 +02:00
use Utils;
2015-05-27 18:52:10 +02:00
use Illuminate\Database\Eloquent\SoftDeletes;
2015-11-12 21:36:28 +01:00
use Laracasts\Presenter\PresentableTrait;
2016-07-10 12:20:22 +02:00
use App\Events\TaskWasCreated;
use App\Events\TaskWasUpdated;
2015-05-27 18:52:10 +02:00
/**
* Class Task
*/
2015-05-27 18:52:10 +02:00
class Task extends EntityModel
{
use SoftDeletes;
2015-11-12 21:36:28 +01:00
use PresentableTrait;
/**
* @var string
*/
2015-11-12 21:36:28 +01:00
protected $presenter = 'App\Ninja\Presenters\TaskPresenter';
2015-05-27 18:52:10 +02:00
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
2015-05-27 18:52:10 +02:00
public function account()
{
return $this->belongsTo('App\Models\Account');
}
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
2015-06-14 16:49:13 +02:00
public function invoice()
{
return $this->belongsTo('App\Models\Invoice');
}
/**
* @return mixed
*/
2015-11-12 21:36:28 +01:00
public function user()
{
return $this->belongsTo('App\Models\User')->withTrashed();
2015-11-12 21:36:28 +01:00
}
/**
* @return mixed
*/
2015-05-27 18:52:10 +02:00
public function client()
{
return $this->belongsTo('App\Models\Client')->withTrashed();
}
2015-07-12 21:43:45 +02:00
/**
* @param $task
* @return string
*/
2015-07-12 21:43:45 +02:00
public static function calcStartTime($task)
{
$parts = json_decode($task->time_log) ?: [];
if (count($parts)) {
return Utils::timestampToDateTimeString($parts[0][0]);
} else {
return '';
}
}
/**
* @return string
*/
2015-07-12 21:43:45 +02:00
public function getStartTime()
{
return self::calcStartTime($this);
}
/**
* @param $task
* @return int
*/
2015-07-12 21:43:45 +02:00
public static function calcDuration($task)
{
$duration = 0;
$parts = json_decode($task->time_log) ?: [];
foreach ($parts as $part) {
if (count($part) == 1 || !$part[1]) {
$duration += time() - $part[0];
} else {
$duration += $part[1] - $part[0];
}
}
return $duration;
}
/**
* @return int
*/
2015-07-12 21:43:45 +02:00
public function getDuration()
{
return self::calcDuration($this);
}
/**
* @return int
*/
2015-07-12 21:43:45 +02:00
public function getCurrentDuration()
{
$parts = json_decode($this->time_log) ?: [];
$part = $parts[count($parts)-1];
if (count($part) == 1 || !$part[1]) {
return time() - $part[0];
} else {
return 0;
}
}
/**
* @return bool
*/
2015-07-12 21:43:45 +02:00
public function hasPreviousDuration()
{
$parts = json_decode($this->time_log) ?: [];
return count($parts) && (count($parts[0]) && $parts[0][1]);
}
/**
* @return float
*/
2015-07-12 21:43:45 +02:00
public function getHours()
{
return round($this->getDuration() / (60 * 60), 2);
}
/**
* Gets the route to the tasks edit action
*
* @return string
*/
public function getRoute()
{
return "/tasks/{$this->public_id}/edit";
}
}
2016-07-10 12:20:22 +02:00
Task::created(function ($task) {
event(new TaskWasCreated($task));
});
Task::updated(function ($task) {
event(new TaskWasUpdated($task));
});