Commit a55abd49 authored by alissonalbuquerque's avatar alissonalbuquerque
Browse files

Add implementações parciais de resolução de problema de calculo de reservas

parent 4d7dbd63
...@@ -464,21 +464,54 @@ class TaskTime extends Model ...@@ -464,21 +464,54 @@ class TaskTime extends Model
* @param $floatValue * @param $floatValue
* @return string|time * @return string|time
*/ */
public static function convertFloatToHour($floatValue) { public static function float_to_date_interval($float_value)
{
// Calcula as horas
$horas = floor($float_value);
// Calcula os minutos
$minutos_decimal = ($float_value - $horas) * 60;
$minutos = floor($minutos_decimal);
$percent = $floatValue * 100.0; // float to percent // Calcula os segundos
$one_percent_from_hour = 0.6; // 0.6 min $segundos = round(($minutos_decimal - $minutos) * 60);
$minutes = $one_percent_from_hour * $percent; // minutes /** @var DateInterval */
$date_interval = new DateInterval("PT{$horas}H{$minutos}M{$segundos}S");
return $date_interval;
}
/**
* @param $floatValue
* @return string|time
*/
public static function convertFloatToHour($float_value)
{
// Calcula as horas
$horas = floor($float_value);
// Calcula os minutos
$minutos_decimal = ($float_value - $horas) * 60;
$minutos = floor($minutos_decimal);
// Calcula os segundos
$segundos = round(($minutos_decimal - $minutos) * 60);
// Criar um objeto DateTime com um intervalo de minutos /** @var DateInterval */
$interval = new DateInterval('PT' . $minutes . 'M'); $date_interval = new DateInterval("PT{$horas}H{$minutos}M{$segundos}S");
// Criar um objeto DateTime base com 0 horas e 0 minutos return $date_interval;
$dateTime = new DateTime('00:00');
$dateTime->add($interval); // Popular com Interval // /** @var DateTime */
// $date_time = new DateTime('00:00');
// $date_time->add($date_interval);
return $dateTime->format('H:i:s'); // dd(
// $date_time->format('H:i:s')
// );
// return $date_time->format('H:i:s');
} }
/** /**
...@@ -521,6 +554,30 @@ class TaskTime extends Model ...@@ -521,6 +554,30 @@ class TaskTime extends Model
return $sumDateTime; return $sumDateTime;
} }
/**
* @param $taskTimes
* @return DateTime
*/
public static function sum_interval_times(Collection $task_times)
{
[$total_hours, $total_minutes] = [0, 0];
foreach($task_times as $task_time) {
$date_time_start = new DateTime($task_time->start_time);
$date_time_end = new DateTime($task_time->end_time);
/** @return DateInternal|null */
$diff = $date_time_end->diff($date_time_start);
$total_hours = $total_hours + $diff->h;
$total_minutes = $total_minutes + $diff->m;
}
$date_interval = new DateInterval("PT{$total_hours}H{$total_minutes}M");
return $date_interval;
}
/** /**
* @param DateTime $dateTimeX * @param DateTime $dateTimeX
* @param DateTime $dateTimeY * @param DateTime $dateTimeY
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
namespace App\Rules; namespace App\Rules;
use App\Models\TaskTime; use App\Models\TaskTime;
use DateInterval;
use DateTime; use DateTime;
use Illuminate\Contracts\Validation\Rule; use Illuminate\Contracts\Validation\Rule;
use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Collection;
...@@ -42,6 +43,9 @@ class ValidationLimitTime implements Rule ...@@ -42,6 +43,9 @@ class ValidationLimitTime implements Rule
/** @var Collection */ /** @var Collection */
protected $taskTimes; protected $taskTimes;
/** @var DateInterval */
protected $limit_date_interval;
/** /**
* Create a new rule instance. * Create a new rule instance.
* *
...@@ -62,13 +66,38 @@ class ValidationLimitTime implements Rule ...@@ -62,13 +66,38 @@ class ValidationLimitTime implements Rule
$this->task = TaskTime::tarefaByStatic($this->type, $this->tarefa_id); $this->task = TaskTime::tarefaByStatic($this->type, $this->tarefa_id);
$this->limit_hours = TaskTime::convertFloatToHour($this->task->ch_semanal); $this->limit_date_interval = TaskTime::float_to_date_interval($this->task->ch_semanal);
$this->limit_hours = TaskTime::convertFloatToHour($this->task->ch_semanal); // deprected
$this->taskTimes = $this->getTaskTimes(); $this->taskTimes = $this->getTaskTimes();
$this->taskTime = $this->createTaskTime(); $this->taskTime = $this->createTaskTime();
} }
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
// public function passes($attribute, $value)
// {
// $limitDateTime = new DateTime($this->limit_hours);
// $sumDateTime = TaskTime::sumIntervalTimes($this->taskTimes);
// $newDateTime = new DateTime($this->taskTime->intervalTime());
// $totalDateTime = TaskTime::sumDateTimes($sumDateTime, $newDateTime);
// dd($totalDateTime);
// $this->outLineTime = $totalDateTime->diff($limitDateTime);
// return $limitDateTime >= $totalDateTime;
// }
/** /**
* Determine if the validation rule passes. * Determine if the validation rule passes.
* *
...@@ -78,16 +107,29 @@ class ValidationLimitTime implements Rule ...@@ -78,16 +107,29 @@ class ValidationLimitTime implements Rule
*/ */
public function passes($attribute, $value) public function passes($attribute, $value)
{ {
$limitDateTime = new DateTime($this->limit_hours); $date_time_start = new DateTime($this->taskTime->start_time);
$sumDateTime = TaskTime::sumIntervalTimes($this->taskTimes); $date_time_end = new DateTime($this->taskTime->end_time);
/** @return DateInternal|null */
$diff = $date_time_end->diff($date_time_start);
[$hours, $minutes] = [$diff->h, $diff->m];
$new_model_date_interval = new DateInterval("PT{$hours}H{$minutes}M");
//--------------------------------------------------------------
$limit_date_interval = $this->limit_date_interval;
$date_interval = TaskTime::sum_interval_times($this->taskTimes);
$newDateTime = new DateTime($this->taskTime->intervalTime()); // $date_interval->add($new_date_interval);
$totalDateTime = TaskTime::sumDateTimes($sumDateTime, $newDateTime); // $totalDateTime = TaskTime::sumDateTimes($sumDateTime, $newDateTime);
$this->outLineTime = $totalDateTime->diff($limitDateTime); // $this->outLineTime = $totalDateTime->diff($limitDateTime);
return $limitDateTime >= $totalDateTime; // return $limitDateTime >= $totalDateTime;
} }
/** /**
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment