public function updateDocs($types = array(), $is_create = false, $override_data = array())
 {
     ini_set('max_execution_time', 300);
     //ini_set('memory_limit', '512M');
     if (empty($types)) {
         $is_create = true;
     }
     if (!$this->isReserveData()) {
         return false;
     }
     $orderModel = TServiceOrderModel::model();
     $orderModel->attributes(array('is_adm' => true));
     $orderData = $orderModel->getCard($this->getSrcId(), 0);
     if (!$orderData || !$orderModel->isReserve()) {
         return false;
     }
     $reserveInstance = $orderModel->getReserve();
     if ($is_create) {
         //Если зарезервировали
         if ($reserveInstance->isStatusReserved()) {
             $base_doc_types[] = DocGenReserves::RESERVE_SPECIFICATION_TYPE;
             $base_doc_types[] = DocGenReserves::RESERVE_OFFER_CONTRACT_TYPE;
             $base_doc_types[] = DocGenReserves::RESERVE_OFFER_AGREEMENT_TYPE;
         }
         //Если резерв по безналу то нужен счет
         if (!$reserveInstance->isReserveByService()) {
             $base_doc_types[] = DocGenReserves::BANK_INVOICE_TYPE;
         }
         //Если сделка закрыта и исполнителю полагается выплата либо выплата в процессе
         if ($reserveInstance->isStatusPayInprogress() || $reserveInstance->isClosed() && (!$reserveInstance->isArbitrage() || $reserveInstance->isStatusPayPayed())) {
             $base_doc_types[] = DocGenReserves::ACT_COMPLETED_FRL_TYPE;
         }
         //Если сделка закрыта либо выплата в процессе
         if ($reserveInstance->isClosed() || $reserveInstance->isStatusPayInprogress()) {
             $base_doc_types[] = DocGenReserves::LETTER_FRL_TYPE;
         }
         //Если сделка закрыта
         if ($reserveInstance->isClosed()) {
             $base_doc_types[] = DocGenReserves::ACT_SERVICE_EMP_TYPE;
             $base_doc_types[] = DocGenReserves::AGENT_REPORT_TYPE;
         }
         //Если сделка закрыта по арбитражу
         if ($reserveInstance->isArbitrage() && $reserveInstance->isArbitrageClosed()) {
             $base_doc_types[] = DocGenReserves::ARBITRAGE_REPORT_TYPE;
         }
         $types = array_merge($types, $base_doc_types);
     }
     $types = array_unique($types);
     require_once ABS_PATH . '/classes/DocGen/DocGenReserves.php';
     $this->getOrderHistory();
     $doc = new DocGenReserves($orderData);
     $doc->deleteFiles($this->getSrcId(), $types);
     if (!empty($override_data)) {
         foreach ($override_data as $key => $value) {
             $doc->setOverrideField($key, $value);
         }
     }
     foreach ($types as $type) {
         switch ($type) {
             case DocGenReserves::BANK_INVOICE_TYPE:
                 $reserveBank = $reserveInstance->getReservesBank();
                 if ($reserveBank) {
                     $reqv = $reserveBank->getCheckByReserveId($reserveInstance->getID());
                     if ($reqv) {
                         $reserveInstance->getReservesBank()->generateInvoice2($reqv);
                     }
                 }
                 break;
             case DocGenReserves::ACT_COMPLETED_FRL_TYPE:
                 $doc->generateActCompletedFrl();
                 break;
             case DocGenReserves::ACT_SERVICE_EMP_TYPE:
                 $doc->generateActServiceEmp();
                 break;
             case DocGenReserves::AGENT_REPORT_TYPE:
                 $doc->generateAgentReport();
                 break;
             case DocGenReserves::RESERVE_OFFER_CONTRACT_TYPE:
                 //case DocGenReserves::RESERVE_OFFER_AGREEMENT_TYPE:
                 $doc->generateOffers();
                 break;
             case DocGenReserves::RESERVE_SPECIFICATION_TYPE:
                 $doc->generateSpecification();
                 break;
             case DocGenReserves::LETTER_FRL_TYPE:
                 $doc->generateInformLetterFRL();
                 break;
             case DocGenReserves::ARBITRAGE_REPORT_TYPE:
                 $doc->generateArbitrageReport();
                 break;
         }
     }
     return true;
 }