diff --git a/assets/src/css/style.css b/assets/src/css/style.css
index 273f3f974..dd6d94738 100755
--- a/assets/src/css/style.css
+++ b/assets/src/css/style.css
@@ -1109,7 +1109,7 @@ div.tip {
.local-loader>div {
position: absolute;
- top: 100px;
+ top: 0px;
z-index: 2;
opacity: 0.5;
width: 100%
diff --git a/modules/anagrafiche/buttons.php b/modules/anagrafiche/buttons.php
index 262bd4e8f..92dbcac26 100755
--- a/modules/anagrafiche/buttons.php
+++ b/modules/anagrafiche/buttons.php
@@ -74,4 +74,10 @@ if (in_array($id_cliente, $tipi_anagrafica) or in_array($id_fornitore, $tipi_ana
echo '
';
+} else if (in_array($id_agente, $tipi_anagrafica)) {
+ //Aggiunta liquidazione provvigioni per agente
+ echo'
+ '.tr(' Liquida Provvigioni').'
+
+';
}
diff --git a/modules/anagrafiche/liquida_provvigioni.php b/modules/anagrafiche/liquida_provvigioni.php
new file mode 100644
index 000000000..61d8534bf
--- /dev/null
+++ b/modules/anagrafiche/liquida_provvigioni.php
@@ -0,0 +1,116 @@
+.
+ */
+
+include_once __DIR__.'/../../core.php';
+
+use Models\Module;
+use Carbon\Carbon;
+
+$id_record = filter('id_record');
+$dir = filter('dir');
+$nome_stampa = filter('nome_stampa');
+$id_print = $dbo->fetchOne('SELECT id FROM zz_prints WHERE name='.prepare($nome_stampa))['id'];
+$id_module = Module::pool('Stampe contabili')->id;
+
+$year = (new Carbon($_SESSION['period_end']))->format('Y');
+
+// Trovo id_print della stampa
+$link = Prints::getHref($nome_stampa, $id_record);
+
+echo '
+
+ '.tr('Non è possibile creare la stampa definitiva nel periodo selezionato, è necessario prima impostare un periodo!').'
+
+
+
+ ';
+
+echo '
+';
diff --git a/modules/checklists/modutil.php b/modules/checklists/modutil.php
index 4742d5132..5d81f6c79 100644
--- a/modules/checklists/modutil.php
+++ b/modules/checklists/modutil.php
@@ -39,7 +39,7 @@ function renderChecklist($check, $level = 1, $parent = 0) {
$result .= '
- '.$check->content.' ';
+ '.$check->content.' ';
if (intval($check->assignedUsers->pluck('id')->toArray())>0){
$result .= ' ';
diff --git a/modules/contratti/actions.php b/modules/contratti/actions.php
index a1c6b9a45..9f56eaeba 100644
--- a/modules/contratti/actions.php
+++ b/modules/contratti/actions.php
@@ -667,6 +667,7 @@ switch (post('op')) {
case 'edit-price':
$righe = $post['righe'];
+ $numero_totale = 0;
foreach ($righe as $riga) {
if (($riga['id']) != null) {
@@ -676,12 +677,25 @@ switch (post('op')) {
$articolo = Articolo::build($fattura, $originale);
$articolo->id_dettaglio_fornitore = post('id_dettaglio_fornitore') ?: null;
}
-
- $articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
- $articolo->save();
-
- flash()->info(tr('Prezzi aggiornati!'));
-
+
+ if ($articolo['prezzo_unitario'] != $riga['price']) {
+ $articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
+ $articolo->save();
+ ++$numero_totale;
+ }
}
+
+ if ($numero_totale > 1) {
+ flash()->info(tr('_NUM_ prezzi modificati!', [
+ '_NUM_' => $numero_totale,
+ ]));
+ } else if ($numero_totale == 1) {
+ flash()->info(tr('_NUM_ prezzo modificato!', [
+ '_NUM_' => $numero_totale,
+ ]));
+ } else {
+ flash()->warning(tr('Nessun prezzo modificato!'));
+ }
+
break;
-}
+}
\ No newline at end of file
diff --git a/modules/contratti/modals/confronta_righe.php b/modules/contratti/modals/confronta_righe.php
index 492c53999..9435846e3 100644
--- a/modules/contratti/modals/confronta_righe.php
+++ b/modules/contratti/modals/confronta_righe.php
@@ -43,7 +43,7 @@ $righe = $dbo->fetchArray(
-
+
diff --git a/modules/contratti/row-list.php b/modules/contratti/row-list.php
index 22fa28e49..0d4966225 100755
--- a/modules/contratti/row-list.php
+++ b/modules/contratti/row-list.php
@@ -21,6 +21,7 @@ include_once __DIR__.'/init.php';
$block_edit = $record['is_completato'];
$righe = $contratto->getRighe();
+$direzione = $contratto->direzione;
$colspan = ($block_edit ? '5' : '6');
echo '
@@ -325,11 +326,13 @@ if (!$block_edit && sizeof($righe) > 0) {
-
-
-
- Confronta prezzi
-
+ ';
+ if ($direzione == 'entrata') {
+ echo'
+
+ Confronta prezzi
+ ';
+ } echo'
';
}
echo '
diff --git a/modules/ddt/actions.php b/modules/ddt/actions.php
index c899224d8..3b85580eb 100755
--- a/modules/ddt/actions.php
+++ b/modules/ddt/actions.php
@@ -692,6 +692,7 @@ switch (filter('op')) {
case 'edit-price':
$righe = $post['righe'];
+ $numero_totale = 0;
foreach ($righe as $riga) {
if (($riga['id']) != null) {
@@ -702,15 +703,29 @@ switch (filter('op')) {
$articolo->id_dettaglio_fornitore = post('id_dettaglio_fornitore') ?: null;
}
- $articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
- $articolo->save();
-
- flash()->info(tr('Prezzi aggiornati!'));
-
+ if ($articolo['prezzo_unitario'] != $riga['price']) {
+ $articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
+ $articolo->save();
+ ++$numero_totale;
+ }
}
+
+ if ($numero_totale > 1) {
+ flash()->info(tr('_NUM_ prezzi modificati!', [
+ '_NUM_' => $numero_totale,
+ ]));
+ } else if ($numero_totale == 1) {
+ flash()->info(tr('_NUM_ prezzo modificato!', [
+ '_NUM_' => $numero_totale,
+ ]));
+ } else {
+ flash()->warning(tr('Nessun prezzo modificato!'));
+ }
+
break;
}
+
// Aggiornamento stato degli ordini presenti in questa fattura in base alle quantità totali evase
if (!empty($id_record) && setting('Cambia automaticamente stato ordini fatturati')) {
$rs = $dbo->fetchArray('SELECT idordine FROM dt_righe_ddt WHERE idddt='.prepare($id_record).' AND idordine!=0');
diff --git a/modules/ddt/modals/confronta_righe.php b/modules/ddt/modals/confronta_righe.php
index a4eeea165..1ce04044c 100644
--- a/modules/ddt/modals/confronta_righe.php
+++ b/modules/ddt/modals/confronta_righe.php
@@ -43,7 +43,7 @@ $righe = $dbo->fetchArray(
-
+
diff --git a/modules/ddt/row-list.php b/modules/ddt/row-list.php
index 46ee0a449..8b42edf52 100755
--- a/modules/ddt/row-list.php
+++ b/modules/ddt/row-list.php
@@ -22,6 +22,7 @@ include_once __DIR__.'/init.php';
$block_edit = $record['flag_completato'];
$righe = $ddt->getRighe();
$colspan = ($block_edit ? '5' : '6');
+$direzione = $ddt->direzione;
echo '
@@ -371,11 +372,13 @@ if (!$block_edit && sizeof($righe) > 0) {
-
-
-
- Confronta prezzi
-
+ ';
+ if ($dir == 'entrata') {
+ echo'
+
+ Confronta prezzi
+ ';
+ } echo'
';
}
echo '
diff --git a/modules/fatture/actions.php b/modules/fatture/actions.php
index 5f606f783..ca870d791 100755
--- a/modules/fatture/actions.php
+++ b/modules/fatture/actions.php
@@ -1066,6 +1066,7 @@ switch (post('op')) {
case 'edit-price':
$righe = $post['righe'];
+ $numero_totale = 0;
foreach ($righe as $riga) {
if (($riga['id']) != null) {
@@ -1076,12 +1077,25 @@ switch (post('op')) {
$articolo->id_dettaglio_fornitore = post('id_dettaglio_fornitore') ?: null;
}
- $articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
- $articolo->save();
-
- flash()->info(tr('Prezzi aggiornati!'));
-
+ if ($articolo['prezzo_unitario'] != $riga['price']) {
+ $articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
+ $articolo->save();
+ ++$numero_totale;
+ }
}
+
+ if ($numero_totale > 1) {
+ flash()->info(tr('_NUM_ prezzi modificati!', [
+ '_NUM_' => $numero_totale,
+ ]));
+ } else if ($numero_totale == 1) {
+ flash()->info(tr('_NUM_ prezzo modificato!', [
+ '_NUM_' => $numero_totale,
+ ]));
+ } else {
+ flash()->warning(tr('Nessun prezzo modificato!'));
+ }
+
break;
}
diff --git a/modules/fatture/modals/confronta_righe.php b/modules/fatture/modals/confronta_righe.php
index 4d89095b6..9aa30656f 100644
--- a/modules/fatture/modals/confronta_righe.php
+++ b/modules/fatture/modals/confronta_righe.php
@@ -43,7 +43,7 @@ $righe = $dbo->fetchArray(
-
+
diff --git a/modules/fatture/row-list.php b/modules/fatture/row-list.php
index 5b814e488..6d53d7d37 100755
--- a/modules/fatture/row-list.php
+++ b/modules/fatture/row-list.php
@@ -21,6 +21,7 @@ use Modules\Interventi\Intervento;
include_once __DIR__.'/init.php';
+$direzione = $fattura->direzione;
$block_edit = !empty($note_accredito) || in_array($record['stato'], ['Emessa', 'Pagato', 'Parzialmente pagato']) || !$abilita_genera;
$righe = $fattura->getRighe();
@@ -505,10 +506,13 @@ if (!$block_edit && sizeof($righe) > 0) {
-
-
- Confronta prezzi
-
+ ';
+ if ($direzione == 'entrata') {
+ echo'
+
+ Confronta prezzi
+ ';
+ } echo'
';
}
echo '
diff --git a/modules/interventi/actions.php b/modules/interventi/actions.php
index 86fc7b3b5..7bb460ab3 100644
--- a/modules/interventi/actions.php
+++ b/modules/interventi/actions.php
@@ -1160,6 +1160,7 @@ switch (post('op')) {
case 'edit-price':
$righe = $post['righe'];
+ $numero_totale = 0;
foreach ($righe as $riga) {
if (($riga['id']) != null) {
@@ -1170,11 +1171,24 @@ switch (post('op')) {
$articolo->id_dettaglio_fornitore = post('id_dettaglio_fornitore') ?: null;
}
- $articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
- $articolo->save();
-
- flash()->info(tr('Prezzi aggiornati!'));
-
+ if ($articolo['prezzo_unitario'] != $riga['price']) {
+ $articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
+ $articolo->save();
+ ++$numero_totale;
+ }
}
+
+ if ($numero_totale > 1) {
+ flash()->info(tr('_NUM_ prezzi modificati!', [
+ '_NUM_' => $numero_totale,
+ ]));
+ } else if ($numero_totale == 1) {
+ flash()->info(tr('_NUM_ prezzo modificato!', [
+ '_NUM_' => $numero_totale,
+ ]));
+ } else {
+ flash()->warning(tr('Nessun prezzo modificato!'));
+ }
+
break;
}
diff --git a/modules/interventi/ajax_costi.php b/modules/interventi/ajax_costi.php
index d08d637d0..bc115d1c7 100755
--- a/modules/interventi/ajax_costi.php
+++ b/modules/interventi/ajax_costi.php
@@ -134,7 +134,7 @@ if ($show_prezzi) {
echo '
- '.tr('Totale', [], ['upper' => true]).':
+ '.tr('Totale documento', [], ['upper' => true]).':
'.moneyFormat($totale, 2).'
diff --git a/modules/interventi/modals/confronta_righe.php b/modules/interventi/modals/confronta_righe.php
index 731306866..eb9681e42 100644
--- a/modules/interventi/modals/confronta_righe.php
+++ b/modules/interventi/modals/confronta_righe.php
@@ -43,7 +43,7 @@ $righe = $dbo->fetchArray(
-
+
diff --git a/modules/interventi/row-list.php b/modules/interventi/row-list.php
index 7611f2ef1..780dd4de3 100755
--- a/modules/interventi/row-list.php
+++ b/modules/interventi/row-list.php
@@ -22,6 +22,7 @@ include_once __DIR__.'/init.php';
$block_edit = $record['flag_completato'];
$righe = $intervento->getRighe();
$colspan = ($block_edit ? '5' : '6');
+$direzione = $intervento->direzione;
$show_prezzi = Auth::user()['gruppo'] != 'Tecnici' || (Auth::user()['gruppo'] == 'Tecnici' && setting('Mostra i prezzi al tecnico'));
@@ -280,10 +281,13 @@ if (!$block_edit && sizeof($righe) > 0) {
-
-
- Confronta prezzi
-
+ ';
+ if ($direzione == 'entrata') {
+ echo'
+
+ Confronta prezzi
+ ';
+ } echo'
';
}
echo '
diff --git a/modules/ordini/actions.php b/modules/ordini/actions.php
index 2d0f2b6e2..8fef72862 100755
--- a/modules/ordini/actions.php
+++ b/modules/ordini/actions.php
@@ -626,80 +626,76 @@ switch (post('op')) {
$qta_articolo = $dbo->selectOne('mg_articoli', 'qta', ['id' => $id_articolo])['qta'];
$originale = ArticoloOriginale::find($id_articolo);
+
+ $articolo = Articolo::build($ordine, $originale);
+ $qta = 1;
- if ($qta_articolo <= 0 && !$permetti_movimenti_sotto_zero && !$originale->servizio && $dir == 'entrata') {
- $response['error'] = tr('Quantità a magazzino non sufficiente');
- echo json_encode($response);
- } else {
- $articolo = Articolo::build($ordine, $originale);
- $qta = 1;
+ $articolo->descrizione = $originale->descrizione;
+ $articolo->um = $originale->um;
+ $articolo->qta = 1;
+ $articolo->costo_unitario = $originale->prezzo_acquisto;
- $articolo->descrizione = $originale->descrizione;
- $articolo->um = $originale->um;
- $articolo->qta = 1;
- $articolo->costo_unitario = $originale->prezzo_acquisto;
-
- if ($dir == 'entrata') {
- $id_iva = ($ordine->anagrafica->idiva_vendite ?: $originale->idiva_vendita) ?: setting('Iva predefinita');
- } else {
- $id_iva = ($ordine->anagrafica->idiva_acquisti ?: setting('Iva predefinita'));
- }
- $id_anagrafica = $ordine->idanagrafica;
- $prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
-
- // CALCOLO PREZZO UNITARIO
- $prezzo_unitario = 0;
- $sconto = 0;
- // Prezzi netti clienti / listino fornitore
- $prezzi = $dbo->fetchArray('SELECT minimo, massimo, sconto_percentuale, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario
- FROM mg_prezzi_articoli
- WHERE id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($dir).' AND id_anagrafica = '.prepare($id_anagrafica));
-
- if ($prezzi) {
- foreach ($prezzi as $prezzo) {
- if ($qta >= $prezzo['minimo'] && $qta <= $prezzo['massimo']) {
- $prezzo_unitario = $prezzo['prezzo_unitario'];
- $sconto = $prezzo['sconto_percentuale'];
- continue;
- }
-
- if ($prezzo['minimo'] == null && $prezzo['massimo'] == null && $prezzo['prezzo_unitario'] != null) {
- $prezzo_unitario = $prezzo['prezzo_unitario'];
- $sconto = $prezzo['sconto_percentuale'];
- continue;
- }
- }
- }
- if (empty($prezzo_unitario)) {
- // Prezzi listini clienti
- $listino = $dbo->fetchOne('SELECT sconto_percentuale AS sconto_percentuale_listino, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario_listino
- FROM mg_listini
- LEFT JOIN mg_listini_articoli ON mg_listini.id=mg_listini_articoli.id_listino
- LEFT JOIN an_anagrafiche ON mg_listini.id=an_anagrafiche.id_listino
- WHERE mg_listini.data_attivazione<=NOW() AND mg_listini_articoli.data_scadenza>=NOW() AND mg_listini.attivo=1 AND id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($dir).' AND idanagrafica = '.prepare($id_anagrafica));
-
- if ($listino) {
- $prezzo_unitario = $listino['prezzo_unitario_listino'];
- $sconto = $listino['sconto_percentuale_listino'];
- }
- }
- if ($dir == 'entrata') {
- $prezzo_unitario = $prezzo_unitario ?: ($prezzi_ivati ? $originale->prezzo_vendita_ivato : $originale->prezzo_vendita);
- } else {
- $prezzo_unitario = $prezzo_unitario ?: $originale->prezzo_acquisto;
- }
-
- $provvigione = $dbo->selectOne('an_anagrafiche', 'provvigione_default', ['idanagrafica' => $ordine->idagente])['provvigione_default'];
-
- $articolo->confermato = ($dir = 'entrata' ? setting('Conferma automaticamente le quantità negli ordini cliente') : setting('Conferma automaticamente le quantità negli ordini fornitore'));
- $articolo->setPrezzoUnitario($prezzo_unitario, $id_iva);
- $articolo->setSconto($sconto, 'PRC');
- $articolo->setProvvigione($provvigione ?: 0, 'PRC');
- $articolo->save();
-
-
- flash()->info(tr('Nuovo articolo aggiunto!'));
+ if ($dir == 'entrata') {
+ $id_iva = ($ordine->anagrafica->idiva_vendite ?: $originale->idiva_vendita) ?: setting('Iva predefinita');
+ } else {
+ $id_iva = ($ordine->anagrafica->idiva_acquisti ?: setting('Iva predefinita'));
}
+ $id_anagrafica = $ordine->idanagrafica;
+ $prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
+
+ // CALCOLO PREZZO UNITARIO
+ $prezzo_unitario = 0;
+ $sconto = 0;
+ // Prezzi netti clienti / listino fornitore
+ $prezzi = $dbo->fetchArray('SELECT minimo, massimo, sconto_percentuale, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario
+ FROM mg_prezzi_articoli
+ WHERE id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($dir).' AND id_anagrafica = '.prepare($id_anagrafica));
+
+ if ($prezzi) {
+ foreach ($prezzi as $prezzo) {
+ if ($qta >= $prezzo['minimo'] && $qta <= $prezzo['massimo']) {
+ $prezzo_unitario = $prezzo['prezzo_unitario'];
+ $sconto = $prezzo['sconto_percentuale'];
+ continue;
+ }
+
+ if ($prezzo['minimo'] == null && $prezzo['massimo'] == null && $prezzo['prezzo_unitario'] != null) {
+ $prezzo_unitario = $prezzo['prezzo_unitario'];
+ $sconto = $prezzo['sconto_percentuale'];
+ continue;
+ }
+ }
+ }
+ if (empty($prezzo_unitario)) {
+ // Prezzi listini clienti
+ $listino = $dbo->fetchOne('SELECT sconto_percentuale AS sconto_percentuale_listino, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario_listino
+ FROM mg_listini
+ LEFT JOIN mg_listini_articoli ON mg_listini.id=mg_listini_articoli.id_listino
+ LEFT JOIN an_anagrafiche ON mg_listini.id=an_anagrafiche.id_listino
+ WHERE mg_listini.data_attivazione<=NOW() AND mg_listini_articoli.data_scadenza>=NOW() AND mg_listini.attivo=1 AND id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($dir).' AND idanagrafica = '.prepare($id_anagrafica));
+
+ if ($listino) {
+ $prezzo_unitario = $listino['prezzo_unitario_listino'];
+ $sconto = $listino['sconto_percentuale_listino'];
+ }
+ }
+ if ($dir == 'entrata') {
+ $prezzo_unitario = $prezzo_unitario ?: ($prezzi_ivati ? $originale->prezzo_vendita_ivato : $originale->prezzo_vendita);
+ } else {
+ $prezzo_unitario = $prezzo_unitario ?: $originale->prezzo_acquisto;
+ }
+
+ $provvigione = $dbo->selectOne('an_anagrafiche', 'provvigione_default', ['idanagrafica' => $ordine->idagente])['provvigione_default'];
+
+ $articolo->confermato = ($dir = 'entrata' ? setting('Conferma automaticamente le quantità negli ordini cliente') : setting('Conferma automaticamente le quantità negli ordini fornitore'));
+ $articolo->setPrezzoUnitario($prezzo_unitario, $id_iva);
+ $articolo->setSconto($sconto, 'PRC');
+ $articolo->setProvvigione($provvigione ?: 0, 'PRC');
+ $articolo->save();
+
+
+ flash()->info(tr('Nuovo articolo aggiunto!'));
+
} else {
$response['error'] = tr('Nessun articolo corrispondente a magazzino');
echo json_encode($response);
@@ -724,7 +720,8 @@ switch (post('op')) {
case 'edit-price':
$righe = $post['righe'];
-
+ $numero_totale = 0;
+
foreach ($righe as $riga) {
if (($riga['id']) != null) {
$articolo = Articolo::find($riga['id']);
@@ -734,11 +731,24 @@ switch (post('op')) {
$articolo->id_dettaglio_fornitore = post('id_dettaglio_fornitore') ?: null;
}
- $articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
- $articolo->save();
-
- flash()->info(tr('Prezzi aggiornati!'));
-
+ if ($articolo['prezzo_unitario'] != $riga['price']) {
+ $articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
+ $articolo->save();
+ ++$numero_totale;
+ }
}
+
+ if ($numero_totale > 1) {
+ flash()->info(tr('_NUM_ prezzi modificati!', [
+ '_NUM_' => $numero_totale,
+ ]));
+ } else if ($numero_totale == 1) {
+ flash()->info(tr('_NUM_ prezzo modificato!', [
+ '_NUM_' => $numero_totale,
+ ]));
+ } else {
+ flash()->warning(tr('Nessun prezzo modificato!'));
+ }
+
break;
-}
+}
\ No newline at end of file
diff --git a/modules/ordini/modals/confronta_righe.php b/modules/ordini/modals/confronta_righe.php
index 8c171682a..a04aedf02 100644
--- a/modules/ordini/modals/confronta_righe.php
+++ b/modules/ordini/modals/confronta_righe.php
@@ -43,7 +43,7 @@ $righe = $dbo->fetchArray(
-
+
diff --git a/modules/ordini/row-list.php b/modules/ordini/row-list.php
index c41c3c329..1833ac9f1 100755
--- a/modules/ordini/row-list.php
+++ b/modules/ordini/row-list.php
@@ -24,6 +24,7 @@ use Modules\Articoli\Articolo;
$block_edit = $record['flag_completato'];
$righe = $ordine->getRighe();
$colspan = ($block_edit ? '6' : '7');
+$direzione = $ordine->direzione;
echo '
@@ -416,11 +417,13 @@ if (!$block_edit && sizeof($righe) > 0) {
-
-
-
- Confronta prezzi
-
+ ';
+ if ($direzione == 'entrata') {
+ echo'
+
+ Confronta prezzi
+ ';
+ } echo'
';
}
echo '
diff --git a/modules/preventivi/actions.php b/modules/preventivi/actions.php
index 4272750f4..8112400d7 100755
--- a/modules/preventivi/actions.php
+++ b/modules/preventivi/actions.php
@@ -542,7 +542,8 @@ switch (post('op')) {
case 'edit-price':
$righe = $post['righe'];
-
+ $numero_totale = 0;
+
foreach ($righe as $riga) {
if (($riga['id']) != null) {
$articolo = Articolo::find($riga['id']);
@@ -551,13 +552,25 @@ switch (post('op')) {
$articolo = Articolo::build($fattura, $originale);
$articolo->id_dettaglio_fornitore = post('id_dettaglio_fornitore') ?: null;
}
-
- $articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
- $articolo->save();
-
- flash()->info(tr('Prezzi aggiornati!'));
+ if ($articolo['prezzo_unitario'] != $riga['price']) {
+ $articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
+ $articolo->save();
+ ++$numero_totale;
+ }
}
- break;
-}
+ if ($numero_totale > 1) {
+ flash()->info(tr('_NUM_ prezzi modificati!', [
+ '_NUM_' => $numero_totale,
+ ]));
+ } else if ($numero_totale == 1) {
+ flash()->info(tr('_NUM_ prezzo modificato!', [
+ '_NUM_' => $numero_totale,
+ ]));
+ } else {
+ flash()->warning(tr('Nessun prezzo modificato!'));
+ }
+
+ break;
+}
\ No newline at end of file
diff --git a/modules/preventivi/modals/confronta_righe.php b/modules/preventivi/modals/confronta_righe.php
index 634032282..93dd90aaf 100644
--- a/modules/preventivi/modals/confronta_righe.php
+++ b/modules/preventivi/modals/confronta_righe.php
@@ -43,7 +43,7 @@ $righe = $dbo->fetchArray(
-
+
diff --git a/modules/preventivi/row-list.php b/modules/preventivi/row-list.php
index 02d8cd042..1b49a009a 100755
--- a/modules/preventivi/row-list.php
+++ b/modules/preventivi/row-list.php
@@ -22,6 +22,7 @@ include_once __DIR__.'/init.php';
$block_edit = $record['is_completato'];
$righe = $preventivo->getRighe();
$colspan = ($block_edit ? '6' : '7');
+$direzione = $preventivo->direzione;
echo '
@@ -384,10 +385,13 @@ if (!$block_edit && sizeof($righe) > 0) {
-
-
- Confronta prezzi
-
+ ';
+ if ($direzione == 'entrata') {
+ echo'
+
+ Confronta prezzi
+ ';
+ } echo'
';
}
echo '
diff --git a/modules/preventivi/src/Preventivo.php b/modules/preventivi/src/Preventivo.php
index 0ea093213..6e5e01847 100755
--- a/modules/preventivi/src/Preventivo.php
+++ b/modules/preventivi/src/Preventivo.php
@@ -73,7 +73,6 @@ class Preventivo extends Document
$id_agente = $anagrafica->idagente;
$id_pagamento = $anagrafica->idpagamento_vendite;
$id_segment = $id_segment ?: getSegmentPredefined($model->getModule()->id);
- $id_agente = $anagrafica->idagente;
$id_iva = setting('Iva predefinita');
if (empty($id_pagamento)) {
diff --git a/plugins/checks.php b/plugins/checks.php
index 00d8b4414..62e6f372e 100644
--- a/plugins/checks.php
+++ b/plugins/checks.php
@@ -124,8 +124,12 @@ $(".checkbox").click(function(){
$.post("'.$checklist_module->fileurl('ajax.php').'", {
op: "save_checkbox",
id: $(this).attr("data-id"),
+ },function(result){
+ reload();
});
+ $(this).parent().parent().find(".text").css("text-decoration", "line-through");
+
parent = $(this).attr("data-id");
$("tr.sonof_"+parent).find("input[type=checkbox]").each(function(){
if(!$(this).is(":checked")){
@@ -136,8 +140,12 @@ $(".checkbox").click(function(){
$.post("'.$checklist_module->fileurl('ajax.php').'", {
op: "remove_checkbox",
id: $(this).attr("data-id"),
+ },function(result){
+ reload();
});
+ $(this).parent().parent().find(".text").css("text-decoration", "none");
+
parent = $(this).attr("data-id");
$("tr.sonof_"+parent).find("input[type=checkbox]").each(function(){
if($(this).is(":checked")){
@@ -162,6 +170,15 @@ function edit_check(id){
launch_modal("Modifica checklist", "'.$checklist_module->fileurl('components/edit-check.php').'?id_record="+id, 1);
}
+function reload(){
+ $("#loading_'.$checks_id.'").removeClass("hide");
+ $("#loading_'.$checks_id.'").addClass("show");
+ $("#'.$checks_id.'").load(globals.rootdir + "/ajax.php?op=checklists&id_module='.$id_module.'&id_record='.$id_record.'&id_plugin='.$id_plugin.'", function() {
+ $("#loading_'.$checks_id.'").removeClass("show");
+ $("#loading_'.$checks_id.'").addClass("hide");
+ });
+}
+
';
?>
\ No newline at end of file
diff --git a/plugins/importFE/src/FatturaOrdinaria.php b/plugins/importFE/src/FatturaOrdinaria.php
index 5ef4bd397..c81ce4ba9 100755
--- a/plugins/importFE/src/FatturaOrdinaria.php
+++ b/plugins/importFE/src/FatturaOrdinaria.php
@@ -237,8 +237,14 @@ class FatturaOrdinaria extends FatturaElettronica
// Nel caso il prezzo sia negativo viene gestito attraverso l'inversione della quantità (come per le note di credito)
// TODO: per migliorare la visualizzazione, sarebbe da lasciare negativo il prezzo e invertire gli sconti.
- $prezzo = $totale_righe > 0 ? $riga['PrezzoUnitario'] : -$riga['PrezzoUnitario'];
- $qta = (!empty($articolo->um) && !empty($articolo->fattore_um_secondaria) && $riga['UnitaMisura'] == $articolo->um_secondaria) ? $riga['Quantita'] / $articolo->fattore_um_secondaria : ($riga['Quantita'] ?: 1);
+ if (!empty($articolo->um) && !empty($articolo->fattore_um_secondaria) && $riga['UnitaMisura'] == $articolo->um_secondaria) {
+ $qta = (($riga['Quantita'] ?: 1) / $articolo->fattore_um_secondaria);
+ $prezzo = $totale_righe > 0 ? $totale_righe/$qta : -($totale_righe/$qta);
+ } else {
+ $qta = ($riga['Quantita'] ?: 1);
+ $prezzo = $totale_righe > 0 ? $riga['PrezzoUnitario'] : -$riga['PrezzoUnitario'];
+ }
+
// Prezzo e quantità
$obj->prezzo_unitario = $prezzo;
diff --git a/plugins/xml/asso-invoice.xsl b/plugins/xml/asso-invoice.xsl
index 4117fc248..05adcd019 100755
--- a/plugins/xml/asso-invoice.xsl
+++ b/plugins/xml/asso-invoice.xsl
@@ -877,10 +877,19 @@
Identificativo fiscale ai fini IVA:
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
@@ -1135,10 +1144,20 @@
Identificativo fiscale ai fini IVA:
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1360,10 +1379,20 @@
Identificativo fiscale ai fini IVA:
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1455,8 +1484,18 @@
Identificativo fiscale ai fini IVA:
-
-
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1602,8 +1641,18 @@
Identificativo fiscale ai fini IVA:
-
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Util/Query.php b/src/Util/Query.php
index af8dcb0b6..029db4620 100755
--- a/src/Util/Query.php
+++ b/src/Util/Query.php
@@ -201,25 +201,28 @@ class Query
$equal = string_starts_with($real_value, '=');
$notequal = string_starts_with($real_value, '!=');
- if ($minus || $more || $equal || $notequal) {
+ if ($minus || $more) {
$sign = string_contains($real_value, '=') ? '=' : '';
if ($more) {
$sign = '>'.$sign;
} elseif ($minus) {
$sign = '<'.$sign;
- } elseif ($equal) {
- $sign = '=';
- } else {
- $sign = '!=';
}
- $value = trim(str_replace(['<', '=', '>', '!'], '', $value));
+ $value = trim(str_replace(['<', '>'], '', $value));
if ($more || $minus) {
$search_filters[] = 'CAST('.$search_query.' AS UNSIGNED) '.$sign.' '.prepare($value);
} else {
$search_filters[] = $search_query.' '.$sign.' '.prepare($value);
}
+
+ } else if ($equal){
+ $value = trim(str_replace(['='], '', $value));
+ $search_filters[] = ($search_query.' = '.prepare($value). ' OR '.$search_query.' LIKE '.prepare('% '.$value) . ' OR '.$search_query.' LIKE '.prepare($value.' %').' OR '.$search_query.' LIKE '.prepare('% '.$value.' %'));
+ } else if ($notequal) {
+ $value = trim(str_replace(['!='], '', $value));
+ $search_filters[] = ($search_query.' != '.prepare($value). ' AND '.$search_query.' NOT LIKE '.prepare('% '.$value) . ' AND '.$search_query.' NOT LIKE '.prepare($value.' %').' AND '.$search_query.' NOT LIKE '.prepare('% '.$value.' %'));
} else {
$search_filters[] = $search_query.' LIKE '.prepare('%'.$value.'%');
}
diff --git a/templates/preventivi/body.php b/templates/preventivi/body.php
index f3a2f3a28..75eb2f379 100755
--- a/templates/preventivi/body.php
+++ b/templates/preventivi/body.php
@@ -190,7 +190,7 @@ foreach ($righe as $riga) {
echo '
-
+
'.$num.'
';
diff --git a/templates/provvigione/bottom.php b/templates/provvigione/bottom.php
new file mode 100644
index 000000000..8dd9b18f5
--- /dev/null
+++ b/templates/provvigione/bottom.php
@@ -0,0 +1,32 @@
+.
+ */
+
+include_once __DIR__.'/../../core.php';
+
+$totale_provvigioni = sum(array_column($records, 'provvigione'));
+
+echo '
+
+
+ '.tr('Totale provvigioni', [], ['upper' => true]).':
+
+ '.moneyFormat($totale_provvigioni, 2).'
+
+
+';
diff --git a/templates/provvigione/init.php b/templates/provvigione/init.php
new file mode 100644
index 000000000..562ad0a87
--- /dev/null
+++ b/templates/provvigione/init.php
@@ -0,0 +1,72 @@
+.
+ */
+
+include_once __DIR__.'/../../core.php';
+
+$module = Modules::get('Fatture di vendita');
+$id_module = $module['id'];
+
+$module_query = '
+SELECT
+ numero_esterno,
+ an_anagrafiche.ragione_sociale,
+ SUM(prezzo_unitario*qta) as \'Totale\',
+ provvigione_percentuale,
+ provvigione
+FROM
+ `co_documenti`
+ 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(`iva`) AS `iva` FROM `co_righe_documenti` GROUP BY `iddocumento`) AS righe ON `co_documenti`.`id` = `righe`.`iddocumento`
+ LEFT JOIN `co_statidocumento` ON `co_documenti`.`idstatodocumento` = `co_statidocumento`.`id`
+ LEFT JOIN an_anagrafiche as agenti ON agenti.idanagrafica = co_documenti.idagente
+ LEFT JOIN co_righe_documenti ON co_righe_documenti.iddocumento = co_documenti.id
+WHERE
+ 1=1 AND provvigione > 0
+GROUP BY
+ co_documenti.id
+HAVING
+ 2=2
+ORDER BY
+ `co_documenti`.`data` DESC';
+
+if(!empty(get('date_start'))){
+ $module_query = str_replace('1=1', '1=1 AND DATE_FORMAT(`data`, "%Y%m%d") >= "'.date('Ymd', strtotime(get('date_start'))).'"', $module_query);
+
+ $date_start = get('date_start');
+}
+
+if(!empty(get('date_end'))){
+ $module_query = str_replace('1=1', '1=1 AND DATE_FORMAT(`data`, "%Y%m%d") <= "'.date('Ymd', strtotime(get('date_end'))).'"', $module_query);
+
+ $date_end = get('date_end');
+}
+
+$module_query = str_replace('1=1', '1=1 AND co_documenti.idstatodocumento IN (SELECT id FROM co_statidocumento WHERE descrizione = "Pagato")', $module_query);
+
+if(get('is_emessa')=='true' && get('is_parz_pagata')=='true'){
+ $module_query = str_replace('1=1 AND co_documenti.idstatodocumento IN (SELECT id FROM co_statidocumento WHERE descrizione = "Pagato")', '1=1 AND co_documenti.idstatodocumento IN (SELECT id FROM co_statidocumento WHERE descrizione = "Pagato" OR descrizione = "Emessa" OR descrizione = "Parzialmente pagato")', $module_query);
+} else if(get('is_emessa')=='true'){
+ $module_query = str_replace('1=1 AND co_documenti.idstatodocumento IN (SELECT id FROM co_statidocumento WHERE descrizione = "Pagato")', '1=1 AND co_documenti.idstatodocumento IN (SELECT id FROM co_statidocumento WHERE descrizione = "Pagato" OR descrizione = "Emessa")', $module_query);
+} else if(get('is_parz_pagata')=='true'){
+ $module_query = str_replace('1=1 AND co_documenti.idstatodocumento IN (SELECT id FROM co_statidocumento WHERE descrizione = "Pagato")', '1=1 AND co_documenti.idstatodocumento IN (SELECT id FROM co_statidocumento WHERE descrizione = "Pagato" OR descrizione = "Parzialmente pagato")', $module_query);
+}
+
+$module_query = str_replace('1=1', '1=1 AND co_documenti.idagente='.prepare($id_record), $module_query);
+$records = $dbo->fetchArray($module_query);
\ No newline at end of file
diff --git a/templates/provvigione/piece.php b/templates/provvigione/piece.php
new file mode 100644
index 000000000..6ec0e7c37
--- /dev/null
+++ b/templates/provvigione/piece.php
@@ -0,0 +1,29 @@
+.
+ */
+
+include_once __DIR__.'/../../core.php';
+
+echo '
+
+ Fattura n. '.$record['numero_esterno'].'
+ '.$record['ragione_sociale'].'
+ '.moneyFormat($record['Totale'], 2).'
+ '.numberFormat($record['provvigione_percentuale'], 0).' %
+ '.moneyFormat($record['provvigione'], 2).'
+ ';
\ No newline at end of file
diff --git a/templates/provvigione/settings.php b/templates/provvigione/settings.php
new file mode 100644
index 000000000..fe6e31828
--- /dev/null
+++ b/templates/provvigione/settings.php
@@ -0,0 +1,27 @@
+.
+ */
+
+$format = (isset($_SESSION['stampe_contabili']['format'])) ? $_SESSION['stampe_contabili']['format'] : 'A4';
+$orientation = (isset($_SESSION['stampe_contabili']['orientation'])) ? $_SESSION['stampe_contabili']['orientation'] : 'L';
+
+return [
+ 'format' => $format,
+ 'orientation' => $orientation,
+ 'font-size' => '11pt',
+];
diff --git a/templates/provvigione/top.php b/templates/provvigione/top.php
new file mode 100644
index 000000000..aec507c1f
--- /dev/null
+++ b/templates/provvigione/top.php
@@ -0,0 +1,71 @@
+.
+ */
+
+include_once __DIR__.'/../../core.php';
+use Modules\Anagrafiche\Anagrafica;
+
+$agente = Anagrafica::where([
+ ['idanagrafica', '=', $id_record],
+])->first();
+
+if(get('is_parz_pagata')=='true'){
+ $text[] = "'Parzialmente pagato'";
+}
+if(get('is_emessa')=='true'){
+ $text[] = "'Emessa'";
+}
+
+echo '
+'.tr('Liquidazione provvigioni agente _ANAG_', [
+ '_ANAG_' => $agente->ragione_sociale,
+], ['upper' => true]).' ';
+
+if(!empty($date_start) AND !empty($date_end)) {
+ echo '
+ '.tr('Provvigioni dal _START_ al _END_', [
+ '_START_' => Translator::dateToLocale($date_start),
+ '_END_' => Translator::dateToLocale($date_end),
+ ], ['upper' => true]).'
+ ';
+}else{
+ echo '
+ '.tr('Provvigioni').'
+ ';
+}
+
+echo '
+
+ '.tr("_TEXT_",
+ [
+ "_TEXT_" => (empty($text) ? 'Solo fatture con stato \'Pagato\'' : 'Include fatture con stato \'Pagato\', '.implode(', ', $text)),
+ ]).'
+
+
+
+
+ '.tr('Documento', [], ['upper' => true]).'
+ '.tr('Anagrafica', [], ['upper' => true]).'
+ '.tr('Importo', [], ['upper' => true]).'
+ '.tr('Percentuale', [], ['upper' => true]).'
+ '.tr('Provvigione', [], ['upper' => true]).'
+
+
+
+ ';
+
diff --git a/update/2_4_45.sql b/update/2_4_45.sql
index 7872d1c8a..63ca162d2 100644
--- a/update/2_4_45.sql
+++ b/update/2_4_45.sql
@@ -96,4 +96,11 @@ HAVING
2=2
ORDER BY
`data` DESC,
- CAST(`numero_esterno` AS UNSIGNED) DESC" WHERE `name` = 'Ordini fornitore';
\ No newline at end of file
+ CAST(`numero_esterno` AS UNSIGNED) DESC" WHERE `name` = 'Ordini fornitore';
+
+-- Aggiornamento data ultima sessione in rapportino intervento
+UPDATE `em_templates` SET `body` = 'Gentile Cliente,
\ninviamo in allegato il rapportino numero {numero} del {data fine intervento}.
\nDistinti saluti
', `subject` = 'Invio rapportino numero {numero} del {data fine intervento}' WHERE `em_templates`.`name` = "Rapportino intervento";
+
+-- Aggiunta stampa liquidazione provvigioni
+INSERT INTO `zz_prints` (`id_module`, `is_record`, `name`, `title`, `filename`, `directory`, `previous`, `options`, `icon`, `version`, `compatibility`, `order`, `predefined`, `default`, `enabled`, `available_options`) VALUES
+((SELECT id FROM zz_modules WHERE `name` = 'Anagrafiche'), 1, 'Provvigioni', 'Provvigioni', 'Provvigioni {ragione_sociale}', 'provvigione', 'idanagrafica', '', 'fa fa-print', '', '', 0, 0, 0, 1, NULL);