%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/camillo/camillo-api-master/app/Models/
Upload File :
Create Path :
Current File : /var/www/html/camillo/camillo-api-master/app/Models/Classroom.php

<?php

namespace App\Models;

use App\Models\Pivots\ClassroomMinor;
use App\Scopes\ClassroomScope;
use App\User;
use Carbon\Carbon;
use Chelout\RelationshipEvents\Concerns\HasBelongsToManyEvents;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Log;
use Watson\Validating\ValidatingTrait;

/**
 * Class Classroom
 *
 * @property int $institute_id
 */
class Classroom extends Model
{
    use ValidatingTrait;

    protected $fillable = [
        'institute_id',
        'schoolyear_id',
        'class_name',
        'leaving_time',
        'arrival_time',
        'created_by',
        'updated_by',
        'mon',
        'tue',
        'wed',
        'thu',
        'fri',
        'sat',
        'sun',
        'pusher_id'
    ];

    protected $attributes = [
        'mon' => true,
        'tue'=> true,
        'wed'=> true,
        'thu'=> true,
        'fri'=> true,
        'sat'=> true,
        'sun' => false,
    ];

    protected $dates = [
        'created_at',
        'updated_at'
    ];

    protected $rules = [
        'institute_id' => 'required|integer|exists:institutes,id',
        'schoolyear_id' => 'required|integer|exists:schoolyears,id',
        'class_name' => 'required|string',
        'arrival_time' => 'required',
        'leaving_time' => 'required',
/*        'created_by' => 'required|integer|exists:users,id',
        'updated_by' => 'required|integer|exists:users,id'*/
    ];

    /**
     * Validation messages to be passed to the validator.
     *
     * @var array
     */
    protected $validatingMessages = [
        /*'institute_id.required' => "",
        'institute_id.exists' => "",
        'schoolyear_id.required' => "",
        'schoolyear_id.exists' => "",
        'class_name.required' => "",
        'arrival_time.required' => "",
        'arrival_time.date_format' => "",
        'leaving_time.required' => "",
        'leaving_time.date_format' => ""*/
    ];

    protected static function boot()
    {
        parent::boot();

        static::addGlobalScope(new ClassroomScope);

    }

    /**
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function institute()
    {
        return $this->belongsTo(Institute::class);
    }

    /**
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function schoolyear()
    {
        return $this->belongsTo(Schoolyear::class);
    }

    /**
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function creator()
    {
        return $this->belongsTo(User::class);
    }

    /**
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function updater()
    {
        return $this->belongsTo(User::class);
    }

    /**
     * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
     */
    public function minors()
    {
        return $this->belongsToMany(Minor::class)
            ->using(ClassroomMinor::class)->withPivot('active', 'arrival_time');
    }

    public function subscriptions()
    {
        return $this->hasMany(Subscription::class);
    }

    /**
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
     */
    public function events()
    {
        return $this->hasMany(Event::class);
    }

    /**
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
     */
    public function notices()
    {
        return $this->hasMany(Notice::class);
    }

    public function getArrivalTimeAttribute($value)
    {
//        return Carbon::parse($value)->format('H:i');
        return $value;
    }

    public function getLeavingTimeAttribute($value)
    {
//        return Carbon::parse($value)->format('H:i');
        return $value;
    }

    public function countMinorsByStatus()
    {
        $children = Minor::whereHas('classrooms', function($query) {
            $query->where('active', 1)->where('classroom_id', $this->id);
        })->get();

        $total = $children->count();

        $children_statuses = $children->map(function ($item, $key) {
            return ["status_description" => $item->status($this)["description"]];
        });

        $grouped_children= $children_statuses->groupBy('status_description');

        $count = $grouped_children->map(function ($item, $key) {
            return collect($item)->count();
        });

        $count = $count->toArray();
        $count["total"] = $total;
        
        return $count;
    }

}

Zerion Mini Shell 1.0