Exemplo n.º 1
0
 /**
  * Расчет стоимости сформированного проекта
  * 
  * @param array  $items Возвращает данные по проекту (а точнее массив со значениями цены по соответствующим категориям (логотип, цвет,выделение,место наверху))
  * @param double &$PROprice сумма оплаты, если бы у покупателя был PRO 
  * @param bool   $pricesAsArray = false если true, тогда для свойств $items["logo"]  и $items["top"] будет задан 
  *                                 массив array("no_pro" => a, "pro" => b), где b - стоимость опции при наличии у покупателя pro
  *                                 a - стоимость опции расчитанная в зависимости от наличия pro в момент расчета
  * @return integer Сумма оплаты
  */
 function getPrice(&$items = NULL, &$PROprice = 0, $pricesAsArray = false)
 {
     $isPayedUrgent = $this->_project['o_urgent'] == 't';
     $isPayedHide = $this->_project['o_hide'] == 't';
     $is_pro = is_pro(true, $this->_project["user_id"]);
     $addedPrc = $is_pro ? 0 : self::PRICE_ADDED;
     $items['logo']["no_pro"] = ($this->getLogo() && !(int) $this->_project['payed_items'][self::PAYED_IDX_LOGO]) * ($is_pro ? self::PRICE_LOGO : self::PRICE_LOGO_NOPRO);
     $nPrice = $this->isKonkurs() ? ($is_pro ? self::PRICE_CONTEST_TOP1DAY_PRO : self::PRICE_CONTEST_TOP1DAY) + $addedPrc : ($is_pro ? self::PRICE_TOP1DAYPRO : self::PRICE_TOP1DAY) + $addedPrc;
     $nProPrice = $this->isKonkurs() ? self::PRICE_CONTEST_TOP1DAY_PRO : self::PRICE_TOP1DAYPRO;
     $items['urgent'] = array("no_pro" => $this->_project['urgent'] == 't' && !$isPayedUrgent ? self::PRICE_URGENT : 0);
     $items['hide'] = array("no_pro" => $this->_project['hide'] == 't' && !$isPayedHide ? self::PRICE_HIDE : 0);
     $items['top'] = array("no_pro" => $this->getAddedTopDays() * $nPrice);
     if (!$pricesAsArray) {
         $items['top'] = $items["top"]["no_pro"];
         $items['urgent'] = $items["urgent"]["no_pro"];
         $items['hide'] = $items["hide"]["no_pro"];
         $items['logo'] = $items['logo']["no_pro"];
         $price = $items['logo'] + $items['top'] + $items['urgent'] + $items['hide'];
     } else {
         $price = $items['logo']["no_pro"] + $items['top']["no_pro"] + $items['urgent']['no_pro'] + $items['hide']['no_pro'];
     }
     $PROitems['urgent'] = $this->_project['urgent'] == 't' && !$isPayedUrgent ? self::PRICE_URGENT : 0;
     $PROitems['hide'] = $this->_project['hide'] == 't' && !$isPayedHide ? self::PRICE_HIDE : 0;
     $PROitems['logo'] = ($this->getLogo() && !(int) $this->_project['payed_items'][self::PAYED_IDX_LOGO]) * self::PRICE_LOGO;
     $PROnPrice = $this->isKonkurs() ? $is_pro ? self::PRICE_CONTEST_TOP1DAY_PRO : self::PRICE_CONTEST_TOP1DAY : ($is_pro ? self::PRICE_TOP1DAYPRO : self::PRICE_TOP1DAY);
     $PROitems['top'] = $this->getAddedTopDays() * $nProPrice;
     if ($pricesAsArray) {
         $items['top']["pro"] = $PROitems['top'];
         $items['logo']["pro"] = $PROitems['logo'];
         $items['urgent']["pro"] = $PROitems['urgent'];
         $items['hide']["pro"] = $PROitems['hide'];
         $PROprice = $PROitems['logo']["pro"] + $PROitems['top']["pro"] + $PROitems['urgent']["pro"] + $PROitems['hide']["pro"];
     } else {
         $PROprice = $PROitems['logo'] + $PROitems['top'] + $PROitems['urgent'] + $PROitems['hide'];
     }
     if ($this->isKonkurs() && !$this->isEdit()) {
         if (new_projects::isNewContestBudget()) {
             //Блок никогда не выполняется, т.к. метод в условии всегда возвращает false
             $isPro = $this->_project['is_pro'] === 't';
             $cost = $this->_costRub;
             $contestPrice = new_projects::getContestTax($cost, $isPro);
             $price += new_projects::getContestTax($cost, $isPro);
             $PROprice += new_projects::getContestTax($cost, true);
         } else {
             $items['contest']['pro'] = $this->getKonkursPrice(true);
             $items['contest']['no_pro'] = $this->getKonkursPrice();
             $contestPrice = $is_pro ? $items['contest']['pro'] : $items['contest']['no_pro'];
             $price = $price + $contestPrice;
             $PROprice = $PROprice + $items['contest']['pro'];
             if (!$pricesAsArray) {
                 $items['contest'] = $contestPrice;
             }
         }
     }
     if ($this->isVacancy() && (!$this->isEdit() || $this->isStateChangedToPublic())) {
         $items['office'] = $this->getProjectInOfficePrice($is_pro);
         $price = $price + $this->getProjectInOfficePrice($is_pro);
         $PROprice = $PROprice + $this->getProjectInOfficePrice(true);
     }
     return $price > 0 ? $price : 0;
 }
