HEX
Server: Apache
System: Linux WWW 6.1.0-40-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.153-1 (2025-09-20) x86_64
User: web11 (1011)
PHP: 8.2.29
Disabled: NONE
Upload Files
File: /var/www/ivs.kaunokolegija.lt/laravel/app/Models/ScienceActivity.php
<?php

namespace App\Models;

use App\Traits\Auditable;
use Carbon\Carbon;
use DateTimeInterface;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
use Spatie\MediaLibrary\MediaCollections\Models\Media;

class ScienceActivity extends Model implements HasMedia
{
    use SoftDeletes, InteractsWithMedia, Auditable, HasFactory;

    public $table = 'science_activities';

    protected $appends = [
        'attachments',
    ];

    protected $dates = [
        'activity_start',
        'activity_end',
        'created_at',
        'updated_at',
        'deleted_at',
    ];

    public const STATE_SELECT = [
        'not_started' => 'Nepradėta',
        'in_progress' => 'Eigoje',
        'done'        => 'Įgyvendinta',
        'failed'      => 'Neįgyvendinta',
    ];

    protected $fillable = [
        'name',
        'contractno',
        'activity_start',
        'activity_end',
        'is_mtep',
        'is_financed',
        'description',
        'value',
        'other_accountable',
        'other_accountable_contact',
        'state',
        'created_at',
        'updated_at',
        'deleted_at',
    ];

    protected function serializeDate(DateTimeInterface $date)
    {
        return $date->format('Y-m-d H:i:s');
    }

    public function registerMediaConversions(Media $media = null): void
    {
        $this->addMediaConversion('thumb')->fit('crop', 50, 50);
        $this->addMediaConversion('preview')->fit('crop', 120, 120);
    }

    public function contactscientists()
    {
        return $this->belongsToMany(Scientist::class);
    }

    public function contactstudents()
    {
        return $this->belongsToMany(Student::class);
    }

    public function getActivityStartAttribute($value)
    {
        return $value ? Carbon::createFromFormat('Y-m-d H:i:s', $value)->format(config('panel.date_format') . ' ' . config('panel.time_format')) : null;
    }

    public function setActivityStartAttribute($value)
    {
        $this->attributes['activity_start'] = $value ? Carbon::createFromFormat(config('panel.date_format') . ' ' . config('panel.time_format'), $value)->format('Y-m-d H:i:s') : null;
    }

    public function getActivityEndAttribute($value)
    {
        return $value ? Carbon::createFromFormat('Y-m-d H:i:s', $value)->format(config('panel.date_format') . ' ' . config('panel.time_format')) : null;
    }

    public function setActivityEndAttribute($value)
    {
        $this->attributes['activity_end'] = $value ? Carbon::createFromFormat(config('panel.date_format') . ' ' . config('panel.time_format'), $value)->format('Y-m-d H:i:s') : null;
    }

    public function activity_types()
    {
        return $this->belongsToMany(ActivityType::class);
    }

    public function activity_subtypes()
    {
        return $this->belongsToMany(ActivitySubType::class);
    }

    public function science_areas()
    {
        return $this->belongsToMany(ScienceArea::class);
    }

    public function sciencedirections()
    {
        return $this->belongsToMany(ScienceDirection::class);
    }

    public function accountabledepartments()
    {
        return $this->belongsToMany(Department::class);
    }

    public function accountablesubsections()
    {
        return $this->belongsToMany(DepartmentSubsection::class);
    }

    public function accountablepersonkks()
    {
        return $this->belongsToMany(User::class);
    }

    public function getAttachmentsAttribute()
    {
        return $this->getMedia('attachments');
    }
}