diff --git a/assets/src/js/functions/select.js b/assets/src/js/functions/select.js
index 2da53863d..67e542085 100755
--- a/assets/src/js/functions/select.js
+++ b/assets/src/js/functions/select.js
@@ -289,5 +289,27 @@ function initDynamicSelectInput(input) {
},
width: '100%'
});
+
+ // Rimozione delle option presenti nell'HTML per permettere l'aggiornamento dei dati via AJAX
+ // Rimozione per select multipli
+ if ($input.prop("multiple")) {
+ $input.on('select2:unselecting', function (e) {
+ let data = e.params ? e.params.data : null;
+ if (data) {
+ let option = $input.find('option[value="' + data.id + '"]');
+ option.remove();
+ }
+ });
+ }
+ // Rimozione per select singoli
+ else {
+ $input.on('select2:selecting', function (e) {
+ let data = $input.selectData();
+ if (data) {
+ let option = $input.find('option[value="' + data.id + '"]');
+ option.remove();
+ }
+ });
+ }
}
diff --git a/modules/anagrafiche/src/API/v1/Anagrafiche.php b/modules/anagrafiche/src/API/v1/Anagrafiche.php
index a24c8d631..894aefbfd 100755
--- a/modules/anagrafiche/src/API/v1/Anagrafiche.php
+++ b/modules/anagrafiche/src/API/v1/Anagrafiche.php
@@ -58,7 +58,6 @@ class Anagrafiche extends Resource implements RetrieveInterface, CreateInterface
'an_anagrafiche.deleted_at'
)->orderBy('an_anagrafiche.ragione_sociale');
- $filters = [];
if ($request['resource'] != 'anagrafiche') {
$type = 'Cliente';
diff --git a/modules/articoli/ajax/select.php b/modules/articoli/ajax/select.php
index 8c7fd0d8a..f0eea9041 100755
--- a/modules/articoli/ajax/select.php
+++ b/modules/articoli/ajax/select.php
@@ -148,6 +148,9 @@ switch ($resource) {
$data = AJAX::selectResults($query, $where, $filter, $search_fields, $limit, $custom);
$rs = $data['results'];
+ // Utilizzo dell'impostazione per disabilitare articoli con quantità <= 0
+ $permetti_movimenti_sotto_zero = setting('Permetti selezione articoli con quantità minore o uguale a zero in Documenti di Vendita') ? true : $superselect['permetti_movimento_a_zero'];
+
// IVA da impostazioni
foreach ($rs as $k => $r) {
// Lettura movimenti delle mie sedi
@@ -164,7 +167,7 @@ switch ($resource) {
$rs[$k] = array_merge($r, [
'text' => $r['codice'].' - '.$r['descrizione'].' '.(!$r['servizio'] ? '('.Translator::numberToLocale($qta).(!empty($r['um']) ? ' '.$r['um'] : '').')' : ''),
- 'disabled' => $r['qta'] <= 0 && !$superselect['permetti_movimento_a_zero'] && !$r['servizio'],
+ 'disabled' => $r['qta'] <= 0 && !$permetti_movimenti_sotto_zero && !$r['servizio'],
]);
}
@@ -256,14 +259,14 @@ switch ($resource) {
}
break;
-
+
case 'fornitori-articolo':
$query = 'SELECT an_anagrafiche.idanagrafica AS id, an_anagrafiche.ragione_sociale AS descrizione, (mg_prezzi_articoli.prezzo_unitario-(mg_prezzi_articoli.prezzo_unitario*mg_prezzi_articoli.sconto_percentuale)/100) AS prezzo_unitario FROM mg_prezzi_articoli LEFT JOIN an_anagrafiche ON mg_prezzi_articoli.id_anagrafica=an_anagrafiche.idanagrafica |where| ORDER BY an_anagrafiche.ragione_sociale';
foreach ($elements as $element) {
$filter[] = 'an_anagrafiche.idanagrafica='.prepare($element);
}
-
+
$where[] = 'dir="uscita"';
$where[] = 'minimo IS NULL';
$where[] = 'massimo IS NULL';
diff --git a/modules/articoli/edit.php b/modules/articoli/edit.php
index b4cbfdf31..176c01b05 100755
--- a/modules/articoli/edit.php
+++ b/modules/articoli/edit.php
@@ -175,7 +175,7 @@ include_once __DIR__.'/../../core.php';
- {[ "type": "select", "label": "", "name": "id_fornitore", "ajax-source": "fornitori-articolo", "select-options": $id_record]); ?>, "value":"$id_fornitore$", "help": "." ]}
+ {[ "type": "select", "label": "", "name": "id_fornitore", "ajax-source": "fornitori-articolo", "select-options": $id_record]); ?>, "value":"$id_fornitore$", "help": "." ]}
@@ -460,7 +460,7 @@ if (!empty($elementi)) {
\ No newline at end of file
+
diff --git a/modules/articoli/src/Import/CSV.php b/modules/articoli/src/Import/CSV.php
index 3407ae5ad..a6234e392 100644
--- a/modules/articoli/src/Import/CSV.php
+++ b/modules/articoli/src/Import/CSV.php
@@ -21,11 +21,11 @@ namespace Modules\Articoli\Import;
use Carbon\Carbon;
use Importer\CSVImporter;
+use Modules\Anagrafiche\Anagrafica;
use Modules\Anagrafiche\Sede;
use Modules\Articoli\Articolo;
use Modules\Articoli\Categoria;
use Modules\Iva\Aliquota;
-use Modules\Anagrafiche\Anagrafica;
use Plugins\DettagliArticolo\DettaglioPrezzo;
/**
diff --git a/modules/checklists/modutil.php b/modules/checklists/modutil.php
index cf6b9d4ec..e671b6460 100755
--- a/modules/checklists/modutil.php
+++ b/modules/checklists/modutil.php
@@ -28,14 +28,13 @@ function renderChecklist($check, $level = 0)
'.$check->content.'';
-
if (empty($check->user) || $check->user->id == $user->id) {
$result .= '
';
}
-
+
if ($level == 0) {
$result .= '
@@ -46,10 +45,10 @@ function renderChecklist($check, $level = 0)
$result .= '
'.(!empty($check->checked_at) ? tr('Verificato da _NAME_ il _DATE_', [
- '_NAME_' => $check->checkUser->username,
- '_DATE_' => timestampFormat($check->checked_at),
+ '_NAME_' => $check->checkUser->username,
+ '_DATE_' => timestampFormat($check->checked_at),
]) : '').'';
-
+
$result .= '
';
diff --git a/modules/fatture/bulk.php b/modules/fatture/bulk.php
index fbdf919bb..bbfe9e531 100755
--- a/modules/fatture/bulk.php
+++ b/modules/fatture/bulk.php
@@ -432,7 +432,7 @@ switch (post('op')) {
case 'export-csv':
$file = temp_file().'.csv';
-
+
$exporter = new CSV($file);
// Esportazione dei record selezionati
diff --git a/modules/fatture/edit.php b/modules/fatture/edit.php
index 9daccd223..1431b5445 100755
--- a/modules/fatture/edit.php
+++ b/modules/fatture/edit.php
@@ -18,8 +18,8 @@
*/
use Modules\Anagrafiche\Anagrafica;
-use Modules\Iva\Aliquota;
use Modules\Fatture\Gestori\Bollo;
+use Modules\Iva\Aliquota;
include_once __DIR__.'/../../core.php';
@@ -358,7 +358,7 @@ elseif ($record['stato'] == 'Bozza') {
}
echo '
';
- if($dir == 'entrata'){
+ if ($dir == 'entrata') {
echo '
@@ -375,8 +375,8 @@ elseif ($record['stato'] == 'Bozza') {
{[ "type": "number", "label": "'.tr('Importo marca da bollo').'", "name": "bollo", "value": "$bollo$"]}
';
- $bollo = new Bollo($fattura);
- }
+ $bollo = new Bollo($fattura);
+ }
?>
@@ -888,12 +888,12 @@ function cambiaStato() {
}
}
}';
-if($dir=='entrata'){
+if ($dir == 'entrata') {
echo '
function bolloAutomatico() {
let bollo_automatico = input("bollo_automatico");
let addebita_bollo = input("addebita_bollo");
- let has_bollo ='.($bollo->getBollo()>0 ? "true" : "false").';
+ let has_bollo ='.($bollo->getBollo() > 0 ? 'true' : 'false').';
if(bollo_automatico.get()==0){
$(".bollo").show();
input("bollo").enable();
@@ -902,7 +902,7 @@ if($dir=='entrata'){
} else {
$(".bollo").show();
input("bollo").disable();
- $("#bollo").val('.setting("Importo marca da bollo").');
+ $("#bollo").val('.setting('Importo marca da bollo').');
}
}
$(document).ready(function() {
diff --git a/plugins/dettagli_articolo/actions.php b/plugins/dettagli_articolo/actions.php
index 55a997820..0981c58cd 100755
--- a/plugins/dettagli_articolo/actions.php
+++ b/plugins/dettagli_articolo/actions.php
@@ -77,9 +77,9 @@ switch (filter('op')) {
$dettaglio_predefinito->sconto_percentuale = $sconto;
$dettaglio_predefinito->setPrezzoUnitario($prezzo_unitario);
$dettaglio_predefinito->save();
- if($articolo->id_fornitore==$anagrafica->idanagrafica && $direzione=='uscita'){
- $prezzo_unitario = $prezzo_unitario-($prezzo_unitario*$sconto/100);
- $articolo->prezzo_acquisto=$prezzo_unitario;
+ if ($articolo->id_fornitore == $anagrafica->idanagrafica && $direzione == 'uscita') {
+ $prezzo_unitario = $prezzo_unitario - ($prezzo_unitario * $sconto / 100);
+ $articolo->prezzo_acquisto = $prezzo_unitario;
$articolo->save();
}
}
diff --git a/plugins/dettagli_articolo/dettaglio_prezzi.php b/plugins/dettagli_articolo/dettaglio_prezzi.php
index 1c1aff5f7..96bc158f5 100644
--- a/plugins/dettagli_articolo/dettaglio_prezzi.php
+++ b/plugins/dettagli_articolo/dettaglio_prezzi.php
@@ -34,9 +34,9 @@ $direzione = get('direzione') == 'uscita' ? 'uscita' : 'entrata';
$articolo = Articolo::find($id_articolo);
$anagrafica = Anagrafica::find($id_anagrafica);
-if($direzione=='entrata'){
+if ($direzione == 'entrata') {
$prezzo_predefinito = $prezzi_ivati ? $articolo->prezzo_vendita_ivato : $articolo->prezzo_vendita;
-} else{
+} else {
$prezzo_predefinito = $articolo->prezzo_acquisto;
}
// Individuazione dei prezzi registrati
@@ -45,23 +45,23 @@ $dettagli = DettaglioPrezzo::dettagli($id_articolo, $id_anagrafica, $direzione)
$dettaglio_predefinito = DettaglioPrezzo::dettaglioPredefinito($id_articolo, $id_anagrafica, $direzione)
->first();
-if($articolo->id_fornitore==$anagrafica->idanagrafica){
- $color='success';
- $icon='check';
- $text= tr('Sì');
+if ($articolo->id_fornitore == $anagrafica->idanagrafica) {
+ $color = 'success';
+ $icon = 'check';
+ $text = tr('Sì');
} else {
- $color='danger';
- $icon='times';
- $text= tr('No');
+ $color = 'danger';
+ $icon = 'times';
+ $text = tr('No');
}
echo '
- '.($direzione=='entrata' ? tr('Cliente') : tr('Fornitore')).' |
+ '.($direzione == 'entrata' ? tr('Cliente') : tr('Fornitore')).' |
'.tr('Prezzo predefinito').' | ';
- if($direzione=='uscita'){
+ if ($direzione == 'uscita') {
echo ''.tr('Fornitore predefinito').' | ';
- } else{
+ } else {
echo ' | ';
}
echo '
@@ -69,9 +69,9 @@ echo '
'.$anagrafica->ragione_sociale.' |
'.moneyFormat($prezzo_predefinito).' | ';
- if($direzione=='uscita'){
+ if ($direzione == 'uscita') {
echo ' '.$text.' | ';
- } else{
+ } else {
echo ' | ';
}
echo '
@@ -89,7 +89,7 @@ echo '
- {[ "type": "checkbox", "label": "'.tr("Imposta prezzo per questa anagrafica").'", "name": "modifica_prezzi", "value": "'.intval(!empty($dettaglio_predefinito)).'" ]}
+ {[ "type": "checkbox", "label": "'.tr('Imposta prezzo per questa anagrafica').'", "name": "modifica_prezzi", "value": "'.intval(!empty($dettaglio_predefinito)).'" ]}
diff --git a/plugins/dettagli_articolo/edit.php b/plugins/dettagli_articolo/edit.php
index abf0393a5..f24572b6f 100755
--- a/plugins/dettagli_articolo/edit.php
+++ b/plugins/dettagli_articolo/edit.php
@@ -90,7 +90,7 @@ if (!$clienti->isEmpty()) {
';
-
+
foreach ($prezzi as $key => $dettaglio) {
echo '
diff --git a/update/2_4_20.sql b/update/2_4_20.sql
index ca71a9de0..704c50e75 100644
--- a/update/2_4_20.sql
+++ b/update/2_4_20.sql
@@ -115,7 +115,7 @@ UPDATE `zz_views` SET `default` = 1 WHERE `zz_views`.`id_module` = (SELECT `zz_m
UPDATE `zz_modules` SET `directory` = 'piano_sconto' WHERE `zz_modules`.`id` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Piani di sconto/rincaro');
-- Aggiunto flag rinnovo automatico in contratti
-ALTER TABLE `co_contratti` ADD `rinnovo_automatico` TINYINT(1) NOT NULL DEFAULT '0' AFTER `rinnovabile`;
+ALTER TABLE `co_contratti` ADD `rinnovo_automatico` TINYINT(1) NOT NULL DEFAULT '0' AFTER `rinnovabile`;
-- Aggiunto segmento per attività NON completate
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` = 'Interventi'), 'Non completate', 'in_interventi.idstatointervento NOT IN(SELECT in_statiintervento.idstatointervento FROM in_statiintervento WHERE is_completato=1)', 'WHR', '####', '', '0', '0', '0', '0');
@@ -125,4 +125,7 @@ DELETE FROM `zz_segments` WHERE name='Scadenzario Ri.Ba.';
INSERT INTO `zz_segments` (`id_module`, `name`, `clause`, `position`, `pattern`, `note`, `predefined`, `predefined_accredito`, `predefined_addebito`, `is_fiscale`) VALUES
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Scadenzario'), 'Scadenzario Ri.Ba. Clienti', 'co_pagamenti.riba=1 AND co_tipidocumento.dir=\"entrata\"', 'WHR', '####', '', 0, 0, 0, 0),
-((SELECT `id` FROM `zz_modules` WHERE `name` = 'Scadenzario'), 'Scadenzario Ri.Ba. Fornitori', 'co_pagamenti.riba=1 AND co_tipidocumento.dir=\"uscita\"', 'WHR', '####', '', 0, 0, 0, 0);
\ No newline at end of file
+((SELECT `id` FROM `zz_modules` WHERE `name` = 'Scadenzario'), 'Scadenzario Ri.Ba. Fornitori', 'co_pagamenti.riba=1 AND co_tipidocumento.dir=\"uscita\"', 'WHR', '####', '', 0, 0, 0, 0);
+
+-- Aggiunta impostazione per disabilitare articoli con quantità <= 0
+INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`, `help`) VALUES (NULL, 'Permetti selezione articoli con quantità minore o uguale a zero in Documenti di Vendita', '0', 'boolean', '1', 'Generali', '20', NULL);