HEX
Server: nginx/1.18.0
System: Linux test-ipsremont 5.4.0-214-generic #234-Ubuntu SMP Fri Mar 14 23:50:27 UTC 2025 x86_64
User: ips (1000)
PHP: 8.0.30
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/ipsremont-demo/app/Repository/Part/PartRepository.php
<?php


namespace App\Repository\Part;


use App\Http\Requests\Part\IndexPartRequest;
use App\Models\Part;
use App\Models\PartsStorage;
use App\Repository\BaseRepository;
use App\Traits\GridTrait;
use Illuminate\Support\Facades\DB;

class PartRepository extends BaseRepository
{

    use GridTrait;

    /**
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public static function getQuery()
    {
        return Part::query();
    }

    public static function getDisplayed()
    {
        return self::getAvailable();
    }

    /**
     * @param IndexPartRequest $request
     *
     * @return mixed
     */
    public function search(IndexPartRequest $request)
    {
        $query = self::getAvailable();

        $this->makeQueryOrdered(Part::class, $query, $request);

        if (isset($request->external_id) && !empty($request->external_id)) {
            $query->where('external_id', 'like', '%' . $request->external_id . '%');
        }

        if (isset($request->name) && !empty($request->name)) {
            $query->where('name', 'like', '%' . $request->name . '%');
        }

        $perPage = $request->per_page ?? config('crud.defaultPerPage');
        $data = $query->paginate((int) $perPage)->appends($request->all());

        return $data;
    }

    public static function searchByNameOrCode($search)
    {
        $query = self::getAvailable();

        $query->where(function ($query) use ($search) {
            $query
                ->where('name', 'like', '%' . $search . '%')
                ->orWhere('external_id', 'like', '%' . $search . '%');
        });

        $query->select("id", DB::raw('concat(external_id, ", ", name) as text'));

        return $query->get(['text', 'id'])->toArray();
    }

    public static function save($code, $data)
    {
        $price = str_replace(',', '.', $data['price']);
        $price = (float) $price;

        $data['name'] = addslashes($data['name']);

        Part::updateOrCreate(
            ['external_id' => $code],
            [
                'name' => $data['name'],
                'item' => $data['item'],
                'price' => $price,
                'foto' => $data['foto'],
                'updated_at' => date('Y-m-d H:i:s'),
            ]
        );
    }

    public static function fillStorage($part, $warehouseId, $amount)
    {
        $type = PartsStorage::branch;

        $amount = (int) $amount;
        DB::statement(
            "INSERT INTO parts_storage
            (amount, `type`, part_id, external_warehouse_id)
            values($amount, '$type', {$part->id}, '$warehouseId')
            ON DUPLICATE KEY UPDATE amount = $amount
        "
        );
    }

    public static function searchByNameOrVendorCode($data)
    {
        $query = self::getAvailable();

        $query->where(function ($query) use ($data) {
            $query
                ->where('name', 'like', '%' . $data . '%')
                ->orWhere('external_id', 'like', '%' . $data . '%');
        });

        return $query->get();
    }

    public static function searchByCode($code)
    {
        $query = self::getAvailable();

        $query->where('external_id', $code);

        return $query->first();
    }

    /**
     * Import file from Cart page
     *
     * @param $data
     *
     * @return Part
     */
    public static function saveFromImport($data): Part
    {
        $model = new Part();
        $model->fill($data);
        $model->save();

        return $model;
    }
}