SmartCane/laravel_app/app/Models/ProjectReport.php

79 lines
2.1 KiB
PHP

<?php
namespace App\Models;
use App\Events\ProjectReportStatus;
use App\Traits\HasStatus;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\File;
class ProjectReport extends Model
{
use HasStatus;
protected $casts = [ 'end_date' => '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));
});
}
}