Estrazione ZIP per import FE
This commit is contained in:
parent
5bbada6ebf
commit
618e195c34
|
@ -44,6 +44,7 @@ Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://k
|
|||
- Supporto alla selezione della lingua durante la configurazione
|
||||
- Gestione dei permessi per gruppi all'interno del sistema di **Gestione documentale**
|
||||
- Supporto agli sconti combinati nel modulo **Listini**
|
||||
- Supporto al caricamento di archivi ZIP per le *Fatture Elettroniche* di acquisto da importare (solo estrazione)
|
||||
|
||||
### Modificato (Changed)
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ switch ($op) {
|
|||
if ($dbo->isConnected() && $dbo->isInstalled() && auth()->attempt($username, $password)) {
|
||||
$_SESSION['keep_alive'] = true;
|
||||
|
||||
// Rimozione log vecchi
|
||||
// Rimozione log vecchi
|
||||
//$dbo->query('DELETE FROM `zz_operations` WHERE DATE_ADD(`created_at`, INTERVAL 30*24*60*60 SECOND) <= NOW()');
|
||||
} else {
|
||||
$status = auth()->getCurrentStatus();
|
||||
|
|
|
@ -266,7 +266,6 @@ switch (post('op')) {
|
|||
SELECT `in_interventi`.`codice` AS `codice`, `in_interventi`.`id` AS `id`, 0 AS `numero`, 0 AS `numero_esterno`, `in_interventi`.`data_richiesta` AS `data`, 0 AS `tipo_documento`, 0 AS `dir` FROM `in_interventi` WHERE `in_interventi`.`id_contratto` = '.prepare($id_record).' ORDER BY `data` ');
|
||||
|
||||
if (empty($elementi)) {
|
||||
|
||||
try {
|
||||
$contratto->delete();
|
||||
|
||||
|
@ -278,7 +277,6 @@ switch (post('op')) {
|
|||
} catch (InvalidArgumentException $e) {
|
||||
flash()->error(tr('Sono stati utilizzati alcuni serial number nel documento: impossibile procedere!'));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
break;
|
||||
|
|
|
@ -2,13 +2,11 @@
|
|||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
|
||||
$rs_documento = $dbo->fetchArray('SELECT * FROM co_righe_contratti WHERE idcontratto='.prepare($id_record));
|
||||
|
||||
$disabled = $record['is_fatturabile'] && !empty($rs_documento);
|
||||
|
||||
$stati_fatturabili= $dbo->fetchOne('SELECT GROUP_CONCAT(`descrizione` SEPARATOR ", ") AS stati_abilitati FROM `co_staticontratti` WHERE `is_fatturabile` = 1')['stati_abilitati'];
|
||||
$disabled = $record['is_fatturabile'] && !empty($rs_documento);
|
||||
|
||||
$stati_fatturabili = $dbo->fetchOne('SELECT GROUP_CONCAT(`descrizione` SEPARATOR ", ") AS stati_abilitati FROM `co_staticontratti` WHERE `is_fatturabile` = 1')['stati_abilitati'];
|
||||
|
||||
/* permetto di fatturare il contratto solo se contiene righe e si trova in uno stato fatturabile */
|
||||
echo '
|
||||
|
@ -16,22 +14,19 @@ echo '
|
|||
<i class="fa fa-magic"></i> '.tr('Crea fattura').'
|
||||
</button>';
|
||||
|
||||
|
||||
$rinnova = !empty($record['data_accettazione']) && !empty($record['data_conclusione']) && $record['data_accettazione'] != '0000-00-00' && $record['data_conclusione'] != '0000-00-00' && $record['is_pianificabile'] && $record['rinnovabile'];
|
||||
|
||||
$stati_pianificabili = $dbo->fetchOne('SELECT GROUP_CONCAT(`descrizione` SEPARATOR ", ") AS stati_pianificabili FROM `co_staticontratti` WHERE `is_pianificabile` = 1')['stati_pianificabili'];
|
||||
|
||||
echo '
|
||||
<button type="button" class="btn btn-warning ask '.($rinnova ? '' : 'disabled tip').'" data-backto="record-edit" data-op="renew" data-msg="'.tr('Rinnovare questo contratto?').'" data-button="'.tr('Rinnova').'" data-class="btn btn-lg btn-warning" '.($rinnova ? '' : 'disabled').' title="'.( ($rinnova) ? '' : tr('Il contratto è rinnovabile se sono definite le date di accettazione e conclusione e si trova in uno stato di questi stati: '.$stati_pianificabili)).'">
|
||||
<button type="button" class="btn btn-warning ask '.($rinnova ? '' : 'disabled tip').'" data-backto="record-edit" data-op="renew" data-msg="'.tr('Rinnovare questo contratto?').'" data-button="'.tr('Rinnova').'" data-class="btn btn-lg btn-warning" '.($rinnova ? '' : 'disabled').' title="'.(($rinnova) ? '' : tr('Il contratto è rinnovabile se sono definite le date di accettazione e conclusione e si trova in uno stato di questi stati: '.$stati_pianificabili)).'">
|
||||
<i class="fa fa-refresh"></i> '.tr('Rinnova').'...
|
||||
</button>';
|
||||
|
||||
|
||||
// Duplica contratto
|
||||
echo'
|
||||
<button type="button" class="btn btn-primary" onclick="if( confirm(\''.tr('Duplicare questo contratto?').'\') ){ $(\'#copia-contratto\').submit(); }"> <i class="fa fa-copy"></i> '.tr('Duplica contratto').'</button>';
|
||||
|
||||
|
||||
echo '
|
||||
<form action="" method="post" id="copia-contratto">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
|
|
|
@ -105,7 +105,7 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
|
|||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "number", "label": "<?php echo tr('Ore rimanenti rinnovo'); ?>", "name": "ore_preavviso_rinnovo", "decimals": "0", "value": "$ore_preavviso_rinnovo$", "icon-after": "ore", "disabled": <?php echo $record['rinnovabile'] ? 0 : 1; ?>, "help": "<?php echo tr("Ore residue nel contratto prima di visualizzare una avviso per un eventuale rinnovo anticipato."); ?>" ]}
|
||||
{[ "type": "number", "label": "<?php echo tr('Ore rimanenti rinnovo'); ?>", "name": "ore_preavviso_rinnovo", "decimals": "0", "value": "$ore_preavviso_rinnovo$", "icon-after": "ore", "disabled": <?php echo $record['rinnovabile'] ? 0 : 1; ?>, "help": "<?php echo tr('Ore residue nel contratto prima di visualizzare una avviso per un eventuale rinnovo anticipato.'); ?>" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -391,7 +391,6 @@ $elementi = $dbo->fetchArray('SELECT 0 AS `codice`, `co_documenti`.`id` AS `id`,
|
|||
UNION
|
||||
SELECT `in_interventi`.`codice` AS `codice`, `in_interventi`.`id` AS `id`, 0 AS `numero`, 0 AS `numero_esterno`, `in_interventi`.`data_richiesta` AS `data`, 0 AS `tipo_documento`, 0 AS `dir` FROM `in_interventi` WHERE `in_interventi`.`id_contratto` = '.prepare($id_record).' ORDER BY `data` ');
|
||||
|
||||
|
||||
if (!empty($elementi)) {
|
||||
echo '
|
||||
<div class="box box-warning collapsable collapsed-box">
|
||||
|
@ -408,8 +407,7 @@ if (!empty($elementi)) {
|
|||
|
||||
// Elenco attività o contratti collegati
|
||||
foreach ($elementi as $riga) {
|
||||
if (!empty($riga['dir'])){
|
||||
|
||||
if (!empty($riga['dir'])) {
|
||||
$descrizione = tr('_DOC_ num. _NUM_ del _DATE_', [
|
||||
'_DOC_' => $riga['tipo_documento'],
|
||||
'_NUM_' => !empty($riga['numero_esterno']) ? $riga['numero_esterno'] : $riga['numero'],
|
||||
|
@ -421,11 +419,9 @@ if (!empty($elementi)) {
|
|||
|
||||
echo '
|
||||
<li>'.Modules::link($modulo, $id, $descrizione).'</li>';
|
||||
|
||||
}else{
|
||||
|
||||
} else {
|
||||
$descrizione = tr('Intervento num. _NUM_ del _DATE_', [
|
||||
'_NUM_' => $riga['codice'],
|
||||
'_NUM_' => $riga['codice'],
|
||||
'_DATE_' => Translator::dateToLocale($riga['data']),
|
||||
]);
|
||||
|
||||
|
@ -434,9 +430,7 @@ if (!empty($elementi)) {
|
|||
|
||||
echo '
|
||||
<li>'.Modules::link($modulo, $id, $descrizione).'</li>';
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
echo '
|
||||
|
@ -450,16 +444,13 @@ if (!empty($elementi)) {
|
|||
<div class="alert alert-error">
|
||||
'.tr('Eliminando questo documento si potrebbero verificare problemi nelle altre sezioni del gestionale').'.
|
||||
</div>';
|
||||
|
||||
}else{
|
||||
|
||||
?>
|
||||
} else {
|
||||
?>
|
||||
|
||||
<a class="btn btn-danger ask" data-backto="record-list">
|
||||
<i class="fa fa-trash"></i> <?php echo tr('Elimina'); ?>
|
||||
</a>
|
||||
|
||||
<?php
|
||||
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
|
@ -54,7 +54,7 @@ switch (post('op')) {
|
|||
|
||||
if ($dir == 'entrata') {
|
||||
$fattura->data_registrazione = post('data');
|
||||
}else{
|
||||
} else {
|
||||
$fattura->data_registrazione = post('data_registrazione');
|
||||
}
|
||||
|
||||
|
|
|
@ -146,8 +146,8 @@ if (empty($record['is_fiscale'])) {
|
|||
|
||||
?>
|
||||
<?php if ($dir == 'entrata') {
|
||||
$readonly = '"readonly":1,';
|
||||
}
|
||||
$readonly = '"readonly":1,';
|
||||
}
|
||||
?>
|
||||
|
||||
<div class="col-md-2">
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
use Modules\Fatture\Fattura;
|
||||
use Modules\Anagrafiche\Anagrafica;
|
||||
use Modules\Fatture\Fattura;
|
||||
|
||||
$module = Modules::get('Prima nota');
|
||||
|
||||
|
@ -92,9 +92,9 @@ foreach ($id_documenti as $id_documento) {
|
|||
continue;
|
||||
}
|
||||
|
||||
if($fattura->idanagrafica!=$idanagrafica_mov && $idanagrafica_mov!=''){
|
||||
if ($fattura->idanagrafica != $idanagrafica_mov && $idanagrafica_mov != '') {
|
||||
$idanagrafica_mov = 0;
|
||||
}else{
|
||||
} else {
|
||||
$idanagrafica_mov = $fattura->idanagrafica;
|
||||
}
|
||||
|
||||
|
@ -176,11 +176,11 @@ $righe = array_merge($righe, $riga_documento);
|
|||
$numero_scadenze = count($id_scadenze);
|
||||
$numero_documenti = count($id_documenti);
|
||||
if ($numero_documenti + $numero_scadenze > 1) {
|
||||
if($idanagrafica_mov!=0){
|
||||
if ($idanagrafica_mov != 0) {
|
||||
$an = Anagrafica::find($idanagrafica_mov);
|
||||
|
||||
$descrizione = 'Pag. fatture '.$an->ragione_sociale.' num. '.implode(', ', $numeri);
|
||||
}else{
|
||||
} else {
|
||||
$descrizione = 'Pag. fatture num. '.implode(', ', $numeri);
|
||||
}
|
||||
} elseif ($numero_documenti == 1) {
|
||||
|
|
|
@ -57,8 +57,6 @@ if (!empty($contratti)) {
|
|||
</div>';
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (!empty($record['can_delete'])) {
|
||||
echo '
|
||||
<a class="btn btn-danger ask" data-backto="record-list">
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
<?php
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
|
||||
if ($record['can_delete']) {
|
||||
$attr = '';
|
||||
} else {
|
||||
|
@ -58,7 +57,6 @@ if (!empty($preventivi)) {
|
|||
</div>';
|
||||
}
|
||||
|
||||
|
||||
if (!empty($record['can_delete'])) {
|
||||
echo '
|
||||
<a class="btn btn-danger ask" data-backto="record-list">
|
||||
|
|
|
@ -66,10 +66,7 @@ switch (post('op')) {
|
|||
SELECT `co_contratti_tipiintervento`.`idtipointervento` FROM `co_contratti_tipiintervento` WHERE `co_contratti_tipiintervento`.`idtipointervento` = '.prepare($id_record).'
|
||||
ORDER BY `idtipointervento`');
|
||||
|
||||
|
||||
|
||||
if (empty($elementi)) {
|
||||
|
||||
$query = 'DELETE FROM in_tipiintervento WHERE idtipointervento='.prepare($id_record);
|
||||
$dbo->query($query);
|
||||
|
||||
|
@ -79,9 +76,9 @@ switch (post('op')) {
|
|||
|
||||
flash()->info(tr('Tipo di intervento eliminato!'));
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
// no break
|
||||
case 'import':
|
||||
$values = [
|
||||
'costo_ore' => $record['costo_orario'],
|
||||
|
|
|
@ -85,7 +85,6 @@ UNION
|
|||
SELECT `co_contratti_tipiintervento`.`idtipointervento` FROM `co_contratti_tipiintervento` WHERE `co_contratti_tipiintervento`.`idtipointervento` = '.prepare($id_record).'
|
||||
ORDER BY `idtipointervento`');
|
||||
|
||||
|
||||
if (!empty($elementi)) {
|
||||
echo '
|
||||
<div class="alert alert-danger">
|
||||
|
|
|
@ -84,8 +84,8 @@ if (!empty($options) && $options != 'custom' && $options != 'menu') {
|
|||
echo '
|
||||
<div class="nav-tabs-custom">
|
||||
<ul class="nav nav-tabs nav-justified">
|
||||
<li class="active"><a data-toggle="tab" href="#fields">'.tr('Campi').' <span class="badge">'.( $dbo->fetchNum('SELECT * FROM zz_views WHERE id_module='.prepare($record['id']).' ORDER BY `order` ASC')).'</a></li>
|
||||
<li><a data-toggle="tab" href="#filters">'.tr('Filtri').' <span class="badge">'.( $dbo->fetchNum('SELECT * FROM zz_group_module WHERE idmodule='.prepare($record['id']).' ORDER BY `id` ASC')).'</span></a></li>
|
||||
<li class="active"><a data-toggle="tab" href="#fields">'.tr('Campi').' <span class="badge">'.($dbo->fetchNum('SELECT * FROM zz_views WHERE id_module='.prepare($record['id']).' ORDER BY `order` ASC')).'</a></li>
|
||||
<li><a data-toggle="tab" href="#filters">'.tr('Filtri').' <span class="badge">'.($dbo->fetchNum('SELECT * FROM zz_group_module WHERE idmodule='.prepare($record['id']).' ORDER BY `id` ASC')).'</span></a></li>
|
||||
</ul>
|
||||
|
||||
<div class="tab-content">
|
||||
|
|
|
@ -10,13 +10,11 @@ echo '
|
|||
$num = 0;
|
||||
$additionals = $dbo->fetchArray('SELECT * FROM zz_group_module WHERE idmodule='.prepare($record['id']).' ORDER BY `id` ASC');
|
||||
|
||||
if (!empty($additionals)){
|
||||
if (!empty($additionals)) {
|
||||
foreach ($additionals as $num => $additional) {
|
||||
$editable = !($additional['default'] && $enable_readonly);
|
||||
|
||||
|
||||
foreach ($additionals as $num => $additional) {
|
||||
$editable = !($additional['default'] && $enable_readonly);
|
||||
|
||||
echo '
|
||||
echo '
|
||||
<div class="box box-'.($additional['enabled'] ? 'success' : 'danger').'">
|
||||
<div class="box-header with-border">
|
||||
<h3 class="box-title">
|
||||
|
@ -25,28 +23,28 @@ foreach ($additionals as $num => $additional) {
|
|||
]).'</a>
|
||||
</h3>';
|
||||
|
||||
if ($editable) {
|
||||
echo '
|
||||
if ($editable) {
|
||||
echo '
|
||||
<a class="btn btn-danger ask pull-right" data-backto="record-edit" data-op="delete_filter" data-id="'.$additional['id'].'">
|
||||
<i class="fa fa-trash"></i> '.tr('Elimina').'
|
||||
</a>';
|
||||
}
|
||||
}
|
||||
|
||||
echo '
|
||||
echo '
|
||||
<a class="btn btn-warning ask pull-right" data-backto="record-edit" data-msg="'.($additional['enabled'] ? tr('Disabilitare questo elemento?') : tr('Abilitare questo elemento?')).'" data-op="change" data-id="'.$additional['id'].'" data-class="btn btn-lg btn-warning" data-button="'.($additional['enabled'] ? tr('Disabilita') : tr('Abilita')).'">
|
||||
<i class="fa fa-eye-slash"></i> '.($additional['enabled'] ? tr('Disabilita') : tr('Abilita')).'
|
||||
</a>';
|
||||
echo '
|
||||
echo '
|
||||
</div>
|
||||
<div id="additional-'.$additional['id'].'" class="box-body collapse">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "textarea", "label": "'.tr('Query').'", "name": "query['.$num.']", "value": "'.prepareToField($additional['clause']).'"';
|
||||
if (!$editable) {
|
||||
echo ', "readonly": '.intval(!$editable).'';
|
||||
}
|
||||
echo ' ]}
|
||||
if (!$editable) {
|
||||
echo ', "readonly": '.intval(!$editable).'';
|
||||
}
|
||||
echo ' ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -68,15 +66,13 @@ foreach ($additionals as $num => $additional) {
|
|||
|
||||
</div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
}else{
|
||||
}
|
||||
} else {
|
||||
echo '<br>
|
||||
<div class="alert alert-info">
|
||||
<i class="fa fa-info-circle"></i>
|
||||
<b>'.tr('Informazione:').'</b> '.tr('Nessun filtro per questo modulo').'.
|
||||
</div>';
|
||||
|
||||
}
|
||||
|
||||
echo '
|
||||
|
|
|
@ -15,8 +15,24 @@ switch (filter('op')) {
|
|||
break;
|
||||
|
||||
case 'save':
|
||||
$content = file_get_contents($_FILES['blob']['tmp_name']);
|
||||
$file = FatturaElettronica::store($_FILES['blob']['name'], $content);
|
||||
$temp_name = $_FILES['blob']['tmp_name'];
|
||||
$name = $_FILES['blob']['name'];
|
||||
|
||||
if (ends_with($name, '.zip')) {
|
||||
$directory = FatturaElettronica::getImportDirectory();
|
||||
|
||||
Util\Zip::extract($temp_name, $directory);
|
||||
|
||||
// Redirect forzato per l'importazione
|
||||
echo json_encode([
|
||||
'id' => 1,
|
||||
]);
|
||||
exit();
|
||||
} else {
|
||||
$content = file_get_contents($temp_name);
|
||||
|
||||
$file = FatturaElettronica::store($_FILES['blob']['name'], $content);
|
||||
}
|
||||
|
||||
// no break
|
||||
case 'prepare':
|
||||
|
@ -106,10 +122,10 @@ switch (filter('op')) {
|
|||
$fattura_pa->delete();
|
||||
|
||||
//Aggiorno la tipologia di anagrafica fornitore
|
||||
$anagrafica = $dbo->fetchOne("SELECT idanagrafica FROM co_documenti WHERE co_documenti.id=".prepare($id_fattura));
|
||||
$anagrafica = $dbo->fetchOne('SELECT idanagrafica FROM co_documenti WHERE co_documenti.id='.prepare($id_fattura));
|
||||
$rs_t = $dbo->fetchOne("SELECT * FROM an_tipianagrafiche_anagrafiche WHERE idtipoanagrafica=(SELECT an_tipianagrafiche.idtipoanagrafica FROM an_tipianagrafiche WHERE an_tipianagrafiche.descrizione='Fornitore') AND idanagrafica=".prepare($anagrafica['idanagrafica']));
|
||||
|
||||
if( !$rs_t ){
|
||||
if (!$rs_t) {
|
||||
$dbo->query("INSERT INTO an_tipianagrafiche_anagrafiche (idtipoanagrafica, idanagrafica) VALUES ((SELECT an_tipianagrafiche.idtipoanagrafica FROM an_tipianagrafiche WHERE an_tipianagrafiche.descrizione='Fornitore'), ".prepare($anagrafica['idanagrafica']));
|
||||
}
|
||||
|
||||
|
|
|
@ -20,7 +20,10 @@ if (isset($id_record)) {
|
|||
$error = true;
|
||||
}
|
||||
|
||||
if(empty($record)){
|
||||
// Rimozione .p7m dal nome del file (causa eventuale estrazione da ZIP)
|
||||
$record['name'] = str_replace('.p7m', '', $record['name']);
|
||||
|
||||
if (empty($record)) {
|
||||
flash()->warning(tr('Nessuna fattura da importare!'));
|
||||
|
||||
redirect(ROOTDIR.'/controller.php?id_module='.$id_module);
|
||||
|
|
|
@ -7,11 +7,10 @@ use Plugins\ReceiptFE\Interaction;
|
|||
echo '
|
||||
<p>'.tr('Le ricevute delle Fatture Elettroniche permettono di individuare se una determinata fattura tramessa è stata accettata dal Sistema Di Interscambio').'.</p>';
|
||||
if (Interaction::isEnabled()) {
|
||||
echo '
|
||||
echo '
|
||||
<p>'.tr('Tramite il pulsante _BTN_ è possibile procedere al recupero delle ricevute, aggiornando automaticamente lo stato delle relative fatture e allegandole ad esse', [
|
||||
'_BTN_' => '<b>'.tr('Ricerca ricevute').'</b>',
|
||||
]).'.</p>';
|
||||
|
||||
}
|
||||
echo '
|
||||
<div class="box box-success">
|
||||
|
|
Loading…
Reference in New Issue