first(); } public function findById($id) { return Tax::find($id); } public function getRandomId($limit = 10) { $tax = Tax::limit($limit)->inRandomOrder(); return $tax->first()->id ?? null; } public function select2Paginate(?string $search): PaginateCollectionAttr { return (new PaginateCollectionAttrBuilder) ->build( Tax::selectRaw('id, CONCAT(name, " | ", rate, "%") as text, rate'), (new PaginateBuilderAttr)->setSearchKeyword($search), new PaginateSchemaTax ); } public function paginate(PaginateBuilderAttr $paginateBuilderAttr): PaginateCollectionAttr { return (new PaginateCollectionAttrBuilder) ->build( Tax::query(), $paginateBuilderAttr, new PaginateSchemaTax ); } public function fetch($id) { return Tax::findOrFail($id); } public function create(TaxAttr $taxAttr) { $tax = Tax::create([ 'name' => $taxAttr->getName(), 'rate' => qtyFormat($taxAttr->getRate()), ]); return $this->fetch($tax->id); } public function update(TaxAttr $taxAttr, $id) { $tax = $this->fetch($id); $tax->update([ 'name' => $taxAttr->getName(), 'rate' => qtyFormat($taxAttr->getRate()), ]); return $this->fetch($id); } public function delete($id) { $tax = $this->fetch($id); $tax->delete(); return $tax; } public function summary(PaginateBuilderAttr $paginateBuilderAttr): PaginateCollectionAttr { $tax = Tax::query(); $builder = (new PaginateCollectionAttrBuilder) ->build( $tax, $paginateBuilderAttr, new PaginateSchemaTax ); $invoiceFacade = app(InvoiceFacade::class); $newCollections = $builder->getCollections()->map(function ($query) use ($invoiceFacade) { $query['total'] = $invoiceFacade->getTotal($query->id); $query['total_tax'] = $invoiceFacade->getTotalTax($query->id); return $query; }); return $builder->setCollections($newCollections); } public function fetchSummary($id) { $tax = Tax::find($id); $invoiceFacade = app(InvoiceFacade::class); $tax->total = $invoiceFacade->getTotal($id); $tax->total_tax = $invoiceFacade->getTotalTax($id); return $tax; } }