<?php
namespace App\Models;
use App\Helper\Generator;
use App\Models\Spatie\Roles;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class SuratPermintaan extends Model
{
use HasFactory;
protected $fillable = [
'perihal',
'tmp_nomor_surat',
'nomor_surat',
'keterangan',
'keterangan_penolakan',
'note',
'nomor_dokumen',
'tanggal_terbit',
'nomor_revisi',
'total_bayaran',
'file_dokumen',
'posisi',
'status',
'kode_id',
'user_id',
'budget_id',
'back_up_template',
'role_id',
'divisi_id',
'perusahaan_id',
'nama_rek',
'no_invoice'
];
public function pajak(){
return $this->hasMany(SuratHasPajak::class,'surat_id');
}
public function groupItem(){
return $this->hasMany(GroupItem::class,'surat_id');
}
public function peminta(){
return $this->belongsTo(User::class,'user_id')->withDefault([
'name'=>'User Deleted'
]);
}
// public function budget(){
// return $this->belongsTo(Budget::class,'budget_id');
// }
public function posisiSurat(){
return $this->belongsTo(User::class,'posisi')->withDefault([
'name'=>'User Deleted'
]);
}
public function suratSignature(){
return $this->hasMany(SuratHasTtd::class,'surat_id');
}
public function notification(){
return $this->morphMany(Notification::class,'surat','model_type','model_id')
->where('to',auth()->user()->id)
->where('status','0');
}
public function getTanggalAttribute(){
//return carbon tanggal_terbit
return \Carbon\Carbon::parse($this->tanggal_terbit);
}
public function scopeFilter($query,$request){
if ($request->pemohon != "") {
$query->whereHas('peminta',function($query)use($request){
$query->where('name','like','%'.$request->pemohon.'%');
});
}
if ($request->nomor != "") {
$query->where('tmp_nomor_surat','like','%'.$request->nomor.'%');
}
if($request->status != ""){
$query->where('surat_permintaans.status', $request->status);
}
if ($request->dari_tanggal != "" && $request->sampai_tanggal != "") {
$query->whereBetween('surat_permintaans.tanggal_terbit',[$request->dari_tanggal,$request->sampai_tanggal]);
}
if ($request->nominal != "" && $request->nominal != "") {
$query->whereHas('groupItem',function($wgi)use($request){
$wgi->where('total_bayaran','=',(int)str_replace(',','',str_replace('.','',$request->nominal)));
});
}
if ($request->cari != "") {
$query->where(function($ws)use($request){
$ws->where('perihal','like','%'.$request->cari.'%')
->orWhere('tmp_nomor_surat','like','%'.$request->cari.'%')
->orWhere('status','like','%'.$request->cari.'%')
->orWhereHas('peminta',function($query)use($request){
$query->where('name','like','%'.$request->cari.'%');
})->orWhereHas('groupItem',function($wgi)use($request){
$wgi->where('total_bayaran','like','%'.$request->cari.'%')
->orWhereHas('item',function($wi)use($request){
$wi->where('label','like','%'.$request->cari.'%')
->orWhere('keterangan','like','%'.$request->cari.'%')
->orWhereHas('bank',function($wb)use($request){
$wb->where('nama_bank','like','%'.$request->cari.'%');
});
});
});
});
}
if ($request->divisi_id != "") {
$query->where('divisi_id',$request->divisi_id);
}
if (request()->perusahaan_id != "") {
$query->where('perusahaan_id', request()->perusahaan_id);
}
return $query;
}
public function divisi(){
return $this->belongsTo(Divisi::class,'divisi_id')->withDefault([
'name' => 'Data Divisi Di Hapus',
'kode_divisi' => 'Data Divisi Di Hapus',
]);
}
public function role(){
return $this->belongsTo(Roles::class,'role_id')->withDefault([
'name' => 'Data Role Di Hapus',
]);
}
public function bank(){
return $this->belongsTo(Bank::class,'bank_id')->withDefault([
'name' => 'Data Bank Di Hapus',
]);
}
public function getTotalAttribute()
{
$total = 0;
foreach ($this->groupItem as $key => $value) {
$total += $value->total;
}
return $total;
}
public function getNomorSuratFormatAttribute()
{
$generator = new Generator;
return sprintf('%03d',$this->nomor_surat)."/".$this->perusahaan->kode_perusahaan."/".$this->divisi->kode_divisi."/SPD/".$generator->monthToRoman($this->tanggal->format('m'))."/".$this->tanggal->format('Y');
}
public function getAllBudgetAttribute()
{
$budget = [];
foreach ($this->groupItem as $_ => $group) {
foreach ($group->item as $_1 => $value) {
$budget[] = $value->budget->kode_budget;
}
}
return implode(', ',$budget);
}
public function pembayarans()
{
return $this->hasMany(Pembayaran::class,'surat_permintaan_id');
}
function perusahaan()
{
return $this->belongsTo(Perusahaan::class,'perusahaan_id')->withDefault([
'id'=>0,
'name'=>'Data Perusahaan Di Hapus',
'kode_perusahaan'=>'OO'
]);
}
public function getTotalSisaAttribute()
{
return $this->total - $this->pembayarans->sum('total_pembayaran');
}
}
Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]