where('id', $productId); }); if ($paginateBuilderAttr->getStartDate() and $paginateBuilderAttr->getEndDate()) { $adjustment = $adjustment->whereBetween('adjustment_date', [ $paginateBuilderAttr->getStartDate(), $paginateBuilderAttr->getEndDate() ]); } return (new PaginateCollectionAttrBuilder) ->build( $adjustment, $paginateBuilderAttr, new PaginateSchemaAdjustment ); } public function select2Paginate(?string $search): PaginateCollectionAttr { return (new PaginateCollectionAttrBuilder) ->build( Adjustment::selectRaw('id, name as text'), (new PaginateBuilderAttr)->setSearchKeyword($search), new PaginateSchemaAdjustment ); } public function paginate(PaginateBuilderAttr $paginateBuilderAttr): PaginateCollectionAttr { return (new PaginateCollectionAttrBuilder) ->build( Adjustment::query(), $paginateBuilderAttr, new PaginateSchemaAdjustment ); } public function fetch($id) { return Adjustment::with('items', 'chartOfAccount', 'warehouse')->findOrFail($id); } public function create(AdjustmentAttr $adjustmentAttr) { $adjustment = Adjustment::create([ 'adjustment_date' => formatDate($adjustmentAttr->getAdjustmentDate()), 'chart_of_account_id' => $adjustmentAttr->getChartOfAccountId(), 'warehouse_id' => $adjustmentAttr->getWarehouseId(), 'reason' => $adjustmentAttr->getReason(), 'description' => $adjustmentAttr->getDescription() ]); return $this->fetch($adjustment->id); } public function update(AdjustmentAttr $adjustmentAttr, $id) { $adjustment = $this->fetch($id); $adjustment->update([ 'adjustment_date' => formatDate($adjustmentAttr->getAdjustmentDate()), 'chart_of_account_id' => $adjustmentAttr->getChartOfAccountId(), 'warehouse_id' => $adjustmentAttr->getWarehouseId(), 'reason' => $adjustmentAttr->getReason(), 'description' => $adjustmentAttr->getDescription() ]); return $this->fetch($id); } public function delete($id) { $adjustment = $this->fetch($id); $adjustment->delete(); return $adjustment; } public function syncItems($id, array $adjustmentItemAttrs) { $adjustment = $this->fetch($id); $pivots = []; foreach ($adjustmentItemAttrs as $adjustmentItemAttr) { $pivots[$adjustmentItemAttr->getItemId()] = [ 'qty_adjusted' => $adjustmentItemAttr->getQtyAdjusted(), ]; } $adjustment->items()->sync($pivots); return Adjustment::with('items')->find($id); } }