Exemplo n.º 2
0
$tmpPrj->fix();
$account_sum = $account->sum;
$account_bonus_sum = $account->bonus_sum;
$bill = new billing($uid);
$bill->cancelAllNewAndReserved();
//Здесь впервые считается цена
if ($tmpPrj->getAmmount()) {
    $tmpProject = $tmpPrj->getProject();
    //Цена считается повторно, в $items формируется список услуг
    $price = $tmpPrj->getPrice($items, $__temp, true);
    $option = array('is_edit' => $tmpPrj->isEdit(), 'items' => $items, 'prj_id' => $project['id'], 'logo_id' => $logo['id'], 'logo_link' => $tmpProject['link']);
    if ($items['top']) {
        $option['addTop'] = $tmpPrj->getAddedTopDays();
    }
    if ($tmpPrj->isKonkurs()) {
        if (new_projects::isNewContestBudget()) {
            $cost = $tmpPrj->getCostRub();
            $op_code = new_projects::getContestTaxOpCode($tmpPrj->getCostRub(), is_pro());
            $items['contest']['no_pro'] = $tmpPrj->isEdit() ? 0 : new_projects::getContestTax($cost, is_pro());
            $items['contest']['pro'] = $tmpPrj->isEdit() ? 0 : new_projects::getContestTax($cost, true);
        } else {
            //Здесь счет создастся при редактировании конкурса
            $items['contest']['no_pro'] = $tmpPrj->isEdit() ? 0 : 3300;
            $items['contest']['pro'] = $tmpPrj->isEdit() ? 0 : 3000;
            $op_code = is_pro() ? new_projects::OPCODE_KON : new_projects::OPCODE_KON_NOPRO;
        }
        $op_code_pay = new_projects::OPCODE_PAYED_KON;
    } else {
        $op_code = new_projects::OPCODE_PAYED;
        $op_code_pay = new_projects::OPCODE_PAYED;
    }
Exemplo n.º 3
0
require_once $_SERVER['DOCUMENT_ROOT'] . "/xajax/public.common.php";
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/projects.php";
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/project_exrates.php";
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/CFile.php";
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/sbr_stages.php";
$xajax->printJavascript('/xajax/');
$projectIsEdit = $tmpPrj->isEdit();
if ($project['kind'] == 7) {
    $title = $project['id'] ? 'Конкурс' : 'Новый конкурс';
    $isContest = true;
    $isVacancy = false;
    $titleHint = 'Цель конкурса. Например: Придумать логотип';
    $descrHint = 'Подробно опишите условия конкурса, сроки, другие условия участия.';
    // новая система расчета стоимости публикации конкурса (текущая дата больше даты ввода новой системы, а также это не редактируется проект опубликованный до ввода новой системы)
    $newContestBudget = new_projects::isNewContestBudget($project['post_date']);
    $minBudget = $newContestBudget ? new_projects::NEW_CONTEST_MIN_BUDGET : new_projects::CONTEST_MIN_BUDGET;
} elseif ($project['kind'] == 4) {
    $title = $project['id'] ? 'Вакансия' : 'Новая вакансия';
    $isContest = false;
    $isVacancy = true;
    $titleHint = 'Специалист какой квалификации и на какие задачи вам требуется. Например: Дизайнер иконок на проект';
    $descrHint = 'Подробно опишите задачу, сроки выполнения, другие условия работы.';
} else {
    $title = $exec ? $project['id'] ? 'Персональный проект' : 'Новый персональный проект' : ($project['id'] ? 'Проект' : 'Новый проект (задание на разовую работу)');
    $isContest = false;
    $isVacancy = false;
    $titleHint = 'Что требуется сделать. Например: Дизайн для интернет-магазина детской одежды';
    $descrHint = 'Подробно опишите задачу, сроки выполнения, другие условия работы.';
}
$project['end_date'] = $project['end_date'] ? date('d.m.Y', strtotime($project['end_date'])) : '';