Skip to content

Commit

Permalink
Merge pull request #50 from LinkNacional/master
Browse files Browse the repository at this point in the history
1.4.0 - Migração da tratativa do RPS e campos personalizado para emissão de nota
  • Loading branch information
gblmarquez authored Jul 13, 2021
2 parents fb59ba9 + f02ce7b commit 0ac0cdc
Show file tree
Hide file tree
Showing 12 changed files with 435 additions and 193 deletions.
12 changes: 9 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,8 @@ Dentro do admin do WHMCS é possível gerenciar a nota fiscal manualmente.
2. ID da Empresa: (Obrigatório) Nesse campo você deve indicar o ID da empresa ao qual serão associadas as notas fiscais geradas pelo WHMCS. (Obter ID da empresa);
3. Código de Serviço Principal: (Obrigatório) O código de serviço varia de acordo com a categoria de tributação do negócio. Saiba mais sobre o código de serviço aqui;
4. Série do RPS: Valor padrão `IO`. Saiba mais em https://nfe.io/docs/nota-fiscal-servico/conceitos-nfs-e/;
5. Número do RPS: O número RPS da NFE mais recente gerada. Deixe em branco e o módulo irá preencher esse campo após a primeira emissão. Não altere o valor a menos que tenha certeza de como funciona essa opção. Saiba mais em https://nfe.io/docs/nota-fiscal-servico/conceitos-nfs-e/;
5. Número do RPS: O número RPS da NFE mais recente gerada. A partir da versão 1.4.0, este valor passou a ser tratado pela
NFe e não pelo módulo. Saiba mais em https://nfe.io/docs/nota-fiscal-servico/conceitos-nfs-e/;
6. Quando emitir NFE: Selecione se deseja que as notas fiscais sejam geradas quando a fatura é publicada ou quando a fatura é paga;
7. Agendar Emissão: Número de dias após o pagamento da fatura que as notas devem ser emitidas. Preencher essa opção desativa a opção anterior;
8. Cancelar NFE: Se essa opção está ativada, o módulo cancela a nota fiscal quando a fatura cancelada;
Expand All @@ -96,7 +97,7 @@ Dentro do admin do WHMCS é possível gerenciar a nota fiscal manualmente.

Os produtos podem ter configurações de código de serviço individuais:

Em Addons>NFE.oi>código dos Produtos é possivel configurar um código de serviço para cada produto/serviço cadastrado.
Em Addons>NFE.io>código dos Produtos é possivel configurar um código de serviço para cada produto/serviço cadastrado.

**_o código individual vai ter prioridade sobre o definido nas configurações do módulo._**

Expand All @@ -116,13 +117,18 @@ Para inserir um link da nota fiscal do PDF e XML, edite o arquivo viewinvoice.tp

## EMISSÃO PERSONALIZADA DE NOTAS PARA CLIENTE

