/** * Adds New AD Categories by checking if that category already exists in * the database to prevent duplicate */ public static function addNew(&$categories, $org, $newCat = []) { $result = []; ArrayMethods::copy($categories, $result); $cat = RequestMethods::post("category") ?? $newCat; foreach ($cat as $c) { $found = self::first(['name' => strtolower($c), 'org_id' => $org->_id], ['_id', 'name']); // remove those which are found if ($found) { unset($categories[$found->getMongoID()]); continue; } $category = new self(['name' => $c, 'org_id' => $org->_id]); $category->save(); $result[$category->_id] = $category; } return $result; }
public static function livePerf($user, $s = null, $e = null) { $start = $end = date('Y-m-d'); $type = $user->type ?? ''; if ($s) { $start = $s; } if ($e) { $end = $e; } $perf = new \Performance(); $match = ['is_bot' => false, 'created' => Db::dateQuery($start, $end)]; switch ($user->type) { case 'publisher': $match['pid'] = Db::convertType($user->_id); break; case 'advertiser': $ads = \Ad::all(['user_id' => $user->_id], ['_id']); $keys = array_keys($ads); $match['adid'] = ['$in' => Db::convertType($keys)]; break; default: return $perf; } $results = $commissions = []; $records = self::_livePerfQuery($match); foreach ($records as $r) { $obj = Utils::toArray($r); $adid = Utils::getMongoID($obj['_id']); $results[$adid] = $obj; } $comms = Db::query('Commission', ['ad_id' => ['$in' => array_keys($results)]], ['ad_id', 'rate', 'revenue', 'model', 'coverage']); $comms = \Click::classify($comms, 'ad_id'); foreach ($comms as $adid => $value) { $value = array_map(function ($v) { $v["ad_id"] = Utils::getMongoID($v["ad_id"]); unset($v["_id"]); return (object) $v; }, Utils::toArray($value)); $commissions[$adid] = \Commission::filter($value); } foreach ($results as $adid => $obj) { $comms = $commissions[$adid]; foreach ($obj['countries'] as $value) { $country = $value['country']; $clicks = $value['count']; $commission = \Commission::campaignRate($adid, $comms, $country, ['type' => $type, "{$type}" => $user, 'start' => $start, 'end' => $end, 'commFetched' => true]); $updateData = []; $earning = \Ad::earning($commission, $clicks); AM::copy($earning, $updateData); $perf->update($updateData); } } return $perf; }
protected function perf($clicks, $arr, $dq = []) { $perf = new Performance(); $commissions = []; $classify = \Click::classify($clicks, 'adid'); foreach ($classify as $key => $value) { $countryWise = \Click::classify($value, 'country'); foreach ($countryWise as $country => $records) { $adClicks = count($records); $updateData = []; $extra = array_merge($arr, $dq); $info = \Commission::campaignRate($key, $commissions, $country, $extra); $earning = \Ad::earning($info, $adClicks); \Framework\ArrayMethods::copy($earning, $updateData); $perf->update($updateData); } } return $perf; }