/** * Генерирует акт работодателя об оказании услуги или отчет агента в PDF после выбора валюты выплаты. * * @param array $error вернет массив с ошибками. * @param integer $act_num порядковый номер акта @deprecated. * @param integer $agent_rep_num порядковый номер отчета агента. Если указан -1, то будет сформирован отчет агента и в эту переменную возвращен номер. * @return CFile загруженный документ. */ function generateEmpAct(&$error, &$act_num, &$agent_rep_num) { require_once dirname(__FILE__) . '/fpdf/fpdf.php'; define('FPDF_FONTPATH', dirname(__FILE__) . '/fpdf/font/'); require_once dirname(__FILE__) . '/num_to_word.php'; $template = $_SERVER['DOCUMENT_ROOT'] . '/norisk2/xml/act_emp.xml'; if ($agent_rep_num === -1) { $agent_rep_num = $this->sbr->regAgentRepNum(); $template = $_SERVER['DOCUMENT_ROOT'] . '/norisk2/xml/agent_rep_emp.xml'; } if (!$agent_rep_num) { return false; } $error = NULL; if (!($act_frl = $this->getActSums($this->sbr->frl_id))) { return false; } if (!($act_emp = $this->getActSums($this->sbr->emp_id))) { 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->emp_reqvs)) { if ($this->login != $this->sbr->frl_login) { $flogin = $this->sbr->emp_login ? $this->sbr->emp_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 ($ffio) { $ffio = "«{$ffio}»"; // ФИО -- #0018645 (Akt_rabotodatel_12072012.docx) } else { $ffio = 'Исполнитель'; } // Это костыль, на самом деле для старых сделок. Если он был юрик, но резервировал по ЯД и ВМР, то в актах нужно было указывать "физическое лицо". if ($this->sbr->emp_reqvs['form_type'] == sbr::FT_JURI && ($this->sbr->cost_sys == exrates::WMR || $this->sbr->cost_sys == exrates::YM)) { $efio = "«{$efio} – физическое лицо»"; } else { $efio = "«{$efio}»"; // ФИО или название организации в кавычки -- #0018645 (Akt_rabotodatel_12072012.docx) } if (!$efio) { $error['emp'] = 'Для формирования Акта об оказании услуги заказчику<br/> необходимо заполнить реквизиты на странице "Финансы"'; } if ($error) { return false; } $act_num = $this->sbr->regActNum(); // с 07.2012 не используется, но пусть крутится на всякий. $act_ssum = $act_frl['act_sum']; $act_snds = 18 * $act_frl['act_sum'] / 118; $frl_sum = $this->getPayoutSum(sbr::FRL, exrates::BANK) + $act_frl['act_lndfl'] + $act_frl['act_lnds'] + $act_frl['act_sum']; $rq = $this->sbr->emp_reqvs[$this->sbr->emp_reqvs['form_type']]; $side_b = sbr_meta::getReqvsStr($this->sbr->emp_reqvs, $bossname); if ((int) $frl_sum == 0 && $this->sbr->emp_reqvs['form_type'] == sbr::FT_PHYS) { $side_b .= "Реквизиты перевода:\r\n" . sbr_meta::getPayoutReqvsStr($this->sbr->emp_reqvs, $this->sbr->cost_sys); } $ntax_s = ''; $frl_nds = ''; if ($this->sbr->frl_reqvs['form_type'] == sbr::FT_PHYS) { if ($act_frl['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); $ndfl_text = "– удержано {$ntax_per}% НДФЛ с " . num2strEx($frl_sum) . " в размере " . num2strEx($act_frl['act_lndfl']) . ", \r\n"; $act_ndfl_note = " за вычетом {$ntax_per}% НДФЛ и стоимости услуг ООО «Ваан», то есть " . num2strEx($frl_sum - $act_frl['act_lndfl'] - $act_ssum) . ';'; } else { $act_ndfl_note = " за вычетом стоимости услуг ООО «Ваан», то есть " . num2strEx($frl_sum - $act_ssum) . ';'; } } else { $act_nds_note = " в том числе НДС 18% "; $act_ndfl_note = " за вычетом стоимости услуг ООО «Ваан», то есть " . num2strEx($act_ssum) . ", в том числе НДС 18%;"; } $vaan_text = "- удержана стоимость услуг ООО «Ваан» в соответствии с п. 10.3 Договора – " . num2strEx($act_ssum) . ", в том числе НДС 18% – " . num2strEx($act_snds); if ($this->sbr->frl_reqvs['rez_type'] != sbr::RT_RU) { if ($this->sbr->frl_reqvs['form_type'] == sbr::FT_JURI) { $add2_text = floatval($act_frl['act_lnds']) ? 'удержан НДС (к перечислению налоговым агентом в бюджет РФ) – 18 процентов с Исполнителя: ' . num2strEx(floatval($act_frl['act_lnds'])) . '.' : ''; } } else { if ($this->sbr->frl_reqvs['form_type'] == sbr::FT_JURI) { $frl_nds = ', в том числе НДС – 18%: ' . num2strEx(18 * $frl_sum / 118); } } if ($this->arbitrage === false) { $this->getArbitrage(false, false); } if (!$this->arbitrage) { $reason = "Согласно п. 6.1.1. Договора Заказчик сообщил Агенту о надлежащем выполнении Работы Исполнителем, в связи с этим"; } else { $arb_report_num = $this->tmp_doc_arb['num']; $arb_report_date = date('d.m.Y', strtotime($this->tmp_doc_arb['publ_time'])); $reason = str_replace(array('$arb_report_num', '$arb_report_date'), array($arb_report_num, $arb_report_date), $this->arbitrage['reason']); $emp_sum = $this->getPayoutSum(sbr::EMP, exrates::BANK); $reason = html_entity_decode($reason, ENT_QUOTES, 'cp1251'); if (!isset($this->tmp_doc_arb)) { $this->tmp_doc_arb = $this->sbr->getLastPublishedDocByType(sbr::DOCS_TYPE_ARB_REP, $this->id); } } if (strpos($reason, '6.1.3') !== false) { $reason_add = 'Согласно п. 7.1.3. Договора Заказчик и Исполнитель заключили соглашение об Осуществлении возврата Стоимости работы Заказчику, в связи с этим'; } $agent_nds_reward = $this->sbr->getTotalTax($this->sbr->scheme['taxes'][sbr::EMP][sbr::TAX_EMP_COM], 18 / 118, array('A' => 'NULL')); $reserved_sum = $this->sbr->getReserveSum(true); $pr['$adr_act'] = "129223, Москва, а/я 33"; if ($this->sbr->emp_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"; } if ($this->sbr->stages_cnt > 1) { $sum_stage = num2strEx($this->sbr->stages[$this->num]->data['cost']); $stage_num_str = 'по ' . $this->getNumStage4Docs() . ' этапу'; $stage_add_info = " (суммарно " . numStringName($this->sbr->stages_cnt) . " этапам) из них {$sum_stage} {$stage_num_str}"; } else { $stage_add_info = ""; } $repl = array('$yd_wm' => '', '$vaan_text' => $vaan_text, '$act_num' => $act_num, '$cnum' => $cnum, '$ssnum' => $this->getOuterNum4Docs(), '$employer_title' => $efio, '$freelancer_title' => $ffio, '$act_sum' => num2strEx($this->cost), '$act_nds' => num2strEx($this->cost * 18 / 118), '$act_nds_note' => $act_nds_note, '$emp_sum' => num2strEx($emp_sum), '$emp_sum_ex' => !!$emp_sum, '$emp_reward' => num2strEx($act_emp['act_sum']), '$emp_nds_reward' => num2strEx(18 * $act_emp['act_sum'] / 118), '$frl_reward' => num2strEx($act_ssum), '$frl_nds_reward' => num2strEx($act_snds), '$ndfl_text' => $ndfl_text, '$act_ndfl_note' => $act_ndfl_note, '$add2_text' => $add2_text, '$frl_sum' => num2strEx($frl_sum), '$frl_nds' => $frl_nds, '$frl_sum_ex' => !!$frl_sum, '$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, '$reserved_sum' => num2strEx($reserved_sum), '$reserved_nds_sum' => num2strEx(18 * $reserved_sum / 118), '$agent_nds_reward' => num2strEx($agent_nds_reward), '$arb_report_num' => $this->tmp_doc_arb['num'], '$arb_report_date' => date('d.m.Y', strtotime($this->tmp_doc_arb['publ_time'])), '$adr_act' => $pr['$adr_act'], '$reason' => $reason, '$reason_add' => $reason_add, '$stage_num_str' => $stage_num_str, '$stages_additional_information' => $stage_add_info, '$agent_rep_num' => $agent_rep_num, '$is_emp100' => $frl_sum == 0); $pdf = sbr::xml2pdf($template, $repl); if (!($file = $this->sbr->_saveDocFile($pdf->Output(NULL, 'S')))) { $error['fatal'] = "Ошибка при формировании Акта об оказании услуги"; } return $file; }