Esempio n. 1
0
 /**
  * Генерирует акт исполнителя об оказании услуги в PDF после выбора валюты выплаты.
  * 
  * @param array $error   вернет массив с ошибками.
  * @param array $act_num   порядковый номер акта (обычно sbr_docs.id).
  * @return CFile   загруженный документ.
  */
 function generateFrlAct(&$error, &$act_num)
 {
     require_once dirname(__FILE__) . '/fpdf/fpdf.php';
     define('FPDF_FONTPATH', dirname(__FILE__) . '/fpdf/font/');
     require_once dirname(__FILE__) . '/num_to_word.php';
     $error = NULL;
     if (!($payout = $this->getPayouts($this->sbr->frl_id))) {
         return false;
     }
     if (!($act = $this->getActSums($this->sbr->frl_id))) {
         return false;
     }
     $payout = $payout[$this->sbr->frl_id];
     if (!$payout) {
         return false;
     }
     $cnum = $this->sbr->getContractNum();
     $this->sbr->getFrlReqvs(true);
     $this->sbr->getEmpReqvs(true);
     $this->sbr->setCheckEmpReqvs($this->id);
     if (!$this->sbr->checkUserReqvs($this->sbr->frl_reqvs)) {
         if ($this->login != $this->sbr->emp_login) {
             $flogin = $this->sbr->frl_login ? $this->sbr->frl_login : $this->sbr->login;
             $error['frl'] = 'Для формирования Акта об оказании услуги исполнителю<br/> необходимо заполнить реквизиты на странице <a href="/users/' . $flogin . '/setup/finance/" class="blue" target="_blank">Финансы</a>';
         } else {
             $error['frl'] = 'Для формирования Акта об оказании услуги исполнителю<br/> необходимо заполнить реквизиты на странице "Финансы"';
         }
     }
     $efio = sbr_meta::getFioFromReqvs($this->sbr->emp_reqvs);
     $ffio = sbr_meta::getFioFromReqvs($this->sbr->frl_reqvs);
     if ($this->sbr->emp_reqvs['form_type'] == sbr::FT_JURI && ($this->sbr->cost_sys == exrates::WMR || $this->sbr->cost_sys == exrates::YM)) {
         $efio = "«{$efio} – физическое лицо»";
     }
     if (!$efio) {
         $error['emp'] = 'Для формирования Акта об оказании услуги заказчику<br/> необходимо заполнить реквизиты на странице "Финансы"';
     }
     if ($error) {
         return false;
     }
     $act_num = $this->sbr->regActNum();
     // с 07.2012 не используется, но пусть крутится на всякий.
     $act_ssum = sbr_meta::view_cost($act['act_sum'], NULL, false, ',', ' ');
     $act_snds = sbr_meta::view_cost(18 * $act['act_sum'] / 118, NULL, false, ',', ' ');
     $act_np = sbr_meta::view_cost($act['act_lnp'], NULL, true, ',', ' ');
     $payout_method = sbr_meta::getPayoutMethodStr($this->sbr->frl_reqvs, $payout['credit_sys'], 'Способ оплаты: ');
     $body_nopretense_text = "ООО «Ваан» и {$ffio} свои обязательства по договору {$cnum} выполнили, финансовых и иных претензий друг к другу не имеют.";
     $rq = $this->sbr->frl_reqvs[$this->sbr->frl_reqvs['form_type']];
     if ($this->sbr->frl_reqvs['form_type'] == sbr::FT_PHYS) {
         $side_b = sbr_meta::getReqvsStr($this->sbr->frl_reqvs, $bossname);
         if ($payout['credit_sys'] && $payout['credit_sys'] != exrates::FM) {
             $side_b .= "\r\nРеквизиты перевода:\r\n" . sbr_meta::getPayoutReqvsStr($this->sbr->frl_reqvs, $payout['credit_sys']);
         }
     } else {
         $side_b = sbr_meta::getReqvsStr($this->sbr->frl_reqvs, $bossname);
     }
     $ntax_s = '';
     $frl_nds = '';
     if ($this->sbr->frl_reqvs['form_type'] == sbr::FT_PHYS) {
         if ($act['act_lndfl'] != 0) {
             $ndfl_tax_id = $this->sbr->frl_reqvs['rez_type'] == sbr::RT_RU ? $this->sbr->getTaxByCode('TAX_NDFL') : $this->sbr->getTaxByCode('TAX_NDFL_NR');
             $ntax_per = (int) ($this->sbr->scheme['taxes'][sbr::FRL][$ndfl_tax_id]['percent'] * 100);
             $ntax_s = "Удержан НДФЛ (к перечислению налоговым агентом в бюджет РФ) – {$ntax_per} процентов с Исполнителя: " . num2strEx($act['act_lndfl']) . ";";
         }
     }
     $frl_sum = $this->getPayoutSum(sbr::FRL, exrates::BANK);
     // - $act['act_lintr'];
     $ag_sum = floatval($frl_sum) + floatval($act['act_lndfl']) + floatval($act['act_lnds']);
     if ($this->arbitrage === false) {
         $this->getArbitrage(false, false);
     }
     if ($this->arbitrage['resolved']) {
         $arb_per_s = ' (' . $this->arbitrage['frl_percent'] * 100 . '%)';
     }
     if ($this->sbr->frl_reqvs['rez_type'] != sbr::RT_RU) {
         if ($this->sbr->frl_reqvs['form_type'] == sbr::FT_JURI) {
             $nds_text = floatval($act['act_lnds']) ? 'Удержано НДС (к перечислению налоговым агентом в бюджет РФ) – 18 процентов с Исполнителя: ' . num2strEx(floatval($act['act_lnds'])) . '.' : '';
         }
     } else {
         $x_nds = $ag_sum / 118 * 18;
         if ($this->sbr->frl_reqvs['form_type'] == sbr::FT_JURI) {
             $frl_nds = ', в том числе НДС – 18%: ' . num2strEx(18 * $frl_sum / 118);
         }
     }
     $act_ssum_nds = ', в том числе НДС 18 % – ' . num2strEx($act['act_sum'] * 18 / 118);
     $pr['$adr_act'] = "129223, Москва, а/я 33";
     if ($this->sbr->frl_reqvs['rez_type'] == sbr::RT_RU) {
         $pr['$adr_act'] .= ";\r\n";
         $pr['$adr_act'] .= "190031, Санкт-Петербург, Сенная пл., д.13 / 52, а/я 427;\r\n";
         $pr['$adr_act'] .= "420032, Казань, а/я 624;\r\n";
         $pr['$adr_act'] .= "454014, Челябинск-14, а/я 2710.\r\n";
     } else {
         $pr['$adr_act'] .= ".\r\n";
     }
     $repl = array('$yd_wm' => '', '$act_num' => $act_num, '$cnum' => $cnum, '$ssnum' => $this->getOuterNum4Docs(), '$employer_title' => $efio, '$freelancer_title' => $ffio, '$payout_name' => $payout_method, '$act_sum' => num2strEx($frl_sum + $act['act_lndfl'] + $act['act_lnds'] + $act['act_sum']), '$nds_text' => $nds_text, '$act_ssum' => num2strEx($act['act_sum']), '$act_ssum_nds' => $act_ssum_nds, '$act_snds' => num2strEx(18 * $act['act_sum'] / 118), '$ndfl_text' => $ntax_s, '$frl_sum' => num2strEx($frl_sum), '$frl_nds' => $frl_nds, '$sbr_begin' => date('d.m.Y', strtotime($this->getFirstTime())), '$sbr_end' => date('d.m.Y', strtotime($this->closed_time)), '$now_date' => date('d.m.Y'), '$side_b' => $side_b, '$bossname' => $bossname, '$add2_text' => $add2_text, '$adr_act' => $pr['$adr_act'], '$emp_init_arb' => $this->arbitrage['user_id'] == $this->sbr->emp_id, '$arbitrage' => !!$this->arbitrage);
     $template = $_SERVER['DOCUMENT_ROOT'] . '/norisk2/xml/act_frl.xml';
     $pdf = sbr::xml2pdf($template, $repl);
     if (!($file = $this->sbr->_saveDocFile($pdf->Output(NULL, 'S')))) {
         $error['fatal'] = "Ошибка при формировании Акта об оказании услуги";
     }
     return $file;
 }