Para inserir uma opção personalizada de quando é emitido a NFE para cada cliente crie um campo personalizado em `Configurações > Campos Personalizados dos Clientes` com o nome `Emitir Nota Fiscal`,Tipos de campo `Lista de Opção` e em Selecionar Opções `nenhum (padrão do WHMCS) deve seguir a configuração do modulo.,Quando a Fatura é Gerada,Quando a Fatura é Paga`,como no exemplo:
Para inserir uma opção personalizada de quando é emitido a NFE para cada cliente, acesse o perfil do cliente e selecione umas das opções de emissão listadas, como mostra a imagem abaixo.
[![](http://whmcs.linknacional.com.br/prints/campo_personalizado.png)](http://whmcs.linknacional.com.br/prints/campo_personalizado.png)

## CHANGELOG

#### IMPORTANTE: Ao atualizar, após substituir os arquivos pelos mais recentes, acesse as configurações do módulo no menu `Opções > Módulos Addon > Gofas NFE.io` do painel administrativo do WHMCS e clique em "Salvar Alterações". Isso garente que os novos parâmetros serão gravados corretamente no banco de dados.

### v1.4.0

- Migração da tratativa do RPS para a NFe realizada
- Funcionalidade de emissão personalizada automatizada

### v1.3.3
- Ajuste na descrição da nota fiscal.

Expand Down
2 changes: 1 addition & 1 deletion modules/addons/gofasnfeio/addonPage/outputproduct.php
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@
}

echo '
<a href="' . $gnfewhmcsadminurl . 'addonmodules.php?module=gofasnfeio&action=nfeio" class="btn btn-primary" id="gnfe_cancel" title="NFE.oi">NFE.oi</a>
<a href="' . $gnfewhmcsadminurl . 'addonmodules.php?module=gofasnfeio&action=nfeio" class="btn btn-primary" id="gnfe_cancel" title="NFE.io">NFE.io</a>
<a href="' . $gnfewhmcsadminurl . 'addonmodules.php?module=gofasnfeio&action=nfeio_legacy" class="btn btn-primary" title="Sistema legado">Sistema legado</a>
<div class="tab-content admin-tabs">
Expand Down
2 changes: 1 addition & 1 deletion modules/addons/gofasnfeio/addonPage/outputsystemlegacy.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
?>
<div style="margin-bottom: 1%;">
<a href="<?php echo $gnfewhmcsadminurl; ?>addonmodules.php?module=gofasnfeio&action=code_product" class="btn btn-primary" id="gnfe_cancel" title="Código de Serviços">Código de Serviços</a>
<a href="<?php echo $gnfewhmcsadminurl; ?>addonmodules.php?module=gofasnfeio&action=nfeio" class="btn btn-primary" id="gnfe_cancel" title="NFE.oi">NFE.oi</a>
<a href="<?php echo $gnfewhmcsadminurl; ?>addonmodules.php?module=gofasnfeio&action=nfeio" class="btn btn-primary" id="gnfe_cancel" title="NFE.io">NFE.io</a>
</div>
<ul class="nav nav-tabs admin-tabs" role="tablist">
<li class="<?php if (!$_GET['aba']) {
Expand Down
175 changes: 107 additions & 68 deletions modules/addons/gofasnfeio/config.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,27 +9,6 @@
require_once __DIR__ . '/update.php';

if (!function_exists('gofasnfeio_config')) {
if (!function_exists('gnfe_customfields_dropdow')) {
function gnfe_customfields_dropdow() {
$customfields_array = [];
foreach (Capsule::table('tblcustomfields')->where('type', '=', 'client')->get(['fieldname', 'id']) as $customfield) {
$customfields_array[] = $customfield;
}
$customfields = json_decode(json_encode($customfields_array), true);
if (!$customfields) {
$dropFieldArray = ['0' => 'database error'];
} elseif (count($customfields) >= 1) {
$dropFieldArray = ['0' => 'selecione um campo'];
foreach ($customfields as $key => $value) {
$dropFieldArray[$value['id']] = $value['fieldname'];
}
} else {
$dropFieldArray = ['0' => 'nothing to show'];
}

// return $dropFieldArray;
}
}
function gnfe_verify_module_updates() {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://api.github.com/repos/nfe/whmcs-addon/releases');
Expand All @@ -47,24 +26,105 @@ function gnfe_verify_module_updates() {
return '';
}
}

function gofasnfeio_config() {
if ($_GET['doc_log']) {
dowload_doc_log();
}
$previous_version = Capsule::table('tbladdonmodules')->where('module','=','gofasnfeio')->where('setting','=','version')->get(['value'])[0]->value;

$module_version = '1.3.3';
// Verify available updates
$available_update_ = gnfe_verify_module_updates();
gnfe_verifyInstall();

try {
gnfe_insert_issue_nfe_cond_in_database();
} catch (\Throwable $th) {}

// --------------------------------------------------------------------------------------------

// Versão do módulo deste arquivo.
$module_version = '1.4.0';
$module_version_int = (int) preg_replace('/[^0-9]/', '', $module_version);

// Versão do módulo que consta no banco de dados.
$previous_version = gnfe_config('module_version');

// A versão do módulo precisa ser inserida no tabela do banco de dados, porque ela não existia no banco de dados até agora.
if (!$previous_version) {
Capsule::table('tbladdonmodules')->insert(['module' => 'gofasnfeio', 'setting' => 'module_version', 'value' => $module_version]);
$previous_version = $module_version;
}
$previous_version_int = (int) preg_replace('/[^0-9]/', '', $previous_version);

$update_denied = '';
// Se module_version e previous_version não forem iguais, quer dizer que houve uma atualização do módulo.
if ($module_version_int !== $previous_version_int) {
// Pega apenas as versões MAJOR.MINOR do módulo instalado e da versão do módulo no banco de dados.
$previous_major_minor_version = intval(substr($previous_version_int, 0, 2));
$module_major_minor_version = intval(substr($module_version_int, 0, 2));

// Atende a diretriz "Exclusivamente a partir da versão 1.5.0 não será permitido atualização do modulo por versões inferiores a 1.4.0.".
// Se a versão do módulo for igual a versão do módulo no
// banco de dados mais 1, então a atualização é permitida.
if ($module_major_minor_version === $previous_major_minor_version + 1) {
Capsule::table('tbladdonmodules')->where('module', 'gofasnfeio')->where('setting', 'module_version')->update(['value' => $module_version]);
} else {
$update_denied = <<<EOT
<p style="font-size: 14px; color: red;">
<i class="fas fa-exclamation-triangle"></i>
Você está tentando instalar a versão $module_version e a versão anteriormente instalada foi a $previous_version
</p>
<p style="font-size: 14px; color: red;">
<i class="fas fa-exclamation-triangle"></i>
Entretanto, só é permitida a atualização do módulo para frente e de uma em uma versão. Ex.: 1.3.0 para 1.4.0, 1.4.3 para 1.5.0
</p>
EOT;
$module_version = $previous_version;
}
}

// --------------------------------------------------------------------------------------------

// Verifica se há atualizações disponíveis.
$available_update_ = gnfe_verify_module_updates();
$available_version_int = (int) preg_replace('/[^0-9]/', '', str_replace('v','',$available_update_));

if ($available_version_int <= $module_version_int) {
if ($available_version_int <= $module_version_int) { // $available_version_int <= $module_version_int
$available_update_message = '<p style="font-size: 14px;color:green;"><i class="fas fa-check-square"></i> Você está executando a versão mais recente do módulo.</p>';
} else {
$available_update_message = '<p style="font-size: 14px;color:red;"><i class="fas fa-exclamation-triangle"></i> Nova versão disponível no <a style="color:#CC0000;text-decoration:underline;" href="https://github.com/nfe/whmcs-addon/releases" target="_blank">Github</a></p>';
}

// --------------------------------------------------------------------------------------------

// Atende à diretriz "Na versão superior a 1.4.0, ou seja na 1.5.0 este recurso de migração deve esta desabilitado."
// e a "Exclusivamente na versão 1.4.0 será realizada a migração da RPS do módulo para a NFE."
// Verifica se a versão dos arquivos do módulo corresponde a versão do módulo no banco de dados.
if ($module_version_int >= 140 && $module_version_int < 150 && $previous_version_int >= 140 && $previous_version_int < 150) {

// Verifica se a configuração rps_number existe no banco de dados.
if (Capsule::table('tbladdonmodules')->where('module', '=', 'gofasnfeio')->where('setting','=','rps_number')->count() == 0) {
try {
$nfe_rps = gnfe_get_nfes()['rpsNumber'];
Capsule::table('tbladdonmodules')->insert(['module' => 'gofasnfeio', 'setting' => 'rps_number', 'value' => $nfe_rps]);
} catch (Exception $e) {
logModuleCall('gofas_nfeio', 'gofasnfeio_config', '', $e->getMessage(), '', '');
}
}

$whmcs_rps = gnfe_config('rps_number');

if (is_numeric($whmcs_rps) || $whmcs_rps == '') {
$company_data = gnfe_get_company_info();

if (isset($company_data['error'])) {
logModuleCall('gofas_nfeio', 'gnfe_get_company_info', '', $company_data['error'], '', '');
} else {
gnfe_put_rps($company_data, $whmcs_rps); // Transfere a tratativa do RPS para a NFe.
}
}
}

// --------------------------------------------------------------------------------------------

/// REMOVER VERIFICAÇÃO APÓS VERSÃO 2.0
$verificarEmail = Capsule::table('tbladdonmodules')->where('module', '=', 'gofasnfeio')->where('setting', '=', 'gnfe_email_nfe_config')->count();
if (empty($verificarEmail)) {
Expand Down Expand Up @@ -151,38 +211,25 @@ function gofasnfeio_config() {
}

//create tables
gnfe_verifyInstall();
create_table_product_code();
//

if (version_compare($previous_version,'1.2.7','<')) {
set_code_service_camp_gofasnfeio();
set_custom_field_ini_date();
}
$gnfe_get_nfes = gnfe_get_nfes();
$params = gnfe_config();

$intro = ['intro' => [
'FriendlyName' => '',
'Description' => '<h4 style="padding-top: 5px;">Módulo Nota Fiscal NFE.io para WHMCS v' . $module_version . '</h4>
' . $available_update_message . '',
'Description' => '<h4 style="padding-top: 5px;">Módulo Nota Fiscal NFE.io para WHMCS v' . $module_version . '</h4>'
]];

if ((!$params['rps_number'] || $params['rps_number'] == 'zero') && $gnfe_get_nfes['rpsNumber']) {
$rps_number = $gnfe_get_nfes['rpsNumber'];
} elseif (($params['rps_number'] == 'zero' && !$gnfe_get_nfes['rpsNumber']) || (!$params['rps_number'] && !$gnfe_get_nfes['rpsNumber'])) {
$rps_number = 0;
}
$intro['intro']['Description'] .= '<p>'. $available_update_message .'</p>';
$intro['intro']['Description'] .= '<p>'. $update_denied .'</p>';

//define o RPS number
$rps_number = $gnfe_get_nfes['rpsNumber'];

if (Capsule::table('tbladdonmodules')->where('setting','=','rps_number')->count() == 0 && $rps_number != null) {
Capsule::table('tbladdonmodules')->insert(['module' => 'gofasnfeio', 'setting' => 'rps_number', 'value' => $rps_number]);
} elseif (Capsule::table('tbladdonmodules')->where('setting','=','rps_number')->count() == 0 && $rps_number == null) {
Capsule::table('tbladdonmodules')->insert(['module' => 'gofasnfeio', 'setting' => 'rps_number', 'value' => '']);
} else {
Capsule::table('tbladdonmodules')->where('setting','=','rps_number')->update(['value' => $rps_number]);
}
$intro['intro']['Description'] .=
'<a style="text-decoration:underline;" href="https://app.nfe.io/companies/edit/fiscal/' . gnfe_config('company_id') . '" target="_blank">
Consultar: RPS | Série
</a>';

$api_key = ['api_key' => [
'FriendlyName' => 'API Key',
Expand All @@ -202,26 +249,11 @@ function gofasnfeio_config() {
'Description' => '<a style="text-decoration:underline;" href="https://nfe.io/docs/nota-fiscal-servico/conceitos-nfs-e/#o-que-e-codigo-de-servico" target="_blank">O que é Código de Serviço?</a>',
]];

$rps_serial_number = ['rps_serial_number' => [
'FriendlyName' => 'Série do RPS',
'Type' => 'text',
'Default' => 'IO',
'Description' => '<a style="text-decoration:underline;" href="https://nfe.io/docs/nota-fiscal-servico/conceitos-nfs-e/" target="_blank">Saiba mais</a>',
]];

$rps_number_camp = ['rps_number' => [
'FriendlyName' => 'Número do RPS',
'Type' => 'text',
// 'Default' => $rps_number,
'Disabled' => 'true',
'Description' => 'Para alterar o RPS acessa a nfe.io <a target="_blank" href="' . $admin_url . 'configaddonmods.php?doc_log=true" style="text-decoration:underline;">AQUI</a>.',
]];

$issue_note = ['issue_note' => [
$issue_note_default_cond = ['issue_note_default_cond' => [
'FriendlyName' => 'Quando emitir NFE',
'Type' => 'radio',
'Options' => 'Manualmente,Quando a Fatura é Gerada,Quando a Fatura é Paga',
'Default' => 'Quando a Fatura é Paga',
'Options' => 'Quando a fatura é gerada,Quando a fatura é paga,Manualmente',
'Default' => 'Manualmente',
]];

$issue_note_after = ['issue_note_after' => [
Expand Down Expand Up @@ -286,11 +318,18 @@ function gofasnfeio_config() {
'Default' => 'Número da fatura',
]];

$send_invoice_url = ['send_invoice_url' => [
'FriendlyName' => 'Exibir link da fatura na nota fiscal?',
'Type' => 'radio',
'Options' => 'Sim,Não',
'Default' => 'Não'
]];

$desc_custom = ['descCustom' => [
'FriendlyName' => 'Adicione informações personalizada na nota fiscal:',
'FriendlyName' => 'Adicione uma informação personalizada na nota fiscal:',
'Type' => 'text',
'Default' => '',
'Description' => '<span style="color:#c00">Preencher essa opção desativa a opção anterior.</span>',
'Description' => 'Esta informação será acrescida após detalhes da fatura.',
]];

$development_ = ['NFEioEnvironment' => [
Expand All @@ -305,7 +344,7 @@ function gofasnfeio_config() {
'Description' => '&copy; ' . date('Y') . ' <a target="_blank" title="Para suporte utilize o github" href="https://github.com/nfe/whmcs-addon/issues">Suporte módulo</a>',
]];

$fields = array_merge($intro, $api_key, $company_id, $service_code, $rps_serial_number, $rps_number_camp, $issue_note, $issue_note_after, $gnfe_email_nfe_config,$development_, $cancel_invoice_cancel_nfe, $debug, $insc_municipal,$cpf,$cnpj, $tax, $invoiceDetails,$desc_custom, $footer);
$fields = array_merge($intro, $api_key, $company_id, $service_code, $issue_note_default_cond, $issue_note_after, $gnfe_email_nfe_config,$development_, $cancel_invoice_cancel_nfe, $debug, $insc_municipal,$cpf,$cnpj, $tax, $invoiceDetails, $send_invoice_url,$desc_custom, $footer);
$configarray = [
'name' => 'NFE.io',
'description' => 'Módulo Nota Fiscal NFE.io para WHMCS',
Expand Down
Loading

0 comments on commit 0ac0cdc

Please sign in to comment.