Introduzione hooks (#569)
This commit is contained in:
parent
ccc37d7fec
commit
19564d5955
28
ajax.php
28
ajax.php
|
@ -2,6 +2,8 @@
|
|||
|
||||
include_once __DIR__.'/core.php';
|
||||
|
||||
use Models\Hook;
|
||||
|
||||
switch (get('op')) {
|
||||
// Imposta un valore ad un array di $_SESSION
|
||||
// esempio: push di un valore in $_SESSION['dashboard']['idtecnici']
|
||||
|
@ -77,5 +79,31 @@ switch (get('op')) {
|
|||
]);
|
||||
|
||||
echo json_encode($datas);
|
||||
|
||||
break;
|
||||
|
||||
case 'hooks':
|
||||
$hooks = Hook::all();
|
||||
|
||||
$results = [];
|
||||
foreach ($hooks as $hook) {
|
||||
$results[] = [
|
||||
'id' => $hook->id,
|
||||
'name' => $hook->name,
|
||||
];
|
||||
}
|
||||
|
||||
echo json_encode($results);
|
||||
|
||||
break;
|
||||
|
||||
case 'hook':
|
||||
$hook_id = filter('id');
|
||||
$hook = Hook::find($hook_id);
|
||||
|
||||
$response = $hook->execute();
|
||||
|
||||
echo json_encode($response);
|
||||
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -61,14 +61,6 @@ a.disabled {
|
|||
margin: 8px 0 0 0;
|
||||
}
|
||||
|
||||
#right-menu {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
#right-menu .fa-info {
|
||||
padding: 0 5px
|
||||
}
|
||||
|
||||
.ui-menu {
|
||||
position: fixed;
|
||||
}
|
||||
|
@ -336,6 +328,11 @@ span.form-control {
|
|||
color: #3C8DBC;
|
||||
}
|
||||
|
||||
.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a, .navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a, .navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a
|
||||
{
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
.nav-tabs-custom>.nav-tabs.pull-right>li>a.back-btn:hover {
|
||||
cursor: pointer;
|
||||
color: #72AFD2;
|
||||
|
|
|
@ -41,19 +41,19 @@
|
|||
color: #72AFD2;
|
||||
}
|
||||
|
||||
.skin-default .main-header .navbar {
|
||||
.skin-default .main-header .navbar > span {
|
||||
color: #eee;
|
||||
background: #222;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.skin-default .main-header .navbar .nav li a
|
||||
.skin-default .main-header .navbar .nav li a:hover,
|
||||
.skin-default .main-header .navbar .nav li a:active,
|
||||
.skin-default .main-header .navbar .nav li a:focus,
|
||||
.skin-default .main-header .navbar .nav .open a,
|
||||
.skin-default .main-header .navbar .nav .open a:hover,
|
||||
.skin-default .main-header .navbar .nav .open a:focus,
|
||||
.skin-default .main-header .navbar .nav > li > a
|
||||
.skin-default .main-header .navbar .nav > li > a:hover,
|
||||
.skin-default .main-header .navbar .nav > li > a:active,
|
||||
.skin-default .main-header .navbar .nav > li > a:focus,
|
||||
.skin-default .main-header .navbar .nav .open > a,
|
||||
.skin-default .main-header .navbar .nav .open > a:hover,
|
||||
.skin-default .main-header .navbar .nav .open > a:focus,
|
||||
.skin-default .main-header .navbar .nav .active a,
|
||||
.skin-default .main-header .navbar .nav .actual a,
|
||||
.skin-default .main-header .navbar .nav .menu-open a {
|
||||
|
|
|
@ -50,6 +50,56 @@ if (Auth::check()) {
|
|||
echo '
|
||||
<style>'.$custom_css.'</style>';
|
||||
}
|
||||
|
||||
// Hooks
|
||||
echo '
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$.ajax({
|
||||
url: globals.rootdir + "/ajax.php",
|
||||
type: "get",
|
||||
data: {
|
||||
op: "hooks",
|
||||
},
|
||||
success: function(data) {
|
||||
hooks = JSON.parse(data);
|
||||
|
||||
hooks.forEach(function(item, index){
|
||||
executeHook(item);
|
||||
});
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
function executeHook(hook){
|
||||
$("#hooks").append("<li id=\"hook-loader-" + hook.id + "\"><a href=\"#\">'.tr('Hook _NAME_ in esecuzione', [
|
||||
'_NAME_' => '\"" + hook.name + "\"',
|
||||
]).'</a></li>");
|
||||
|
||||
$.ajax({
|
||||
url: globals.rootdir + "/ajax.php",
|
||||
type: "get",
|
||||
data: {
|
||||
op: "hook",
|
||||
id: hook.id,
|
||||
},
|
||||
success: function(data) {
|
||||
result = JSON.parse(data);
|
||||
|
||||
$("#hook-loader-" + hook.id).remove();
|
||||
$("#hooks").append("<li><a href=\"#\"><i class=\"" + result.icon + "\"></i> " + result.message + "</a></li>");
|
||||
$("#hook-header").hide();
|
||||
|
||||
if(result.notify) {
|
||||
number = parseInt($("#hook-count").text());
|
||||
number = isNaN(number) ? 0 : number;
|
||||
|
||||
$("#hook-count").text(parseInt(number) + 1);
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
</script>';
|
||||
}
|
||||
|
||||
echo '
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
<?php
|
||||
|
||||
namespace Common;
|
||||
|
||||
abstract class HookManager
|
||||
{
|
||||
abstract public function manage();
|
||||
|
||||
abstract public function response($results);
|
||||
}
|
|
@ -196,7 +196,7 @@ if (Auth::check()) {
|
|||
<div id="tiny-loader" style="display:none;"></div>
|
||||
|
||||
<header class="main-header">
|
||||
<a href="https://www.openstamanager.com" class="logo" title="'.tr('Il gestionale open source per l\'assistenza tecnica e la fatturazione').'" target="_blank">
|
||||
<a href="https://www.openstamanager.com" class="logo" title="'.tr("Il gestionale open source per l'assistenza tecnica e la fatturazione").'" target="_blank">
|
||||
<!-- mini logo for sidebar mini 50x50 pixels -->
|
||||
<span class="logo-mini">'.tr('OSM').'</span>
|
||||
<!-- logo for regular state and mobile devices -->
|
||||
|
@ -219,25 +219,46 @@ if (Auth::check()) {
|
|||
</span>
|
||||
</div>
|
||||
|
||||
<!-- Navbar Right Menu -->
|
||||
<div class="navbar-custom-menu" id="right-menu">
|
||||
<ul class="nav navbar-nav">
|
||||
<li class="dropdown notifications-menu">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
|
||||
<i class="fa fa-bell-o"></i>
|
||||
<span class="label label-warning" id="hook-count"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li class="header" id="hook-header">'.tr('Caricamento in corso').'</li>
|
||||
<li><ul class="menu" id="hooks">
|
||||
|
||||
<div id="right-menu" class="pull-right">
|
||||
<button onclick="window.print()" class="btn btn-sm btn-info tip" title="'.tr('Stampa').'">
|
||||
</ul></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li><a href="#" onclick="window.print()" class="btn-info tip" title="'.tr('Stampa').'">
|
||||
<i class="fa fa-print"></i>
|
||||
</button>
|
||||
<a href="'.$rootdir.'/bug.php" class="btn btn-sm btn-github tip" title="'.tr('Segnalazione bug').'">
|
||||
</a></li>
|
||||
|
||||
<li><a href="'.$rootdir.'/bug.php" class="btn-github tip" title="'.tr('Segnalazione bug').'">
|
||||
<i class="fa fa-bug"></i>
|
||||
</a>
|
||||
<a href="'.$rootdir.'/log.php" class="btn btn-sm btn-github tip" title="'.tr('Log accessi').'">
|
||||
</a></li>
|
||||
|
||||
<li><a href="'.$rootdir.'/log.php" class="btn-github tip" title="'.tr('Log accessi').'">
|
||||
<i class="fa fa-book"></i>
|
||||
</a>
|
||||
<a href="'.$rootdir.'/info.php" class="btn btn-sm btn-github tip" title="'.tr('Informazioni').'">
|
||||
</a></li>
|
||||
|
||||
<li><a href="'.$rootdir.'/info.php" class="btn-github tip" title="'.tr('Informazioni').'">
|
||||
<i class="fa fa-info"></i>
|
||||
</a>
|
||||
<a href="'.$rootdir.'/index.php?op=logout" class="btn btn-sm btn-danger tip" title="'.tr('Esci').'">
|
||||
</a></li>
|
||||
|
||||
<li><a href="'.$rootdir.'/index.php?op=logout" class="btn-danger tip" title="'.tr('Esci').'">
|
||||
<i class="fa fa-power-off"></i>
|
||||
</a>
|
||||
</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
|
||||
<aside class="main-sidebar">
|
||||
|
|
|
@ -85,7 +85,7 @@ switch ($resource) {
|
|||
break;
|
||||
|
||||
case 'get_mansioni':
|
||||
$q = "SELECT DISTINCT mansione FROM an_referenti";
|
||||
$q = 'SELECT DISTINCT mansione FROM an_referenti';
|
||||
$rs = $dbo->fetchArray($q);
|
||||
$n = sizeof($rs);
|
||||
|
||||
|
|
|
@ -40,36 +40,36 @@ switch (post('op')) {
|
|||
|
||||
case 'update':
|
||||
if (post('id_record') !== null) {
|
||||
$fattura->data=post('data');
|
||||
$fattura->data_ricezione=post('data_ricezione');
|
||||
$fattura->numero_esterno=post('numero_esterno');
|
||||
$fattura->note=post('note');
|
||||
$fattura->note_aggiuntive=post('note_aggiuntive');
|
||||
$fattura->data = post('data');
|
||||
$fattura->data_ricezione = post('data_ricezione');
|
||||
$fattura->numero_esterno = post('numero_esterno');
|
||||
$fattura->note = post('note');
|
||||
$fattura->note_aggiuntive = post('note_aggiuntive');
|
||||
|
||||
$fattura->idstatodocumento=post('idstatodocumento');
|
||||
$fattura->idtipodocumento=post('idtipodocumento');
|
||||
$fattura->idanagrafica=post('idanagrafica');
|
||||
$fattura->idagente=post('idagente');
|
||||
$fattura->idpagamento=post('idpagamento');
|
||||
$fattura->idbanca=post('idbanca');
|
||||
$fattura->idcausalet=post('idcausalet');
|
||||
$fattura->idspedizione=post('idspedizione');
|
||||
$fattura->idporto=post('idporto');
|
||||
$fattura->idaspettobeni=post('idaspettobeni');
|
||||
$fattura->idvettore=post('idvettore');
|
||||
$fattura->idsede=post('idsede');
|
||||
$fattura->idconto=post('idconto');
|
||||
$fattura->split_payment=post('split_payment') ?: 0;
|
||||
$fattura->is_fattura_conto_terzi=post('is_fattura_conto_terzi') ?: 0;
|
||||
$fattura->n_colli=post('n_colli');
|
||||
$fattura->tipo_resa=post('tipo_resa');
|
||||
$fattura->idstatodocumento = post('idstatodocumento');
|
||||
$fattura->idtipodocumento = post('idtipodocumento');
|
||||
$fattura->idanagrafica = post('idanagrafica');
|
||||
$fattura->idagente = post('idagente');
|
||||
$fattura->idpagamento = post('idpagamento');
|
||||
$fattura->idbanca = post('idbanca');
|
||||
$fattura->idcausalet = post('idcausalet');
|
||||
$fattura->idspedizione = post('idspedizione');
|
||||
$fattura->idporto = post('idporto');
|
||||
$fattura->idaspettobeni = post('idaspettobeni');
|
||||
$fattura->idvettore = post('idvettore');
|
||||
$fattura->idsede = post('idsede');
|
||||
$fattura->idconto = post('idconto');
|
||||
$fattura->split_payment = post('split_payment') ?: 0;
|
||||
$fattura->is_fattura_conto_terzi = post('is_fattura_conto_terzi') ?: 0;
|
||||
$fattura->n_colli = post('n_colli');
|
||||
$fattura->tipo_resa = post('tipo_resa');
|
||||
|
||||
$fattura->rivalsainps=0;
|
||||
$fattura->ritenutaacconto=0;
|
||||
$fattura->iva_rivalsainps=0;
|
||||
$fattura->rivalsainps = 0;
|
||||
$fattura->ritenutaacconto = 0;
|
||||
$fattura->iva_rivalsainps = 0;
|
||||
|
||||
$fattura->codice_stato_fe=post('codice_stato_fe') ?: null;
|
||||
$fattura->id_ritenuta_contributi=post('id_ritenuta_contributi') ?: null;
|
||||
$fattura->codice_stato_fe = post('codice_stato_fe') ?: null;
|
||||
$fattura->id_ritenuta_contributi = post('id_ritenuta_contributi') ?: null;
|
||||
|
||||
if ($dir == 'uscita') {
|
||||
$fattura->numero = post('numero');
|
||||
|
@ -78,11 +78,11 @@ switch (post('op')) {
|
|||
$fattura->idritenutaacconto = post('id_ritenuta_acconto');
|
||||
}
|
||||
|
||||
$fattura->addebita_bollo=post('addebita_bollo');
|
||||
$fattura->addebita_bollo = post('addebita_bollo');
|
||||
$bollo_automatico = post('bollo_automatico');
|
||||
if (empty($bollo_automatico)){
|
||||
if (empty($bollo_automatico)) {
|
||||
$fattura->bollo = post('bollo');
|
||||
}else{
|
||||
} else {
|
||||
$fattura->bollo = null;
|
||||
}
|
||||
|
||||
|
|
|
@ -711,13 +711,11 @@ function rimuovi_riga_fattura($id_documento, $id_riga, $dir)
|
|||
//rimetto a magazzino gli articoli collegati al preventivo
|
||||
$rsa = $dbo->fetchArray('SELECT id, idarticolo, qta FROM co_righe_preventivi WHERE idpreventivo = '.prepare($riga['idpreventivo']));
|
||||
for ($i = 0; $i < sizeof($rsa); ++$i) {
|
||||
|
||||
if ($riga['is_preventivo']){
|
||||
if ($riga['is_preventivo']) {
|
||||
if (!empty($rsa[$i]['idarticolo'])) {
|
||||
add_movimento_magazzino($rsa[$i]['idarticolo'], $rsa[$i]['qta'], ['iddocumento' => $id_documento]);
|
||||
}
|
||||
}else{
|
||||
|
||||
} else {
|
||||
$qta_evasa = $rsa[$i]['qta_evasa'] + $riga['qta'];
|
||||
// Ripristino le quantità da evadere nel preventivo
|
||||
$dbo->update('co_righe_preventivi',
|
||||
|
@ -728,7 +726,6 @@ function rimuovi_riga_fattura($id_documento, $id_riga, $dir)
|
|||
'id' => $rsa[$i]['id'],
|
||||
]
|
||||
);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -738,13 +735,11 @@ function rimuovi_riga_fattura($id_documento, $id_riga, $dir)
|
|||
//rimetto a magazzino gli articoli collegati al contratto
|
||||
$rsa = $dbo->fetchArray('SELECT id, idarticolo, qta FROM co_righe_contratti WHERE idcontratto = '.prepare($riga['idcontratto']));
|
||||
for ($i = 0; $i < sizeof($rsa); ++$i) {
|
||||
|
||||
if ($riga['is_contratto']){
|
||||
if ($riga['is_contratto']) {
|
||||
if (!empty($rsa[$i]['idarticolo'])) {
|
||||
add_movimento_magazzino($rsa[$i]['idarticolo'], $rsa[$i]['qta'], ['iddocumento' => $id_documento]);
|
||||
}
|
||||
}else{
|
||||
|
||||
} else {
|
||||
$qta_evasa = $rsa[$i]['qta_evasa'] + $riga['qta'];
|
||||
// Ripristino le quantità da evadere nel contratto
|
||||
$dbo->update('co_righe_contratti',
|
||||
|
@ -755,17 +750,10 @@ function rimuovi_riga_fattura($id_documento, $id_riga, $dir)
|
|||
'id' => $rsa[$i]['id'],
|
||||
]
|
||||
);
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//Rimozione righe generiche
|
||||
if (empty($riga['idarticolo'])) {
|
||||
// TODO: possibile ambiguità tra righe molto simili tra loro
|
||||
|
|
|
@ -396,9 +396,10 @@ class Fattura extends Document
|
|||
public function save(array $options = [])
|
||||
{
|
||||
// Fix dei campi statici
|
||||
$bollo =$this->bollo;
|
||||
if( $bollo == null)
|
||||
$bollo = $this->bollo;
|
||||
if ($bollo == null) {
|
||||
$bollo = $this->calcolaMarcaDaBollo();
|
||||
}
|
||||
|
||||
$this->manageRigaMarcaDaBollo($bollo, $this->addebita_bollo);
|
||||
|
||||
|
@ -536,8 +537,8 @@ class Fattura extends Document
|
|||
return $marca_da_bollo;
|
||||
}
|
||||
|
||||
protected function manageRigaMarcaDaBollo($marca_da_bollo, $addebita_bollo){
|
||||
|
||||
protected function manageRigaMarcaDaBollo($marca_da_bollo, $addebita_bollo)
|
||||
{
|
||||
$riga = $this->rigaBollo;
|
||||
|
||||
// Rimozione riga bollo se nullo
|
||||
|
|
|
@ -3,35 +3,30 @@
|
|||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
switch (post('op')) {
|
||||
|
||||
case 'delete-bulk':
|
||||
$count_iva = $dbo->fetchNum('SELECT id FROM `co_iva` WHERE deleted_at IS NOT NULL');
|
||||
foreach ($id_records as $id) {
|
||||
|
||||
$res = $dbo->fetchNum('SELECT `co_righe_documenti`.`id` FROM `co_righe_documenti` WHERE `co_righe_documenti`.`idiva`='.prepare($id).
|
||||
' UNION SELECT `co_righe_preventivi`.`id` FROM `co_righe_preventivi` WHERE `co_righe_preventivi`.`idiva` = '.prepare($id).
|
||||
' UNION SELECT `co_righe_contratti`.`id` FROM `co_righe_contratti` WHERE `co_righe_contratti`.`idiva` = '.prepare($id).
|
||||
' UNION SELECT `dt_righe_ddt`.`id` FROM `dt_righe_ddt` WHERE `dt_righe_ddt`.`idiva` = '.prepare($id).
|
||||
' UNION SELECT `or_righe_ordini`.`id` FROM `or_righe_ordini` WHERE `or_righe_ordini`.`idiva` = '.prepare($id).
|
||||
' UNION SELECT `mg_articoli`.`id` FROM `mg_articoli` WHERE `mg_articoli`.`idiva_vendita` = '.prepare($id).
|
||||
' UNION SELECT `an_anagrafiche`.`idanagrafica` AS `id` FROM `an_anagrafiche` WHERE `an_anagrafiche`.`idiva_vendite` = '.prepare($id).' OR `an_anagrafiche`.`idiva_acquisti` = '.prepare($id) );
|
||||
|
||||
' UNION SELECT `an_anagrafiche`.`idanagrafica` AS `id` FROM `an_anagrafiche` WHERE `an_anagrafiche`.`idiva_vendite` = '.prepare($id).' OR `an_anagrafiche`.`idiva_acquisti` = '.prepare($id));
|
||||
|
||||
if (empty($res)) {
|
||||
$dbo->query('UPDATE `co_iva` SET deleted_at = NOW() WHERE id = '.prepare($id).Modules::getAdditionalsQuery($id_module));
|
||||
}
|
||||
|
||||
}
|
||||
$count_iva = $dbo->fetchNum('SELECT id FROM `co_iva` WHERE deleted_at IS NOT NULL') - $count_iva;
|
||||
|
||||
if ($count_iva>0){
|
||||
if ($count_iva > 0) {
|
||||
$msg = tr('_NUM_ tipologi_A_ iva eliminat_A_.', [
|
||||
'_NUM_' => $count_iva,
|
||||
'_A_' => ($count_iva==1) ? 'a' : 'e']);
|
||||
'_A_' => ($count_iva == 1) ? 'a' : 'e', ]);
|
||||
|
||||
flash()->info($msg);
|
||||
}
|
||||
else{
|
||||
} else {
|
||||
flash()->warning(tr('Nessuna tipologia iva eliminata!'));
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -101,8 +101,7 @@ $res = $dbo->fetchNum('SELECT `co_righe_documenti`.`id` FROM `co_righe_documenti
|
|||
' UNION SELECT `dt_righe_ddt`.`id` FROM `dt_righe_ddt` WHERE `dt_righe_ddt`.`idiva` = '.prepare($id_record).
|
||||
' UNION SELECT `or_righe_ordini`.`id` FROM `or_righe_ordini` WHERE `or_righe_ordini`.`idiva` = '.prepare($id_record).
|
||||
' UNION SELECT `mg_articoli`.`id` FROM `mg_articoli` WHERE `mg_articoli`.`idiva_vendita` = '.prepare($id_record).
|
||||
' UNION SELECT `an_anagrafiche`.`idanagrafica` AS `id` FROM `an_anagrafiche` WHERE `an_anagrafiche`.`idiva_vendite` = '.prepare($id_record).' OR `an_anagrafiche`.`idiva_acquisti` = '.prepare($id_record) );
|
||||
|
||||
' UNION SELECT `an_anagrafiche`.`idanagrafica` AS `id` FROM `an_anagrafiche` WHERE `an_anagrafiche`.`idiva_vendite` = '.prepare($id_record).' OR `an_anagrafiche`.`idiva_acquisti` = '.prepare($id_record));
|
||||
|
||||
if ($res) {
|
||||
echo '
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
<?php
|
||||
|
||||
namespace Plugins\ImportFE;
|
||||
|
||||
use Common\HookManager;
|
||||
|
||||
class InvoiceHook extends HookManager
|
||||
{
|
||||
public function manage()
|
||||
{
|
||||
$list = Interaction::listToImport();
|
||||
|
||||
return $list;
|
||||
}
|
||||
|
||||
public function response($results)
|
||||
{
|
||||
$count = count($results);
|
||||
|
||||
return [
|
||||
'icon' => 'fa fa-file-text-o ',
|
||||
'message' => tr('Ci sono _NUM_ fatture remote da importare', [
|
||||
'_NUM_' => $count,
|
||||
]),
|
||||
'notify' => !empty($count),
|
||||
];
|
||||
}
|
||||
}
|
|
@ -6,22 +6,6 @@ use Plugins\ReceiptFE\Interaction;
|
|||
use Plugins\ReceiptFE\Ricevuta;
|
||||
|
||||
switch (filter('op')) {
|
||||
case 'save':
|
||||
$content = file_get_contents($_FILES['blob']['tmp_name']);
|
||||
$file = FatturaElettronica::store($_FILES['blob']['name'], $content);
|
||||
|
||||
if (FatturaElettronica::isValid($file)) {
|
||||
echo json_encode([
|
||||
'filename' => $file,
|
||||
]);
|
||||
} else {
|
||||
echo json_encode([
|
||||
'already' => 1,
|
||||
]);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 'import':
|
||||
$list = Interaction::getReceiptList();
|
||||
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
<?php
|
||||
|
||||
namespace Plugins\ReceiptFE;
|
||||
|
||||
use Common\HookManager;
|
||||
|
||||
class ReceiptHook extends HookManager
|
||||
{
|
||||
public function manage()
|
||||
{
|
||||
$list = Interaction::getReceiptList();
|
||||
|
||||
return $list;
|
||||
}
|
||||
|
||||
public function response($results)
|
||||
{
|
||||
$count = count($results);
|
||||
|
||||
return [
|
||||
'icon' => 'fa fa-dot-circle-o',
|
||||
'message' => tr('Ci sono _NUM_ ricevute da importare', [
|
||||
'_NUM_' => $count,
|
||||
]),
|
||||
'notify' => !empty($count),
|
||||
];
|
||||
}
|
||||
}
|
|
@ -452,7 +452,7 @@ class Database extends Util\Singleton
|
|||
if (!empty($order)) {
|
||||
foreach ((array) $order as $key => $value) {
|
||||
$order = is_numeric($key) ? 'ASC' : strtoupper($value);
|
||||
$field = is_numeric($key) ? $value : key;
|
||||
$field = is_numeric($key) ? $value : $key;
|
||||
|
||||
if ($order == 'ASC') {
|
||||
$statement = $statement->orderBy($field);
|
||||
|
|
|
@ -0,0 +1,76 @@
|
|||
<?php
|
||||
|
||||
namespace Models;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Carbon\CarbonInterval;
|
||||
use Common\Model;
|
||||
use Traits\StoreTrait;
|
||||
|
||||
class Hook extends Model
|
||||
{
|
||||
use StoreTrait;
|
||||
|
||||
protected $table = 'zz_hooks';
|
||||
|
||||
protected $cached = null;
|
||||
protected $use_cached = null;
|
||||
|
||||
public function getIsCachedAttribute()
|
||||
{
|
||||
if (!isset($this->use_cached)) {
|
||||
$cache = $this->cache;
|
||||
|
||||
$use_cached = false;
|
||||
if (!empty($cache)) {
|
||||
$date = new Carbon($cache['created_at']);
|
||||
$interval = CarbonInterval::make($this->frequency);
|
||||
|
||||
$date = $date->add($interval);
|
||||
|
||||
$now = new Carbon();
|
||||
$use_cached = $date->greaterThan($now);
|
||||
}
|
||||
|
||||
$this->use_cached = $use_cached;
|
||||
}
|
||||
|
||||
return $this->use_cached;
|
||||
}
|
||||
|
||||
public function execute()
|
||||
{
|
||||
$class = $this->class;
|
||||
$hook = new $class();
|
||||
|
||||
if ($this->is_cached) {
|
||||
$results = $this->cache['results'];
|
||||
|
||||
$results = json_decode($results, true);
|
||||
} else {
|
||||
$results = $hook->manage();
|
||||
|
||||
$cache = json_encode($results);
|
||||
database()->insert('zz_hook_cache', [
|
||||
'hook_id' => $this->id,
|
||||
'results' => $cache,
|
||||
]);
|
||||
|
||||
$this->cached = null;
|
||||
$this->getCacheAttribute();
|
||||
}
|
||||
|
||||
return $hook->response($results);
|
||||
}
|
||||
|
||||
public function getCacheAttribute()
|
||||
{
|
||||
if (!isset($this->cached)) {
|
||||
$cache = database()->selectOne('zz_hook_cache', '*', ['hook_id' => $this->id], ['id' => 'DESC']);
|
||||
|
||||
$this->cached = $cache;
|
||||
}
|
||||
|
||||
return $this->cached;
|
||||
}
|
||||
}
|
|
@ -344,10 +344,29 @@ UPDATE `zz_views` SET `order` = 10 WHERE `id_module` IN (SELECT `id` FROM `zz_mo
|
|||
UPDATE `zz_views` SET `order` = 11 WHERE `id_module` IN (SELECT `id` FROM `zz_modules` WHERE `name` IN('Ddt di vendita', 'Ddt di acquisto')) AND `name` = 'icon_title_Stato';
|
||||
UPDATE `zz_views` SET `order` = 12 WHERE `id_module` IN (SELECT `id` FROM `zz_modules` WHERE `name` IN('Ddt di vendita', 'Ddt di acquisto')) AND `name` = 'dir';
|
||||
|
||||
|
||||
-- Aggiornamento widget "Fatturato" (iva esclusa)
|
||||
UPDATE `zz_widgets` SET `query` = 'SELECT CONCAT_WS('' '', REPLACE(REPLACE(REPLACE(FORMAT((SELECT SUM(subtotale-sconto-co_righe_documenti.ritenutaacconto)), 2), '','', ''#''), ''.'', '',''), ''#'', ''.''), ''€'') AS dato FROM (co_righe_documenti INNER JOIN co_documenti ON co_righe_documenti.iddocumento=co_documenti.id) INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE co_tipidocumento.dir=''entrata'' |segment| AND data >= ''|period_start|'' AND data <= ''|period_end|'' AND 1=1', `help` = 'Fatturato IVA esclusa.' WHERE `zz_widgets`.`name` = 'Fatturato';
|
||||
|
||||
|
||||
-- Aggiornamento widget "Acquisti" (iva esclusa)
|
||||
UPDATE `zz_widgets` SET `query` = 'SELECT CONCAT_WS('' '', REPLACE(REPLACE(REPLACE(FORMAT((SELECT SUM(subtotale-sconto-co_righe_documenti.ritenutaacconto)), 2), '','', ''#''), ''.'', '',''), ''#'', ''.''), ''€'') AS dato FROM (co_righe_documenti INNER JOIN co_documenti ON co_righe_documenti.iddocumento=co_documenti.id) INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE co_tipidocumento.dir=''uscita'' |segment| AND data >= ''|period_start|'' AND data <= ''|period_end|'' AND 1=1', `help` = 'Fatturato IVA esclusa.' WHERE `zz_widgets`.`name` = 'Acquisti';
|
||||
|
||||
-- Sistema Hook
|
||||
CREATE TABLE IF NOT EXISTS `zz_hooks` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(255) NOT NULL,
|
||||
`class` varchar(255) NOT NULL,
|
||||
`frequency` varchar(255) NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `zz_hook_cache` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`hook_id` int(11) NOT NULL,
|
||||
`results` TEXT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
FOREIGN KEY (`hook_id`) REFERENCES `zz_hooks`(`id`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
INSERT INTO `zz_hooks` (`id`, `name`, `class`, `frequency`) VALUES
|
||||
(NULL, 'Ricevute', 'Plugins\\ReceiptFE\\ReceiptHook', '1 day'),
|
||||
(NULL, 'Fatture', 'Plugins\\ImportFE\\InvoiceHook', '1 day');
|
||||
|
|
|
@ -92,6 +92,8 @@ return [
|
|||
'zz_groups',
|
||||
'zz_group_module',
|
||||
'zz_group_view',
|
||||
'zz_hooks',
|
||||
'zz_hook_cache',
|
||||
'zz_logs',
|
||||
'zz_modules',
|
||||
'zz_operations',
|
||||
|
|
Loading…
Reference in New Issue