Skip to content

Commit

Permalink
Merge pull request #23 from LinkNacional/master
Browse files Browse the repository at this point in the history
ajustes versão 1.2.7
  • Loading branch information
gblmarquez authored Jan 21, 2021
2 parents 5213664 + 68c485b commit de53b7a
Show file tree
Hide file tree
Showing 20 changed files with 2,015 additions and 1,247 deletions.
21 changes: 18 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ A [NFE.io](https://nfe.io "NFE.io") é um sistema de emissão de notas fiscais q

------------
## CAPTURAS DE TELA
Clique nas imagens para ampliar
Clique nas imagens para ampliar

[![](https://s3.amazonaws.com/uploads.gofas.me/wp-content/uploads/2020/08/26153535/config_screenshot.png)](https://s3.amazonaws.com/uploads.gofas.me/wp-content/uploads/2020/08/26153535/config_screenshot.png)
*Configurações*
Expand Down Expand Up @@ -48,6 +48,12 @@ Clique nas imagens para ampliar
2. Descompacte o arquivo .zip;
3. Copie o diretório `/gofasnfeio/`, localizados na pasta `/modules/addons/` do arquivo recém descompactado, para a pasta `/modules/addons/` da instalação do WHMCS;

## ATUALIZAÇÃO
1. Faça download do módulo [neste link](https://github.com/nfe/whmcs-addon/archive/master.zip "neste link");
2. Descompacte o arquivo .zip;
3. Dentro da instalação do seu WHMCS remova a pasta `/modules/addons/gofasnfeio/`;
3. Copie o diretório `/gofasnfeio/`, localizados na pasta `/modules/addons/` do arquivo recém descompactado, para a pasta `/modules/addons/` da instalação do WHMCS;

## PRÉ CONFIGURAÇÃO E ATIVAÇÃO
1. No painel administrativo do WHMCS, crie um campo personalizado de cliente para CPF e/ou CNPJ. Caso prefira, você pode criar dois campos distintos, sendo um campo apenas para CPF e outro campo apenas para CNPJ. O módulo identifica os campos do perfil do cliente automaticamente;
2. Ative o addon no painel administrativo do WHMCS, em Opções > Módulos Addon > Gofas NFE.io > Ativar.
Expand All @@ -65,14 +71,23 @@ Clique nas imagens para ampliar
10. Controle de Acesso: Escolha os grupos de administradores ou operadores que terão permissão para acessar a lista de faturas gerada pelo módulo no menu Addons > Gofas NFE.io.

## LINK DA NOTA EM PDF E XML
Para inserir um link da nota fiscal do PDF e XML direto na fatura do template do WHMCS, utilize o exemplo abaixo:
Para inserir um link da nota fiscal do PDF e XML, edite o arquivo viewinvoice.tpl da pasta do template do WHMCS, utilize o exemplo abaixo:
```
{if $status eq "Paid" || $clientsdetails.userid eq "6429"}<i class="fal fa-file-invoice" aria-hidden="true"></i> NOTA FISCAL <a href="/modules/addons/gofasnfeio/pdf.php?invoice_id={$invoiceid}" target="_blank" class="btn btn-link" tite="Nota Fiscal disponível 24 horas após confirmação de pagamento.">PDF</a> | <a href="/modules/addons/gofasnfeio/xml.php?invoice_id={$invoiceid}" target="_blank" class="btn btn-link" tite="Nota Fiscal disponível 24 horas após confirmação de pagamento.">XML</a>{/if}
```

## 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.2.7
- envio do nome da empresa ao invés do nome pessoa física quando o CNPJ estiver definido
- criar nota fiscal de acordo com o código de serviço de cada serviço
- corrigido erro de caracteres especiais
- opção de criar nota individualmente por tipo de serviço
- emissão de nota fiscal a partir da data de instalação do módulo
- opção de descrição do serviço na nota: referente a fatura ou nome do serviço.
- ajuste de link das notas fiscais na fatura para abrir todas as notas.
- ajuste de instalação do módulo
### v1.2.6
- opção manual para criação de notas fiscais.
### v1.2.5
Expand Down Expand Up @@ -101,4 +116,4 @@ Para inserir um link da nota fiscal do PDF e XML direto na fatura do template do
#### v1.0.0
- Lançamento.

© 2020 [Gofas Software](https://gofas.net/whmcs/modulo-nfe-io-para-whmcs/)
© 2021 [Manutenção Link Nacional](https://www.linknacional.com.br/suporte-whmcs)
201 changes: 119 additions & 82 deletions modules/addons/gofasnfeio/callback.php
Original file line number Diff line number Diff line change
@@ -1,144 +1,181 @@
<?php
require_once __DIR__ . '/../../../init.php';

require_once __DIR__.'/../../../init.php';
use WHMCS\Database\Capsule;

$post = json_decode(file_get_contents('php://input'), true);
if($post){
require_once __DIR__ . '/functions.php';
$params = array();
foreach( Capsule::table('tbladdonmodules') -> where( 'module', '=', 'gofasnfeio' ) -> get( array( 'setting', 'value') ) as $settings ) {
logModuleCall('gofas_nfeio', 'callback', $post, '', '', 'replaceVars');
logModuleCall('gofas_nfeio', 'callback db', Capsule::table('gofasnfeio')->where('nfe_id', '=', $post['id'])->count(), '', '', 'replaceVars');
logModuleCall('gofas_nfeio', 'callback environment', $post['environment'], '', '', 'replaceVars');

if ($post) {
require_once __DIR__.'/functions.php';
if (Capsule::table('gofasnfeio')->where('nfe_id', '=', $post['id'])->count() == 0 || $post['environment'] != 'Production') {
return '';
}

$params = [];
foreach (Capsule::table('tbladdonmodules')->where('module', '=', 'gofasnfeio')->get(['setting', 'value']) as $settings) {
$params[$settings->setting] = $settings->value;
}
foreach( Capsule::table('gofasnfeio')->where('nfe_id', '=', $post['id'])->
get(array( 'invoice_id', 'user_id', 'nfe_id', 'status', 'services_amount', 'environment', 'flow_status', 'pdf', 'created_at', 'updated_at' )) as $key => $value ) {
$nfe_for_invoice[$key] = json_decode(json_encode($value), true);
foreach (Capsule::table('gofasnfeio')->where('nfe_id', '=', $post['id'])->
get(['id', 'invoice_id', 'user_id', 'nfe_id', 'status', 'services_amount', 'environment', 'flow_status', 'pdf', 'created_at', 'updated_at']) as $key => $value) {
$nfe_for_invoice[$key] = json_decode(json_encode($value), true);
}
$nfe = $nfe_for_invoice['0'];
if((string)$nfe['nfe_id'] === (string)$post['id'] and $nfe['status'] !== (string)$post['status'] ){
$new_nfe = array(
'invoice_id'=>$nfe['invoice_id'],
'user_id'=>$nfe['user_id'],
'nfe_id'=>$nfe['nfe_id'],
'status'=>$post['status'],
'services_amount'=>$nfe['services_amount'],
'environment'=>$nfe['environment'],
'flow_status'=>$post['flowStatus'],
'pdf'=>$nfe['pdf'],
'created_at'=>$nfe['created_at'],
'updated_at'=>date("Y-m-d H:i:s"),
);

if ((string) $nfe['nfe_id'] === (string) $post['id'] and $nfe['status'] !== (string) $post['status']) {
$new_nfe = [
'invoice_id' => $nfe['invoice_id'],
'user_id' => $nfe['user_id'],
'nfe_id' => $nfe['nfe_id'],
'status' => $post['status'],
'services_amount' => $nfe['services_amount'],
'environment' => $nfe['environment'],
'flow_status' => $post['flowStatus'],
'pdf' => $nfe['pdf'],
'created_at' => $nfe['created_at'],
'updated_at' => date('Y-m-d H:i:s'),
];

try {
$save_nfe = Capsule::table('gofasnfeio')->where('nfe_id', '=', $post['id'])->update($new_nfe);
}
catch (\Exception $e) {
} catch (\Exception $e) {
$e->getMessage();
}
}
if($params['debug']) {
logModuleCall('gofas_nfeio', 'receive_callback', array('post'=>$post), 'post', array('nfe_local'=>$nfe), 'replaceVars');
if ($params['debug']) {
logModuleCall('gofas_nfeio', 'receive_callback', ['post' => $post], 'post', ['nfe_local' => $nfe], 'replaceVars');
}
foreach( Capsule::table('gofasnfeio')->orderBy('id', 'desc')->where('status', '=', 'Waiting')->take(1)->get( array( 'invoice_id' )) as $waiting ) {
foreach( Capsule::table('tblinvoices')->where('id', '=', $waiting->invoice_id)->get( array( 'id', 'userid', 'total' ) ) as $invoices ) {
$invoice = localAPI('GetInvoice', array('invoiceid' => $waiting->invoice_id), false);
$client = localAPI('GetClientsDetails',array( 'clientid' => $invoice['userid'], 'stats' => false, ), false);
foreach( $invoice['items']['item'] as $value){
$line_items[] = $value['description'];

foreach (Capsule::table('gofasnfeio')->orderBy('id', 'desc')->where('status', '=', 'Waiting')->take(1)->get(['id', 'invoice_id', 'service_code', 'services_amount']) as $waiting) {
//$invoices[] = $Waiting->invoice_id;
$data = getTodaysDate(false);
$dataAtual = toMySQLDate($data);

if ('Manualmente' !== $params['issue_note']) {
$getQuery = Capsule::table('tblinvoices')->whereBetween('date', [$params['initial_date'], $dataAtual])->where('id', '=', $waiting->invoice_id)->get(['id', 'userid', 'total']);
} else {
$getQuery = Capsule::table('tblinvoices')->where('id', '=', $waiting->invoice_id)->get(['id', 'userid', 'total']);
}

foreach ($getQuery as $invoices) {
$invoice = localAPI('GetInvoice', ['invoiceid' => $waiting->invoice_id], false);
$client = localAPI('GetClientsDetails', ['clientid' => $invoice['userid'], 'stats' => false], false);
foreach ($invoice['items']['item'] as $value) {
$line_items[] = $value['description'];
}
$customer = gnfe_customer($invoices->userid,$client);
$customer = gnfe_customer($invoices->userid, $client);
$gnfe_get_nfes = gnfe_get_nfes();
if( $params['rps_serial_number'] ){
if ($params['rps_serial_number']) {
$rps_serial_number = $params['rps_serial_number'];
$rps_serial_number_ = false;
}
elseif (!$params['rps_serial_number'] and $gnfe_get_nfes['serviceInvoices']['0']['rpsSerialNumber']){
} elseif (!$params['rps_serial_number'] and $gnfe_get_nfes['serviceInvoices']['0']['rpsSerialNumber']) {
$rps_serial_number = $gnfe_get_nfes['serviceInvoices']['0']['rpsSerialNumber'];
$rps_serial_number_ = $rps_serial_number;
}
elseif (!$params['rps_serial_number'] and !$gnfe_get_nfes['serviceInvoices']['0']['rpsSerialNumber']){
} elseif (!$params['rps_serial_number'] and !$gnfe_get_nfes['serviceInvoices']['0']['rpsSerialNumber']) {
$rps_serial_number = 'IO';
$rps_serial_number_ = $rps_serial_number;
}
///
if($params['rps_number'] and (string)$params['rps_number'] !== (string)'zero'){
if ($params['rps_number'] and (string) $params['rps_number'] !== (string) 'zero') {
$rps_number = $params['rps_number'];
}
elseif((!$params['rps_number'] or (string)$params['rps_number'] === (string)'zero' ) and $gnfe_get_nfes['serviceInvoices']['0']['rpsNumber']){
} elseif ((!$params['rps_number'] or (string) $params['rps_number'] === (string) 'zero') and $gnfe_get_nfes['serviceInvoices']['0']['rpsNumber']) {
$rps_number = $gnfe_get_nfes['serviceInvoices']['0']['rpsNumber'];
}
elseif(((string)$params['rps_number'] === (string)'zero' and !$gnfe_get_nfes['serviceInvoices']['0']['rpsNumber']) or (!$params['rps_number'] and !$gnfe_get_nfes['serviceInvoices']['0']['rpsNumber'])){
} elseif (((string) $params['rps_number'] === (string) 'zero' and !$gnfe_get_nfes['serviceInvoices']['0']['rpsNumber']) or (!$params['rps_number'] and !$gnfe_get_nfes['serviceInvoices']['0']['rpsNumber'])) {
$rps_number = 0;
}

if (!strlen($customer['insc_municipal']) == 0) {
$postfields = array(
'cityServiceCode' => $params['service_code'],
'description' => substr(implode("\n", $line_items), 0, 600),
'servicesAmount' => $invoice['total'],
'borrower' => array(
if (2 == $customer['doc_type']) {
$name = $client['companyname'];
} elseif (1 == $customer['doc_type'] || 'CPF e/ou CNPJ ausente.' == $customer || !$customer['doc_type']) {
$name = $client['fullname'];
}

$name = htmlspecialchars_decode($name);

$service_code = $waiting->service_code ? $waiting->service_code : $params['service_code'];

foreach (Capsule::table('tblconfiguration')->where('setting', '=', 'Domain')->get(['value']) as $gnfewhmcsadminurl) {
$gnfewhmcsadminurl = $gnfewhmcsadminurl->value;
}
$desc = 'Nota referente a fatura #'.$waiting->invoice_id.' '.$gnfewhmcsadminurl.'viewinvoice.php?id='.$waiting->invoice_id.' ';
if (0 == !strlen($customer['insc_municipal'])) {
$postfields = [
'cityServiceCode' => $service_code,
'description' => $desc,
'servicesAmount' => $waiting->services_amount,
'borrower' => [
'federalTaxNumber' => $customer['document'],
'municipalTaxNumber' => $customer['insc_municipal'],
'name' => $customer['name'],
'name' => $name,
'email' => $client['email'],
'address' => array(
'address' => [
'country' => gnfe_country_code($client['countrycode']),
'postalCode' => preg_replace('/[^0-9]/', '', $client['postcode']),
'street' => str_replace(',', '', preg_replace('/[0-9]+/i', '', $client['address1'])),
'number' => preg_replace('/[^0-9]/', '', $client['address1']),
'additionalInformation' => '',
'district' => $client['address2'],
'city' => array(
'code' => gnfe_ibge(preg_replace("/[^0-9]/", "", $client['postcode'])),
'name' => $client['city']
),
'city' => [
'code' => gnfe_ibge(preg_replace('/[^0-9]/', '', $client['postcode'])),
'name' => $client['city'],
],
'state' => $client['state'],
)
),
],
],
'rpsSerialNumber' => $rps_serial_number,
'rpsNumber' => (int)$rps_number + 1,
);
}else{
$postfields = array(
'cityServiceCode' => $params['service_code'],
'description' => substr(implode("\n", $line_items), 0, 600),
'servicesAmount' => $invoice['total'],
'borrower' => array(
'rpsNumber' => (int) $rps_number + 1,
];
} else {
$postfields = [
'cityServiceCode' => $service_code,
'description' => $desc,
'servicesAmount' => $waiting->services_amount,
'borrower' => [
'federalTaxNumber' => $customer['document'],
'name' => $customer['name'],
'name' => $name,
'email' => $client['email'],
'address' => array(
'address' => [
'country' => gnfe_country_code($client['countrycode']),
'postalCode' => preg_replace('/[^0-9]/', '', $client['postcode']),
'street' => str_replace(',', '', preg_replace('/[0-9]+/i', '', $client['address1'])),
'number' => preg_replace('/[^0-9]/', '', $client['address1']),
'additionalInformation' => '',
'district' => $client['address2'],
'city' => array(
'code' => gnfe_ibge(preg_replace("/[^0-9]/", "", $client['postcode'])),
'name' => $client['city']
),
'city' => [
'code' => gnfe_ibge(preg_replace('/[^0-9]/', '', $client['postcode'])),
'name' => $client['city'],
],
'state' => $client['state'],
)
),
],
],
'rpsSerialNumber' => $rps_serial_number,
'rpsNumber' => (int)$rps_number + 1,
);
'rpsNumber' => (int) $rps_number + 1,
];
}

if ($params['debug']) {
logModuleCall('gofas_nfeio', 'callback', $postfields, '', '', 'replaceVars');
}

$nfe = gnfe_issue_nfe($postfields);
if($nfe->message) {
if ($nfe->message) {
$error .= $nfe->message;
}
if(!$nfe->message) {
$gnfe_update_nfe = gnfe_update_nfe($nfe,$invoices->userid,$invoices->id,'n/a',date("Y-m-d H:i:s"),date("Y-m-d H:i:s"));
if($gnfe_update_nfe and $gnfe_update_nfe !== 'success') {
if (!$nfe->message) {
$gnfe_update_nfe = gnfe_update_nfe($nfe, $invoices->userid, $invoices->id, 'n/a', date('Y-m-d H:i:s'), date('Y-m-d H:i:s'), $waiting->id);
if ($gnfe_update_nfe and 'success' !== $gnfe_update_nfe) {
$error = $gnfe_update_nfe;
}
$update_rps = gnfe_update_rps($rps_serial_number_, $rps_number);
if($update_rps and $update_rps !== 'success') {
if ($update_rps and 'success' !== $update_rps) {
$error = $update_rps;
}
}
}
if($params['debug']) {
logModuleCall('gofas_nfeio', 'after_receive_callback', array('$params'=>$params, '$datepaid'=>$datepaid, '$datepaid_to_issue'=>$datepaid_to_issue), 'post', array('$processed_invoices'=>$processed_invoices, '$nfe'=>$nfe,'error'=>$error ), 'replaceVars');
if ($params['debug']) {
logModuleCall('gofas_nfeio', 'after_receive_callback', ['$params' => $params, '$datepaid' => $datepaid, '$datepaid_to_issue' => $datepaid_to_issue], 'post', ['$processed_invoices' => $processed_invoices, '$nfe' => $nfe, 'error' => $error], 'replaceVars');
}
}
}
}
Loading

0 comments on commit de53b7a

Please sign in to comment.