public function give_commission_post($id) { if (is_null(Agent::find($id))) { return Redirect::to('admin'); } $agent = Agent::find($id); $action = Input::get('action'); if ($action == 'deduct') { $rules = array('action' => 'required', 'remarks' => 'required', 'amount' => 'required|numeric'); $validator = Validator::make(Input::all(), $rules); if ($validator->passes()) { $commissions = new Commission(); $commissions->user_id = Input::get('user_id'); $commissions->property_id = Input::get('property_id'); $commissions->agent_id = $agent->id; $commissions->action = 'deduct'; $commissions->remarks = Input::get('remarks'); $commissions->amount = Input::get('amount'); $commissions->save(); // AGENT COMMISSION if ($agent->earnings > 0) { $agent->earnings = $agent->earnings - Input::get('amount'); $agent->save(); } return Redirect::to('admin/agents/commissions/' . $id)->with('success', 'Commission has been added.'); } else { return Redirect::to('admin/give_commission/' . $id)->withErrors($validator)->withInput(); } } elseif ($action == 'add') { $rules = array('user_id' => 'required|numeric|exists:users,id', 'property_id' => 'required|numeric|exists:properties,id', 'action' => 'required', 'remarks' => 'required', 'amount' => 'required|numeric'); $validator = Validator::make(Input::all(), $rules); if ($validator->passes()) { $commissions = new Commission(); $commissions->user_id = Input::get('user_id'); $commissions->property_id = Input::get('property_id'); $commissions->agent_id = $agent->id; $commissions->action = 'add'; $commissions->remarks = Input::get('remarks'); $commissions->amount = Input::get('amount'); $commissions->save(); // AGENT COMMISSION $agent->earnings = $agent->earnings + Input::get('amount'); $agent->save(); return Redirect::to('admin/agents/commissions/' . $id)->with('success', 'Commission has been added.'); } else { return Redirect::to('admin/give_commission/' . $id)->withErrors($validator)->withInput(); } } }
/** * @before _secure */ public function settings() { $this->seo(array("title" => "Campaign: Settings")); $view = $this->getActionView(); $user = $this->user; $org = $this->org; if (RM::type() === 'DELETE') { switch (RM::get("action")) { case 'commDel': $comm = Commission::first(['_id' => RM::get("comm_id"), "org_id" => $this->org->_id]); if ($comm) { $comm->delete(); $view->set('message', 'Commission removed!!'); } else { $view->set('message', 'Invalid request!!'); } return; } } if (RM::type() == 'POST') { $action = RM::post('action', ''); switch ($action) { case 'commadd': case 'commedit': $fields = ['model' => RM::post('model'), 'rate' => RM::post('rate'), 'coverage' => RM::post('coverage') ?? ['ALL']]; $comm_id = RM::post('comm_id'); if ($comm_id) { $comm = Commission::first(['_id' => $comm_id, 'org_id' => $this->org->_id]); if (!$comm) { $view->set('Invalid Request!!'); break; } } else { $comm = new Commission(['org_id' => $this->org->_id]); } foreach ($fields as $key => $value) { $comm->{$key} = $value; } $comm->save(); //echo "<pre>", print_r($_POST), "</pre>";die(); $view->set('message', 'Commission saved successfully!!'); break; case 'domains': $message = $org->updateDomains(); $this->setOrg($org); $view->set('message', $message); break; case 'categories': $success = Category::updateNow($this->org); if ($success) { $msg = 'Categories updated Successfully!!'; } else { $msg = 'Failed to delete some categories because in use by campaigns!!'; } $view->set('message', $msg); break; } $this->setUser($user); } $commissions = Commission::all(['org_id' => $this->org->_id]); $categories = \Category::all(['org_id' => $this->org->_id]); $view->set('categories', $categories)->set('hideRevenue', true)->set('commissions', $commissions); }
/** * Process the Meta table for campaign urls and create the * campaign from the corresponding URL */ protected function importCampaigns() { $metas = \Meta::all(['prop = ?' => 'campImport']); $users = []; $orgs = []; foreach ($metas as $m) { $user = Usr::find($users, $m->propid, ['_id', 'org_id', 'email', 'meta']); $org = \Organization::find($orgs, $user->org_id); $categories = \Category::all(['org_id' => $org->_id], ['_id', 'name']); $categories = array_values($categories); $category = $categories[array_rand($categories)]; // fetch ad info foreach URL $advert_id = $m->value['advert_id']; $comm = $m->value['campaign'] ?? $org->meta; if (!isset($comm['model']) || !isset($comm['rate'])) { continue; } $urls = $m->value['urls']; foreach ($urls as $url) { $ad = \Ad::first(['org_id' => $org->_id, 'url' => $url]); if ($ad) { continue; } // already crawled URL may be due to failed cron earlier $data = Utils::fetchCampaign($url); $image = Utils::downloadImage($data['image']); if (!$image) { $image = ''; } $ad = new \Ad(['user_id' => $advert_id, 'org_id' => $org->_id, 'title' => $data['title'], 'description' => $data['description'], 'url' => $url, 'image' => $image, 'category' => [$category->_id], 'type' => 'article', 'live' => false, 'device' => ['ALL']]); if ($ad->validate()) { $ad->save(); $rev = $comm['revenue'] ?? 1.25 * (double) $comm['rate']; $commission = new \Commission(['ad_id' => $ad->_id, 'model' => $comm['model'], 'rate' => $comm['rate'], 'revenue' => round($rev, 6), 'coverage' => ['ALL']]); $commission->save(); } else { var_dump($ad->getErrors()); } } $msg = 'Campaigns imported for the user: ' . $user->email; $this->log($msg); $m->delete(); } }
/** * @before _admin */ public function info($id = null) { $this->seo(array("title" => "Publisher Edit")); $view = $this->getActionView(); $publisher = User::first(["_id = ?" => $id, "type = ?" => "publisher", "org_id = ?" => $this->org->id]); if (!$publisher) { $this->_404(); } $platforms = Platform::all(["user_id = ?" => $publisher->id]); $view->set("platforms", $platforms); $view->set("errors", []); if (RM::type() == 'POST') { $action = RM::post('action', ''); switch ($action) { case 'account': $fields = ['name', 'email', 'phone', 'country', 'currency', 'username']; foreach ($fields as $f) { $publisher->{$f} = RM::post($f); } $publisher->save(); $view->set('message', 'Account Info updated!!'); break; case 'password': $old = RM::post('password'); $new = RM::post('npassword'); $view->set($publisher->updatePassword($old, $new)); break; case 'campaign': $publisher->getMeta()['campaign'] = ['model' => RM::post('model'), 'rate' => $this->currency(RM::post('rate'))]; $publisher->save(); $view->set('message', 'Payout Info Updated!!'); break; case 'trackingDomain': $tdomain = (array) RM::post('tdomain', ''); if ($tdomain && ArrayMethods::inArray($this->org->tdomains, $tdomain)) { $publisher->getMeta()['tdomain'] = $tdomain; $publisher->save(); $view->set('message', 'Added Tracking Domain for publisher'); } else { $view->set('message', 'Invalid Request!!'); } case 'commadd': case 'commedit': $comm_id = RM::post('comm_id'); if ($comm_id) { $comm = Commission::first(['_id' => $comm_id, 'user_id' => $publisher->_id]); } else { $comm = new Commission(['user_id' => $publisher->_id]); } $comm->model = RM::post('model'); $comm->description = RM::post('description'); $comm->rate = $this->currency(RM::post('rate')); $comm->coverage = RM::post('coverage', ['ALL']); $comm->save(); $view->set('message', "Multi Country Payout Saved!!"); break; } } if (RM::type() === 'DELETE') { $action = RM::get("action"); switch ($action) { case 'payoutdel': unset($publisher->getMeta()['campaign']); $publisher->save(); $view->set('message', 'Payout Deleted!!'); break; case 'commDel': $comm = Commission::first(['_id' => RM::get("comm_id"), 'user_id' => $publisher->_id]); if ($comm) { $comm->delete(); $view->set('message', 'Payout Deleted!!'); } else { $view->set('message', 'Invalid Request!!'); } break; case 'afields': $meta = $publisher->meta; $publisher->removeFields(); unset($meta['afields']); Db::updateRaw('users', ['_id' => Db::convertType($publisher->_id, 'id')], ['$set' => ['meta' => $meta]]); $view->set('message', 'Data Removed!!'); break; case 'defaultDomain': unset($publisher->getMeta()['tdomain']); $publisher->save(); $view->set('message', 'Removed tracking domain!!'); break; } } $afields = Meta::search('customField', $this->org); $view->set('afields', $afields)->set("publisher", $publisher)->set("commissions", Commission::all(["user_id = ?" => $publisher->id]))->set("start", strftime("%Y-%m-%d", strtotime('-7 day')))->set("end", strftime("%Y-%m-%d", strtotime('now')))->set("d", Performance::total(['start' => $start ?? $publisher->created->format('Y-m-d'), 'end' => $end ?? date('Y-m-d')], $publisher)); }
private function createCommission($analyticsActivity) { if ($analyticsActivity) { $yiidActivity = MongoManager::getDM()->getRepository("Documents\\YiidActivity")->find($analyticsActivity->getYiidActivityId()); $commissionValue = $this->getBillingType() == DealTable::BILLING_TYPE_LIKE ? $this->commission_per_unit : $this->commission_per_unit * $analyticsActivity->getMediaPenetration(); if ($this->commission_pot < $commissionValue) { $commissionValue = $this->commission_pot; } if ($commissionValue > 0) { $commission = new Commission(); $commission->setPrice($commissionValue); $commission->setDomainProfileId($yiidActivity->getIId()); $commission->setDealId($this->getId()); $commission->setYaId($yiidActivity->getId()); $commission->save(); $this->commission_pot -= $commissionValue; } } }