Aggiunta stati documento FE
This commit is contained in:
parent
b4e7f7e8cd
commit
b15950c887
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
include_once __DIR__.'/init.php';
|
include_once __DIR__.'/init.php';
|
||||||
|
|
||||||
|
use Plugins\ExportFE\Interaction;
|
||||||
|
|
||||||
switch (filter('op')) {
|
switch (filter('op')) {
|
||||||
case 'generate':
|
case 'generate':
|
||||||
if (!empty($fattura_pa)) {
|
if (!empty($fattura_pa)) {
|
||||||
|
@ -20,5 +22,14 @@ switch (filter('op')) {
|
||||||
flash()->error(tr('Impossibile generare la fattura elettronica'));
|
flash()->error(tr('Impossibile generare la fattura elettronica'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'send':
|
||||||
|
$result = Interaction::sendXML($id_record);
|
||||||
|
|
||||||
|
echo json_encode([
|
||||||
|
'sent' => $result,
|
||||||
|
]);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
include_once __DIR__.'/init.php';
|
include_once __DIR__.'/init.php';
|
||||||
|
|
||||||
use Plugins\ExportFE\FatturaElettronica;
|
use Plugins\ExportFE\FatturaElettronica;
|
||||||
|
use Plugins\ExportFE\Interaction;
|
||||||
|
|
||||||
if (!empty($fattura_pa)) {
|
if (!empty($fattura_pa)) {
|
||||||
$disabled = false;
|
$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').'>
|
<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').'
|
<i class="fa fa-download"></i> '.tr('Scarica').'
|
||||||
</a>
|
</a>';
|
||||||
|
|
||||||
<i class="fa fa-arrow-right fa-fw text-muted"></i>';
|
|
||||||
|
|
||||||
echo '
|
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').'>
|
<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').'
|
<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>';
|
</div>';
|
||||||
|
|
||||||
|
@ -154,19 +167,51 @@ if ($generated) {
|
||||||
<script>
|
<script>
|
||||||
$("#genera").click(function(event){
|
$("#genera").click(function(event){
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
|
||||||
swal({
|
swal({
|
||||||
title: "Sei sicuro di rigenerare la fattura?",
|
title: "Sei sicuro di rigenerare la fattura?",
|
||||||
text: "Attenzione: sarà generato un nuovo progressivo invio.",
|
text: "Attenzione: sarà generato un nuovo progressivo invio.",
|
||||||
type: "warning",
|
type: "warning",
|
||||||
showCancelButton: true,
|
showCancelButton: true,
|
||||||
confirmButtonColor: "#30d64b",
|
confirmButtonColor: "#30d64b",
|
||||||
cancelButtonColor: "#d33",
|
cancelButtonColor: "#d33",
|
||||||
confirmButtonText: "Genera"
|
confirmButtonText: "Genera"
|
||||||
}).then((result) => {
|
}).then((result) => {
|
||||||
if (result) {
|
if (result) {
|
||||||
$("#form-xml").submit();
|
$("#form-xml").submit();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
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>';
|
</script>';
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,7 +68,7 @@ class FatturaElettronica
|
||||||
{
|
{
|
||||||
$documento = $this->getDocumento();
|
$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();
|
$data = $fattura->getUploadData();
|
||||||
$dir = static::getDirectory();
|
$dir = static::getDirectory();
|
||||||
|
|
||||||
$rapportino_nome = sanitizeFilename($documento['numero'].'.pdf');
|
$rapportino_nome = sanitizeFilename($documento['numero_esterno'].'.pdf');
|
||||||
$filename = slashes(DOCROOT.'/'.$dir.'/'.$rapportino_nome);
|
$filename = slashes(DOCROOT.'/'.$dir.'/'.$rapportino_nome);
|
||||||
|
|
||||||
Uploads::delete($rapportino_nome, $data);
|
Uploads::delete($rapportino_nome, $data);
|
||||||
|
@ -1089,7 +1089,7 @@ class FatturaElettronica
|
||||||
// Aggiornamento effettivo
|
// Aggiornamento effettivo
|
||||||
database()->update('co_documenti', [
|
database()->update('co_documenti', [
|
||||||
'progressivo_invio' => $this->getDocumento()['progressivo_invio'],
|
'progressivo_invio' => $this->getDocumento()['progressivo_invio'],
|
||||||
'xml_generated_at' => date('Y-m-d H:i:s'),
|
'codice_stato_fe' => 'GEN',
|
||||||
], ['id' => $this->getDocumento()['id']]);
|
], ['id' => $this->getDocumento()['id']]);
|
||||||
|
|
||||||
return ($result === false) ? null : $filename;
|
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