Example #1
0
 /**
  * Выписывает счет для резервирования по безналу. Если счет на данную сделку уже существует и еще не принят, то реквизиты просто обновляются.
  * 
  * @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'];
 }