Beispiel #1
0
 /**
  * Добавление нового платежа
  */
 public function action_add(array $params = array())
 {
     $links = Resources::getInstance()->links;
     $request = $this->getRequest();
     if (empty($params)) {
         $this->flash('Не указан идентификатор заявки', $links->get('admin.applications', array('sort_field' => 'fio', 'sort_direction' => 'asc')));
     }
     $app_id = intval(array_shift($params));
     $opts = array('app_id' => $app_id);
     $action = $links->get('payments.add', $opts);
     $form = Form_Payment_Add::create($action);
     $this->set('form', $form);
     $method = $form->method();
     if (empty($request->{$method})) {
         $this->render();
     }
     if (!$form->validate($request)) {
         $this->render();
     }
     $payment = Model_Payment::create();
     $amount = $form->amount->value;
     if (!$payment->add($amount, $app_id)) {
         $msg = 'Не удалось добавить платёж';
     } else {
         $msg = 'Платёж успешно добавлен';
     }
     $this->flash($msg, $links->get('admin.applications', array('sort_field' => 'fio', 'sort_direction' => 'asc')));
 }
Beispiel #2
0
 /**
  * Возвращает ответ на вопрос: "Оплачена ли заявка?" на основе суммирования оплат
  *
  * @param  int   $app_id Идентификатор заявки.
  * @return boolean
  */
 public function isAppPrepaid($app_id)
 {
     $app = Model_Application::create();
     $paym = Model_Payment::create();
     $a = $app->getAppInfo($app_id);
     //print_r($a); die();
     if ($a['type'] == 'program') {
         //товарищ учится по всему направлению
         $prog = $app->getProgram($a['object_id']);
         $paid_money = $paym->getTotal($a['app_id']);
         $rest = $prog['cost'] - $paid_money;
         // (program price - paid already)
     } elseif ($a['type'] == 'discipline') {
         //учится по дисциплине
         $disc = $app->getDiscipline($a['object_id']);
         $upper_prog = $app->getProgram($disc['program_id']);
         $paid_money = $paym->getTotal($a['app_id']);
         $rest = $upper_prog['cost'] * $disc['coef'] / 100 - $paid_money;
         // (program price - paid already)
     }
     return $rest <= 0;
 }
Beispiel #3
0
 /**
  * Открыта ли дисциплина для студента
  *
  * @param int $disciplineId
  * @param int $studentId
  * @param array $statuses Статусы заявок студента
  * @return bool
  */
 public function isDisciplineOpenForStudent($disciplineId, $studentId, $statuses = false)
 {
     $result = false;
     $modelApps = Model_Application::create();
     if (!$statuses) {
         $statuses = $modelApps->getAppsStatus($disciplineId, $studentId);
     }
     if (array_key_exists(Model_Application::STATUS_PREPAID, $statuses) || array_key_exists(Model_Application::STATUS_FINISHED, $statuses)) {
         $result = true;
     } elseif ($k = array_search(Model_Application::STATUS_SIGNED, $statuses) !== false) {
         foreach ($statuses[$k] as $appId) {
             $appInfo = $modelApps->getAppInfo($appId);
             $modelEducationPrograms = Model_Education_Programs::create();
             if ($appInfo['type'] == 'discipline') {
                 $programId = $modelEducationPrograms->getProgramIdByDiscipline($appInfo['object_id']);
             } elseif ($appInfo['type'] == 'program') {
                 $programId = $appInfo['object_id'];
             }
             $programInfo = $modelEducationPrograms->getProgramInfo($programId);
             if ($programInfo['paid_type'] == Model_Education_Programs::PAID_TYPE_FREE) {
                 $result = true;
                 break;
             } else {
                 $modelPayment = Model_Payment::create();
                 $total_payment = $modelPayment->getTotal($appId);
                 $cost_total = $program_data['cost'];
                 $ar = $this->_getAllowed(array($disciplineId), $payment_total, $cost_total);
                 if (!empty($ar)) {
                     $result = true;
                     break;
                 }
             }
         }
     }
     return $result;
 }
Beispiel #4
0
 /**
  * Добавление записи в кортеж о состояние оплаты завки: поля rest (остаток в рублях), rest_rate (остаток в длолях)
  *
  * @param array Кортеж описания  заявки: должен обязательно содержать поля 
  *     app_id, object_id, program_title/discipline_title
  *
  * @return array
  */
 public function addInfoIntoKortegAboutPaidState($a)
 {
     $paym = Model_Payment::create();
     if ($a['program_title']) {
         //товарищ учится по всему направлению
         $prog = $this->getProgram($a['object_id']);
         if ($prog['paid_type'] == 'paid') {
             $paid_money = $paym->getTotal($a['app_id']);
             $rest = $prog['cost'] - $paid_money;
             // (program price - paid already)
             $rest_rate = $rest / $prog['cost'];
             // how many cost's parts to pay
             $app = array_merge($a, array('rest' => $rest, 'rest_rate' => $rest_rate));
         } else {
             $app = array_merge($a, array('rest' => 'free', 'rest_rate' => 'free'));
         }
     } elseif ($a['discipline_title']) {
         //учится по дисциплине
         $disc = $this->getDiscipline($a['object_id']);
         $upper_prog = $this->getProgram($disc['program_id']);
         if ($upper_prog['paid_type'] == 'paid') {
             $paid_money = $paym->getTotal($a['app_id']);
             $rest = $upper_prog['cost'] * $disc['coef'] / 100 - $paid_money;
             // (program price - paid already)
             $rest_rate = $rest / ($upper_prog['cost'] * $disc['coef'] / 100);
             // how many cost's parts to pay
             $app = array_merge($a, array('rest' => $rest, 'rest_rate' => $rest_rate));
         } else {
             $app = array_merge($a, array('rest' => 'free', 'rest_rate' => 'free'));
         }
     }
     return $app;
 }