diff --git a/include/common/importa.php b/include/common/importa.php index baa2b52e1..fb19f41df 100755 --- a/include/common/importa.php +++ b/include/common/importa.php @@ -180,7 +180,7 @@ if (!empty($options['create_document'])) { echo '
- {[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_segment", "required": 1, "ajax-source": "segmenti", "select-options": '.json_encode(['id_module' => $final_module['id'], 'is_sezionale' => 1]).', "value": "'.$id_segment.'" ]} + {[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_segment", "required": 1, "ajax-source": "segmenti", "select-options": '.json_encode(['id_module' => $final_module['id'], 'is_sezionale' => 1]).', "value": "'.$database->selectOne('co_tipidocumento', 'id_segment', ['id' => $idtipodocumento])['id_segment'].'" ]}
diff --git a/modules/interventi/actions.php b/modules/interventi/actions.php index c9fd1f36f..f5741494b 100644 --- a/modules/interventi/actions.php +++ b/modules/interventi/actions.php @@ -836,7 +836,7 @@ switch (post('op')) { } } } else { - flash()->error(tr('Errore durante il salvataggio della firma!').tr('La firma risulta vuota').'...'); + flash()->error(tr('Errore durante il salvataggio della firma!').' '.tr('La firma risulta vuota').'...'); } } else { flash()->error(tr("Non รจ stato possibile creare la cartella _DIRECTORY_ per salvare l'immagine della firma!", [ diff --git a/modules/interventi/ajax_tecnici.php b/modules/interventi/ajax_tecnici.php index 47c642152..f2d6a6e10 100755 --- a/modules/interventi/ajax_tecnici.php +++ b/modules/interventi/ajax_tecnici.php @@ -143,7 +143,7 @@ if (!empty($sessioni)) { // ORE echo ' - '.($ore <= 0 ? '' : '').' + '.(((\Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $sessione['orario_inizio'])->eq(\Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $sessione['orario_fine']))) || (\Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $sessione['orario_inizio'])->gt(\Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $sessione['orario_fine'])))) ? '' : '').' {[ "type": "number", "name": "ore_'.$sessione['id'].'", "required": 1, "value": "'.numberFormat($ore, 'qta').'", "disabled": "1" ]} diff --git a/package.json b/package.json index 0ba49217d..8360b9a98 100755 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "pwstrength-bootstrap": "^3.0.4", "select2": "^4.0.3", "select2-bootstrap-theme": "^0.1.0-beta.10", - "signature_pad": "^2.1.1", + "signature_pad": "^2.3.0", "smartwizard": "^4.2.2", "sweetalert2": "^6.11.4", "toastr": "^2.1.4", diff --git a/src/HTMLBuilder/Manager/FieldManager.php b/src/HTMLBuilder/Manager/FieldManager.php index 6fc9a2624..6d426bf61 100755 --- a/src/HTMLBuilder/Manager/FieldManager.php +++ b/src/HTMLBuilder/Manager/FieldManager.php @@ -125,4 +125,35 @@ class FieldManager implements ManagerInterface return $result; } + + + public function getValue($options, $name) { + $database = database(); + + $query = 'SELECT `zz_fields`.*'.(isset($options['id_record']) ? ', `zz_field_record`.`value`' : '').' FROM `zz_fields`'; + + if (isset($options['id_record'])) { + $query .= ' LEFT JOIN `zz_field_record` ON `zz_fields`.`id` = `zz_field_record`.`id_field` AND `zz_field_record`.`id_record` = '.prepare($options['id_record']); + } + + $query .= ' WHERE '; + + if (!empty($options['id_plugin'])) { + $query .= '`id_plugin` = '.prepare($options['id_plugin']); + } else { + $query .= '`id_module` = '.prepare($options['id_module']); + } + + if (isset($options['place']) && $options['place'] == 'add') { + $query .= ' AND `on_add` = 1'; + } + $query .= ' AND `zz_fields`.`name` = '.prepare($name); + + $query .= ' AND `top` = '.((isset($options['position']) && $options['position'] == 'top') ? 1 : 0).' ORDER BY `order`'; + + $results = $database->fetchArray($query); + + return $results[0]['value']; + } } + diff --git a/src/Prints.php b/src/Prints.php index 5b954649d..694680fe5 100755 --- a/src/Prints.php +++ b/src/Prints.php @@ -260,7 +260,7 @@ class Prints { $info = self::render($print, $id_record, $directory); - return self::getPDFLink($info['path']); + return self::getPDFLink($info['path'].'?'.rand()); } /** @@ -272,7 +272,7 @@ class Prints */ public static function getPDFLink($path) { - return base_path().'/assets/dist/pdfjs/web/viewer.html?file='.base_url().'/'.ltrim(str_replace(base_dir(), '', $path), '/'); + return base_path().'/assets/dist/pdfjs/web/viewer.html?file='.base_url().'/'.ltrim(str_replace(base_dir(), '', $path.'?'.rand()), '/'); } /** diff --git a/templates/ddt/header.php b/templates/ddt/header.php index 480f22ac7..7f258f824 100755 --- a/templates/ddt/header.php +++ b/templates/ddt/header.php @@ -90,6 +90,15 @@ if (!empty($destinazione)) { '; } +if (!empty($partenza)) { + echo ' + + +

'.tr('Partenza merce', [], ['upper' => true]).'

+ $c_partenza$ + + '; +} echo ' diff --git a/templates/ddt/init.php b/templates/ddt/init.php index e17eee071..e65058434 100755 --- a/templates/ddt/init.php +++ b/templates/ddt/init.php @@ -28,6 +28,7 @@ $d_totali = (int) setting('Cifre decimali per totali in stampa'); $id_cliente = $documento['idanagrafica']; $id_sede = $record['idsede_partenza']; +$id_azienda = setting('Azienda predefinita'); $pagamento = $dbo->fetchOne('SELECT * FROM co_pagamenti WHERE id = '.prepare($documento['idpagamento'])); $causale = $dbo->fetchOne('SELECT * FROM dt_causalet WHERE id = '.prepare($documento['idcausalet'])); @@ -82,6 +83,43 @@ if (!empty($documento['idsede_destinazione'])) { } } +// Leggo i dati della destinazione (se 0=sede legale, se!=altra sede da leggere da tabella an_sedi) +$partenza = ''; +if (!empty($documento['idsede_partenza'])) { + $rsd = $dbo->fetchArray('SELECT (SELECT codice FROM an_anagrafiche WHERE idanagrafica=an_sedi.idanagrafica) AS codice, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=an_sedi.idanagrafica) AS ragione_sociale, nomesede, indirizzo, indirizzo2, cap, citta, provincia, piva, codice_fiscale, id_nazione, telefono, cellulare FROM an_sedi WHERE idanagrafica='.prepare($id_azienda).' AND id='.prepare($documento['idsede_partenza'])); + + if (!empty($rsd[0]['nomesede'])) { + $partenza .= $rsd[0]['nomesede'].'
'; + } + if (!empty($rsd[0]['indirizzo'])) { + $partenza .= $rsd[0]['indirizzo'].'
'; + } + if (!empty($rsd[0]['indirizzo2'])) { + $partenza .= $rsd[0]['indirizzo2'].'
'; + } + if (!empty($rsd[0]['cap'])) { + $partenza .= $rsd[0]['cap'].' '; + } + if (!empty($rsd[0]['citta'])) { + $partenza .= $rsd[0]['citta']; + } + if (!empty($rsd[0]['provincia'])) { + $partenza .= ' ('.$rsd[0]['provincia'].')'; + } + if (!empty($rsd[0]['id_nazione'])) { + $nazione = $database->fetchOne('SELECT * FROM an_nazioni WHERE id = '.prepare($rsd[0]['id_nazione'])); + if ($nazione['iso2'] != 'IT') { + $partenza .= ' - '.$nazione['name'].'
'; + } + } + if (!empty($rsd[0]['telefono'])) { + $partenza .= 'Tel: '.$rsd[0]['telefono'].'
'; + } + if (!empty($rsd[0]['cellualre'])) { + $partenza .= 'Cell: '.$rsd[0]['cellulare']; + } +} + // Sostituzioni specifiche $custom = [ 'tipo_doc' => $tipo_doc, @@ -89,6 +127,7 @@ $custom = [ 'data' => Translator::dateToLocale($documento['data']), 'pagamento' => $pagamento['descrizione'], 'c_destinazione' => $destinazione, + 'c_partenza' => $partenza, 'aspettobeni' => $aspetto_beni['descrizione'], 'causalet' => $causale['descrizione'], 'porto' => $porto['descrizione'], diff --git a/update/2_4_54.sql b/update/2_4_54.sql index 3bc8ff650..48cc855f5 100644 --- a/update/2_4_54.sql +++ b/update/2_4_54.sql @@ -24,4 +24,32 @@ INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `slow`, ((SELECT `id` FROM `zz_modules` WHERE name='Accesso con OAuth'), 'Nome', 'nome', 1, 1, 0, 0, '', '', 1, 0, 0); INSERT INTO `zz_oauth2` (`nome`, `class`, `client_id`, `client_secret`, `config`, `state`, `access_token`, `refresh_token`, `after_configuration`, `is_login`, `enabled`) VALUES -('Microsoft', 'Modules\\Emails\\OAuth2\\MicrosoftLogin', '', '', '{\"tenant_id\":\"consumers\"}', '', NULL, NULL, '', 1, 0); \ No newline at end of file +('Microsoft', 'Modules\\Emails\\OAuth2\\MicrosoftLogin', '', '', '{\"tenant_id\":\"consumers\"}', '', NULL, NULL, '', 1, 0); + +-- Allineamento query Fatture di vendita +UPDATE `zz_modules` SET `options` = " +SELECT + |select| +FROM + `co_documenti` + LEFT JOIN (SELECT SUM(`totale`) AS `totale`, `iddocumento` FROM `co_movimenti` WHERE `totale` > 0 AND `primanota` = 1 GROUP BY `iddocumento`) AS `primanota` ON `primanota`.`iddocumento` = `co_documenti`.`id` + LEFT JOIN `an_anagrafiche` ON `co_documenti`.`idanagrafica` = `an_anagrafiche`.`idanagrafica` + LEFT JOIN `co_tipidocumento` ON `co_documenti`.`idtipodocumento` = `co_tipidocumento`.`id` + LEFT JOIN (SELECT `iddocumento`, SUM(`subtotale` - `sconto`) AS `totale_imponibile`, SUM((`subtotale` - `sconto` + `rivalsainps`) * `co_iva`.`percentuale` / 100) AS `iva` FROM `co_righe_documenti` LEFT JOIN `co_iva` ON `co_iva`.`id` = `co_righe_documenti`.`idiva` GROUP BY `iddocumento`) AS `righe` ON `co_documenti`.`id` = `righe`.`iddocumento` + LEFT JOIN (SELECT `co_banche`.`id`, CONCAT(`co_banche`.`nome`, ' - ', `co_banche`.`iban`) AS `descrizione` FROM `co_banche` GROUP BY `co_banche`.`id`) AS `banche` ON `banche`.`id` =`co_documenti`.`id_banca_azienda` + LEFT JOIN `co_statidocumento` ON `co_documenti`.`idstatodocumento` = `co_statidocumento`.`id` + LEFT JOIN `fe_stati_documento` ON `co_documenti`.`codice_stato_fe` = `fe_stati_documento`.`codice` + LEFT JOIN `co_ritenuta_contributi` ON `co_documenti`.`id_ritenuta_contributi` = `co_ritenuta_contributi`.`id` + LEFT JOIN (SELECT COUNT(id) as `emails`, `em_emails`.`id_record` FROM `em_emails` INNER JOIN `zz_operations` ON `zz_operations`.`id_email` = `em_emails`.`id` WHERE `id_module` IN(SELECT `id` FROM `zz_modules` WHERE name = 'Fatture di vendita') AND `zz_operations`.`op` = 'send-email' GROUP BY `em_emails`.`id_record`) AS `email` ON `email`.`id_record` = `co_documenti`.`id` + LEFT JOIN `co_pagamenti` ON `co_documenti`.`idpagamento` = `co_pagamenti`.`id` + LEFT JOIN (SELECT `numero_esterno`, `id_segment`, `idtipodocumento`, `data` FROM `co_documenti` WHERE `co_documenti`.`idtipodocumento` IN( SELECT `id` FROM `co_tipidocumento` WHERE `dir` = 'entrata') AND `numero_esterno` != '' GROUP BY `id_segment`, `numero_esterno`, `idtipodocumento` HAVING COUNT(`numero_esterno`) > 1 |date_period(`co_documenti`.`data`)| ) dup ON `co_documenti`.`numero_esterno` = `dup`.`numero_esterno` AND `dup`.`id_segment` = `co_documenti`.`id_segment` AND `dup`.`idtipodocumento` = `co_documenti`.`idtipodocumento` +WHERE + 1=1 AND `dir` = 'entrata' |segment(`co_documenti`.`id_segment`)| |date_period(`co_documenti`.`data`)| +HAVING + 2=2 +ORDER BY + `co_documenti`.`data` DESC, + CAST(`co_documenti`.`numero_esterno` AS UNSIGNED) DESC" WHERE `name` = 'Fatture di vendita'; + +UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '(righe.totale_imponibile + righe.iva + `co_documenti`.`rivalsainps`) * IF(co_tipidocumento.reversed, -1, 1)' WHERE `zz_modules`.`name` = 'Fatture di vendita' AND `zz_views`.`name` = 'Totale documento'; +UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '(righe.totale_imponibile + IF( co_documenti.split_payment = 0, round(righe.iva, 2), 0) + `co_documenti`.`rivalsainps` - `co_documenti`.`ritenutaacconto` - `co_documenti`.`sconto_finale` - IF(`co_documenti`.`id_ritenuta_contributi` != 0, (( `righe`.`totale_imponibile` * `co_ritenuta_contributi`.`percentuale_imponibile` / 100) / 100 * `co_ritenuta_contributi`.`percentuale`), 0)) *(1 - `co_documenti`.`sconto_finale_percentuale` / 100 ) * IF( co_tipidocumento.reversed, -1, 1)' WHERE `zz_modules`.`name` = 'Fatture di vendita' AND `zz_views`.`name` = 'Netto a pagare';