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 '
@@ -121,13 +121,6 @@ foreach ($rs as $r) {
'; } - 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": "" ]} -
-
-
{[ "type": "textarea", "label": "", "name": "note", "value": "$note$", "readonly": "" ]} @@ -203,19 +197,27 @@ if ($record['flag_completato'] == 0) { echo ' '.tr('Ordine').' - '; ?> - - - + '; - - - + echo ' + + '.tr('Articolo').' + '; - - - -fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_riga" data-toggle="tooltip" data-title="'.tr('Aggiungi riga').'"> + '.tr('Riga').' + '; + + echo ' + + '.tr('Descrizione').' + '; + + echo ' + + '.tr('Sconto/maggiorazione').' + '; } ?>
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 "
@@ -180,13 +176,6 @@ if (!empty($rs)) {
"; } - 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":"." ]} - - -
@@ -247,21 +244,29 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
-
- -
+ - - +if (!$record['flag_completato']) { + echo ' + + '.tr('Altre spese').'... + '; + + echo ' + + '.tr('Sconto/maggiorazione').' + '; +} + +?> +
+
+ +
+filepath('ajax_righe.php'); +?> +
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'];
- - +if ($record['flag_completato'] == 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/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 "
@@ -175,13 +171,6 @@ if (!empty($rs)) {
"; } - 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').' + '; +} + +?>