%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/hr/api/app/Models/
Upload File :
Create Path :
Current File : /var/www/html/hr/api/app/Models/BaseModel.php

<?php

namespace App\Models;

use Carbon\Carbon;
use Carbon\CarbonPeriod;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\File as LaravelFile;

/**
 * @property integer id
 * @property mixed created_at
 * @property mixed updated_at
 */
class BaseModel extends Model
{
    protected $perPage = 10;

    public static function generateRandomToken($length = 10)
    {
        $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $charactersLength = strlen($characters);
        $randomString = '';
        for ($i = 0; $i < $length; $i++) {
            $randomString .= $characters[rand(0, $charactersLength - 1)];
        }
        return $randomString;
    }

    /**
     * @return User
     */
    public static function getLoggedInUser()
    {
        return $user = auth()
            ->guard('api')
            ->user();
    }

    public static function getLastMonthGroups($prop = 'created_at')
    {
        $date = Carbon::now()
                      ->subMonth()
                      ->startOfDay();
        $groups = self::query()
                      ->where($prop, '>=', $date)
                      ->groupBy('date')
                      ->orderBy('date', 'ASC')
                      ->get(array(
                          DB::raw("Date($prop) as date"),
                          DB::raw('COUNT(*) as "count"'),
                      ));

        $range = CarbonPeriod::create($date, Carbon::now());

        $data = collect();
        $total = 0;
        foreach ($range as $date) {
            $d = $groups->filter(function ($g) use ($date) {
                return $g['date'] === $date->format('Y-m-d');
            });

            $count = $d->first()['count'];
            if (!$count) {
                $count = 0;
            }

            $total += $count;
            $data->push([
                'date'  => $date->format('Y-m-d'),
                'count' => $count,
            ]);
        }
        return [
            'groups' => $data->toArray(),
            'total'  => $total,
        ];
    }

    public static function diffInHours($end, $start)
    {
        return round((Carbon::parse($end)
                            ->diffInMinutes(Carbon::parse($start)) / 60), 2);
    }

    public static function getEndOfMonth($month = null, $year = null)
    {
        if (!$month) {
            $month = Carbon::now()->month;
        }
        if (!$year) {
            $year = Carbon::now()->year;
        }
        return Carbon::now()
                     ->setYear($year)
                     ->startOfYear()
                     ->addMonths($month)
                     ->subMonth()
                     ->endOfMonth();
    }

    public static function getStartOfMonth($month = null, $year = null)
    {
        if (!$month) {
            $month = Carbon::now()->month;
        }
        if (!$year) {
            $year = Carbon::now()->year;
        }
        return Carbon::now()
                     ->setYear($year)
                     ->startOfYear()
                     ->addMonths($month)
                     ->subMonth();
    }

    public static function createPaths()
    {
        if (!LaravelFile::exists(storage_path('app/flow/chunks'))) {
            LaravelFile::makeDirectory(storage_path('app/flow/chunks'), $mode = 0777, true, true);
        }

        if (!LaravelFile::exists(storage_path('app/flow/uploads'))) {
            LaravelFile::makeDirectory(storage_path('app/flow/uploads'), $mode = 0777, true, true);
        }
    }

    public function formatDate($date, $format = 'Y-m-d')
    {
        if (!$date) {
            return null;
        }
        return Carbon::parse($date)->toISOString();
    }

}

Zerion Mini Shell 1.0