inRandomOrder(); return $priceList->first()->id ?? null; } public function select2Paginate(?string $search): PaginateCollectionAttr { return (new PaginateCollectionAttrBuilder) ->build( PriceList::selectRaw('id, name as text, percentage, is_increase'), (new PaginateBuilderAttr)->setSearchKeyword($search), new PaginateSchemaPriceList ); } public function paginate(PaginateBuilderAttr $paginateBuilderAttr): PaginateCollectionAttr { return (new PaginateCollectionAttrBuilder) ->build( PriceList::query(), $paginateBuilderAttr, new PaginateSchemaPriceList ); } public function fetch($id) { return PriceList::with('items')->findOrFail($id); } public function create(PriceListAttr $priceListAttr) { $priceList = PriceList::create([ 'name' => $priceListAttr->getName(), 'type' => $priceListAttr->getType(), 'item_rate' => $priceListAttr->getItemRate(), 'description' => $priceListAttr->getDescription(), 'is_increase' => $priceListAttr->getIsIncrease(), 'percentage' => qtyFormat($priceListAttr->getPercentage()), ]); return $this->fetch($priceList->id); } public function update(PriceListAttr $priceListAttr, $id) { $priceList = $this->fetch($id); $priceList->update([ 'name' => $priceListAttr->getName(), 'type' => $priceListAttr->getType(), 'item_rate' => $priceListAttr->getItemRate(), 'description' => $priceListAttr->getDescription(), 'is_increase' => $priceListAttr->getIsIncrease(), 'percentage' => qtyFormat($priceListAttr->getPercentage()), ]); return $this->fetch($id); } public function delete($id) { $priceList = $this->fetch($id); $priceList->delete(); return $priceList; } public function syncItems($id, $priceListItemAttrs) { $item = $this->fetch($id); $pivots = []; foreach ($priceListItemAttrs as $priceListItemAttr) { $pivots[$priceListItemAttr->getItemId()] = [ 'price' => numberOnly($priceListItemAttr->getPrice()) ]; } $item->items()->sync($pivots); return PriceList::with('items')->find($id); } }