public function save($runValidation = true, $attributeNames = null) { $date = date('Y-m-d', strtotime($this->transaction->date . " +1 day")); if ($this->isNewRecord) { if ($date >= '2015-11-01') { $balance = $this->account->getBalance($date); if ($balance->date != $date) { $balance = new Balance(); $balance->date = $date; $balance->account_id = $this->account->id; } $balance->sum = $this->account->getBalance($date)->sum - $this->sum; $balance->save(); $balance->updateFuture(-$this->sum); } else { // For previous records $balance = $this->account->getBalance($date); if (!$balance) { $balance = $this->account->getClosestFutureBalance($date); } if ($balance->date != $date) { $balance = new Balance(); $balance->date = $date; $balance->account_id = $this->account->id; } $balance->sum = $this->account->getBalance($date)->sum; $balance->save(); $balance->updatePast($this->sum); } } else { if ($date >= '2015-11-01') { // Substract previos from next balances // Add new to next balances $balance = $this->account->getBalance($date); if ($balance->date != $date) { $balance = new Balance(); $balance->date = $date; $balance->account_id = $this->account->id; } $balance->sum = $this->account->getBalance($date)->sum - $this->sum + $this->oldAttributes['sum']; $balance->save(); $balance->updateFuture(-$this->sum + $this->oldAttributes['sum']); } else { // } } return parent::save($runValidation, $attributeNames); }