/** * Добавление нового платежа */ 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'))); }
/** * Возвращает ответ на вопрос: "Оплачена ли заявка?" на основе суммирования оплат * * @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; }
/** * Открыта ли дисциплина для студента * * @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; }
/** * Добавление записи в кортеж о состояние оплаты завки: поля 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; }