✏️ 正在编辑: NFSe.php
路径:
/srv/systems_dir/koruspay/application/models/NFSe.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php use Carbon\Carbon; class Model_NFSe { /** @var Model_DbTable_NFSe */ private $table; public function __construct() { $this->table = new Model_DbTable_NFSe(); } /** * @param int $docket * @return array[] */ public function getDataNFSe(int $docket): array { $data = []; $dataNFSe = $this->table->findDataNFSe($docket); $valorServico = "R$ " . number_format($dataNFSe['service_amount'], 2, ',', '.'); $valorDeducao = "R$ " . number_format($dataNFSe['service_amount_deduction'], 2, ',', '.'); $dataNFSe['service_description'] = sprintf($dataNFSe['service_description'], $valorServico, $valorDeducao); $data['idIntegracao'] = $this->getIdIntegration($dataNFSe['provider_number_nfse'], $dataNFSe['company_id']); $data['prestador'] = $this->getProviderData($dataNFSe); $data['tomador'] = $this->getTakerData($dataNFSe); $data['servico'] = $this->getServiceData($dataNFSe); $data['camposPrefeitura'] = [ 'valorTotalRecebido' => $dataNFSe['amount_received'] ]; return $data; } /** * @param int $docket * @param string $idIntegration * @return array */ public function getDataNFSeResend(int $docket, string $idIntegration): array { $data = []; $dataNFSe = $this->table->findDataNFSe($docket); $data['idIntegracao'] = $idIntegration; $data['prestador'] = $this->getProviderData($dataNFSe); $data['tomador'] = $this->getTakerData($dataNFSe); $data['servico'] = $this->getServiceData($dataNFSe); return $data; } /** * @param array $data * @return array */ private function getProviderData(array $data): array { return [ 'cpfCnpj' => $data['provider_doc_number'], 'id' => $data['provider_id'], 'numero_nfse' => $data['provider_number_nfse'] ]; } /** * @param array $data * @return array[] */ private function getTakerData(array $data): array { return [ 'razaoSocial' => $data['taker_reason'], 'cpfCnpj' => Core_Refatorar::formatarCpf($data['taker_doc_number']), 'email' => $data['taker_email'] ?: $data['provider_email'], 'endereco' => $this->getTakerAddressData($data) ]; } /** * @param array $data * @return array */ private function getTakerAddressData(array $data): array { return [ 'codigoCidade' => $data['taker_municipality_code'], 'descricaoCidade' => $data['taker_city'], 'logradouro' => $data['taker_street'], 'cep' => $data['taker_zip_code'], 'estado' => $data['taker_state'], 'bairro' => $data['taker_neighborhood'], 'numero' => $data['taker_number'] ]; } /** * @param array $data * @return array */ private function getServiceData(array $data): array { $dadosServico = $this->table->getServiceData(); return [ 'codigo' => $dadosServico['code'], 'quantidade' => 1, 'discriminacao' => $data['service_description'] ?: $dadosServico['description'], 'cnae' => $dadosServico['cnae'], 'iss' => [ 'exigibilidade' => (int) $data['enforceability'] ?: 0, 'aliquota' => (float) $data['aliquot'] ?: 0, 'tipoTributacao' => (int) $data['tax_type'] ?: 0, ], 'valor' => [ 'servico' => $data['service_amount'], 'baseCalculo' => $data['service_amount'] ] ]; } /** * @param int|null $numeroNfse * @return string */ private function getIdIntegration(?int $numberNfse = 1, ?int $companyId = 0): string { $id = str_pad(($numberNfse), 5,'0', STR_PAD_LEFT); $companyId = str_pad(($companyId), 3,'0', STR_PAD_LEFT); return "kp." . Yuppie_Auth::getSiteKey() . "." . $companyId . "." . $id; } /** * @param int $docket * @param array $dataNFSe * @param Zend_Http_Response $result * @param int|null $nfseId * @return int */ public function send( int $docket, array $dataNFSe, Zend_Http_Response $result, ?int $nfseId = null ): int { $nfse = $this->newOrUpdateNFSe($docket, $dataNFSe, $result, $nfseId); $this->newOrUpdateNFSeItens($nfse, $dataNFSe, $nfseId); return $nfse; } /** * @param int $docket * @param array $dataNFSe * @param Zend_Http_Response $result * @param int|null $nfse * @return int */ private function newOrUpdateNFSe( int $docket, array $dataNFSe, Zend_Http_Response $result, ?int $nfse = null ): int { $dataResult = json_decode($result->getBody()); $data = []; $data['error'] = null; $data['id_integration'] = $dataNFSe['idIntegracao']; $data['docket_id'] = $docket; $data['message'] = $dataResult->result->body->message ?: $dataResult->message ?: ''; $data['date_send'] = Carbon::now()->format('Y-m-d H:i:s'); Yuppie_Log::write($result->getBody(), $this); if ($result->getStatus() !== 200) { $data['error'] = 1; $nfse ?: $this->incrementNFSeNumber($dataNFSe); return $nfse ? $this->updateNfse($data, $nfse) : $this->table->insert($data); } $data['id_nfse'] = $dataResult->result->body->documents[0]->id ?: null; $data['protocol'] = $dataResult->result->body->protocol ?: null; $data['status_code'] = $dataResult->result->statusCode ?: null; if ($nfse) { return $this->updateNfse($data, $nfse); } $this->incrementNFSeNumber($dataNFSe); return $this->table->insert($data); } /** * @param int $nfse * @param array $dadosNFSe * @param int|null $nfseId * @return int */ public function newOrUpdateNFSeItens( int $nfse, array $dadosNFSe, ?int $nfseId = null ): int { $data = []; $data['nfse_id'] = $nfseId ?: $nfse; $data['provider_doc_number'] = $dadosNFSe['prestador']['cpfCnpj'] ?: ''; $data['taker_reason'] = $dadosNFSe['tomador']['razaoSocial'] ?: ''; $data['taker_doc_number'] = $dadosNFSe['tomador']['cpfCnpj'] ?: ''; $data['taker_email'] = $dadosNFSe['tomador']['email'] ?: ''; $data['taker_city'] = $dadosNFSe['tomador']['endereco']['descricaoCidade'] ?: ''; $data['taker_zip_code'] = $dadosNFSe['tomador']['endereco']['cep'] ?: ''; $data['taker_neighborhood'] = $dadosNFSe['tomador']['endereco']['bairro'] ?: ''; $data['taker_state'] = $dadosNFSe['tomador']['endereco']['estado'] ?: ''; $data['taker_number'] = $dadosNFSe['tomador']['endereco']['numero'] ?: ''; $data['service_description'] = $dadosNFSe['servico']['discriminacao'] ?: ''; $data['service_amount'] = $dadosNFSe['servico']['valor']['servico'] ?: ''; $data['service_cnae'] = $dadosNFSe['servico']['cnae'] ?: ''; $data['service_iss_enforceability'] = $dadosNFSe['servico']['iss']['exigibilidade'] ?: ''; $data['service_iss_aliquot'] = $dadosNFSe['servico']['iss']['aliquota'] ?: ''; $data['service_iss_tax_type'] = $dadosNFSe['servico']['iss']['tipoTributacao'] ?: ''; if ($nfseId) { return (new Model_DbTable_NFSeItens())->update($data, 'nfse_id = ' . $nfseId); } return (new Model_DbTable_NFSeItens())->insert($data); } /** * @param array $dados */ public function incrementNFSeNumber(array $dados): void { $provider = $dados['prestador']['id']; $numberNFSe = $dados['prestador']['numero_nfse']; (new Model_DbTable_Settings())->incrementNFSeNumber($numberNFSe, $provider); } /** * @param int $docket * @return bool */ public function validNFSeIssued(int $docket): bool { return !empty($this->table->findNFSeByDocket($docket)); } /** * @param int $docket * @return array */ public function getNFSeError(int $docket): array { return $this->table->findNFSeError($docket); } /** * @param string $idIntegration * @return mixed */ public function getNFSeByIdIntegration(string $idIntegration): array { return $this->table->findByIdIntegration($idIntegration); } /** * @param int $nfse * @param array $data * @return int */ public function newAuthorization(int $nfse, array $data): int { $dataAuthorization = []; $dataAuthorization['message'] = $data['mensagem']; $dataAuthorization['number_nfse'] = $data['numeroNfse']; $dataAuthorization['number'] = $data['numero']; $dataAuthorization['series'] = $data['serie']; $dataAuthorization['lot'] = $data['lote']; $dataAuthorization['verification_code'] = $data['codigoVerificacao']; $dataAuthorization['url_pdf'] = $data['pdf']; $dataAuthorization['url_xml'] = $data['xml']; try { $dataAuthorization['date_authorization'] = !empty($data['autorizacao']) ? Carbon::createFromFormat('d/m/Y', $data['autorizacao'])->format('Y-m-d H:i:s') : null; } catch (\Exception $e) { $dataAuthorization['date_authorization'] = null; } return $this->updateNfse($dataAuthorization, $nfse); } /** * @param int $nfse * @param array $data * @return int */ public function rejectNote(int $nfse, array $data): int { $dataUpdate = []; $dataUpdate['message'] = $data['mensagem']; $dataUpdate['error'] = 1; return $this->table->update($dataUpdate, 'id = ' . $nfse); } /** * @param int $authorization * @return Zend_Db_Table_Row_Abstract|null */ public function getAuthorization(int $authorization): ?Zend_Db_Table_Row_Abstract { return $this->table->findById($authorization); } /** * @param Carbon $mesAno * @return int */ public function getNotesIssuedMonthCount(Carbon $mesAno): int { return $this->table->countNFSeMonth($mesAno); } /** * @param int $provider * @return int */ public function getLimitNFSeMonth(int $provider): int { return $this->table->findLimitNFSeMonth($provider); } /** * @param int $lenght * @return array */ public static function getNumberOptions(int $lenght): array { $combo = []; for ($i = 1; $i <= $lenght; $i++) { $combo["$i"] = $i; } return $combo; } /** * @return array */ public static function getStatusNFSe(): array { return [ '' => '', 1 => 'Em processamento', 2 => 'Autorizada', 3 => 'Erro' ]; } /** * @param $data * @param $nfse * @return int|null */ public function updateNfse($data, $nfse): ?int { $result = $this->table->update($data, 'id = ' . $nfse); if ($result) { return $nfse; } return null; } }
💾 保存文件
← 返回文件管理器