Merge remote-tracking branch 'devcode-it/master'

This commit is contained in:
Thomas Zilio 2020-02-23 14:43:42 +01:00
commit 2ee58b0c19
13 changed files with 66 additions and 14 deletions

View File

@ -214,6 +214,14 @@ gulp.task('password-strength', function () {
.pipe(gulp.dest(config.production + '/password-strength')); .pipe(gulp.dest(config.production + '/password-strength'));
}); });
gulp.task('hotkeys-js', function () {
gulp.src([
config.main.bowerDirectory + '/hotkeys-js/dist/hotkeys.min.js',
])
.pipe(flatten())
.pipe(gulp.dest(config.production + '/' + config.paths.js + '/hotkeys-js'));
});
gulp.task('chartjs', function () { gulp.task('chartjs', function () {
gulp.src([ gulp.src([
config.main.bowerDirectory + '/chart.js/dist/Chart.min.js', config.main.bowerDirectory + '/chart.js/dist/Chart.min.js',
@ -385,6 +393,7 @@ gulp.task('other', ['clean'], function () {
gulp.start('ckeditor'); gulp.start('ckeditor');
gulp.start('colorpicker'); gulp.start('colorpicker');
gulp.start('password-strength'); gulp.start('password-strength');
gulp.start('hotkeys-js');
gulp.start('i18n'); gulp.start('i18n');
gulp.start('pdfjs'); gulp.start('pdfjs');

View File

@ -9,7 +9,7 @@ if (Auth::check()) {
</aside><!-- /.content-wrapper --> </aside><!-- /.content-wrapper -->
<footer class="main-footer"> <footer class="main-footer">
<a class="hidden-xs" href="https://www.openstamanager.com" title="'.tr("Il gestionale open source per l'assistenza tecnica e la fatturazione").'." target="_blank"><strong>'.tr('OpenSTAManager').'</strong></a> <a class="hidden-xs" href="'.tr('https://www.openstamanager.com').'" title="'.tr("Il gestionale open source per l'assistenza tecnica e la fatturazione").'." target="_blank"><strong>'.tr('OpenSTAManager').'</strong></a>
<span class="pull-right hidden-xs"> <span class="pull-right hidden-xs">
<strong>'.tr('Versione').'</strong> '.$version.' <strong>'.tr('Versione').'</strong> '.$version.'
<small class="text-muted">('.(!empty($revision) ? $revision : tr('In sviluppo')).')</small> <small class="text-muted">('.(!empty($revision) ? $revision : tr('In sviluppo')).')</small>

View File

@ -246,6 +246,18 @@ if (Auth::check()) {
<script type="text/javascript" charset="utf-8" src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.36/pdfmake.min.js"></script> <script type="text/javascript" charset="utf-8" src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.36/pdfmake.min.js"></script>
<script type="text/javascript" charset="utf-8" src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.36/vfs_fonts.js"></script>'; <script type="text/javascript" charset="utf-8" src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.36/vfs_fonts.js"></script>';
} }
if (setting('Attiva scorciatoie da tastiera')) {
echo '<script type="text/javascript" charset="utf-8" src="'.App::getPaths()['js'].'/hotkeys-js/hotkeys.min.js"></script>';
echo '
<script>
hotkeys(\'ctrl+shift+c\', \'save\', function(event, handler){
event.preventDefault();
$( "button[data-toggle]" ).first().trigger( "click" );
});
hotkeys.setScope(\'save\');
</script>';
}
} }
$hide_sidebar = Auth::check() && setting('Nascondere la barra sinistra di default'); $hide_sidebar = Auth::check() && setting('Nascondere la barra sinistra di default');

View File

@ -268,7 +268,9 @@ switch (post('op')) {
// Se l'anagrafica è collegata ad un utente lo disabilito // Se l'anagrafica è collegata ad un utente lo disabilito
$dbo->query('UPDATE zz_users SET enabled = 0 WHERE idanagrafica = '.prepare($id_record)); $dbo->query('UPDATE zz_users SET enabled = 0 WHERE idanagrafica = '.prepare($id_record));
// Disabilito anche il token
$dbo->query('UPDATE zz_tokens SET enabled = 0 WHERE id_utente = '.prepare($id_utente));
flash()->info(tr('Anagrafica eliminata!')); flash()->info(tr('Anagrafica eliminata!'));
} }

View File

@ -226,7 +226,7 @@ switch ($resource) {
case 'sedi': case 'sedi':
if (isset($superselect['idanagrafica'])) { if (isset($superselect['idanagrafica'])) {
$query = "SELECT * FROM (SELECT '0' AS id, CONCAT_WS(' - ', 'Sede legale' , (SELECT CONCAT (citta, ' (', ragione_sociale,')') FROM an_anagrafiche |where|)) AS descrizione UNION SELECT id, CONCAT_WS(' - ', nomesede, citta) FROM an_sedi |where|) AS tab |filter| ORDER BY descrizione"; $query = "SELECT * FROM (SELECT '0' AS id, CONCAT_WS(' - ', 'Sede legale' , (SELECT CONCAT (citta, ' (', ragione_sociale,')') FROM an_anagrafiche |where|)) AS descrizione UNION SELECT id, CONCAT_WS(' - ', nomesede, citta) FROM an_sedi |where|) AS tab HAVING descrizione LIKE ".prepare('%'.$search.'%')." ORDER BY descrizione";
foreach ($elements as $element) { foreach ($elements as $element) {
$filter[] = 'id='.prepare($element); $filter[] = 'id='.prepare($element);
@ -235,7 +235,6 @@ switch ($resource) {
$where[] = 'idanagrafica='.prepare($superselect['idanagrafica']); $where[] = 'idanagrafica='.prepare($superselect['idanagrafica']);
if (!empty($search)) { if (!empty($search)) {
$search_fields[] = 'nomesede LIKE '.prepare('%'.$search.'%');
$search_fields[] = 'citta LIKE '.prepare('%'.$search.'%'); $search_fields[] = 'citta LIKE '.prepare('%'.$search.'%');
} }
} }

View File

@ -10,7 +10,7 @@ unset($_SESSION['superselect']['id_categoria']);
<div class="row"> <div class="row">
<div class="col-md-6"> <div class="col-md-6">
{[ "type": "text", "label": "<?php echo tr('Inserisci il codice:'); ?>", "name": "codice", "required": 0, "value": "<?php echo htmlentities(filter('codice')) ?: ''; ?>", "help": "<?php echo tr('Se non specificato, il codice verrà calcolato automaticamente'); ?>" ]} {[ "type": "text", "label": "<?php echo tr('Inserisci il codice:'); ?>", "name": "codice", "required": 0, "value": "<?php echo htmlentities(filter('codice')) ?: ''; ?>", "help": "<?php echo tr('Se non specificato, il codice verrà calcolato automaticamente'); ?>", "validation": "codice" ]}
</div> </div>
<div class="col-md-6"> <div class="col-md-6">

View File

@ -375,7 +375,7 @@ if (!empty($elementi)) {
//se non è un ddt è una fattura. //se non è un ddt è una fattura.
if (in_array($elemento['tipo_documento'], ['Preventivo'])) { if (in_array($elemento['tipo_documento'], ['Preventivo'])) {
$modulo = 'Preventivi'; $modulo = 'Preventivi';
} elseif (!in_array($elemento['tipo_documento'], ['Ddt di vendita', 'Ddt di acquisto'])) { } elseif (!in_array($elemento['tipo_documento'], ['Ddt di vendita', 'Ddt di acquisto', 'Ddt in entrata', 'Ddt in uscita'])) {
$modulo = ($elemento['dir'] == 'entrata') ? 'Fatture di vendita' : 'Fatture di acquisto'; $modulo = ($elemento['dir'] == 'entrata') ? 'Fatture di vendita' : 'Fatture di acquisto';
} else { } else {
$modulo = ($elemento['dir'] == 'entrata') ? 'Ddt di vendita' : 'Ddt di acquisto'; $modulo = ($elemento['dir'] == 'entrata') ? 'Ddt di vendita' : 'Ddt di acquisto';

View File

@ -103,10 +103,14 @@ switch (filter('op')) {
break; break;
// Elimina utente // Elimina utente + disattivazione token
case 'delete_user': case 'delete_user':
if ($dbo->query('DELETE FROM zz_users WHERE id='.prepare($id_utente))) { if ($dbo->query('DELETE FROM zz_users WHERE id='.prepare($id_utente))) {
flash()->info(tr('Utente eliminato!')); flash()->info(tr('Utente eliminato!'));
if ($dbo->query('UPDATE zz_tokens SET enabled = 0 WHERE id_utente = '.prepare($id_utente))) {
flash()->info(tr('Token disabilitato!'));
}
} }
break; break;

View File

@ -74,13 +74,16 @@ if (!empty($utenti)) {
<a href="" data-href="'.$structure->fileurl('user.php').'?id_module='.$id_module.'&id_record='.$id_record.'&id_utente='.$utente['id'].'" class="text-warning tip" data-toggle="modal" title="Aggiorna dati utente" data-msg="" data-backto="record-edit" data-title="Aggiorna dati utente"><i class="fa fa-2x fa-unlock-alt"></i></a>'; <a href="" data-href="'.$structure->fileurl('user.php').'?id_module='.$id_module.'&id_record='.$id_record.'&id_utente='.$utente['id'].'" class="text-warning tip" data-toggle="modal" title="Aggiorna dati utente" data-msg="" data-backto="record-edit" data-title="Aggiorna dati utente"><i class="fa fa-2x fa-unlock-alt"></i></a>';
// Disabilitazione token API, se diverso da id_utente #1 (admin) // Disabilitazione token API, se diverso da id_utente #1 (admin)
$token = $dbo->fetchOne('SELECT `enabled` FROM `zz_tokens` WHERE `id_utente` = '.prepare($utente['id'])); $token = $dbo->fetchOne('SELECT `enabled` FROM `zz_tokens` WHERE `id_utente` = '.prepare($utente['id']).'')['enabled'];
if ($utente['id'] == '1') { if ($utente['id'] == '1') {
echo ' echo '
<span title="'.tr("Non è possibile gestire l'accesso API per l'utente admin").'" class="text-muted tip"> <span title="'.tr("Non è possibile gestire l'accesso API per l'utente admin").'" class="text-muted tip">
<i class="fa fa-2x fa-key "></i> <i class="fa fa-2x fa-key "></i>
</span>'; </span>';
} elseif (!empty($token['enabled'])) { } elseif (!empty($token)) {
echo ' echo '
<a title="'.tr('Disabilita API').'" class="text-danger clickable tip ask" data-msg="" data-backto="record-edit" data-title="'.tr("Disabilitare l'accesso API per questo utente?").'" data-op="token_disable" data-id_utente="'.$utente['id'].'" data-button="'.tr('Disabilita').'"> <a title="'.tr('Disabilita API').'" class="text-danger clickable tip ask" data-msg="" data-backto="record-edit" data-title="'.tr("Disabilitare l'accesso API per questo utente?").'" data-op="token_disable" data-id_utente="'.$utente['id'].'" data-button="'.tr('Disabilita').'">
<i class="fa fa-2x fa-key"></i> <i class="fa fa-2x fa-key"></i>

View File

@ -19,6 +19,7 @@
"font-awesome": "^4.7.0", "font-awesome": "^4.7.0",
"fullcalendar": "^3.4.0", "fullcalendar": "^3.4.0",
"geocomplete": "^1.7.0", "geocomplete": "^1.7.0",
"hotkeys-js": "3.7.3",
"inputmask": "3.3.9", "inputmask": "3.3.9",
"jquery": "^3.2.1", "jquery": "^3.2.1",
"jquery-form": "^4.2.1", "jquery-form": "^4.2.1",
@ -81,6 +82,9 @@
"chart.js": { "chart.js": {
"ignore": true "ignore": true
}, },
"hotkeys-js": {
"ignore": true
},
"pwstrength-bootstrap": { "pwstrength-bootstrap": {
"ignore": true "ignore": true
}, },

View File

@ -589,6 +589,7 @@ class FatturaElettronica
} }
//Rimuovo eventuali idicazioni relative alla nazione //Rimuovo eventuali idicazioni relative alla nazione
$result['IdFiscaleIVA']['IdCodice'] = str_replace($anagrafica->nazione->iso2, '', $anagrafica['piva']); $result['IdFiscaleIVA']['IdCodice'] = str_replace($anagrafica->nazione->iso2, '', $anagrafica['piva']);
} }
// Codice fiscale // Codice fiscale
@ -596,8 +597,10 @@ class FatturaElettronica
if (!empty($anagrafica['codice_fiscale'])) { if (!empty($anagrafica['codice_fiscale'])) {
$result['CodiceFiscale'] = preg_replace('/\s+/', '', $anagrafica['codice_fiscale']); $result['CodiceFiscale'] = preg_replace('/\s+/', '', $anagrafica['codice_fiscale']);
//Rimuovo eventuali idicazioni relative alla nazione //$result['CodiceFiscale'] = str_replace($anagrafica->nazione->iso2, '', $result['CodiceFiscale']);
$result['CodiceFiscale'] = str_replace($anagrafica->nazione->iso2, '', $result['CodiceFiscale']);
//Rimuovo eventuali idicazioni relative all'iso2 della nazione, solo se la stringa inizia con quest'ultima.
$result['CodiceFiscale'] = preg_replace('/^' . preg_quote($anagrafica->nazione->iso2, '/') . '/', '', $anagrafica['codice_fiscale']);
} }
if (!empty($anagrafica['nome']) or !empty($anagrafica['cognome'])) { if (!empty($anagrafica['nome']) or !empty($anagrafica['cognome'])) {

View File

@ -248,9 +248,7 @@ class Prints
*/ */
public static function getPDFLink($path) public static function getPDFLink($path)
{ {
$base = (stripos($_SERVER['SERVER_PROTOCOL'], 'https') === 0 ? 'https://' : 'http://').$_SERVER['SERVER_NAME'].'/'.ROOTDIR.'/'; return ROOTDIR.'/assets/dist/pdfjs/web/viewer.html?file='.BASEURL.'/'.ltrim(str_replace(DOCROOT, '', $path), '/');
return ROOTDIR.'/assets/dist/pdfjs/web/viewer.html?file='.$base.ltrim(str_replace(DOCROOT, '', $path), '/');
} }
/** /**

View File

@ -150,8 +150,10 @@ UPDATE `co_promemoria_righe` SET `qta` = IF(`qta` = 0, 1, `qta`),
ALTER TABLE `co_promemoria_righe` RENAME TO `co_righe_promemoria`; ALTER TABLE `co_promemoria_righe` RENAME TO `co_righe_promemoria`;
SET FOREIGN_KEY_CHECKS=0;
DROP TABLE `mg_articoli_interventi`; DROP TABLE `mg_articoli_interventi`;
DROP TABLE `co_promemoria_articoli`; DROP TABLE `co_promemoria_articoli`;
SET FOREIGN_KEY_CHECKS=1;
ALTER TABLE `co_righe_promemoria` ADD `original_id` int(11), ADD `original_type` varchar(255); ALTER TABLE `co_righe_promemoria` ADD `original_id` int(11), ADD `original_type` varchar(255);
ALTER TABLE `in_righe_interventi` ADD `original_id` int(11), ADD `original_type` varchar(255); ALTER TABLE `in_righe_interventi` ADD `original_id` int(11), ADD `original_type` varchar(255);
@ -165,3 +167,19 @@ DROP TABLE `co_ordiniservizio_vociservizio`;
ALTER TABLE `co_ordiniservizio_pianificazionefatture` RENAME TO `co_fatturazione_contratti`; ALTER TABLE `co_ordiniservizio_pianificazionefatture` RENAME TO `co_fatturazione_contratti`;
UPDATE `zz_widgets` SET `query` = 'SELECT COUNT(id) AS dato FROM co_fatturazione_contratti WHERE idcontratto IN( SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE descrizione IN("Bozza", "Accettato", "In lavorazione", "In attesa di pagamento")) ) AND co_fatturazione_contratti.iddocumento=0' WHERE `name` = 'Rate contrattuali'; UPDATE `zz_widgets` SET `query` = 'SELECT COUNT(id) AS dato FROM co_fatturazione_contratti WHERE idcontratto IN( SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE descrizione IN("Bozza", "Accettato", "In lavorazione", "In attesa di pagamento")) ) AND co_fatturazione_contratti.iddocumento=0' WHERE `name` = 'Rate contrattuali';
-- Introduzione segmento scadenzario completo (su periodo temporale) il quale contempla tutte le scadenze (anche quelle chiuse)
INSERT INTO `zz_segments` (`id`, `id_module`, `name`, `clause`, `position`, `pattern`, `note`, `predefined`, `predefined_accredito`, `predefined_addebito`, `is_fiscale`) VALUES
(NULL, (SELECT `id` FROM `zz_modules` WHERE `name` = 'Scadenzario'), 'Scadenziaro completo', '(`co_scadenziario`.`scadenza` BETWEEN ''|period_start|'' AND ''|period_end|'' )', 'WHR', '####', '', 0, 0, 0, 0);
-- Attiva scrociatoie da tastiera
INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`, `help`) VALUES (NULL, 'Attiva scorciatoie da tastiera', '1', 'boolean', '1', 'Generali', NULL, NULL);
-- Correzione conteggi magazzino --
UPDATE `zz_widgets` SET `query` = 'SELECT CONCAT_WS(\" \", REPLACE(REPLACE(REPLACE(FORMAT(SUM(prezzo_acquisto*qta),2), \",\", \"#\"), \".\", \",\"), \"#\", \".\"), \"&euro;\") AS dato FROM mg_articoli WHERE qta>0 AND deleted_at IS NULL AND servizio=0 AND attivo=1' WHERE `zz_widgets`.`name` = 'Valore magazzino';
UPDATE `zz_widgets` SET `query` = 'SELECT CONCAT_WS(\" \", REPLACE(REPLACE(REPLACE(FORMAT(SUM(qta),2), \",\", \"#\"), \".\", \",\"), \"#\", \".\"), \"unit&agrave;\") AS dato FROM mg_articoli WHERE qta>0 AND deleted_at IS NULL AND servizio=0 AND attivo=1' WHERE `zz_widgets`.`name` = 'Articoli in magazzino';
-- Disattivazione totali prezzi articoli --
UPDATE `zz_views` SET `summable` = '0' WHERE `zz_views`.`id_module` = (SELECT `zz_modules`.`id` FROM `zz_modules` WHERE `zz_modules`.`name`='Articoli') AND `zz_views`.`name`='Prezzo di acquisto';
UPDATE `zz_views` SET `summable` = '0' WHERE `zz_views`.`id_module` = (SELECT `zz_modules`.`id` FROM `zz_modules` WHERE `zz_modules`.`name`='Articoli') AND `zz_views`.`name`='Prezzo di vendita';
UPDATE `zz_views` SET `summable` = '0' WHERE `zz_views`.`id_module` = (SELECT `zz_modules`.`id` FROM `zz_modules` WHERE `zz_modules`.`name`='Articoli') AND `zz_views`.`name`='Prezzo vendita ivato';