/** * Генерирует акт исполнитель-физ. лицо (Подряд) в PDF после выбора валюты выплаты. * * @param array $error вернет массив с ошибками. * @return CFile загруженный документ. */ function generateFrlActPdrd(&$error, $init_date = false) { 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(); $this->sbr->getUserReqvHistoryData($this->id, 'frl', true); // Силой возьмем данные if (!$this->sbr->checkUserReqvs($this->sbr->frl_reqvs)) { $error['frl'] = 'Для формирования Акта об оказании услуги исполнителю<br/> необходимо заполнить реквизиты на странице "Финансы"'; } $acc = new account(); $acc->GetInfo($this->sbr->frl_id); $ffio = sbr_meta::getFioFromReqvs($this->sbr->frl_reqvs); $rq = $this->sbr->frl_reqvs[$this->sbr->frl_reqvs['form_type']]; $act_ssum = num2strEx($act['act_sum']); $act_ndfl = num2strEx($act['act_lndfl']); $act_np = num2strEx($act['act_lnp']); $frl_sum = $this->getPayoutSum(sbr::FRL, exrates::BANK); $payout_sum = num2strEx($frl_sum); $payout_nds_sum = num2strEx(18 * $frl_sum / 118); $from_date_act = date('«d» ' . $GLOBALS['MONTHA'][date('n', strtotime($this->getFirstTime()))] . ' Y г.', strtotime($this->getFirstTime())); $to_date_act = $init_date ? date('«d» ' . $GLOBALS['MONTHA'][date('n', strtotime($init_date))] . ' Y г.', strtotime($init_date)) : date('«d» ' . $GLOBALS['MONTHA'][date('n')] . ' Y г.'); // изменен по тикету #0017135 if ($this->sbr->frl_reqvs['form_type'] == sbr::FT_PHYS) { if ($this->sbr->frl_reqvs['rez_type'] == sbr::RT_RU) { $pssinn = ", страховое свидетельство обязательного пенсионного страхования № {$rq['pss']}"; if ($rq['inn']) { $pssinn .= ", ИНН {$rq['inn']}"; } } $rq['birthday'] = date('d.m.Y', strtotime($rq['birthday'])); $rq['idcard_from'] = date('d.m.Y', strtotime($rq['idcard_from'])); $frl_details = "{$ffio}, {$rq['birthday']} года рождения, зарегистрированный по адресу: {$rq['address_reg']}" . ", {$rq['idcard_name']}: № {$rq['idcard']}, выдан {$rq['idcard_from']} {$rq['idcard_by']}{$pssinn}"; 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}% – {$act_ndfl}"; $reward2 = " К перечислению {$payout_sum}{$ntax_s}."; } } else { $frl_details = $ffio; $nds_s = ', в том числе НДС 18%'; if ($this->sbr->frl_reqvs['rez_type'] == sbr::RT_RU) { $ntax_s = ", в том числе НДС 18% – {$payout_nds_sum}"; $reward2 = " К перечислению {$payout_sum}{$ntax_s}."; } else { if ($act['act_lnds'] != 0) { $act_lnds = num2strEx($act['act_lnds']); $reward2 = "\r\nК перечислению налоговым агентом в бюджет РФ – НДС 18 процентов – {$act_lnds}.\r\n\r\nК перечислению Подрядчику {$payout_sum}{$ntax_s}."; } } } if ($payout['credit_sys'] != exrates::FM) { $reqvs_str = "\r\n" . sbr_meta::getPayoutReqvsStr($this->sbr->frl_reqvs, $payout['credit_sys']); $payout_method = ', способ оплаты – ' . $GLOBALS['EXRATE_CODES'][$payout['credit_sys']][4]; } else { $reqvs_str = ' –'; } $reward_sum = num2strEx($frl_sum + $act['act_lndfl'] + $act['act_lnds']); $reward = "{$from_date_act} по {$to_date_act} составляет сумму {$reward_sum}{$nds_s}{$payout_method}.{$reward2}"; $side_b = sbr_meta::getReqvsStr($this->sbr->frl_reqvs, $bossname); $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"; } $replace = array('$sbr_num' => $this->sbr->getContractNum(), '$ssnum' => $this->getOuterNum4Docs(), '$from_date_act' => $from_date_act, '$to_date_act' => $to_date_act, '$maker_info' => $frl_details, '$from_date_make' => $from_date_act, '$job_name' => "«{$this->name}»", '$reward_text' => $reward, '$bank_details' => $reqvs_str, '$make_date' => $init_date ? $init_date : date('d.m.Y'), '$side_b' => $side_b, '$bossname' => $bossname, '$adr_act' => $pr['$adr_act']); $pdf = sbr::xml2pdf($_SERVER['DOCUMENT_ROOT'] . '/norisk2/xml/WorkAct.xml', $replace); if (!($file = $this->sbr->_saveDocFile($pdf->Output(NULL, 'S')))) { $error['fatal'] = "Ошибка при формировании Акта об оказании услуги"; } return $file; }
/** * Формирует отчет по арбитражу за определенный период. * * @param string $sStartDate дата начала периода * @param string $sEndDate дата конца периода */ public function printArbitrageReport($sStartDate = null, $sEndDate = null) { global $EXRATE_CODES; // имя итогового файла $sWorkTitle = 'Arbitrage report'; $sWorkTitle .= $sStartDate ? ' ' . $sStartDate : ''; $sWorkTitle .= $sEndDate ? ' - ' . $sEndDate : ''; $sWorkTitle .= '.xls'; // выбираем все этапы которые закрыты арбитражом global $DB; $sQuery = 'SELECT ss.id, sd.num FROM sbr_stages ss LEFT JOIN sbr_docs sd ON ss.sbr_id = sd.sbr_id AND sd.type = 8 WHERE ss.status = ' . sbr_stages::STATUS_ARBITRAGED; $sQuery .= $sStartDate ? " AND ss.closed_time >= '{$sStartDate}'" : ''; $sQuery .= $sEndDate ? " AND ss.closed_time <= '{$sEndDate}'" : ''; $aRows = $DB->rows($sQuery . ' ORDER BY ss.closed_time'); // подключаем pear require_once 'Spreadsheet/Excel/Writer.php'; // создаем документ $workbook = new Spreadsheet_Excel_Writer(); $workbook->setVersion(8); // создаем лист $worksheet =& $workbook->addWorksheet('1'); $worksheet->setInputEncoding('CP1251'); // заголовок листа $worksheet->write(0, 0, 'ООО "Ваан"'); $worksheet->write(2, 1, 'Таблица по актам арбитража'); $m_sty = array('NumFormat' => '### ### ##0.00', 'Align' => 'right'); $d_sty = array('NumFormat' => 'DD MMM, YYYY HH:MM:SS'); $td_sty = array('FontFamily' => 'Calibri', 'VAlign' => 'vequal_space', 'Align' => 'center', 'Border' => 1, 'BorderColor' => 'black'); $th_sty = array('FontFamily' => 'Arial', 'Size' => 10, 'Align' => 'center', 'Border' => 1, 'BorderColor' => 'black', 'Bold' => 1); $format_top =& $workbook->addFormat($th_sty); $format_td =& $workbook->addFormat($td_sty); $format_money =& $workbook->addFormat(array_merge($td_sty, $m_sty)); $format_date =& $workbook->addFormat(array_merge($td_sty, $d_sty)); $format_top->setTextWrap(1); $aHeader = array('№ п/п', 'Номер акта', 'Дата', 'Номер «Безопасной Сделки»', 'Наименование Работодателя', 'Наименование Исполнителя', 'Сумма к выплате Работодателю, руб.коп.', 'Сумма к выплате Исполнителю, руб.коп.', 'Способ выплаты'); for ($i = 0; $i < count($aHeader); ++$i) { $worksheet->write(3, $i, $aHeader[$i], $format_top); } // данные if ($aRows) { $nCnt = 1; $aRates = exrates::GetAll(); foreach ($aRows as $aOne) { $sbr = sbr_meta::getInstance(sbr_meta::ADMIN_ACCESS); $stage = $sbr->initFromStage($aOne['id'], false); $stage->getArbitrage(true); // № п/п $worksheet->write($nCnt + 3, 0, $nCnt, $format_td); // Номер акта $worksheet->write($nCnt + 3, 1, $aOne['num'], $format_td); // Дата $sDate = date('Y-m-d H:i:s', strtotime($stage->arbitrage['resolved'])); $worksheet->write($nCnt + 3, 2, $sDate, $format_date); // Номер СБР $worksheet->write($nCnt + 3, 3, $stage->sbr->getContractNum(), $format_td); // Наименование Работодателя $stage->sbr->getEmpReqvs(); $sEmpFio = sbr_meta::getFioFromReqvs($stage->sbr->emp_reqvs); if (!$sEmpFio) { $emp = new employer(); $emp->GetUserByUID($stage->sbr->emp_id); $sEmpFio = $emp->uname . ' ' . $emp->usurname . ' [' . $emp->login . ']'; } $worksheet->write($nCnt + 3, 4, $sEmpFio, $format_td); // Наименование Исполнителя $stage->sbr->getFrlReqvs(); $sFrlFio = sbr_meta::getFioFromReqvs($stage->sbr->frl_reqvs); if (!$sFrlFio) { $frl = new freelancer(); $frl->GetUserByUID($stage->sbr->frl_id); $sFrlFio = $frl->uname . ' ' . $frl->usurname . ' [' . $frl->login . ']'; } $worksheet->write($nCnt + 3, 5, $sFrlFio, $format_td); // Сумма к выплате Работодателю, руб.коп. $nSumm = $stage->getPayoutSum(sbr::EMP, exrates::BANK); $worksheet->write($nCnt + 3, 6, $nSumm, $format_money); // Сумма к выплате Исполнителю, руб.коп. $nSumm = $stage->getPayoutSum(sbr::FRL, exrates::BANK); $worksheet->write($nCnt + 3, 7, $nSumm, $format_money); // Способ выплаты $worksheet->write($nCnt + 3, 8, $EXRATE_CODES[$stage->sbr->cost_sys][1], $format_td); ++$nCnt; } } // отправляем на скачивание $workbook->send($sWorkTitle); // закрываем документ $workbook->close(); }
/** * Возвращает текстовый блок банковских реквизитов * * @param array $reqvs реквизиты * @param string $bossname возвращает Генерального директора, если указан в реквизитах * @return string */ function getReqvsStr($reqvs, &$bossname = NULL) { $rq = $reqvs[$reqvs['form_type']]; $norf = $reqvs['rez_type'] != sbr::RT_RU; $r = sbr_meta::getFioFromReqvs($reqvs) . "\r\n"; if ($reqvs['form_type'] == sbr::FT_JURI) { if (!$norf) { if ($rq['adress_jry']) { $r .= "\r\nЮридический адрес: {$rq['address_jry']}"; } if ($rq['address']) { $r .= "\r\nПочтовый адрес: {$rq['address']}"; } if ($rq['inn']) { $r .= "\r\nИНН {$rq['inn']}"; } if ($rq['kpp']) { $r .= " / КПП {$rq['kpp']}"; } $r .= "\r\n" . $this->getBankReqvsStr($reqvs); if ($rq['okpo']) { $r .= "\r\nОКПО {$rq['okpo']}"; } if ($rq['ogrn']) { $r .= "\r\nОГРН {$rq['ogrn']}"; } if ($rq['orved']) { $r .= "\r\nОКВЭД {$rq['okved']}"; } } if ($norf) { if ($rq['country'] && $rq['city']) { $r .= "\r\nСтрана и город регистрации организации: {$rq['country']}, г. {$rq['city']}"; } if ($rq['address_fct']) { $r .= "\r\nАдрес: {$rq['address_fct']}"; } if ($rq['address']) { $r .= "\r\nПочтовый адрес: {$rq['address']}"; } // if($rq['reg_num'] && $rq['reg_date']) $r .= "\r\nСвидетельство о регистрации № {$rq['reg_num']} от {$rq['reg_date']}"; if ($rq['rnn']) { $r .= "\r\nРегистрационный номер в налоговом органе: {$rq['rnn']}"; } $r .= "\r\n" . $this->getBankReqvsStr($reqvs); } if ($rq['bossname']) { $bossname = "Генеральный директор: " . $rq['bossname']; } else { if (sbr_meta::getFioFromReqvs($reqvs)) { $bossname = sbr_meta::getFioFromReqvs($reqvs); } } } else { if (!$norf) { //if($rq['inn'] && $rq['inn'] != '0000000000') // $r .= "\r\nИНН {$rq['inn']}"; } // #0023353 if ($rq['idcard_name'] && $rq['idcard'] && $rq['idcard_from'] && $rq['idcard_by'] && $rq['address_reg'] && $reqvs['is_agree_view_sbr'] == 't') { // Если паспортные данные заполнены $rq['idcard_from'] = date('d.m.Y', strtotime($rq['idcard_from'])); $r .= "\r\n{$rq['idcard_name']}: № {$rq['idcard']}, выдан {$rq['idcard_from']} {$rq['idcard_by']}" . "\r\nАдрес регистрации: {$rq['address_reg']}\r\n\r\n"; } } return $r; }