Merge remote-tracking branch 'devcode-it/master'
This commit is contained in:
commit
2ee58b0c19
|
@ -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');
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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');
|
||||||
|
|
|
@ -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!'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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.'%');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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">
|
||||||
|
|
|
@ -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';
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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
|
||||||
},
|
},
|
||||||
|
|
|
@ -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'])) {
|
||||||
|
|
|
@ -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), '/');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -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), \",\", \"#\"), \".\", \",\"), \"#\", \".\"), \"€\") 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à\") 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';
|
||||||
|
|
Loading…
Reference in New Issue