getFormDataMutation($data); } protected function handleRecordUpdate(Model $record, array $data): Model { $transactions = $this->data['transactions'] ?? []; return $this->processUpdate($record, $data, $transactions); } public function getFormDataMutation(array $data): array { return Arr::except($data, ['client', 'transactions', 'with_discount']); } public function processUpdate(Model $record, array $data, array $transactions): Model { try { DB::beginTransaction(); $record->update($data); $branch = $record->branch; // Delete existing transactions and their related ledgers/balances $record->transactions->each(function ($transaction) { $transaction->ledgers->each(function ($ledger) { $ledger->balances()->delete(); $ledger->delete(); }); $transaction->delete(); }); // Create new transactions foreach ($transactions as $transaction) { $tData = [ 'branch_id' => $branch->id, 'happened_on' => $record->happened_on, ...$transaction, ]; $payload = new CreateTransactionDTO(data: $tData, transactionable: $record); Pipeline::send(passable: $payload)->through( [ CreateTransactionAction::class, ] )->thenReturn(); } DB::commit(); } catch (\Exception $exception) { DB::rollBack(); throw new \Exception('Failed to save transactions : '.$exception->getMessage()); } return $record; } }