/** * Вывод страницы по сбербанку - "Квитанция сбербанка". */ public function sberAction() { front::og('tpl')->page = 'index'; front::og('tpl')->script = '/scripts/bill2.js'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/bank_payments.php'; $fm_val = ''; /* * Берем данные по предыдущему переводу, если он есть */ $bp = new bank_payments(); if ($id = __paramInit('int', null, 'id')) { // редактируется. front::og('tpl')->edit = 1; $bp->GetRow($id, " AND user_id = {$this->uid}"); $fm_val = $bp->sum / EXCH_TR; if (!$bp->id) { exit; } } else { // если нет, новый счет. $bp->bank_code = __paramInit('int', null, 'bc', bank_payments::BC_SB); $bp->sum = __paramInit('float', null, 'Sum'); $bp_reqv = bank_payments::GetLastReqv($bp->bank_code, $this->uid); $bp->fio = $bp_reqv['fio']; $bp->address = $bp_reqv['address']; } if (!$bp->bill_num) { $bp->bill_num = bank_payments::GenBillNum($bp->bank_code, $this->uid, $this->account->id); } $bank = bank_payments::GetBank($bp->bank_code); if ($bp->accepted_time) { exit; } // подтверженные счета (уже перевели деньги) нельзя изменять. if ($_POST['act']) { $bp = new bank_payments(); $bp->fio = substr(__paramInit('string', null, 'fio'), 0, 128); $bp->is_gift = false; $bp->address = substr(__paramInit('string', null, 'address'), 0, 255); $bp->bank_code = __paramInit('int', null, 'bc'); $bp->sum = __paramInit('float', null, 'sum'); setlocale(LC_ALL, 'en_US.UTF-8'); // гребанная бета! (это не мое) $bp->fm_sum = $bp->sum / EXCH_TR; $id = __paramInit('int', null, 'id'); /* * Проверка ошибок */ if (!$bp->fio) { $alert['fio'] = 'Поле заполнено некорректно.'; } if (!$bp->address) { $alert['address'] = 'Поле заполнено некорректно.'; } if (!$bp->sum || $bp->sum < 0.01) { $alert['sum'] = 'Поле заполнено некорректно.'; } //if($alert) break; if (!$alert) { if ($id) { $bp->bank_code = null; $bp->Update($id, " AND user_id = {$this->uid} AND accepted_time IS NULL"); } else { $bp->bill_num = bank_payments::GenBillNum($bp->bank_code, $this->uid, $this->account->id); $bp->user_id = $this->uid; $bp->op_code = 12; $id = $bp->Add($error, true); } if (!$error) { header('Location: /' . $this->name_page . "/print/{$id}/"); exit; } } front::og('tpl')->alert = $alert; } front::og('tpl')->bp = $bp; front::og('tpl')->fm_val = $fm_val; front::og('tpl')->display('bill/bill_sber.tpl'); }
/** * Выписывает счет для резервирования по безналу. Если счет на данную сделку уже существует и еще не принят, то реквизиты просто обновляются. * * @param int $form_type 1:юр. лицо, 2:физ. лицо. * @param array $request данные с реквизитами счета. * @param account $account инициализированный экземпляр класса account текущего пользователя. * * @return bool успешно? */ public function invoiceBank($form_type, $request, $account) { if ($form_type == self::FT_JURI) { $reqv = new reqv_ordered(); $reqv->BindRequest(array_map('stripslashes', $request['ft' . self::FT_JURI])); if (!($this->error['reqv'] = $reqv->CheckInput(true))) { $reqv->user_id = $this->uid; $reqv->ammount = $this->reserve_sum; $reqv->op_code = self::OP_RESERVE; $reqv->op_date = 'now()'; $reqv->sbr_id = $this->id; if ($reqv->id) { $reqv->Update($reqv->id, "AND user_id = {$this->uid} AND payed_time IS NULL"); } else { unset($reqv->id); $reqv->id = $reqv->Add($err, true); } } } elseif ($form_type == self::FT_PHYS) { $reqv = new bank_payments(); $reqv->BindRequest(array_map('stripslashes', $request['ft' . self::FT_PHYS])); $reqv->sum = $this->reserve_sum; if (!($this->error['reqv'] = $reqv->CheckInput(true))) { $bank = $reqv->GetBank($reqv->bank_code); $reqv->bill_num = $bank['prefix'] . '-' . $this->getContractNum(); // обновляем номер, т.к. схема может поменяться. $done = false; if (!$reqv->id) { $reqv->user_id = $this->uid; $reqv->op_code = self::OP_RESERVE; $reqv->sbr_id = $this->id; @($reqv->id = $reqv->Add($error, true)); if ($error || $reqv->id <= 0) { // конфликт ключей, пытаемся обновить (с двух браузеров можно воспроизвести). $reqv->id = null; $this->getInvoiceReqv($form_type); if ($this->reqv[sbr::FT_PHYS] && $this->reqv[sbr::FT_PHYS]->sbr_id == $this->id) { $reqv->id = $this->reqv[sbr::FT_PHYS]->id; } $this->reqv = array(); } else { $done = true; } } if ($reqv->id && !$done) { $reqv->bank_code = null; $reqv->invoiced_time = 'now()'; $reqv->Update($reqv->id, " AND user_id = {$this->uid} AND accepted_time IS NULL"); } } } $this->reqv[(int) $form_type] = $reqv; if ($this->error['reqv']['address']) { $this->error['reqv']['address'] = array('На этот адрес будут высланы все документы', 'Пример: ул. Самокатная, 1, стр. 21'); } if (!$this->error['reqv'] && $request['save_finance']) { //@todo: запрещаем изменять финансы в старой СБР #29196 $err = 'Прекращена поддержка СБР.'; //parent::setUserReqv($this->uid, NULL, $form_type, $request['ft'.$form_type], $this->checkChangeFT()); if ($err) { $this->error['reqv'] = $err; } } return !$this->error['reqv']; }