'datetime']; protected $fillable = ['name', 'path', 'week', 'year','status', 'end_date','offset']; public function project() { return $this->belongsTo(Project::class); } public function getFileNameAttribute(): string { return static::getFileName($this->end_date,$this->offset); } public static function getFileName(Carbon $endDate, int $offset): string { return 'period_'.$endDate->copy()->subDays($offset).'_'.$endDate; } public static function projectReportNameFormat(Carbon $endDate,int $offset):string { return 'Report from '.$endDate->copy()->subDays($offset)->toDateString().' to '.$endDate->toDateString(); } public function getFullPathName() { return storage_path('app/'.$this->project->download_path.'/'.$this->path); } public function getReportDate():string { // TODO remove year and week return $this->end_date->format('Y-m-d'); } public static function getReportDateForYearAndWeek(Project $project, $year, $week) { $date = Carbon::now()->setISODate($year, $week); $dayOfWeek = Carbon::parse($project->mail_day)->subDay(2)->dayOfWeek; if ($dayOfWeek == 6) { $reportDay = $date->startOfWeek()->subDay(); } else { $reportDay = $date->startOfWeek()->addDays($dayOfWeek); } return $reportDay; } public function deleteMe() { if (File::exists($this->getFullPathName())) { File::delete($this->getFullPathName()); } $this->delete(); } protected static function booted(): void { parent::booted(); static::updated(function (ProjectReport $projectReport) { event(new ProjectReportStatus($projectReport)); }); } }