diff --git a/include/common/sconto.php b/include/common/sconto.php
new file mode 100644
index 000000000..6fe304981
--- /dev/null
+++ b/include/common/sconto.php
@@ -0,0 +1,58 @@
+
+
+ {[ "type": "number", "label": "'.tr('Sconto/maggiorazione percentuale').'", "name": "sconto_percentuale", "icon-after": "%", "help": "'.tr('Il valore positivo indica uno sconto: per applicare una maggiorazione inserire un valore negativo').'" ]}
+
';
+
+// Sconto unitario
+echo '
+
+ {[ "type": "number", "label": "'.tr('Sconto/maggiorazione unitario').'", "name": "sconto_unitario", "value": "'.$result['sconto_unitario'].'", "icon-after": "€", "help": "'.tr('Il valore positivo indica uno sconto: per applicare una maggiorazione inserire un valore negativo').'" ]}
+
';
+
+// Iva
+echo '
+
+ {[ "type": "select", "label": "'.tr('Iva').'", "name": "idiva", "required": 1, "value": "'.$result['idiva'].'", "ajax-source": "iva" ]}
+
+ ';
+
+// Funzione per l'aggiornamento in tempo reale del guadagno
+echo '
+ ';
diff --git a/include/src/Components/Description.php b/include/src/Components/Description.php
index af224110d..96ed125a3 100644
--- a/include/src/Components/Description.php
+++ b/include/src/Components/Description.php
@@ -110,9 +110,14 @@ abstract class Description extends Model
return $this->is_descrizione == 1;
}
+ public function isSconto()
+ {
+ return $this->subtotale == 0;
+ }
+
public function isRiga()
{
- return !$this->isDescrizione() && !$this->isArticolo();
+ return !$this->isDescrizione() && !$this->isSconto() && !$this->isArticolo();
}
public function isArticolo()
@@ -161,9 +166,5 @@ abstract class Description extends Model
$builder->where('is_descrizione', '=', 0);
});
}
-
- static::addGlobalScope('not_discount', function (Builder $builder) {
- $builder->where('sconto_globale', '=', 0);
- });
}
}
diff --git a/include/src/Components/Discount.php b/include/src/Components/Discount.php
deleted file mode 100644
index fa9b48cf5..000000000
--- a/include/src/Components/Discount.php
+++ /dev/null
@@ -1,75 +0,0 @@
-sconto_globale = 1;
-
- return $model;
- }
-
- /**
- * Restituisce il totale dello sconto.
- */
- public function getTotaleAttribute()
- {
- return $this->imponibile + $this->iva;
- }
-
- /**
- * Restituisce il netto dello sconto.
- */
- public function getNettoAttribute()
- {
- return $this->totale;
- }
-
- /**
- * Restituisce l'imponibile scontato dello sconto.
- */
- public function getImponibileScontatoAttribute()
- {
- return $this->imponibile;
- }
-
- /**
- * Restituisce l'imponibile dello sconto.
- */
- public function getImponibileAttribute()
- {
- return $this->subtotale;
- }
-
- /**
- * Restituisce il "guadagno" dello sconto.
- */
- public function getGuadagnoAttribute()
- {
- return $this->imponibile;
- }
-
- /**
- * Restituisce il totale dello sconto.
- */
- public function getIvaAttribute()
- {
- return $this->attributes['iva'];
- }
-
- protected static function boot()
- {
- parent::boot();
-
- static::addGlobalScope('is_discount', function (Builder $builder) {
- $builder->where('sconto_globale', '=', 1);
- });
- }
-}
diff --git a/include/src/Document.php b/include/src/Document.php
index 07a2d07d5..930734ad8 100644
--- a/include/src/Document.php
+++ b/include/src/Document.php
@@ -24,8 +24,6 @@ abstract class Document extends Model
abstract public function descrizioni();
- abstract public function scontoGlobale();
-
/**
* Calcola l'imponibile del documento.
*
diff --git a/lib/common.php b/lib/common.php
index 570680376..276e3db80 100644
--- a/lib/common.php
+++ b/lib/common.php
@@ -43,69 +43,6 @@ function sum($first, $second = null, $decimals = 4)
return floatval($result);
}
-/**
- * Calcola lo sconto globale per i documenti e lo aggiorna di conseguenza.
- * Attenzione: eseguire la funzione dopo l'inserimento e la modifica di tutte le righe del documento.
- *
- * @param array $tables
- * @param array $fields
- * @param int $id_record
- * @param array $options
- */
-function aggiorna_sconto(array $tables, array $fields, $id_record, array $options = [])
-{
- $dbo = database();
-
- $descrizione = tr('Sconto', [], ['upper' => true]);
-
- // Rimozione dello sconto precedente
- $dbo->query('DELETE FROM '.$tables['row'].' WHERE sconto_globale = 1 AND '.$fields['row'].'='.prepare($id_record));
-
- // Individuazione del nuovo sconto
- $sconto = $dbo->select($tables['parent'], ['sconto_globale', 'tipo_sconto_globale'], [$fields['parent'] => $id_record]);
- $sconto[0]['sconto_globale'] = floatval($sconto[0]['sconto_globale']);
-
- // Aggiorno l'eventuale sconto gestendolo con le righe in fattura
- $iva = 0;
-
- if (!empty($sconto[0]['sconto_globale'])) {
- // Commit: 2c7f69867accb4f12a0c7cfd320714bb98e31a67
- // L'aliquota IVA viene calcolata in percentuale sull'imponibile e l'iva effettiva delle righe del documento.
- if ($sconto[0]['tipo_sconto_globale'] == 'PRC') {
- $rs = $dbo->fetchArray('SELECT SUM(subtotale - sconto) AS imponibile, SUM(iva) AS iva FROM (SELECT '.$tables['row'].'.subtotale, '.$tables['row'].'.sconto, '.$tables['row'].'.iva FROM '.$tables['row'].' WHERE '.$fields['row'].'='.prepare($id_record).') AS t');
- $subtotale = $rs[0]['imponibile'];
- $iva += $rs[0]['iva'] / 100 * $sconto[0]['sconto_globale'];
- $subtotale = -$subtotale / 100 * $sconto[0]['sconto_globale'];
-
- $descrizione = $descrizione.' '.Translator::numberToLocale($sconto[0]['sconto_globale']).'%';
- } else {
- $rs = $dbo->fetchArray('SELECT SUM(subtotale - sconto) AS imponibile, SUM(iva) AS iva FROM (SELECT '.$tables['row'].'.subtotale, '.$tables['row'].'.sconto, '.$tables['row'].'.iva FROM '.$tables['row'].' WHERE '.$fields['row'].'='.prepare($id_record).') AS t');
- $subtotale = $rs[0]['imponibile'];
- $iva += $sconto[0]['sconto_globale'] * $rs[0]['iva'] / $subtotale;
-
- $subtotale = -$sconto[0]['sconto_globale'];
- }
-
- // Calcolo dell'IVA da scontare
- $idiva = setting('Iva predefinita');
- $rsi = $dbo->select('co_iva', ['descrizione', 'percentuale'], ['id' => $idiva]);
-
- $values = [
- $fields['row'] => $id_record,
- 'descrizione' => $descrizione,
- 'subtotale' => $subtotale,
- 'qta' => 1,
- 'idiva' => $idiva,
- //'desc_iva' => $rsi[0]['descrizione'],
- 'iva' => -$iva,
- 'sconto_globale' => 1,
- 'order' => orderValue($tables['row'], $fields['row'], $id_record),
- ];
-
- $dbo->insert($tables['row'], $values);
- }
-}
-
function controlla_seriali($field, $id_riga, $old_qta, $new_qta, $dir)
{
$dbo = database();
diff --git a/modules/contratti/actions.php b/modules/contratti/actions.php
index 0248de6d7..07b2f75ce 100644
--- a/modules/contratti/actions.php
+++ b/modules/contratti/actions.php
@@ -90,23 +90,6 @@ switch (post('op')) {
$dbo->query($query);
- // Aggiornamento sconto
- $tipo_sconto = post('tipo_sconto_generico');
- $sconto = post('sconto_generico');
-
- $dbo->update('co_contratti', [
- 'tipo_sconto_globale' => $tipo_sconto,
- 'sconto_globale' => $sconto,
- ], ['id' => $id_record]);
-
- aggiorna_sconto([
- 'parent' => 'co_contratti',
- 'row' => 'co_righe_contratti',
- ], [
- 'parent' => 'id',
- 'row' => 'idcontratto',
- ], $id_record);
-
$dbo->query('DELETE FROM my_impianti_contratti WHERE idcontratto='.prepare($id_record));
foreach ((array) post('matricolaimpianto') as $matricolaimpianto) {
$dbo->query('INSERT INTO my_impianti_contratti(idcontratto,idimpianto) VALUES('.prepare($id_record).', '.prepare($matricolaimpianto).')');
@@ -143,6 +126,31 @@ switch (post('op')) {
break;
+ case 'manage_sconto':
+ if (post('idriga') != null) {
+ $sconto = Riga::find(post('idriga'));
+ } else {
+ $sconto = Riga::build($contratto);
+ }
+
+ $sconto->qta = 1;
+
+ $sconto->descrizione = post('descrizione');
+ $sconto->id_iva = post('idiva');
+
+ $sconto->sconto_unitario = post('sconto_unitario');
+ $sconto->tipo_sconto = 'UNT';
+
+ $sconto->save();
+
+ if (post('idriga') != null) {
+ flash()->info(tr('Sconto/maggiorazione modificato!'));
+ } else {
+ flash()->info(tr('Sconto/maggiorazione aggiunta!'));
+ }
+
+ break;
+
// Aggiungo una riga al contratto
case 'addriga':
$idiva = post('idiva');
@@ -364,13 +372,3 @@ switch (post('op')) {
break;
}
-
-if (post('op') !== null && post('op') != 'update') {
- aggiorna_sconto([
- 'parent' => 'co_contratti',
- 'row' => 'co_righe_contratti',
- ], [
- 'parent' => 'id',
- 'row' => 'idcontratto',
- ], $id_record);
-}
diff --git a/modules/contratti/edit.php b/modules/contratti/edit.php
index 1cf10cc38..abb8f5c85 100644
--- a/modules/contratti/edit.php
+++ b/modules/contratti/edit.php
@@ -108,14 +108,6 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
{[ "type": "select", "multiple": "1", "label": "", "name": "matricolaimpianto[]", "values": "query=SELECT idanagrafica, id AS id, IF(nome = '', matricola, CONCAT(matricola, ' - ', nome)) AS descrizione FROM my_impianti WHERE idanagrafica='$idanagrafica$' ORDER BY descrizione", "value": "$idimpianti$" ]}
-
-
- {[ "type": "number", "label": "", "name": "sconto_generico", "value": "$sconto_globale$", "help": "", "icon-after": "choice|untprc|$tipo_sconto_globale$" ]}
-
@@ -302,13 +294,25 @@ if (sizeof($rs) > 0) {
-
+ echo '
+
+ '.tr('Articolo').'
+ ';
-
+ echo '
+
+ '.tr('Riga').'
+ ';
-
- fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_descrizione" data-toggle="tooltip" data-title="'.tr('Aggiungi descrizione').'">
+
'.tr('Descrizione').'
+ ';
+
+ echo '
+
+ '.tr('Sconto/maggiorazione').'
+ ';
}
?>
diff --git a/modules/contratti/row-add.php b/modules/contratti/row-add.php
index 3b44b342f..3c9913a42 100644
--- a/modules/contratti/row-add.php
+++ b/modules/contratti/row-add.php
@@ -1,17 +1,19 @@
fetchArray('SELECT * FROM co_contratti WHERE id='.prepare($id_record));
-$idanagrafica = $rs[0]['idanagrafica'];
+$documento = Contratto::find($id_record);
// Impostazioni per la gestione
$options = [
'op' => 'addriga',
'action' => 'add',
- 'dir' => 'entrata',
- 'idanagrafica' => $idanagrafica,
+ 'dir' => $documento->direzione,
+ 'idanagrafica' => $documento['idanagrafica'],
+ 'totale' => $documento->totale,
];
// Dati di default
@@ -26,11 +28,11 @@ $result = [
];
// Leggo l'iva predefinita per l'anagrafica e se non c'è leggo quella predefinita generica
-$iva = $dbo->fetchArray('SELECT idiva_vendite AS idiva FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica));
+$iva = $dbo->fetchArray('SELECT idiva_vendite AS idiva FROM an_anagrafiche WHERE idanagrafica='.prepare($documento['idanagrafica']));
$result['idiva'] = $iva[0]['idiva'] ?: setting('Iva predefinita');
// Aggiunta sconto di default da listino per le vendite
-$listino = $dbo->fetchArray('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_listini ON an_anagrafiche.idlistino_vendite=mg_listini.id WHERE idanagrafica='.prepare($idanagrafica));
+$listino = $dbo->fetchArray('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_listini ON an_anagrafiche.idlistino_vendite=mg_listini.id WHERE idanagrafica='.prepare($documento['idanagrafica']));
if ($listino[0]['prc_guadagno'] > 0) {
$result['sconto_unitario'] = $listino[0]['prc_guadagno'];
@@ -43,6 +45,10 @@ if (get('is_descrizione') !== null) {
$file = 'descrizione';
} elseif (get('is_articolo') !== null) {
$file = 'articolo';
+} elseif (get('is_sconto') !== null) {
+ $file = 'sconto';
+
+ $options['op'] = 'manage_sconto';
}
echo App::load($file.'.php', $result, $options);
diff --git a/modules/contratti/row-edit.php b/modules/contratti/row-edit.php
index 169c58212..81ea36626 100644
--- a/modules/contratti/row-edit.php
+++ b/modules/contratti/row-edit.php
@@ -1,31 +1,40 @@
fetchArray('SELECT * FROM co_contratti WHERE id='.prepare($id_record));
-$idanagrafica = $rs[0]['idanagrafica'];
+$documento = Contratto::find($id_record);
// Impostazioni per la gestione
$options = [
'op' => 'editriga',
'action' => 'edit',
- 'dir' => 'entrata',
- 'idanagrafica' => $idanagrafica,
+ 'dir' => $documento->direzione,
+ 'idanagrafica' => $documento['idanagrafica'],
+ 'totale' => $documento->totale,
];
// Dati della riga
-$rsr = $dbo->fetchArray('SELECT * FROM co_righe_contratti WHERE idcontratto='.prepare($id_record).' AND id='.prepare(get('idriga')));
+$id_riga = get('idriga');
+$riga = $documento->getRighe()->find($id_riga);
-$result = $rsr[0];
-$result['prezzo'] = $rsr[0]['subtotale'] / $rsr[0]['qta'];
+$result = $riga->toArray();
+$result['prezzo'] = $riga->prezzo_unitario_vendita;
+
+// Importazione della gestione dedicata
// Importazione della gestione dedicata
$file = 'riga';
-if (!empty($result['is_descrizione'])) {
+if ($riga->isDescrizione()) {
$file = 'descrizione';
-} elseif (!empty($result['idarticolo'])) {
+} elseif ($riga->isArticolo()) {
$file = 'articolo';
+} elseif ($riga->isSconto()) {
+ $file = 'sconto';
+
+ $options['op'] = 'manage_sconto';
}
echo App::load($file.'.php', $result, $options);
diff --git a/modules/contratti/row-list.php b/modules/contratti/row-list.php
index 964ab3767..dfee23b49 100644
--- a/modules/contratti/row-list.php
+++ b/modules/contratti/row-list.php
@@ -101,7 +101,7 @@ foreach ($rs as $r) {
echo '
';
- if ($record['stato'] != 'Pagato' && empty($r['sconto_globale'])) {
+ if ($record['stato'] != 'Pagato') {
echo '
';
}
- if (empty($r['sconto_globale'])) {
- echo '
-
-
-
';
- }
-
echo '
';
diff --git a/modules/contratti/src/Components/Sconto.php b/modules/contratti/src/Components/Sconto.php
deleted file mode 100644
index 6a52d8aef..000000000
--- a/modules/contratti/src/Components/Sconto.php
+++ /dev/null
@@ -1,33 +0,0 @@
-scontoGlobale;
-
- if ($model == null) {
- $model = parent::build();
-
- $model->setContratto($contratto);
- }
-
- return $model;
- }
-}
diff --git a/modules/contratti/src/Contratto.php b/modules/contratti/src/Contratto.php
index c2be4c41f..44bf9a42c 100644
--- a/modules/contratti/src/Contratto.php
+++ b/modules/contratti/src/Contratto.php
@@ -97,16 +97,9 @@ class Contratto extends Document
return 'Contratti';
}
- public function updateSconto()
+ public function getDirezioneAttribute()
{
- // Aggiornamento sconto
- aggiorna_sconto([
- 'parent' => 'co_preventivi',
- 'row' => 'co_righe_preventivi',
- ], [
- 'parent' => 'id',
- 'row' => 'idcontratto',
- ], $this->id);
+ return 'entrata';
}
public function anagrafica()
@@ -134,11 +127,6 @@ class Contratto extends Document
return $this->hasMany(Components\Descrizione::class, 'idcontratto');
}
- public function scontoGlobale()
- {
- return $this->hasOne(Components\Sconto::class, 'idcontratto');
- }
-
public function interventi()
{
return $this->hasMany(Intervento::class, 'id_contratto');
diff --git a/modules/ddt/actions.php b/modules/ddt/actions.php
index 89ca330fc..c6daa4c3b 100644
--- a/modules/ddt/actions.php
+++ b/modules/ddt/actions.php
@@ -88,20 +88,6 @@ switch (post('op')) {
'ritenutaacconto' => 0,
], ['id' => $id_record]);
- // Aggiornamento sconto
- $dbo->update('dt_ddt', [
- 'tipo_sconto_globale' => post('tipo_sconto_generico'),
- 'sconto_globale' => post('sconto_generico'),
- ], ['id' => $id_record]);
-
- aggiorna_sconto([
- 'parent' => 'dt_ddt',
- 'row' => 'dt_righe_ddt',
- ], [
- 'parent' => 'id',
- 'row' => 'idddt',
- ], $id_record);
-
$query = 'SELECT descrizione FROM dt_statiddt WHERE id='.prepare($idstatoddt);
$rs = $dbo->fetchArray($query);
@@ -190,12 +176,36 @@ switch (post('op')) {
}
// Ricalcolo inps, ritenuta e bollo
- if ($dir == 'entrata') {
- ricalcola_costiagg_ddt($id_record);
+ ricalcola_costiagg_ddt($id_record);
+
+ break;
+
+ case 'manage_sconto':
+ if (post('idriga') != null) {
+ $sconto = Riga::find(post('idriga'));
} else {
- ricalcola_costiagg_ddt($id_record);
+ $sconto = Riga::build($ddt);
}
+ $sconto->qta = 1;
+
+ $sconto->descrizione = post('descrizione');
+ $sconto->id_iva = post('idiva');
+
+ $sconto->sconto_unitario = post('sconto_unitario');
+ $sconto->tipo_sconto = 'UNT';
+
+ $sconto->save();
+
+ if (post('idriga') != null) {
+ flash()->info(tr('Sconto/maggiorazione modificato!'));
+ } else {
+ flash()->info(tr('Sconto/maggiorazione aggiunta!'));
+ }
+
+ // Ricalcolo inps, ritenuta e bollo
+ ricalcola_costiagg_ddt($id_record);
+
break;
// Aggiunta di un ordine in ddt
@@ -238,15 +248,6 @@ switch (post('op')) {
}
}
- // Aggiornamento sconto
- if (post('evadere')[$ordine->scontoGlobale->id] == 'on') {
- $ddt->tipo_sconto_globale = $ordine->tipo_sconto_globale;
- $ddt->sconto_globale = $ordine->tipo_sconto_globale == 'PRC' ? $ordine->sconto_globale : $ordine->sconto_globale;
- $ddt->save();
-
- $ddt->updateSconto();
- }
-
// Impostazione del nuovo stato
$descrizione = $parziale ? 'Parzialmente evaso' : 'Evaso';
$stato = \Modules\Ordini\Stato::where('descrizione', $descrizione)->first();
@@ -484,14 +485,3 @@ if (!empty($id_record) && setting('Cambia automaticamente stato ordini fatturati
$dbo->query('UPDATE or_ordini SET idstatoordine=(SELECT id FROM or_statiordine WHERE descrizione="'.get_stato_ordine($rs[$i]['idordine']).'") WHERE id = '.prepare($rs[$i]['idordine']));
}
}
-
-// Aggiornamento sconto sulle righe
-if (post('op') !== null && post('op') != 'update') {
- aggiorna_sconto([
- 'parent' => 'dt_ddt',
- 'row' => 'dt_righe_ddt',
- ], [
- 'parent' => 'id',
- 'row' => 'idddt',
- ], $id_record);
-}
diff --git a/modules/ddt/edit.php b/modules/ddt/edit.php
index c12440076..155e896af 100644
--- a/modules/ddt/edit.php
+++ b/modules/ddt/edit.php
@@ -164,12 +164,6 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
-
-
- {[ "type": "number", "label": "", "name": "sconto_generico", "value": "$sconto_globale$", "icon-after": "choice|untprc|$tipo_sconto_globale$", "readonly": "" ]}
-
-
-
diff --git a/modules/ddt/row-add.php b/modules/ddt/row-add.php
index 8ec671dbb..99b9e28cc 100644
--- a/modules/ddt/row-add.php
+++ b/modules/ddt/row-add.php
@@ -1,23 +1,19 @@
fetchArray('SELECT * FROM dt_ddt WHERE id='.prepare($id_record));
-$idanagrafica = $rs[0]['idanagrafica'];
-
-if ($module['name'] == 'Ddt di vendita') {
- $dir = 'entrata';
-} else {
- $dir = 'uscita';
-}
+$documento = DDT::find($id_record);
// Impostazioni per la gestione
$options = [
'op' => 'addriga',
'action' => 'add',
- 'dir' => $dir,
- 'idanagrafica' => $idanagrafica,
+ 'dir' => $documento->direzione,
+ 'idanagrafica' => $documento['idanagrafica'],
+ 'totale' => $documento->totale,
];
// Dati di default
@@ -32,11 +28,11 @@ $result = [
];
// Leggo l'iva predefinita per l'anagrafica e se non c'è leggo quella predefinita generica
-$iva = $dbo->fetchArray('SELECT idiva_'.($dir == 'uscita' ? 'acquisti' : 'vendite').' AS idiva FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica));
+$iva = $dbo->fetchArray('SELECT idiva_'.($dir == 'uscita' ? 'acquisti' : 'vendite').' AS idiva FROM an_anagrafiche WHERE idanagrafica='.prepare($documento['idanagrafica']));
$result['idiva'] = $iva[0]['idiva'] ?: setting('Iva predefinita');
// Aggiunta sconto di default da listino per le vendite
-$listino = $dbo->fetchArray('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_listini ON an_anagrafiche.idlistino_'.($dir == 'uscita' ? 'acquisti' : 'vendite').'=mg_listini.id WHERE idanagrafica='.prepare($idanagrafica));
+$listino = $dbo->fetchArray('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_listini ON an_anagrafiche.idlistino_'.($dir == 'uscita' ? 'acquisti' : 'vendite').'=mg_listini.id WHERE idanagrafica='.prepare($documento['idanagrafica']));
if ($listino[0]['prc_guadagno'] > 0) {
$result['sconto_unitario'] = $listino[0]['prc_guadagno'];
@@ -51,6 +47,10 @@ if (get('is_descrizione') !== null) {
$file = 'articolo';
$options['op'] = 'addarticolo';
+} elseif (get('is_sconto') !== null) {
+ $file = 'sconto';
+
+ $options['op'] = 'manage_sconto';
}
echo App::load($file.'.php', $result, $options);
diff --git a/modules/ddt/row-edit.php b/modules/ddt/row-edit.php
index 872f49324..663c29bed 100644
--- a/modules/ddt/row-edit.php
+++ b/modules/ddt/row-edit.php
@@ -1,38 +1,38 @@
fetchArray('SELECT * FROM dt_ddt WHERE id='.prepare($id_record));
-$idanagrafica = $rs[0]['idanagrafica'];
-
-if ($module['name'] == 'Ddt di vendita') {
- $dir = 'entrata';
-} else {
- $dir = 'uscita';
-}
+$documento = DDT::find($id_record);
// Impostazioni per la gestione
$options = [
'op' => 'editriga',
'action' => 'edit',
- 'dir' => $dir,
- 'idanagrafica' => $idanagrafica,
- 'edit_articolo' => false,
+ 'dir' => $documento->direzione,
+ 'idanagrafica' => $documento['idanagrafica'],
+ 'totale' => $documento->totale,
];
// Dati della riga
-$rsr = $dbo->fetchArray('SELECT * FROM dt_righe_ddt WHERE idddt='.prepare($id_record).' AND id='.prepare(get('idriga')));
+$id_riga = get('idriga');
+$riga = $documento->getRighe()->find($id_riga);
-$result = $rsr[0];
-$result['prezzo'] = $rsr[0]['subtotale'] / $rsr[0]['qta'];
+$result = $riga->toArray();
+$result['prezzo'] = $riga->prezzo_unitario_vendita;
// Importazione della gestione dedicata
$file = 'riga';
-if (!empty($result['is_descrizione'])) {
+if ($riga->isDescrizione()) {
$file = 'descrizione';
-} elseif (!empty($result['idarticolo'])) {
+} elseif ($riga->isArticolo()) {
$file = 'articolo';
+} elseif ($riga->isSconto()) {
+ $file = 'sconto';
+
+ $options['op'] = 'manage_sconto';
}
echo App::load($file.'.php', $result, $options);
diff --git a/modules/ddt/row-list.php b/modules/ddt/row-list.php
index 9df4a5eef..df93bd5cf 100644
--- a/modules/ddt/row-list.php
+++ b/modules/ddt/row-list.php
@@ -78,13 +78,9 @@ if (!empty($rs)) {
echo '
';
if (empty($r['is_descrizione'])) {
- if (empty($r['sconto_globale'])) {
- echo '
+ echo '
'.Translator::numberToLocale($r['qta'] - $r['qta_evasa'], 'qta').'
('.tr('Q.tà iniziale').': '.Translator::numberToLocale($r['qta'], 'qta').') ';
- } else {
- echo '1';
- }
}
echo '
';
@@ -141,7 +137,7 @@ if (!empty($rs)) {
// Possibilità di rimuovere una riga solo se il ddt non è evaso
echo '
';
- if ($record['flag_completato'] == 0 && empty($r['sconto_globale'])) {
+ if ($record['flag_completato'] == 0) {
echo "
";
}
- if (empty($r['sconto_globale'])) {
- echo '
-
-
-
';
- }
-
echo '
';
diff --git a/modules/ddt/src/Components/Sconto.php b/modules/ddt/src/Components/Sconto.php
deleted file mode 100644
index 2fe44e3a6..000000000
--- a/modules/ddt/src/Components/Sconto.php
+++ /dev/null
@@ -1,33 +0,0 @@
-scontoGlobale;
-
- if ($model == null) {
- $model = parent::build();
-
- $model->setDDT($ddt);
- }
-
- return $model;
- }
-}
diff --git a/modules/ddt/src/DDT.php b/modules/ddt/src/DDT.php
index f01c27f79..18e51fe26 100644
--- a/modules/ddt/src/DDT.php
+++ b/modules/ddt/src/DDT.php
@@ -77,19 +77,12 @@ class DDT extends Document
*/
public function getModuleAttribute()
{
- return $this->tipo->dir == 'entrata' ? 'Ddt di vendita' : 'DDT di acquisto';
+ return $this->direzione == 'entrata' ? 'Ddt di vendita' : 'DDT di acquisto';
}
- public function updateSconto()
+ public function getDirezioneAttribute()
{
- // Aggiornamento sconto
- aggiorna_sconto([
- 'parent' => 'dt_ddt',
- 'row' => 'dt_righe_ddt',
- ], [
- 'parent' => 'id',
- 'row' => 'idddt',
- ], $this->id);
+ return $this->tipo->dir;
}
public function anagrafica()
@@ -122,11 +115,6 @@ class DDT extends Document
return $this->hasMany(Components\Descrizione::class, 'idddt');
}
- public function scontoGlobale()
- {
- return $this->hasOne(Components\Sconto::class, 'idddt');
- }
-
// Metodi statici
/**
diff --git a/modules/fatture/actions.php b/modules/fatture/actions.php
index 48e2ea0ee..e9954276b 100644
--- a/modules/fatture/actions.php
+++ b/modules/fatture/actions.php
@@ -96,22 +96,6 @@ switch (post('op')) {
$query = 'SELECT descrizione FROM co_statidocumento WHERE id='.prepare($idstatodocumento);
$rs = $dbo->fetchArray($query);
- // Aggiornamento sconto
- if ($record['stato'] != 'Pagato' && $record['stato'] != 'Emessa') {
- $dbo->update('co_documenti', [
- 'tipo_sconto_globale' => post('tipo_sconto_generico'),
- 'sconto_globale' => post('sconto_generico'),
- ], ['id' => $id_record]);
-
- aggiorna_sconto([
- 'parent' => 'co_documenti',
- 'row' => 'co_righe_documenti',
- ], [
- 'parent' => 'id',
- 'row' => 'iddocumento',
- ], $id_record);
- }
-
// Ricalcolo inps, ritenuta e bollo (se la fattura non è stata pagata)
if ($dir == 'entrata') {
ricalcola_costiagg_fattura($id_record);
@@ -192,7 +176,7 @@ switch (post('op')) {
$rs = $dbo->fetchArray('SELECT idpreventivo FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).' AND idpreventivo IS NOT NULL');
for ($i = 0; $i < sizeof($rs); ++$i) {
$dbo->query("UPDATE co_preventivi SET idstato=(SELECT id FROM co_statipreventivi WHERE descrizione='In lavorazione') WHERE id=".prepare($rs[$i]['idpreventivo']));
- $dbo->query("UPDATE co_righe_preventivi SET qta_evasa=0 WHERE idpreventivo=".prepare($rs[$i]['idpreventivo']));
+ $dbo->query('UPDATE co_righe_preventivi SET qta_evasa=0 WHERE idpreventivo='.prepare($rs[$i]['idpreventivo']));
}
// Se ci sono degli interventi collegati li rimetto nello stato "Completato"
@@ -336,7 +320,46 @@ switch (post('op')) {
$articolo->save();
- flash()->info(tr('Articolo aggiunto!'));
+ if (post('idriga') != null) {
+ flash()->info(tr('Articolo modificato!'));
+ } else {
+ flash()->info(tr('Articolo aggiunto!'));
+ }
+
+ // Ricalcolo inps, ritenuta e bollo
+ ricalcola_costiagg_fattura($id_record);
+
+ break;
+
+ case 'manage_sconto':
+ if (post('idriga') != null) {
+ $sconto = Riga::find(post('idriga'));
+ } else {
+ $sconto = Riga::build($fattura);
+ }
+
+ $sconto->qta = 1;
+
+ $sconto->descrizione = post('descrizione');
+
+ $sconto->id_iva = post('idiva');
+ $sconto->idconto = post('idconto');
+
+ $sconto->calcolo_ritenuta_acconto = post('calcolo_ritenuta_acconto') ?: null;
+ $sconto->id_ritenuta_acconto = post('id_ritenuta_acconto') ?: null;
+ $sconto->ritenuta_contributi = post('ritenuta_contributi');
+ $sconto->id_rivalsa_inps = post('id_rivalsa_inps') ?: null;
+
+ $sconto->sconto_unitario = post('sconto_unitario');
+ $sconto->tipo_sconto = 'UNT';
+
+ $sconto->save();
+
+ if (post('idriga') != null) {
+ flash()->info(tr('Sconto/maggiorazione modificato!'));
+ } else {
+ flash()->info(tr('Sconto/maggiorazione aggiunta!'));
+ }
// Ricalcolo inps, ritenuta e bollo
ricalcola_costiagg_fattura($id_record);
@@ -500,7 +523,7 @@ switch (post('op')) {
}
// Ripristino le quantità da evadere nel preventivo
- $dbo->update( 'co_righe_preventivi',
+ $dbo->update('co_righe_preventivi',
[
'qta_evasa' => 0,
],
@@ -517,7 +540,7 @@ switch (post('op')) {
}
// Ripristino le quantità da evadere nel preventivo
- $dbo->update( 'co_righe_preventivi',
+ $dbo->update('co_righe_preventivi',
[
'qta_evasa' => 0,
],
@@ -733,15 +756,6 @@ switch (post('op')) {
}
}
- // Aggiornamento sconto
- if (post('evadere')[$ordine->scontoGlobale->id] == 'on') {
- $fattura->tipo_sconto_globale = $ordine->tipo_sconto_globale;
- $fattura->sconto_globale = $ordine->tipo_sconto_globale == 'PRC' ? $ordine->sconto_globale : $ordine->sconto_globale;
- $fattura->save();
-
- $fattura->updateSconto();
- }
-
// Impostazione del nuovo stato
$descrizione = $parziale ? 'Parzialmente fatturato' : 'Fatturato';
$stato = \Modules\Ordini\Stato::where('descrizione', $descrizione)->first();
@@ -809,15 +823,6 @@ switch (post('op')) {
}
}
- // Aggiornamento sconto
- if (post('evadere')[$ddt->scontoGlobale->id] == 'on') {
- $fattura->tipo_sconto_globale = $ddt->tipo_sconto_globale;
- $fattura->sconto_globale = $ddt->tipo_sconto_globale == 'PRC' ? $ddt->sconto_globale : $ddt->sconto_globale;
- $fattura->save();
-
- $fattura->updateSconto();
- }
-
// Impostazione del nuovo stato
$descrizione = $parziale ? 'Parzialmente fatturato' : 'Fatturato';
$stato = \Modules\DDT\Stato::where('descrizione', $descrizione)->first();
@@ -882,15 +887,6 @@ switch (post('op')) {
}
}
- // Aggiornamento sconto
- if (post('evadere')[$preventivo->scontoGlobale->id] == 'on') {
- $fattura->tipo_sconto_globale = $preventivo->tipo_sconto_globale;
- $fattura->sconto_globale = $preventivo->tipo_sconto_globale == 'PRC' ? $preventivo->sconto_globale : $preventivo->sconto_globale;
- $fattura->save();
-
- $fattura->updateSconto();
- }
-
// Impostazione del nuovo stato
$descrizione = $parziale ? 'Parzialmente fatturato' : 'Fatturato';
$stato = \Modules\Preventivi\Stato::where('descrizione', $descrizione)->first();
@@ -963,15 +959,6 @@ switch (post('op')) {
}
}
- // Aggiornamento sconto
- if (post('evadere')[$contratto->scontoGlobale->id] == 'on') {
- $fattura->tipo_sconto_globale = $contratto->tipo_sconto_globale;
- $fattura->sconto_globale = $contratto->tipo_sconto_globale == 'PRC' ? $contratto->sconto_globale : $contratto->sconto_globale;
- $fattura->save();
-
- $fattura->updateSconto();
- }
-
// Impostazione del nuovo stato
$descrizione = $parziale ? 'Parzialmente fatturato' : 'Fatturato';
$stato = \Modules\Contratti\Stato::where('descrizione', $descrizione)->first();
@@ -1032,15 +1019,6 @@ switch (post('op')) {
}
}
- // Aggiornamento sconto
- if (post('evadere')[$fattura->scontoGlobale->id] == 'on') {
- $nota->tipo_sconto_globale = $fattura->tipo_sconto_globale;
- $nota->sconto_globale = $fattura->tipo_sconto_globale == 'PRC' ? $fattura->sconto_globale : -$fattura->sconto_globale;
- $nota->save();
-
- $nota->updateSconto();
- }
-
$id_record = $nota->id;
break;
@@ -1093,14 +1071,3 @@ if (!empty($id_record) && setting('Cambia automaticamente stato ordini fatturati
$dbo->query('UPDATE or_ordini SET idstatoordine=(SELECT id FROM or_statiordine WHERE descrizione="'.get_stato_ordine($rs[$i]['idordine']).'") WHERE id = '.prepare($rs[$i]['idordine']));
}
}
-
-// Aggiornamento sconto sulle righe
-if (post('op') !== null && post('op') != 'update') {
- aggiorna_sconto([
- 'parent' => 'co_documenti',
- 'row' => 'co_righe_documenti',
- ], [
- 'parent' => 'id',
- 'row' => 'iddocumento',
- ], $id_record);
-}
diff --git a/modules/fatture/edit.php b/modules/fatture/edit.php
index 2071056cb..98d4f3cfe 100644
--- a/modules/fatture/edit.php
+++ b/modules/fatture/edit.php
@@ -238,11 +238,6 @@ if ($dir == 'uscita') {
-
-
- {[ "type": "number", "label": "", "name": "sconto_generico", "value": "$sconto_globale$", "help": "", "icon-after": "choice|untprc|$tipo_sconto_globale$" ]}
-
-
{[ "type": "checkbox", "label": "", "name": "split_payment", "value": "$split_payment$", "help": "", "placeholder": "" ]}
@@ -488,19 +483,24 @@ if ($record['stato'] != 'Pagato' && $record['stato'] != 'Emessa') {
$articoli = $dbo->fetchArray($art_query)[0]['tot'];
echo '
-
+
'.tr('Articolo').'
';
echo '
-
+
'.tr('Riga').'
';
echo '
-
+
'.tr('Descrizione').'
';
+
+ echo '
+
+ '.tr('Sconto/maggiorazione').'
+ ';
}
?>
diff --git a/modules/fatture/row-add.php b/modules/fatture/row-add.php
index f1505d59e..f03436bbf 100644
--- a/modules/fatture/row-add.php
+++ b/modules/fatture/row-add.php
@@ -1,34 +1,26 @@
fetchArray('SELECT * FROM co_documenti WHERE id='.prepare($id_record));
-$idanagrafica = $rs[0]['idanagrafica'];
-
-if ($module['name'] == 'Fatture di vendita') {
- $dir = 'entrata';
- $conti = 'conti-vendite';
-} else {
- $dir = 'uscita';
- $conti = 'conti-acquisti';
-}
-
-// Conto dalle impostazioni
-if (empty($idconto)) {
- $idconto = ($dir == 'entrata') ? setting('Conto predefinito fatture di vendita') : setting('Conto predefinito fatture di acquisto');
-}
+$documento = Fattura::find($id_record);
// Impostazioni per la gestione
$options = [
'op' => 'manage_riga',
'action' => 'add',
- 'dir' => $dir,
- 'conti' => $conti,
- 'idanagrafica' => $idanagrafica,
- 'show-ritenuta-contributi' => !empty($rs[0]['id_ritenuta_contributi']),
+ 'dir' => $documento->direzione,
+ 'conti' => $documento->direzione == 'entrata' ? 'conti-vendite' : 'conti-acquisti', 'idanagrafica' => $documento['idanagrafica'],
+ 'show-ritenuta-contributi' => !empty($documento['id_ritenuta_contributi']),
+ 'totale' => $documento->totale,
];
+// Conto dalle impostazioni
+if (empty($idconto)) {
+ $idconto = ($dir == 'entrata') ? setting('Conto predefinito fatture di vendita') : setting('Conto predefinito fatture di acquisto');
+}
+
// Dati di default
$result = [
'descrizione' => '',
@@ -73,6 +65,10 @@ if (get('is_descrizione') !== null) {
$file = 'articolo';
$options['op'] = 'manage_articolo';
+} elseif (get('is_sconto') !== null) {
+ $file = 'sconto';
+
+ $options['op'] = 'manage_sconto';
}
echo App::load($file.'.php', $result, $options);
diff --git a/modules/fatture/row-edit.php b/modules/fatture/row-edit.php
index 85798ff2d..08163bbfb 100644
--- a/modules/fatture/row-edit.php
+++ b/modules/fatture/row-edit.php
@@ -1,46 +1,43 @@
fetchArray('SELECT * FROM co_documenti WHERE id='.prepare($id_record));
-$idanagrafica = $rs[0]['idanagrafica'];
-
-if ($module['name'] == 'Fatture di vendita') {
- $dir = 'entrata';
- $conti = 'conti-vendite';
-} else {
- $dir = 'uscita';
- $conti = 'conti-acquisti';
-}
+$documento = Fattura::find($id_record);
// Impostazioni per la gestione
$options = [
'op' => 'manage_riga',
'action' => 'edit',
- 'dir' => $dir,
- 'conti' => $conti,
- 'idanagrafica' => $idanagrafica,
- 'edit_articolo' => false,
- 'show-ritenuta-contributi' => !empty($rs[0]['id_ritenuta_contributi']),
+ 'dir' => $documento->direzione,
+ 'conti' => $documento->direzione == 'entrata' ? 'conti-vendite' : 'conti-acquisti',
+ 'idanagrafica' => $documento['idanagrafica'],
+ 'show-ritenuta-contributi' => !empty($documento['id_ritenuta_contributi']),
+ 'totale' => $documento->totale,
];
// Dati della riga
-$riga = $dbo->fetchOne('SELECT * FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).' AND id='.prepare(get('idriga')));
+$id_riga = get('idriga');
+$riga = $documento->getRighe()->find($id_riga);
-$result = $riga;
-$result['prezzo'] = $riga['subtotale'] / $riga['qta'];
+$result = $riga->toArray();
+$result['prezzo'] = $riga->prezzo_unitario_vendita;
// Importazione della gestione dedicata
$file = 'riga';
-if (!empty($result['is_descrizione'])) {
+if ($riga->isDescrizione()) {
$file = 'descrizione';
$options['op'] = 'manage_descrizione';
-} elseif (!empty($result['idarticolo'])) {
+} elseif ($riga->isArticolo()) {
$file = 'articolo';
$options['op'] = 'manage_articolo';
+} elseif ($riga->isSconto()) {
+ $file = 'sconto';
+
+ $options['op'] = 'manage_sconto';
}
echo App::load($file.'.php', $result, $options);
diff --git a/modules/fatture/row-list.php b/modules/fatture/row-list.php
index 6aaf0a76a..30c5b2cae 100644
--- a/modules/fatture/row-list.php
+++ b/modules/fatture/row-list.php
@@ -78,7 +78,7 @@ foreach ($righe as $row) {
$delete = 'unlink_contratto';
}
- // Ordini (IDDOCUMENTO,CIG,CUP)
+ // Ordini (IDDOCUMENTO,CIG,CUP)
elseif (!empty($riga['idordine'])) {
$ordine = $dbo->fetchOne('SELECT num_item,codice_cig,codice_cup,id_documento_fe FROM or_ordini WHERE id = '.prepare($riga['idordine']));
$riga['num_item'] = $ordine['num_item'];
@@ -256,11 +256,11 @@ foreach ($righe as $row) {
if (!$fattura->isNotaDiAccredito() && $row->isArticolo() && $riga['abilita_serial'] && (empty($riga['idddt']) || empty($riga['idintervento']))) {
echo "
-
";
+
fileurl('add_serial.php').'?id_module='.$id_module.'&id_record='.$id_record.'&idriga='.$riga['id'].'&idarticolo='.$riga['idarticolo']."', 1 );\"> ";
}
echo "
-
+
fileurl('row-edit.php').'?id_module='.$id_module.'&id_record='.$id_record.'&idriga='.$riga['id']."', 1 );\">
@@ -278,19 +278,6 @@ foreach ($righe as $row) {
';
}
-$sconto_globale = $fattura->scontoGlobale;
-if (!empty($sconto_globale)) {
- echo '
-
- '.$sconto_globale->descrizione.'
- '.Translator::numberToLocale(1, 'qta').'
-
- '.Translator::numberToLocale($sconto_globale->totale).' €
- '.Translator::numberToLocale($sconto_globale->iva).' €
- '.Translator::numberToLocale($sconto_globale->totale).' €
- ';
-}
-
echo '
';
diff --git a/modules/fatture/src/Components/Sconto.php b/modules/fatture/src/Components/Sconto.php
deleted file mode 100644
index cb57e5349..000000000
--- a/modules/fatture/src/Components/Sconto.php
+++ /dev/null
@@ -1,33 +0,0 @@
-scontoGlobale;
-
- if ($model == null) {
- $model = parent::build();
-
- $model->setFattura($fattura);
- }
-
- return $model;
- }
-}
diff --git a/modules/fatture/src/Fattura.php b/modules/fatture/src/Fattura.php
index 47dc613f5..65dd7bcfd 100644
--- a/modules/fatture/src/Fattura.php
+++ b/modules/fatture/src/Fattura.php
@@ -132,7 +132,12 @@ class Fattura extends Document
*/
public function getModuleAttribute()
{
- return $this->tipo->dir == 'entrata' ? 'Fatture di vendita' : 'Fatture di acquisto';
+ return $this->direzione == 'entrata' ? 'Fatture di vendita' : 'Fatture di acquisto';
+ }
+
+ public function getDirezioneAttribute()
+ {
+ return $this->tipo->dir;
}
// Calcoli
@@ -234,11 +239,6 @@ class Fattura extends Document
return $this->hasMany(Components\Descrizione::class, 'iddocumento');
}
- public function scontoGlobale()
- {
- return $this->hasOne(Components\Sconto::class, 'iddocumento');
- }
-
public function ritenutaContributi()
{
return $this->belongsTo(RitenutaContributi::class, 'id_ritenuta_contributi');
@@ -398,18 +398,6 @@ class Fattura extends Document
return $this->tipo->reversed == 1;
}
- public function updateSconto()
- {
- // Aggiornamento sconto
- aggiorna_sconto([
- 'parent' => 'co_documenti',
- 'row' => 'co_righe_documenti',
- ], [
- 'parent' => 'id',
- 'row' => 'iddocumento',
- ], $this->id);
- }
-
// Metodi statici
/**
diff --git a/modules/interventi/actions.php b/modules/interventi/actions.php
index 3fe2dc5e8..4d5d355f3 100644
--- a/modules/interventi/actions.php
+++ b/modules/interventi/actions.php
@@ -5,6 +5,7 @@ include_once __DIR__.'/../../core.php';
use Modules\Anagrafiche\Anagrafica;
use Modules\Articoli\Articolo as ArticoloOriginale;
use Modules\Interventi\Components\Articolo;
+use Modules\Interventi\Components\Riga;
use Modules\Interventi\Intervento;
use Modules\Interventi\Stato;
use Modules\Interventi\TipoSessione;
@@ -19,9 +20,6 @@ switch (post('op')) {
$dbo->update('co_promemoria', ['idintervento' => null], ['idintervento' => $id_record]);
}
- $tipo_sconto = post('tipo_sconto_globale');
- $sconto = post('sconto_globale');
-
// Salvataggio modifiche intervento
$intervento->data_richiesta = post('data_richiesta');
$intervento->data_scadenza = post('data_scadenza');
@@ -40,9 +38,6 @@ switch (post('op')) {
$intervento->id_preventivo = post('idpreventivo');
$intervento->id_contratto = $idcontratto;
- $intervento->sconto_globale = $sconto;
- $intervento->tipo_sconto_globale = $tipo_sconto;
-
$intervento->id_documento_fe = post('id_documento_fe');
$intervento->num_item = post('num_item');
$intervento->codice_cup = post('codice_cup');
@@ -330,6 +325,31 @@ switch (post('op')) {
break;
+ case 'manage_sconto':
+ if (post('idriga') != null) {
+ $sconto = Riga::find(post('idriga'));
+ } else {
+ $sconto = Riga::build($intervento);
+ }
+
+ $sconto->qta = 1;
+
+ $sconto->descrizione = post('descrizione');
+ $sconto->id_iva = post('idiva');
+
+ $sconto->sconto_unitario = post('sconto_unitario');
+ $sconto->tipo_sconto = 'UNT';
+
+ $sconto->save();
+
+ if (post('idriga') != null) {
+ flash()->info(tr('Sconto/maggiorazione modificato!'));
+ } else {
+ flash()->info(tr('Sconto/maggiorazione aggiunta!'));
+ }
+
+ break;
+
/*
GESTIONE ARTICOLI
*/
diff --git a/modules/interventi/ajax_costi.php b/modules/interventi/ajax_costi.php
index 73c768151..f1430cea0 100644
--- a/modules/interventi/ajax_costi.php
+++ b/modules/interventi/ajax_costi.php
@@ -100,19 +100,5 @@ if ($show_prezzi) {
';
}
-// Lettura dello sconto incondizionato
-$rss = $dbo->fetchArray('SELECT sconto_globale, tipo_sconto_globale FROM in_interventi WHERE id='.prepare($id_record));
-$sconto = $rss[0]['sconto_globale'];
-$tipo_sconto = $rss[0]['tipo_sconto_globale'];
-
-echo '
-
-
-
-
- {[ "type": "number", "label": "'.tr('Sconto incondizionato').'", "name": "sconto_globale", "value": "'.$sconto.'", "icon-after": "choice|untprc|'.$tipo_sconto.'|'.$readonly.'", "extra": "'.$readonly.'" ]}
-
-
';
-
echo '
';
diff --git a/modules/interventi/ajax_righe.php b/modules/interventi/ajax_righe.php
index bc460ab61..c608c475c 100644
--- a/modules/interventi/ajax_righe.php
+++ b/modules/interventi/ajax_righe.php
@@ -90,9 +90,11 @@ if (count($rs2) > 0) {
// Pulsante per riportare nel magazzino centrale.
// Visibile solo se l'intervento non è stato nè fatturato nè completato.
if (!$record['flag_completato']) {
+ $link = $record['prezzo_vendita'] == 0 ? $structure->fileurl('row-edit.php') : $structure->fileurl('add_righe.php');
+
echo '
-
+
';
}
diff --git a/modules/interventi/edit.php b/modules/interventi/edit.php
index e20043970..8c191c8d2 100644
--- a/modules/interventi/edit.php
+++ b/modules/interventi/edit.php
@@ -98,11 +98,8 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
{[ "type": "select", "label": "", "name": "idzona", "values": "query=SELECT id, CONCAT_WS( ' - ', nome, descrizione) AS descrizione FROM an_zone ORDER BY nome", "value": "$idzona$" , "placeholder": "", "extra": "readonly", "help":"." ]}
-
-
-
diff --git a/modules/interventi/row-add.php b/modules/interventi/row-add.php
new file mode 100644
index 000000000..f3c749967
--- /dev/null
+++ b/modules/interventi/row-add.php
@@ -0,0 +1,59 @@
+ 'manage_riga',
+ 'action' => 'add',
+ 'dir' => $documento->direzione,
+ 'idanagrafica' => $documento['idanagrafica'],
+ 'totale' => $documento->totale,
+];
+
+// Dati di default
+$result = [
+ 'descrizione' => '',
+ 'qta' => 1,
+ 'um' => '',
+ 'prezzo' => 0,
+ 'sconto_unitario' => 0,
+ 'tipo_sconto' => '',
+ 'idiva' => '',
+ 'idconto' => $idconto,
+ 'ritenuta_contributi' => true,
+];
+
+// Leggo l'iva predefinita per l'anagrafica e se non c'è leggo quella predefinita generica
+$iva = $dbo->fetchArray('SELECT idiva_vendite AS idiva FROM an_anagrafiche WHERE idanagrafica='.prepare($documento['idanagrafica']));
+$result['idiva'] = $iva[0]['idiva'] ?: setting('Iva predefinita');
+
+// Aggiunta sconto di default da listino per le vendite
+$listino = $dbo->fetchArray('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_listini ON an_anagrafiche.idlistino_vendite=mg_listini.id WHERE idanagrafica='.prepare($documento['idanagrafica']));
+
+if ($listino[0]['prc_guadagno'] > 0) {
+ $result['sconto_unitario'] = $listino[0]['prc_guadagno'];
+ $result['tipo_sconto'] = 'PRC';
+}
+
+// Importazione della gestione dedicata
+$file = 'riga';
+if (get('is_descrizione') !== null) {
+ $file = 'descrizione';
+
+ $options['op'] = 'manage_descrizione';
+} elseif (get('is_articolo') !== null) {
+ $file = 'articolo';
+
+ $options['op'] = 'manage_articolo';
+} elseif (get('is_sconto') !== null) {
+ $file = 'sconto';
+
+ $options['op'] = 'manage_sconto';
+}
+
+echo App::load($file.'.php', $result, $options);
diff --git a/modules/interventi/row-edit.php b/modules/interventi/row-edit.php
new file mode 100644
index 000000000..3016ef763
--- /dev/null
+++ b/modules/interventi/row-edit.php
@@ -0,0 +1,41 @@
+ 'manage_riga',
+ 'action' => 'edit',
+ 'dir' => $documento->direzione,
+ 'idanagrafica' => $documento['idanagrafica'],
+ 'totale' => $documento->totale,
+];
+
+// Dati della riga
+$id_riga = get('idriga');
+$riga = $documento->getRighe()->find($id_riga);
+
+$result = $riga->toArray();
+$result['prezzo'] = $riga->prezzo_unitario_vendita;
+
+// Importazione della gestione dedicata
+$file = 'riga';
+if ($riga->isDescrizione()) {
+ $file = 'descrizione';
+
+ $options['op'] = 'manage_descrizione';
+} elseif ($riga->isArticolo()) {
+ $file = 'articolo';
+
+ $options['op'] = 'manage_articolo';
+} elseif ($riga->isSconto()) {
+ $file = 'sconto';
+
+ $options['op'] = 'manage_sconto';
+}
+
+echo App::load($file.'.php', $result, $options);
diff --git a/modules/interventi/src/Components/Articolo.php b/modules/interventi/src/Components/Articolo.php
index 51440faea..5ad4c58d2 100644
--- a/modules/interventi/src/Components/Articolo.php
+++ b/modules/interventi/src/Components/Articolo.php
@@ -12,7 +12,6 @@ class Articolo extends Article
protected $table = 'mg_articoli_interventi';
protected $serialRowID = 'intervento';
- protected $disableOrder = true;
/**
* Crea una nuova riga collegata ad un intervento.
diff --git a/modules/interventi/src/Components/RelationTrait.php b/modules/interventi/src/Components/RelationTrait.php
index aed9c0490..2ff6d3901 100644
--- a/modules/interventi/src/Components/RelationTrait.php
+++ b/modules/interventi/src/Components/RelationTrait.php
@@ -6,6 +6,8 @@ use Modules\Interventi\Intervento;
trait RelationTrait
{
+ protected $disableOrder = true;
+
public function getParentID()
{
return 'idintervento';
diff --git a/modules/interventi/src/Intervento.php b/modules/interventi/src/Intervento.php
index 09bafee2a..def250188 100644
--- a/modules/interventi/src/Intervento.php
+++ b/modules/interventi/src/Intervento.php
@@ -77,12 +77,7 @@ class Intervento extends Document
public function descrizioni()
{
- return null;
- }
-
- public function scontoGlobale()
- {
- return null;
+ return $this->righe()->where('prezzo_vendita', 0);
}
// Metodi statici
diff --git a/modules/listini/add.php b/modules/listini/add.php
index 289b50725..d10f21812 100644
--- a/modules/listini/add.php
+++ b/modules/listini/add.php
@@ -12,7 +12,7 @@ include_once __DIR__.'/../../core.php';
- {[ "type": "number", "label": "", "name": "prc_guadagno", "required": 1, "value": "0", "icon-after": "%", "help": "" ]}
+ {[ "type": "number", "label": "", "name": "prc_guadagno", "required": 1, "value": "0", "icon-after": "%", "help": "" ]}
diff --git a/modules/ordini/actions.php b/modules/ordini/actions.php
index 6cb4b298f..9a14c7390 100644
--- a/modules/ordini/actions.php
+++ b/modules/ordini/actions.php
@@ -77,9 +77,6 @@ switch (post('op')) {
'idrivalsainps' => $idrivalsainps,
'idritenutaacconto' => $idritenutaacconto,
- 'sconto_globale' => $sconto,
- 'tipo_sconto_globale' => $tipo_sconto,
-
'bollo' => 0,
'rivalsainps' => 0,
'ritenutaacconto' => 0,
@@ -91,14 +88,6 @@ switch (post('op')) {
], ['id' => $id_record]);
if ($dbo->query($query)) {
- aggiorna_sconto([
- 'parent' => 'or_ordini',
- 'row' => 'or_righe_ordini',
- ], [
- 'parent' => 'id',
- 'row' => 'idordine',
- ], $id_record);
-
$query = 'SELECT descrizione FROM or_statiordine WHERE id='.prepare($idstatoordine);
$rs = $dbo->fetchArray($query);
@@ -140,7 +129,9 @@ switch (post('op')) {
flash()->info(tr('Articolo aggiunto!'));
}
+
ricalcola_costiagg_ordine($id_record);
+
break;
case 'addriga':
@@ -181,11 +172,7 @@ switch (post('op')) {
}
// Ricalcolo inps, ritenuta e bollo
- if ($dir == 'entrata') {
- ricalcola_costiagg_ordine($id_record);
- } else {
- ricalcola_costiagg_ordine($id_record);
- }
+ ricalcola_costiagg_ordine($id_record);
break;
@@ -234,6 +221,34 @@ switch (post('op')) {
}
break;
+ case 'manage_sconto':
+ if (post('idriga') != null) {
+ $sconto = Riga::find(post('idriga'));
+ } else {
+ $sconto = Riga::build($ordine);
+ }
+
+ $sconto->qta = 1;
+
+ $sconto->descrizione = post('descrizione');
+ $sconto->id_iva = post('idiva');
+
+ $sconto->sconto_unitario = post('sconto_unitario');
+ $sconto->tipo_sconto = 'UNT';
+
+ $sconto->save();
+
+ if (post('idriga') != null) {
+ flash()->info(tr('Sconto/maggiorazione modificato!'));
+ } else {
+ flash()->info(tr('Sconto/maggiorazione aggiunta!'));
+ }
+
+ // Ricalcolo inps, ritenuta e bollo
+ ricalcola_costiagg_ordine($id_record);
+
+ break;
+
// Modifica riga
case 'editriga':
if (post('idriga') !== null) {
@@ -289,11 +304,7 @@ switch (post('op')) {
flash()->info(tr('Riga modificata!'));
// Ricalcolo inps, ritenuta e bollo
- if ($dir == 'entrata') {
- ricalcola_costiagg_ordine($id_record);
- } else {
- ricalcola_costiagg_ordine($id_record);
- }
+ ricalcola_costiagg_ordine($id_record);
}
}
break;
@@ -367,7 +378,7 @@ switch (post('op')) {
$qta = post('qta_da_evadere')[$riga->id];
$copia = $riga->copiaIn($ordine, $qta);
-
+
// Aggiornamento seriali dalla riga dell'ordine
if ($copia->isArticolo()) {
$copia->movimenta($copia->qta);
@@ -381,15 +392,6 @@ switch (post('op')) {
}
}
- // Aggiornamento sconto
- if (post('evadere')[$preventivo->scontoGlobale->id] == 'on') {
- $ordine->tipo_sconto_globale = $preventivo->tipo_sconto_globale;
- $ordine->sconto_globale = $preventivo->tipo_sconto_globale == 'PRC' ? $preventivo->sconto_globale : $preventivo->sconto_globale;
- $ordine->save();
-
- $ordine->updateSconto();
- }
-
ricalcola_costiagg_ordine($id_record);
flash()->info(tr('Preventivo _NUM_ aggiunto!', [
@@ -398,13 +400,3 @@ switch (post('op')) {
break;
}
-
-if (post('op') !== null && post('op') != 'update') {
- aggiorna_sconto([
- 'parent' => 'or_ordini',
- 'row' => 'or_righe_ordini',
- ], [
- 'parent' => 'id',
- 'row' => 'idordine',
- ], $id_record);
-}
diff --git a/modules/ordini/edit.php b/modules/ordini/edit.php
index 2811b661b..5130e8707 100644
--- a/modules/ordini/edit.php
+++ b/modules/ordini/edit.php
@@ -85,12 +85,6 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
-
-
- {[ "type": "number", "label": "", "name": "sconto_generico", "value": "$sconto_globale$", "icon-after": "choice|untprc|$tipo_sconto_globale$", "readonly": "" ]}
-
-
-
{[ "type": "textarea", "label": "", "name": "note", "value": "$note$", "readonly": "" ]}
@@ -142,19 +136,31 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
diff --git a/modules/ordini/row-add.php b/modules/ordini/row-add.php
index 2271c8b2a..9e7461dca 100644
--- a/modules/ordini/row-add.php
+++ b/modules/ordini/row-add.php
@@ -1,23 +1,19 @@
fetchArray('SELECT * FROM or_ordini WHERE id='.prepare($id_record));
-$idanagrafica = $rs[0]['idanagrafica'];
-
-if ($module['name'] == 'Ordini cliente') {
- $dir = 'entrata';
-} else {
- $dir = 'uscita';
-}
+$documento = Ordine::find($id_record);
// Impostazioni per la gestione
$options = [
'op' => 'addriga',
'action' => 'add',
- 'dir' => $dir,
- 'idanagrafica' => $idanagrafica,
+ 'dir' => $documento->direzione,
+ 'idanagrafica' => $documento['idanagrafica'],
+ 'totale' => $documento->totale,
];
// Dati di default
@@ -32,11 +28,11 @@ $result = [
];
// Leggo l'iva predefinita per l'anagrafica e se non c'è leggo quella predefinita generica
-$iva = $dbo->fetchArray('SELECT idiva_'.($dir == 'uscita' ? 'acquisti' : 'vendite').' AS idiva FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica));
+$iva = $dbo->fetchArray('SELECT idiva_'.($dir == 'uscita' ? 'acquisti' : 'vendite').' AS idiva FROM an_anagrafiche WHERE idanagrafica='.prepare($documento['idanagrafica']));
$result['idiva'] = $iva[0]['idiva'] ?: setting('Iva predefinita');
// Aggiunta sconto di default da listino per le vendite
-$listino = $dbo->fetchArray('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_listini ON an_anagrafiche.idlistino_'.($dir == 'uscita' ? 'acquisti' : 'vendite').'=mg_listini.id WHERE idanagrafica='.prepare($idanagrafica));
+$listino = $dbo->fetchArray('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_listini ON an_anagrafiche.idlistino_'.($dir == 'uscita' ? 'acquisti' : 'vendite').'=mg_listini.id WHERE idanagrafica='.prepare($documento['idanagrafica']));
if ($listino[0]['prc_guadagno'] > 0) {
$result['sconto_unitario'] = $listino[0]['prc_guadagno'];
@@ -51,6 +47,10 @@ if (get('is_descrizione') !== null) {
$file = 'articolo';
$options['op'] = 'addarticolo';
+} elseif (get('is_sconto') !== null) {
+ $file = 'sconto';
+
+ $options['op'] = 'manage_sconto';
}
echo App::load($file.'.php', $result, $options);
diff --git a/modules/ordini/row-edit.php b/modules/ordini/row-edit.php
index f151e2598..f19c6b198 100644
--- a/modules/ordini/row-edit.php
+++ b/modules/ordini/row-edit.php
@@ -1,38 +1,38 @@
fetchArray('SELECT * FROM or_ordini WHERE id='.prepare($id_record));
-$idanagrafica = $rs[0]['idanagrafica'];
-
-if ($module['name'] == 'Ordini cliente') {
- $dir = 'entrata';
-} else {
- $dir = 'uscita';
-}
+$documento = Ordine::find($id_record);
// Impostazioni per la gestione
$options = [
'op' => 'editriga',
'action' => 'edit',
- 'dir' => $dir,
- 'idanagrafica' => $idanagrafica,
- 'edit_articolo' => false,
+ 'dir' => $documento->direzione,
+ 'idanagrafica' => $documento['idanagrafica'],
+ 'totale' => $documento->totale,
];
// Dati della riga
-$rsr = $dbo->fetchArray('SELECT * FROM or_righe_ordini WHERE idordine='.prepare($id_record).' AND id='.prepare(get('idriga')));
+$id_riga = get('idriga');
+$riga = $documento->getRighe()->find($id_riga);
-$result = $rsr[0];
-$result['prezzo'] = $rsr[0]['subtotale'] / $rsr[0]['qta'];
+$result = $riga->toArray();
+$result['prezzo'] = $riga->prezzo_unitario_vendita;
// Importazione della gestione dedicata
$file = 'riga';
-if (!empty($result['is_descrizione'])) {
+if ($riga->isDescrizione()) {
$file = 'descrizione';
-} elseif (!empty($result['idarticolo'])) {
+} elseif ($riga->isArticolo()) {
$file = 'articolo';
+} elseif ($riga->isSconto()) {
+ $file = 'sconto';
+
+ $options['op'] = 'manage_sconto';
}
echo App::load($file.'.php', $result, $options);
diff --git a/modules/ordini/row-list.php b/modules/ordini/row-list.php
index c6fb6a158..a446272d4 100644
--- a/modules/ordini/row-list.php
+++ b/modules/ordini/row-list.php
@@ -80,13 +80,9 @@ if (!empty($rs)) {
echo '
';
if (empty($r['is_descrizione'])) {
- if (empty($r['sconto_globale'])) {
- echo '
- '.Translator::numberToLocale($r['qta'] - $r['qta_evasa'], 'qta').'
- ('.tr('Q.tà iniziale').': '.Translator::numberToLocale($r['qta'], 'qta').') ';
- } else {
- echo '1';
- }
+ echo '
+ '.Translator::numberToLocale($r['qta'] - $r['qta_evasa'], 'qta').'
+ ('.tr('Q.tà iniziale').': '.Translator::numberToLocale($r['qta'], 'qta').') ';
}
echo '
';
@@ -144,7 +140,7 @@ if (!empty($rs)) {
echo '
';
- if ($record['flag_completato'] == 0 && empty($r['sconto_globale'])) {
+ if ($record['flag_completato'] == 0) {
echo "
";
}
- if (empty($r['sconto_globale'])) {
- echo '
-
-
-
';
- }
-
echo '
diff --git a/modules/ordini/src/Components/Sconto.php b/modules/ordini/src/Components/Sconto.php
deleted file mode 100644
index 15c470a45..000000000
--- a/modules/ordini/src/Components/Sconto.php
+++ /dev/null
@@ -1,33 +0,0 @@
-scontoGlobale;
-
- if ($model == null) {
- $model = parent::build();
-
- $model->setOrdine($ordine);
- }
-
- return $model;
- }
-}
diff --git a/modules/ordini/src/Ordine.php b/modules/ordini/src/Ordine.php
index fb0b352ac..27db861eb 100644
--- a/modules/ordini/src/Ordine.php
+++ b/modules/ordini/src/Ordine.php
@@ -77,19 +77,12 @@ class Ordine extends Document
*/
public function getModuleAttribute()
{
- return $this->tipo->dir == 'entrata' ? 'Ordini cliente' : 'Ordini fornitore';
+ return $this->direzione == 'entrata' ? 'Ordini cliente' : 'Ordini fornitore';
}
- public function updateSconto()
+ public function getDirezioneAttribute()
{
- // Aggiornamento sconto
- aggiorna_sconto([
- 'parent' => 'or_ordini',
- 'row' => 'or_righe_ordini',
- ], [
- 'parent' => 'id',
- 'row' => 'idordine',
- ], $this->id);
+ return $this->tipo->dir;
}
public function anagrafica()
@@ -122,11 +115,6 @@ class Ordine extends Document
return $this->hasMany(Components\Descrizione::class, 'idordine');
}
- public function scontoGlobale()
- {
- return $this->hasOne(Components\Sconto::class, 'idordine');
- }
-
// Metodi statici
/**
diff --git a/modules/preventivi/actions.php b/modules/preventivi/actions.php
index 51e415ddc..18707f541 100644
--- a/modules/preventivi/actions.php
+++ b/modules/preventivi/actions.php
@@ -80,8 +80,6 @@ switch (post('op')) {
' data_conclusione='.prepare($data_conclusione).','.
' esclusioni='.prepare($esclusioni).','.
' descrizione='.prepare($descrizione).','.
- ' tipo_sconto_globale='.prepare($tipo_sconto).','.
- ' sconto_globale='.prepare($sconto).','.
' id_documento_fe='.prepare($id_documento_fe).','.
' num_item='.prepare($num_item).','.
' codice_cig='.prepare($codice_cig).','.
@@ -91,14 +89,6 @@ switch (post('op')) {
' idiva='.prepare($idiva).' WHERE id='.prepare($id_record);
$dbo->query($query);
- aggiorna_sconto([
- 'parent' => 'co_preventivi',
- 'row' => 'co_righe_preventivi',
- ], [
- 'parent' => 'id',
- 'row' => 'idpreventivo',
- ], $id_record);
-
// update_budget_preventivo( $id_record );
flash()->info(tr('Preventivo modificato correttamente!'));
}
@@ -240,6 +230,31 @@ switch (post('op')) {
break;
+ case 'manage_sconto':
+ if (post('idriga') != null) {
+ $sconto = Riga::find(post('idriga'));
+ } else {
+ $sconto = Riga::build($preventivo);
+ }
+
+ $sconto->qta = 1;
+
+ $sconto->descrizione = post('descrizione');
+ $sconto->id_iva = post('idiva');
+
+ $sconto->sconto_unitario = post('sconto_unitario');
+ $sconto->tipo_sconto = 'UNT';
+
+ $sconto->save();
+
+ if (post('idriga') != null) {
+ flash()->info(tr('Sconto/maggiorazione modificato!'));
+ } else {
+ flash()->info(tr('Sconto/maggiorazione aggiunta!'));
+ }
+
+ break;
+
case 'editriga':
$idriga = post('idriga');
$descrizione = post('descrizione');
@@ -327,8 +342,6 @@ switch (post('op')) {
'ore_lavoro' => $rs_preventivo[0]['ore_lavoro'],
'costo_orario' => $rs_preventivo[0]['costo_orario'],
'costo_km' => $rs_preventivo[0]['costo_km'],
- 'sconto_globale' => $rs_preventivo[0]['sconto_globale'],
- 'tipo_sconto_globale' => $rs_preventivo[0]['tipo_sconto_globale'],
'master_revision' => $rs_preventivo[0]['master_revision'],
'default_revision' => '1',
];
@@ -365,13 +378,3 @@ switch (post('op')) {
flash()->info(tr('Aggiunta nuova revisione!'));
break;
}
-
-if (post('op') !== null && post('op') != 'update') {
- aggiorna_sconto([
- 'parent' => 'co_preventivi',
- 'row' => 'co_righe_preventivi',
- ], [
- 'parent' => 'id',
- 'row' => 'idpreventivo',
- ], $id_record);
-}
diff --git a/modules/preventivi/edit.php b/modules/preventivi/edit.php
index a5d23ec56..7b2c141e2 100644
--- a/modules/preventivi/edit.php
+++ b/modules/preventivi/edit.php
@@ -93,12 +93,6 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
-
-
- {[ "type": "number", "label": "", "name": "sconto_generico", "value": "$sconto_globale$", "icon-after": "choice|untprc|$tipo_sconto_globale$" ]}
-
-
-
{[ "type": "textarea", "label": "", "name": "esclusioni", "class": "autosize", "value": "$esclusioni$" ]}
@@ -156,17 +150,31 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
-
+/modules/preventivi/row-add.php?id_module=&id_record=&is_articolo" data-toggle="modal" data-title="Aggiungi articolo">
+if ($record['stato'] != 'Pagato') {
+ echo '
+
+ '.tr('Articolo').'
+ ';
-
+ echo '
+
+ '.tr('Riga').'
+ ';
-
+ echo '
+
+ '.tr('Descrizione').'
+ ';
-
+ echo '
+
+ '.tr('Sconto/maggiorazione').'
+ ';
+}
+
+?>