Aggiunta stati documento FE
This commit is contained in:
parent
b4e7f7e8cd
commit
b15950c887
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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>';
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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';
|
Loading…
Reference in New Issue