|
|
|
@ -3,6 +3,8 @@
|
|
|
|
|
namespace App\Models; |
|
|
|
|
|
|
|
|
|
use Illuminate\Database\Eloquent\Model; |
|
|
|
|
use App\Models\Activity; |
|
|
|
|
use DateTime; |
|
|
|
|
|
|
|
|
|
class VersionGantt extends Model |
|
|
|
|
{ |
|
|
|
@ -28,4 +30,38 @@ class VersionGantt extends Model
|
|
|
|
|
'updated_at', |
|
|
|
|
'updated_by' |
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
public static function boot() { |
|
|
|
|
parent::boot(); |
|
|
|
|
|
|
|
|
|
static::updated(function($data) { |
|
|
|
|
$data->updateActDuration(); |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function updateActDuration(){ |
|
|
|
|
$daysOff = explode(',', $this->config_dayoff); |
|
|
|
|
$activities = Activity::where('version_gantt_id', $this->id)->get(); |
|
|
|
|
foreach ($activities as $value) { |
|
|
|
|
$startDate = new DateTime($value->start_date); |
|
|
|
|
$endDate = new DateTime($value->end_date); |
|
|
|
|
$duration = $endDate->diff($startDate)->days + 1; |
|
|
|
|
|
|
|
|
|
// Iterate through each day and subtract the days off |
|
|
|
|
for ($i = 0; $i < $duration; $i++) { |
|
|
|
|
$currentDate = clone $startDate; |
|
|
|
|
$currentDate->modify("+$i day"); |
|
|
|
|
|
|
|
|
|
$currentDayOfWeek = $currentDate->format('N'); // Get the day of the week (1 - Monday, 7 - Sunday) |
|
|
|
|
|
|
|
|
|
if (in_array($currentDayOfWeek, $daysOff)) { |
|
|
|
|
$duration--; // Subtract one day from the duration for each day off |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Update the activity duration |
|
|
|
|
$value->duration = $duration; |
|
|
|
|
$value->save(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|