public static function trackBanner(Banner $banner, Stream $stream, StreamTimelog $streamTimelog) { $price = $streamTimelog->price(); $duration = $streamTimelog->duration(); $pivotBannerStream = BannerStream::whereBannerId($banner->id)->whereStreamId($stream->id)->first(); $pivotBannerStream->minutes = $pivotBannerStream->minutes + $duration; $pivotBannerStream->viewers = $pivotBannerStream->viewers + $streamTimelog->viewers; $pivotBannerStream->amount = $pivotBannerStream->amount + $price; $pivotBannerStream->save(); $client = $banner->client; $client->balance_blocked = $client->balance_blocked + $price; $client->save(); $usedAmount = BannerStream::whereBannerId($banner->id)->sum('amount'); if ($banner->amount_limit <= $usedAmount) { $banner->is_active = 0; $banner->status = 'finished'; $banner->save(); NotificationMapper::bannerFinished($banner); } if ($client->availableBalance() <= 0) { $banner->is_active = 0; $banner->status = 'finished'; $banner->save(); NotificationMapper::emptyBalance($banner); } return $pivotBannerStream; }