Aggiunta stati documento FE

This commit is contained in:
Thomas Zilio 2018-12-07 18:16:46 +01:00
parent b4e7f7e8cd
commit b15950c887
5 changed files with 179 additions and 19 deletions

View File

@ -2,6 +2,8 @@
include_once __DIR__.'/init.php';
use Plugins\ExportFE\Interaction;
switch (filter('op')) {
case 'generate':
if (!empty($fattura_pa)) {
@ -20,5 +22,14 @@ switch (filter('op')) {
flash()->error(tr('Impossibile generare la fattura elettronica'));
}
break;
case 'send':
$result = Interaction::sendXML($id_record);
echo json_encode([
'sent' => $result,
]);
break;
}

View File

@ -3,6 +3,7 @@
include_once __DIR__.'/init.php';
use Plugins\ExportFE\FatturaElettronica;
use Plugins\ExportFE\Interaction;
if (!empty($fattura_pa)) {
$disabled = false;
@ -137,15 +138,27 @@ echo '
<a href="'.ROOTDIR.'/plugins/exportFE/download.php?id_record='.$id_record.'" class="btn btn-success btn-lg '.($generated ? '' : 'disabled').'" target="_blank" '.($generated ? '' : 'disabled').'>
<i class="fa fa-download"></i> '.tr('Scarica').'
</a>
<i class="fa fa-arrow-right fa-fw text-muted"></i>';
</a>';
echo '
<i class="fa fa-arrow-right fa-fw text-muted"></i>
<a href="'.ROOTDIR.'/plugins/exportFE/view.php?id_record='.$id_record.'" class="btn btn-info btn-lg '.($generated ? '' : 'disabled').'" target="_blank" '.($generated ? '' : 'disabled').'>
<i class="fa fa-eye"></i> '.tr('Visualizza').'
</a>
</a>';
if (Interaction::isEnabled()) {
echo '
<i class="fa fa-arrow-right fa-fw text-muted"></i>
<button onclick="send(this)" class="btn btn-success btn-lg '.($generated ? '' : 'disabled').'" target="_blank" '.($generated ? '' : 'disabled').'>
<i class="fa fa-paper-plane"></i> '.tr('Invia').'
</button>';
}
echo '
</div>';
@ -154,6 +167,7 @@ if ($generated) {
<script>
$("#genera").click(function(event){
event.preventDefault();
swal({
title: "Sei sicuro di rigenerare la fattura?",
text: "Attenzione: sarà generato un nuovo progressivo invio.",
@ -168,5 +182,36 @@ if ($generated) {
}
});
});
function send(btn) {
var restore = buttonLoading(btn);
$.ajax({
url: globals.rootdir + "/actions.php",
type: "post",
data: {
op: "send",
id_module: "'.$id_module.'",
id_plugin: "'.$id_plugin.'",
id_record: "'.$id_record.'",
},
success: function(data) {
data = JSON.parse(data);
if (data.sent) {
swal("'.tr('Fattura inviata!').'", "'.tr('Fattura inoltrata con successo').'", "success");
} else {
swal("'.tr('Invio fallito').'", "'.tr("L'invio della fattura è fallito").'", "error");
}
buttonRestore(btn, restore);
},
error: function(data) {
swal("'.tr('Errore').'", "'.tr('Errore durante il salvataggio').'", "error");
buttonRestore(btn, restore);
}
});
}
</script>';
}

View File

@ -68,7 +68,7 @@ class FatturaElettronica
{
$documento = $this->getDocumento();
return !empty($documento['xml_generated_at']) && !empty($documento['progressivo_invio']) && file_exists(DOCROOT.'/'.static::getDirectory().'/'.$this->getFilename());
return !empty($documento['progressivo_invio']) && file_exists(DOCROOT.'/'.static::getDirectory().'/'.$this->getFilename());
}
/**
@ -882,7 +882,7 @@ class FatturaElettronica
$data = $fattura->getUploadData();
$dir = static::getDirectory();
$rapportino_nome = sanitizeFilename($documento['numero'].'.pdf');
$rapportino_nome = sanitizeFilename($documento['numero_esterno'].'.pdf');
$filename = slashes(DOCROOT.'/'.$dir.'/'.$rapportino_nome);
Uploads::delete($rapportino_nome, $data);
@ -1089,7 +1089,7 @@ class FatturaElettronica
// Aggiornamento effettivo
database()->update('co_documenti', [
'progressivo_invio' => $this->getDocumento()['progressivo_invio'],
'xml_generated_at' => date('Y-m-d H:i:s'),
'codice_stato_fe' => 'GEN',
], ['id' => $this->getDocumento()['id']]);
return ($result === false) ? null : $filename;

View File

@ -0,0 +1,83 @@
<?php
namespace Plugins\ExportFE;
use GuzzleHttp\Client;
/**
* Classe per l'interazione con API esterne.
*
* @since 2.4.3
*/
class Interaction
{
protected static $client = null;
/**
* Restituisce l'oggetto per la connessione all'API del progetto.
*
* @return Client
*/
protected static function getClient()
{
if (!isset(self::$client)) {
self::$client = new Client([
'base_uri' => 'https://services.osmcloud.it/v1/',
'verify' => false,
]);
}
return self::$client;
}
public function isEnabled()
{
return true;
}
protected function request($type, $resource, $data = [], $options = [])
{
$client = static::getClient();
$json = array_merge($data, [
'token' => setting('OSMCloud Services API Token'),
'resource' => $resource,
]);
$options = array_merge($options, [
'json' => $json,
'http_errors' => false,
]);
return $client->request($type, '', $options);
}
public static function sendXML($id_record)
{
try {
$fattura = new FatturaElettronica($id_record);
$file = DOCROOT.'/'.FatturaElettronica::getDirectory().'/'.$fattura->getFilename();
$response = static::request('POST', 'send_fattura', [
'name' => $fattura->getFilename(),
], [
'multipart' => [
[
'name' => 'xml',
'contents' => fopen($file, 'r')
],
]
]);
$body = $response->getBody();
if (!empty($body)) {
return true;
}
} catch (UnexpectedValueException $e) {
return false;
}
return true;
}
}

21
update/2_4_4.sql Normal file
View File

@ -0,0 +1,21 @@
-- Stati di invio del documento
CREATE TABLE IF NOT EXISTS `fe_stati_documento` (
`codice` varchar(5) NOT NULL,
`descrizione` varchar(255) NOT NULL,
`icon` varchar(255) NOT NULL,
PRIMARY KEY (`codice`)
) ENGINE=InnoDB;
INSERT INTO `fe_stati_documento` (`codice`, `descrizione`, `icon`) VALUES
('GEN', 'Generata', 'fa fa-file-code-o text-success'),
('WAIT', 'In attesa', 'fa fa-clock-o text-warning'),
('SENT', 'Inviata', 'fa fa-paper-plane-o text-info'),
('ACK', 'Accettata', 'fa fa-paper-check text-success'),
('REF', 'Rifiuta', 'fa fa-times text-error');
ALTER TABLE `co_documenti` ADD `codice_stato_fe` varchar(5), ADD FOREIGN KEY (`codice_stato_fe`) REFERENCES `fe_stati_documento`(`codice`) ON DELETE SET NULL;
UPDATE `co_documenti` SET `codice_stato_fe` = 'GEN' WHERE `xml_generated_at` IS NOT NULL;
ALTER TABLE `co_documenti` DROP `xml_generated_at`;
UPDATE `zz_views` SET `query` = '(SELECT `icon` FROM `fe_stati_documento` WHERE `codice` = `codice_stato_fe`)' WHERE `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Fatture di vendita') AND `name` = 'icon_FE';
UPDATE `zz_views` SET `query` = '(SELECT `descrizione` FROM `fe_stati_documento` WHERE `codice` = `codice_stato_fe`)' WHERE `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Fatture di vendita') AND `name` = 'icon_title_FE';