public function recalcStreams() { $bannerStreams = BannerStream::all(); echo '<table border="1"><tr><th>stream</th><th>banner</th><th>client</th><th>price</th><th>recalced price</th><th>difference</th></tr>'; foreach ($bannerStreams as $bs) { $amount = $bs->amount; $recalcedAmount = StreamTimelog::whereStreamId($bs->stream_id)->sum('amount'); if ($recalcedAmount > 0) { $diff = number_format(100 * $amount / $recalcedAmount, 2); } else { if ($amount > 0) { $diff = 'failed'; } } if ($diff == '100.00') { $diff = ''; echo '<tr>'; } else { $diff .= '%'; echo '<tr style="font-weight: bold">'; } echo '<tr>'; echo '<td>stream#' . $bs->stream_id . '</td>'; echo '<td>banner#' . $bs->banner_id . '</td>'; echo '<td>client#' . $bs->banner->client_id . '</td>'; echo '<td>' . $amount . '</td>'; echo '<td>' . $recalcedAmount . '</td>'; echo '<td>' . $diff . '</td>'; echo '<tr>'; } echo '</table>'; }
public function payStreams() { $bannerStreams = BannerStream::whereStatus('waiting')->get(); $faker = $this->faker; foreach ($bannerStreams as $bs) { $skip = boolval(rand(0, 1)); if ($skip) { continue; } $banner = $bs->banner; $user = $banner->client; $stream = $bs->stream; $transfer = StreamMapper::pay($user, $banner, $stream); $decline = rand(0, 5); if ($decline == 4) { $bs->status = 'declining'; $bs->client_comment = $faker->paragraph; $bs->save(); LogMapper::log('banner_declining', $banner->id, $stream->id); NotificationMapper::bannerPayDeclining($banner, $stream, $bs->amount); } else { $bs->status = 'accepted'; $bs->save(); LogMapper::log('banner_paid', $banner->id, $stream->id); NotificationMapper::bannerPayAccept($banner, $stream, $bs->amount); } } }
public function totalAmount() { $sum = BannerStream::whereBannerId($this->id)->sum('amount'); return $sum; }
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; }
public function stream($bannerStreamId) { $bannerStream = BannerStream::findOrFail($bannerStreamId); $stream = $bannerStream->stream; return view('admin.pages.decline.stream', compact('stream', 'bannerStream')); }
public static function getPivot(Banner $banner, Stream $stream) { return BannerStream::whereBannerId($banner->id)->whereStreamId($stream->id)->first(); }