Files
sam-manage/app/Models/Juil/PmisArchiveFile.php
김보곤 2102f4a398 feat: [pmis] PMIS 자료실/안전관리/품질관리 기능 추가 및 개선
- 자료실 하위 3개 메뉴: 자료보관함, 매뉴얼, 공지사항
- 자료보관함: 폴더 트리 + 파일 업로드/다운로드/삭제
- 매뉴얼/공지사항: 게시판형 CRUD + 첨부파일
- 안전관리: 안전보건교육, TBM현황, 위험성평가, 재해예방조치
- 품질관리: 시정조치 UI 페이지
- 대시보드: 슈퍼관리자 전용 레거시 사이트 참고 카드
- 작업일보/출면일보 오류 수정 및 기능 개선
- 설비 사진 업로드, 근로계약서 종료일 수정
2026-03-12 21:11:21 +09:00

77 lines
1.7 KiB
PHP

<?php
namespace App\Models\Juil;
use App\Models\User;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\SoftDeletes;
class PmisArchiveFile extends Model
{
use SoftDeletes;
protected $fillable = [
'tenant_id',
'folder_id',
'title',
'original_name',
'file_path',
'file_type',
'file_size',
'site_name',
'registered_by',
'options',
];
protected $casts = [
'options' => 'array',
];
public function scopeTenant($query, $tenantId)
{
return $query->where('tenant_id', $tenantId);
}
public function folder(): BelongsTo
{
return $this->belongsTo(PmisArchiveFolder::class, 'folder_id');
}
public function registeredByUser(): BelongsTo
{
return $this->belongsTo(User::class, 'registered_by');
}
public static function detectFileType(string $extension): string
{
$ext = strtolower($extension);
$imageExts = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg'];
$videoExts = ['mp4', 'avi', 'mov', 'wmv', 'flv', 'mkv', 'webm'];
if (in_array($ext, $imageExts)) {
return '사진';
}
if (in_array($ext, $videoExts)) {
return '동영상';
}
return '문서';
}
public static function formatSize(int $bytes): string
{
if ($bytes >= 1073741824) {
return round($bytes / 1073741824, 1).'GB';
}
if ($bytes >= 1048576) {
return round($bytes / 1048576, 1).'MB';
}
if ($bytes >= 1024) {
return round($bytes / 1024, 1).'KB';
}
return $bytes.'B';
}
}