示例#1
0
 public function addFeesToCompletedJob($include_review = false)
 {
     // workitem is DONE, calculate the creator fee based on project roles
     // and accepted bid
     if ($this->hasAcceptedBids()) {
         $reviewer_fee = 0;
         $reviewer_fee_desc = '/^Code Review - comment/';
         $reviewer_fee_added = false;
         $fees = $this->getFees($this->getId());
         foreach ($fees as $fee) {
             // find the accepted bid amount
             if ($fee['desc'] == 'Accepted Bid') {
                 $accepted_bid_amount = $fee['amount'];
             }
             if (preg_match($reviewer_fee_desc, $fee['desc'])) {
                 $reviewer_fee_added = true;
             }
         }
         if (!$reviewer_fee_added && $include_review) {
             $project = new Project();
             $project_roles = $project->getRoles($this->getProjectId(), "role_title = 'Reviewer'");
             if (count($project_roles) != 0) {
                 error_log("[FEES] we have a role for reviewer");
                 $reviewer_role = $project_roles[0];
                 if ($reviewer_role['percentage'] !== null && $reviewer_role['min_amount'] !== null) {
                     $reviewer_fee = $reviewer_role['percentage'] / 100 * $accepted_bid_amount;
                     if ((double) $reviewer_fee < $reviewer_role['min_amount']) {
                         $reviewer_fee = $reviewer_role['min_amount'];
                     }
                     // add the fee
                     $reviewer_fee_detail = 'Code Review - comment';
                     Fee::add($this->getId(), $reviewer_fee, $fee_category, $reviewer_fee_detail, $this->getCReviewerId(), $is_expense, $is_rewarder);
                     // and reduce the runners budget
                     $myRunner = new User();
                     $myRunner->findUserById($this->getRunnerId());
                     $myRunner->updateBudget(-$runner_fee, $this->getBudget_id());
                 }
             }
         }
     }
 }
示例#2
0
 public function updateSandboxUrl($id)
 {
     $this->view = null;
     try {
         $workitem = new WorkItem($id);
         $user = User::find(Session::uid());
         if ($workitem->getMechanicId() != $user->getId() && !$workitem->getIsRelRunner() || $workitem->getStatus() == 'Done') {
             throw new Exception('Action not allowed');
         }
         $url = trim($_POST['url']);
         $notes = trim($_POST['notes']) ? trim($_POST['notes']) : null;
         $workitem->setSandbox($url);
         $workitem->save();
         if ($notes) {
             //add review notes
             $fee_amount = 0.0;
             $fee_desc = 'Review Notes: ' . $notes;
             $mechanic_id = $workitem->getMechanicId();
             $itemid = $workitem->getId();
             $is_expense = 1;
             $fee_category = '';
             Fee::add($itemid, $fee_amount, $fee_category, $fee_desc, $mechanic_id, $is_expense);
         }
         $journal_message = '\\#' . $workitem->getId() . ' updated by @' . $user->getNickname() . " Branch URL: {$url}";
         Utils::systemNotification($journal_message);
         echo json_encode(array('success' => false, 'message' => $journal_message));
     } catch (Exception $e) {
         echo json_encode(array('success' => false, 'message' => $e->getMessage()));
     }
 }