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;
}
}