/** * Генерирует акт исполнителя об оказании услуги в 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; }