Aggiornamento sconti incodizionati

This commit is contained in:
Thomas Zilio 2019-03-29 12:46:17 +01:00
parent 619e7375be
commit c72c01a690
55 changed files with 706 additions and 897 deletions

58
include/common/sconto.php Normal file
View File

@ -0,0 +1,58 @@
<?php
// Descrizione
echo App::internalLoad('descrizione.php', $result, $options);
// Conti, rivalsa INPS e ritenuta d'acconto
echo App::internalLoad('conti.php', $result, $options);
// Sconto percentuale
echo '
<div class="row">
<div class="col-md-4">
{[ "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').'" ]}
</div>';
// Sconto unitario
echo '
<div class="col-md-4">
{[ "type": "number", "label": "'.tr('Sconto/maggiorazione unitario').'", "name": "sconto_unitario", "value": "'.$result['sconto_unitario'].'", "icon-after": "&euro;", "help": "'.tr('Il valore positivo indica uno sconto: per applicare una maggiorazione inserire un valore negativo').'" ]}
</div>';
// Iva
echo '
<div class="col-md-4">
{[ "type": "select", "label": "'.tr('Iva').'", "name": "idiva", "required": 1, "value": "'.$result['idiva'].'", "ajax-source": "iva" ]}
</div>
</div>';
// Funzione per l'aggiornamento in tempo reale del guadagno
echo '
<script>
var descrizione = $("#descrizione_riga");
var form = descrizione.closest("form");
var sconto_percentuale = form.find("#sconto_percentuale");
var sconto_unitario = form.find("#sconto_unitario");
var totale = '.$options['totale'].';
function aggiorna_sconto_percentuale() {
var sconto = sconto_percentuale.val().toEnglish();
var unitario = sconto / 100 * totale;
msg = sconto >= 0 ? "'.tr('Sconto percentuale').'" : "'.tr('Maggiorazione percentuale').'";
sconto_unitario.val(unitario.toLocale());
descrizione.val(msg + " " + Math.abs(sconto).toLocale() + "%");
}
function aggiorna_sconto_unitario(){
msg = sconto_unitario.val().toEnglish() >= 0 ? "'.tr('Sconto unitario').'" : "'.tr('Maggiorazione unitaria').'";
descrizione.val(msg);
}
sconto_percentuale.keyup(aggiorna_sconto_percentuale);
sconto_unitario.keyup(aggiorna_sconto_unitario);
</script>';

View File

@ -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);
});
}
}

View File

@ -1,75 +0,0 @@
<?php
namespace Common\Components;
use Common\Model;
use Illuminate\Database\Eloquent\Builder;
abstract class Discount extends Model
{
public static function build()
{
$model = parent::build();
$model->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);
});
}
}

View File

@ -24,8 +24,6 @@ abstract class Document extends Model
abstract public function descrizioni();
abstract public function scontoGlobale();
/**
* Calcola l'imponibile del documento.
*

View File

@ -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();

View File

@ -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);
}

View File

@ -108,14 +108,6 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
<div class="col-md-3">
{[ "type": "select", "multiple": "1", "label": "<?php echo tr('Impianti'); ?>", "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$" ]}
</div>
<div class="col-md-3">
{[ "type": "number", "label": "<?php echo tr('Sconto incondizionato'); ?>", "name": "sconto_generico", "value": "$sconto_globale$", "help": "<?php echo tr('Sconto complessivo del contratto'); ?>", "icon-after": "choice|untprc|$tipo_sconto_globale$"<?php
if ($record['stato'] == 'Emessa') {
echo ', "disabled" : 1';
}
?> ]}
</div>
</div>
@ -302,13 +294,25 @@ if (sizeof($rs) > 0) {
<div class="panel-body">
<?php
if ($record['stato'] != 'Pagato') {
?>
<a class="btn btn-primary" data-href="<?php echo $rootdir; ?>/modules/contratti/row-add.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&is_articolo" data-toggle="modal" data-title="Aggiungi articolo"><i class="fa fa-plus"></i> <?php echo tr('Articolo'); ?></a>
echo '
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_articolo" data-toggle="tooltip" data-title="'.tr('Aggiungi articolo').'">
<i class="fa fa-plus"></i> '.tr('Articolo').'
</a>';
<a class="btn btn-primary" data-href="<?php echo $rootdir; ?>/modules/contratti/row-add.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&is_riga" data-toggle="modal" data-title="Aggiungi riga"><i class="fa fa-plus"></i> <?php echo tr('Riga'); ?></a>
echo '
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_riga" data-toggle="tooltip" data-title="'.tr('Aggiungi riga').'">
<i class="fa fa-plus"></i> '.tr('Riga').'
</a>';
<a class="btn btn-primary" data-href="<?php echo $rootdir; ?>/modules/contratti/row-add.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&is_descrizione" data-toggle="modal" data-title="Aggiungi descrizione"><i class="fa fa-plus"></i> <?php echo tr('Descrizione'); ?></a>
<?php
echo '
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_descrizione" data-toggle="tooltip" data-title="'.tr('Aggiungi descrizione').'">
<i class="fa fa-plus"></i> '.tr('Descrizione').'
</a>';
echo '
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_sconto" data-toggle="tooltip" data-title="'.tr('Aggiungi sconto/maggiorazione').'">
<i class="fa fa-plus"></i> '.tr('Sconto/maggiorazione').'
</a>';
}
?>
<div class="clearfix"></div>

View File

@ -1,17 +1,19 @@
<?php
use Modules\Contratti\Contratto;
include_once __DIR__.'/../../core.php';
// Info contratto
$rs = $dbo->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);

View File

@ -1,31 +1,40 @@
<?php
use Modules\Contratti\Contratto;
include_once __DIR__.'/../../core.php';
// Info contratto
$rs = $dbo->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);

View File

@ -101,7 +101,7 @@ foreach ($rs as $r) {
echo '
<td class="text-center">';
if ($record['stato'] != 'Pagato' && empty($r['sconto_globale'])) {
if ($record['stato'] != 'Pagato') {
echo '
<form action="'.$rootdir.'/editor.php?id_module='.Modules::get('Contratti')['id'].'&id_record='.$id_record.'" method="post" id="delete-form-'.$r['id'].'" role="form">
<input type="hidden" name="backto" value="record-edit">
@ -121,13 +121,6 @@ foreach ($rs as $r) {
</form>';
}
if (empty($r['sconto_globale'])) {
echo '
<div class="handle clickable" style="padding:10px">
<i class="fa fa-sort"></i>
</div>';
}
echo '
</td>
</tr>';

View File

@ -1,33 +0,0 @@
<?php
namespace Modules\Contratti\Components;
use Common\Components\Discount;
use Modules\Contratti\Contratto;
class Sconto extends Discount
{
use RelationTrait;
protected $table = 'co_righe_contratti';
/**
* Crea una nuovo sconto globale collegato alla contratto, oppure restituisce quello esistente.
*
* @param Contratto $contratto
*
* @return self
*/
public static function build(Contratto $contratto)
{
$model = $contratto->scontoGlobale;
if ($model == null) {
$model = parent::build();
$model->setContratto($contratto);
}
return $model;
}
}

View File

@ -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');

View File

@ -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);
}

View File

@ -164,12 +164,6 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
</script>
</div>
<div class="row">
<div class="col-md-3">
{[ "type": "number", "label": "<?php echo tr('Sconto incondizionato'); ?>", "name": "sconto_generico", "value": "$sconto_globale$", "icon-after": "choice|untprc|$tipo_sconto_globale$", "readonly": "<?php echo $record['flag_completato']; ?>" ]}
</div>
</div>
<div class="row">
<div class="col-md-12">
{[ "type": "textarea", "label": "<?php echo tr('Note'); ?>", "name": "note", "value": "$note$", "readonly": "<?php echo $record['flag_completato']; ?>" ]}
@ -203,19 +197,27 @@ if ($record['flag_completato'] == 0) {
echo '
<a class="btn btn-primary'.(!empty($ordini) ? '' : ' disabled').'" data-href="'.$rootdir.'/modules/ddt/add_ordine.php?id_module='.$id_module.'&id_record='.$id_record.'" data-toggle="modal" data-title="Aggiungi ordine">
<i class="fa fa-plus"></i> '.tr('Ordine').'
</a>'; ?>
<a class="btn btn-primary" data-href="<?php echo $rootdir; ?>/modules/ddt/row-add.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&is_articolo" data-toggle="modal" data-title="Aggiungi articolo">
<i class="fa fa-plus"></i> <?php echo tr('Articolo'); ?>
</a>
</a>';
<a class="btn btn-primary" data-href="<?php echo $rootdir; ?>/modules/ddt/row-add.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&is_riga" data-toggle="modal" data-title="Aggiungi riga">
<i class="fa fa-plus"></i> <?php echo tr('Riga'); ?>
</a>
echo '
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_articolo" data-toggle="tooltip" data-title="'.tr('Aggiungi articolo').'">
<i class="fa fa-plus"></i> '.tr('Articolo').'
</a>';
<a class="btn btn-primary" data-href="<?php echo $rootdir; ?>/modules/ddt/row-add.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&is_descrizione" data-toggle="modal" data-title="Aggiungi descrizione">
<i class="fa fa-plus"></i> <?php echo tr('Descrizione'); ?>
</a>
<?php
echo '
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_riga" data-toggle="tooltip" data-title="'.tr('Aggiungi riga').'">
<i class="fa fa-plus"></i> '.tr('Riga').'
</a>';
echo '
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_descrizione" data-toggle="tooltip" data-title="'.tr('Aggiungi descrizione').'">
<i class="fa fa-plus"></i> '.tr('Descrizione').'
</a>';
echo '
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_sconto" data-toggle="tooltip" data-title="'.tr('Aggiungi sconto/maggiorazione').'">
<i class="fa fa-plus"></i> '.tr('Sconto/maggiorazione').'
</a>';
}
?>
</div>

View File

@ -1,23 +1,19 @@
<?php
use Modules\DDT\DDT;
include_once __DIR__.'/../../core.php';
// Info contratto
$rs = $dbo->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);

View File

@ -1,38 +1,38 @@
<?php
use Modules\DDT\DDT;
include_once __DIR__.'/../../core.php';
// Info contratto
$rs = $dbo->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);

View File

@ -78,13 +78,9 @@ if (!empty($rs)) {
echo '
<td class="text-center">';
if (empty($r['is_descrizione'])) {
if (empty($r['sconto_globale'])) {
echo '
echo '
<big>'.Translator::numberToLocale($r['qta'] - $r['qta_evasa'], 'qta').'</big>
<br><small>('.tr('Q. iniziale').': '.Translator::numberToLocale($r['qta'], 'qta').')</small>';
} else {
echo '1';
}
}
echo '
</td>';
@ -141,7 +137,7 @@ if (!empty($rs)) {
// Possibilità di rimuovere una riga solo se il ddt non è evaso
echo '
<td class="text-center">';
if ($record['flag_completato'] == 0 && empty($r['sconto_globale'])) {
if ($record['flag_completato'] == 0) {
echo "
<form action='".$rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record."' method='post' id='delete-form-".$r['id']."' role='form'>
<input type='hidden' name='backto' value='record-edit'>
@ -180,13 +176,6 @@ if (!empty($rs)) {
</form>";
}
if (empty($r['sconto_globale'])) {
echo '
<div class="handle clickable" style="padding:10px">
<i class="fa fa-sort"></i>
</div>';
}
echo '
</td>
</tr>';

View File

@ -1,33 +0,0 @@
<?php
namespace Modules\DDT\Components;
use Common\Components\Discount;
use Modules\DDT\DDT;
class Sconto extends Discount
{
use RelationTrait;
protected $table = 'dt_righe_ddt';
/**
* Crea una nuovo sconto globale collegato alla ddt, oppure restituisce quello esistente.
*
* @param DDT $ddt
*
* @return self
*/
public static function build(DDT $ddt)
{
$model = $ddt->scontoGlobale;
if ($model == null) {
$model = parent::build();
$model->setDDT($ddt);
}
return $model;
}
}

View File

@ -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
/**

View File

@ -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);
}

View File

@ -238,11 +238,6 @@ if ($dir == 'uscita') {
<div class="row">
<div class="col-md-3">
{[ "type": "number", "label": "<?php echo tr('Sconto incondizionato'); ?>", "name": "sconto_generico", "value": "$sconto_globale$", "help": "<?php echo tr('Sconto complessivo della fattura. Il valore positivo indica uno sconto. Per applicare un rincaro inserire un valore negativo.'); ?>", "icon-after": "choice|untprc|$tipo_sconto_globale$"<?php echo ($record['stato'] == 'Emessa') ? ', "disabled" : 1' : ''; ?> ]}
</div>
<div class="col-md-3">
{[ "type": "checkbox", "label": "<?php echo tr('Split payment'); ?>", "name": "split_payment", "value": "$split_payment$", "help": "<?php echo tr('Abilita lo split payment per questo documento. Le aliquote iva con natura N6 (reverse charge) non saranno disponibili.'); ?>", "placeholder": "<?php echo tr('Split payment'); ?>" ]}
</div>
@ -488,19 +483,24 @@ if ($record['stato'] != 'Pagato' && $record['stato'] != 'Emessa') {
$articoli = $dbo->fetchArray($art_query)[0]['tot'];
echo '
<a class="btn btn-sm btn-primary'.(!empty($articoli) ? '' : ' disabled').'" data-href="'.$rootdir.'/modules/fatture/row-add.php?id_module='.$id_module.'&id_record='.$id_record.'&is_articolo" data-toggle="tooltip" data-title="Aggiungi articolo">
<a class="btn btn-sm btn-primary'.(!empty($articoli) ? '' : ' disabled').'" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_articolo" data-toggle="tooltip" data-title="'.tr('Aggiungi articolo').'">
<i class="fa fa-plus"></i> '.tr('Articolo').'
</a>';
echo '
<a class="btn btn-sm btn-primary" data-href="'.$rootdir.'/modules/fatture/row-add.php?id_module='.$id_module.'&id_record='.$id_record.'&is_riga" data-toggle="tooltip" data-title="Aggiungi riga">
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_riga" data-toggle="tooltip" data-title="'.tr('Aggiungi riga').'">
<i class="fa fa-plus"></i> '.tr('Riga').'
</a>';
echo '
<a class="btn btn-sm btn-primary" data-href="'.$rootdir.'/modules/fatture/row-add.php?id_module='.$id_module.'&id_record='.$id_record.'&is_descrizione" data-toggle="tooltip" data-title="Aggiungi descrizione">
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_descrizione" data-toggle="tooltip" data-title="'.tr('Aggiungi descrizione').'">
<i class="fa fa-plus"></i> '.tr('Descrizione').'
</a>';
echo '
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_sconto" data-toggle="tooltip" data-title="'.tr('Aggiungi sconto/maggiorazione').'">
<i class="fa fa-plus"></i> '.tr('Sconto/maggiorazione').'
</a>';
}
?>
</div>

View File

@ -1,34 +1,26 @@
<?php
use Modules\Fatture\Fattura;
include_once __DIR__.'/../../core.php';
// Info documento
$rs = $dbo->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);

View File

@ -1,46 +1,43 @@
<?php
use Modules\Fatture\Fattura;
include_once __DIR__.'/../../core.php';
// Info documento
$rs = $dbo->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);

View File

@ -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 "
<a class='btn btn-primary btn-xs'data-toggle='tooltip' title='Aggiorna SN...' onclick=\"launch_modal( 'Aggiorna SN', '".$rootdir.'/modules/fatture/add_serial.php?id_module='.$id_module.'&id_record='.$id_record.'&idriga='.$riga['id'].'&idarticolo='.$riga['idarticolo']."', 1 );\"><i class='fa fa-barcode' aria-hidden='true'></i></a>";
<a class='btn btn-primary btn-xs'data-toggle='tooltip' title='Aggiorna SN...' onclick=\"launch_modal( 'Aggiorna SN', '".$structure->fileurl('add_serial.php').'?id_module='.$id_module.'&id_record='.$id_record.'&idriga='.$riga['id'].'&idarticolo='.$riga['idarticolo']."', 1 );\"><i class='fa fa-barcode' aria-hidden='true'></i></a>";
}
echo "
<a class='btn btn-xs btn-warning' title='Modifica questa riga...' onclick=\"launch_modal( 'Modifica riga', '".$rootdir.'/modules/fatture/row-edit.php?id_module='.$id_module.'&id_record='.$id_record.'&idriga='.$riga['id']."', 1 );\"><i class='fa fa-edit'></i></a>
<a class='btn btn-xs btn-warning' title='Modifica questa riga...' onclick=\"launch_modal( 'Modifica riga', '".$structure->fileurl('row-edit.php').'?id_module='.$id_module.'&id_record='.$id_record.'&idriga='.$riga['id']."', 1 );\"><i class='fa fa-edit'></i></a>
<a class='btn btn-xs btn-danger' title='Rimuovi questa riga...' onclick=\"if( confirm('Rimuovere questa riga dalla fattura?') ){ $('#delete-form-".$riga['id']."').submit(); }\"><i class='fa fa-trash'></i></a>
</div>
@ -278,19 +278,6 @@ foreach ($righe as $row) {
</tr>';
}
$sconto_globale = $fattura->scontoGlobale;
if (!empty($sconto_globale)) {
echo '
<tr>
<td>'.$sconto_globale->descrizione.'</td>
<td class="text-center">'.Translator::numberToLocale(1, 'qta').'</td>
<td></td>
<td class="text-right">'.Translator::numberToLocale($sconto_globale->totale).' &euro;</td>
<td class="text-right">'.Translator::numberToLocale($sconto_globale->iva).' &euro;</td>
<td class="text-right">'.Translator::numberToLocale($sconto_globale->totale).' &euro;</td>
</tr>';
}
echo '
</tbody>';

View File

@ -1,33 +0,0 @@
<?php
namespace Modules\Fatture\Components;
use Common\Components\Discount;
use Modules\Fatture\Fattura;
class Sconto extends Discount
{
use RelationTrait;
protected $table = 'co_righe_documenti';
/**
* Crea una nuovo sconto globale collegato alla fattura, oppure restituisce quello esistente.
*
* @param Fattura $fattura
*
* @return self
*/
public static function build(Fattura $fattura)
{
$model = $fattura->scontoGlobale;
if ($model == null) {
$model = parent::build();
$model->setFattura($fattura);
}
return $model;
}
}

View File

@ -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
/**

View File

@ -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
*/

View File

@ -100,19 +100,5 @@ if ($show_prezzi) {
</table>';
}
// 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 '
<!-- SCONTO -->
<div class="row">
<div class="col-md-4 pull-right">
{[ "type": "number", "label": "'.tr('Sconto incondizionato').'", "name": "sconto_globale", "value": "'.$sconto.'", "icon-after": "choice|untprc|'.$tipo_sconto.'|'.$readonly.'", "extra": "'.$readonly.'" ]}
</div>
</div>';
echo '
<script src="'.$rootdir.'/lib/init.js"></script>';

View File

@ -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 '
<td class="text-center">
<button type="button" class="btn btn-warning btn-xs" data-toggle="tooltip" onclick="launch_modal(\''.tr('Modifica spesa').'\', \''.$rootdir.'/modules/interventi/add_righe.php?id_module='.$id_module.'&id_record='.$id_record.'&idriga='.$r['id'].'\', 1);"><i class="fa fa-edit"></i></button>
<button type="button" class="btn btn-warning btn-xs" data-toggle="tooltip" onclick="launch_modal(\''.tr('Modifica spesa').'\', \''.$link.'?id_module='.$id_module.'&id_record='.$id_record.'&idriga='.$r['id'].'\', 1);"><i class="fa fa-edit"></i></button>
<button type="button" class="btn btn-danger btn-xs" data-toggle="tooltip" onclick="if(confirm(\''.tr('Eliminare questa spesa?').'\')){ elimina_riga( \''.$r['id'].'\' ); }"><i class="fa fa-trash"></i></button>
</td>';
}

View File

@ -98,11 +98,8 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
{[ "type": "select", "label": "<?php echo tr('Zona'); ?>", "name": "idzona", "values": "query=SELECT id, CONCAT_WS( ' - ', nome, descrizione) AS descrizione FROM an_zone ORDER BY nome", "value": "$idzona$" , "placeholder": "<?php echo tr('Nessuna zona'); ?>", "extra": "readonly", "help":"<?php echo 'La zona viene definita automaticamente in base al cliente selezionato'; ?>." ]}
</div>
</div>
<!-- RIGA 4 -->
<div class="row">
<div class="col-md-4">
@ -247,21 +244,29 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
</div>
<div class="panel-body">
<div id="righe">
<?php
if (file_exists($docroot.'/modules/interventi/custom/ajax_righe.php')) {
include $docroot.'/modules/interventi/custom/ajax_righe.php';
} else {
include $docroot.'/modules/interventi/ajax_righe.php';
}
?>
</div>
<?php
<?php if (!$record['flag_completato']) {
?>
<button type="button" class="btn btn-primary" onclick="launch_modal( '<?php echo tr('Aggiungi altre spese'); ?>', '<?php echo $rootdir; ?>/modules/interventi/add_righe.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>', 1 );"><i class="fa fa-plus"></i> <?php echo tr('Aggiungi altre spese'); ?>...</button>
<?php
} ?>
if (!$record['flag_completato']) {
echo '
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('add_righe.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_sconto" data-toggle="tooltip" data-title="'.tr('Aggiungi altre spese').'">
<i class="fa fa-plus"></i> '.tr('Altre spese').'...
</a>';
echo '
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_sconto" data-toggle="tooltip" data-title="'.tr('Aggiungi sconto/maggiorazione').'">
<i class="fa fa-plus"></i> '.tr('Sconto/maggiorazione').'
</a>';
}
?>
<div class="clearfix"></div>
<br>
<div id="righe">
<?php
include $structure->filepath('ajax_righe.php');
?>
</div>
</div>
</div>

View File

@ -0,0 +1,59 @@
<?php
use Modules\Interventi\Intervento;
include_once __DIR__.'/../../core.php';
$documento = Intervento::find($id_record);
// Impostazioni per la gestione
$options = [
'op' => '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);

View File

@ -0,0 +1,41 @@
<?php
use Modules\Interventi\Intervento;
include_once __DIR__.'/../../core.php';
$documento = Intervento::find($id_record);
// Impostazioni per la gestione
$options = [
'op' => '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);

View File

@ -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.

View File

@ -6,6 +6,8 @@ use Modules\Interventi\Intervento;
trait RelationTrait
{
protected $disableOrder = true;
public function getParentID()
{
return 'idintervento';

View File

@ -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

View File

@ -12,7 +12,7 @@ include_once __DIR__.'/../../core.php';
</div>
<div class="col-md-6">
{[ "type": "number", "label": "<?php echo tr('Rincaro/sconto'); ?>", "name": "prc_guadagno", "required": 1, "value": "0", "icon-after": "%", "help": "<?php echo tr('Il valore positivo indica uno sconto').'. '.tr('Per applicare una percentuale di rincaro inserire un valore negativo').'.'; ?>" ]}
{[ "type": "number", "label": "<?php echo tr('Rincaro/sconto'); ?>", "name": "prc_guadagno", "required": 1, "value": "0", "icon-after": "%", "help": "<?php echo tr('Il valore positivo indica uno sconto: per applicare una percentuale di rincaro inserire un valore negativo'); ?>" ]}
</div>
</div>

View File

@ -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);
}

View File

@ -85,12 +85,6 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
</div>
</div>
<div class="row">
<div class="col-md-3">
{[ "type": "number", "label": "<?php echo tr('Sconto incondizionato'); ?>", "name": "sconto_generico", "value": "$sconto_globale$", "icon-after": "choice|untprc|$tipo_sconto_globale$", "readonly": "<?php echo $record['flag_completato']; ?>" ]}
</div>
</div>
<div class="row">
<div class="col-md-12">
{[ "type": "textarea", "label": "<?php echo tr('Note'); ?>", "name": "note", "value": "$note$", "readonly": "<?php echo $record['flag_completato']; ?>" ]}
@ -142,19 +136,31 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
<div class="panel-body">
<div class="pull-left">
<?php
<?php
if ($record['flag_completato'] == 0) {
?>
<a class="btn btn-primary" data-href="<?php echo $rootdir; ?>/modules/ordini/row-add.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&is_articolo" data-toggle="modal" data-title="Aggiungi articolo"><i class="fa fa-plus"></i> <?php echo tr('Articolo'); ?></a>
if ($record['flag_completato'] == 0) {
echo '
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_articolo" data-toggle="tooltip" data-title="'.tr('Aggiungi articolo').'">
<i class="fa fa-plus"></i> '.tr('Articolo').'
</a>';
<a class="btn btn-primary" data-href="<?php echo $rootdir; ?>/modules/ordini/row-add.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&is_riga" data-toggle="modal" data-title="Aggiungi riga"><i class="fa fa-plus"></i> <?php echo tr('Riga'); ?></a>
echo '
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_riga" data-toggle="tooltip" data-title="'.tr('Aggiungi riga').'">
<i class="fa fa-plus"></i> '.tr('Riga').'
</a>';
<a class="btn btn-primary" data-href="<?php echo $rootdir; ?>/modules/ordini/row-add.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&is_descrizione" data-toggle="modal" data-title="Aggiungi descrizione"><i class="fa fa-plus"></i> <?php echo tr('Descrizione'); ?></a>
<?php
}
echo '
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_descrizione" data-toggle="tooltip" data-title="'.tr('Aggiungi descrizione').'">
<i class="fa fa-plus"></i> '.tr('Descrizione').'
</a>';
?>
echo '
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_sconto" data-toggle="tooltip" data-title="'.tr('Aggiungi sconto/maggiorazione').'">
<i class="fa fa-plus"></i> '.tr('Sconto/maggiorazione').'
</a>';
}
?>
</div>
<div class="clearfix"></div>
<br>

View File

@ -1,23 +1,19 @@
<?php
use Modules\Ordini\Ordine;
include_once __DIR__.'/../../core.php';
// Info contratto
$rs = $dbo->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);

View File

@ -1,38 +1,38 @@
<?php
use Modules\Ordini\Ordine;
include_once __DIR__.'/../../core.php';
// Info contratto
$rs = $dbo->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);

View File

@ -80,13 +80,9 @@ if (!empty($rs)) {
echo '
<td class="text-center">';
if (empty($r['is_descrizione'])) {
if (empty($r['sconto_globale'])) {
echo '
<big>'.Translator::numberToLocale($r['qta'] - $r['qta_evasa'], 'qta').'</big>
<br><small>('.tr('Q. iniziale').': '.Translator::numberToLocale($r['qta'], 'qta').')</small>';
} else {
echo '1';
}
echo '
<big>'.Translator::numberToLocale($r['qta'] - $r['qta_evasa'], 'qta').'</big>
<br><small>('.tr('Q. iniziale').': '.Translator::numberToLocale($r['qta'], 'qta').')</small>';
}
echo '
</td>';
@ -144,7 +140,7 @@ if (!empty($rs)) {
echo '
<td class="text-center">';
if ($record['flag_completato'] == 0 && empty($r['sconto_globale'])) {
if ($record['flag_completato'] == 0) {
echo "
<form action='".$rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record."' method='post' id='delete-form-".$r['id']."' role='form'>
<input type='hidden' name='backto' value='record-edit'>
@ -175,13 +171,6 @@ if (!empty($rs)) {
</form>";
}
if (empty($r['sconto_globale'])) {
echo '
<div class="handle clickable" style="padding:10px">
<i class="fa fa-sort"></i>
</div>';
}
echo '
</td>

View File

@ -1,33 +0,0 @@
<?php
namespace Modules\Ordini\Components;
use Common\Components\Discount;
use Modules\Ordini\Ordine;
class Sconto extends Discount
{
use RelationTrait;
protected $table = 'or_righe_ordini';
/**
* Crea una nuovo sconto globale collegato alla ordine, oppure restituisce quello esistente.
*
* @param Ordine $ordine
*
* @return self
*/
public static function build(Ordine $ordine)
{
$model = $ordine->scontoGlobale;
if ($model == null) {
$model = parent::build();
$model->setOrdine($ordine);
}
return $model;
}
}

View File

@ -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
/**

View File

@ -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);
}

View File

@ -93,12 +93,6 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
</div-->
</div>
<div class="row">
<div class="col-md-3">
{[ "type": "number", "label": "<?php echo tr('Sconto incondizionato'); ?>", "name": "sconto_generico", "value": "$sconto_globale$", "icon-after": "choice|untprc|$tipo_sconto_globale$" ]}
</div>
</div>
<div class="row">
<div class="col-md-12">
{[ "type": "textarea", "label": "<?php echo tr('Esclusioni'); ?>", "name": "esclusioni", "class": "autosize", "value": "$esclusioni$" ]}
@ -156,17 +150,31 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
</div>
<div class="panel-body">
<?php if ($record['stato'] != 'Pagato') {
?>
<?php
<a class="btn btn-primary" data-href="<?php echo $rootdir; ?>/modules/preventivi/row-add.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&is_articolo" data-toggle="modal" data-title="Aggiungi articolo"><i class="fa fa-plus"></i> <?php echo tr('Articolo'); ?></a>
if ($record['stato'] != 'Pagato') {
echo '
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_articolo" data-toggle="tooltip" data-title="'.tr('Aggiungi articolo').'">
<i class="fa fa-plus"></i> '.tr('Articolo').'
</a>';
<a class="btn btn-primary" data-href="<?php echo $rootdir; ?>/modules/preventivi/row-add.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&is_riga" data-toggle="modal" data-title="Aggiungi riga"><i class="fa fa-plus"></i> <?php echo tr('Riga'); ?></a>
echo '
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_riga" data-toggle="tooltip" data-title="'.tr('Aggiungi riga').'">
<i class="fa fa-plus"></i> '.tr('Riga').'
</a>';
<a class="btn btn-primary" data-href="<?php echo $rootdir; ?>/modules/preventivi/row-add.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&is_descrizione" data-toggle="modal" data-title="Aggiungi descrizione"><i class="fa fa-plus"></i> <?php echo tr('Descrizione'); ?></a>
echo '
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_descrizione" data-toggle="tooltip" data-title="'.tr('Aggiungi descrizione').'">
<i class="fa fa-plus"></i> '.tr('Descrizione').'
</a>';
<?php
} ?>
echo '
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_sconto" data-toggle="tooltip" data-title="'.tr('Aggiungi sconto/maggiorazione').'">
<i class="fa fa-plus"></i> '.tr('Sconto/maggiorazione').'
</a>';
}
?>
<!--div class="pull-right">
{( "name": "button", "type": "print", "id_module": "<?php echo $id_module; ?>", "id_record": "<?php echo $id_record; ?>" )}

View File

@ -1,17 +1,19 @@
<?php
use Modules\Preventivi\Preventivo;
include_once __DIR__.'/../../core.php';
// Info contratto
$rs = $dbo->fetchArray('SELECT * FROM co_preventivi WHERE id='.prepare($id_record));
$idanagrafica = $rs[0]['idanagrafica'];
$documento = Preventivo::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);

View File

@ -1,31 +1,40 @@
<?php
use Modules\Preventivi\Preventivo;
include_once __DIR__.'/../../core.php';
// Info contratto
$rs = $dbo->fetchArray('SELECT * FROM co_preventivi WHERE id='.prepare($id_record));
$idanagrafica = $rs[0]['idanagrafica'];
$documento = Preventivo::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_preventivi WHERE idpreventivo='.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);

View File

@ -101,7 +101,7 @@ foreach ($rs as $r) {
echo '
<td class="text-center">';
if ($record['stato'] != 'Pagato' && empty($r['sconto_globale'])) {
if ($record['stato'] != 'Pagato') {
echo "
<form action='".$rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record."' method='post' id='delete-form-".$r['id']."' role='form'>
<input type='hidden' name='backto' value='record-edit'>
@ -117,12 +117,6 @@ foreach ($rs as $r) {
</form>";
}
if (empty($r['sconto_globale'])) {
echo '
<div class="handle clickable" style="padding:10px">
<i class="fa fa-sort"></i>
</div>';
}
echo '
</td>
</tr>';

View File

@ -1,33 +0,0 @@
<?php
namespace Modules\Preventivi\Components;
use Common\Components\Discount;
use Modules\Preventivi\Preventivo;
class Sconto extends Discount
{
use RelationTrait;
protected $table = 'co_righe_preventivi';
/**
* Crea una nuovo sconto globale collegato alla preventivo, oppure restituisce quello esistente.
*
* @param Preventivo $preventivo
*
* @return self
*/
public static function build(Preventivo $preventivo)
{
$model = $preventivo->scontoGlobale;
if ($model == null) {
$model = parent::build();
$model->setPreventivo($preventivo);
}
return $model;
}
}

View File

@ -86,16 +86,9 @@ class Preventivo extends Document
return 'Preventivi';
}
public function updateSconto()
public function getDirezioneAttribute()
{
// Aggiornamento sconto
aggiorna_sconto([
'parent' => 'co_preventivi',
'row' => 'co_righe_preventivi',
], [
'parent' => 'id',
'row' => 'idpreventivo',
], $this->id);
return 'entrata';
}
public function anagrafica()
@ -128,11 +121,6 @@ class Preventivo extends Document
return $this->hasMany(Components\Descrizione::class, 'idpreventivo');
}
public function scontoGlobale()
{
return $this->hasOne(Components\Sconto::class, 'idpreventivo');
}
public function interventi()
{
return $this->hasMany(Intervento::class, 'id_preventivo');

View File

@ -291,7 +291,7 @@ class FatturaElettronica
$anagrafica = static::getAzienda();
}
$prefix = 'IT'.(!empty($anagrafica['codice_fiscale'] and ($anagrafica['codice_fiscale']!=$anagrafica['piva'])) ? $anagrafica['codice_fiscale'] : str_replace($anagrafica->nazione->iso2, '', $anagrafica['piva']));
$prefix = 'IT'.(!empty($anagrafica['codice_fiscale'] and ($anagrafica['codice_fiscale'] != $anagrafica['piva'])) ? $anagrafica['codice_fiscale'] : str_replace($anagrafica->nazione->iso2, '', $anagrafica['piva']));
if (empty($this->documento['progressivo_invio']) || !empty($new)) {
$database = database();
@ -386,7 +386,7 @@ class FatturaElettronica
$result = [
'IdTrasmittente' => [
'IdPaese' => $anagrafica->nazione->iso2,
'IdCodice' => (!empty($anagrafica['codice_fiscale']) and ($anagrafica['codice_fiscale']!=$anagrafica['piva'])) ? $anagrafica['codice_fiscale'] : str_replace($anagrafica->nazione->iso2, '', $anagrafica['piva']),
'IdCodice' => (!empty($anagrafica['codice_fiscale']) and ($anagrafica['codice_fiscale'] != $anagrafica['piva'])) ? $anagrafica['codice_fiscale'] : str_replace($anagrafica->nazione->iso2, '', $anagrafica['piva']),
],
];
@ -644,7 +644,7 @@ class FatturaElettronica
$percentuale = database()->fetchOne('SELECT percentuale FROM co_ritenutaacconto WHERE id = '.prepare($id_ritenuta))['percentuale'];
$result['DatiRitenuta'] = [
'TipoRitenuta' => (!empty($azienda['codice_fiscale']) and ($azienda['codice_fiscale']!=$azienda['piva'])) ? 'RT01' : 'RT02',
'TipoRitenuta' => (!empty($azienda['codice_fiscale']) and ($azienda['codice_fiscale'] != $azienda['piva'])) ? 'RT01' : 'RT02',
'ImportoRitenuta' => $totale_ritenutaacconto,
'AliquotaRitenuta' => $percentuale,
'CausalePagamento' => setting("Causale ritenuta d'acconto"),
@ -688,6 +688,8 @@ class FatturaElettronica
}
// Sconto globale (2.1.1.8)
// Disabilitazione per aggiornamento sconti
/*
$documento['sconto_globale'] = floatval($documento['sconto_globale']);
if (!empty($documento['sconto_globale'])) {
$sconto = [
@ -702,6 +704,7 @@ class FatturaElettronica
$result['ScontoMaggiorazione'] = $sconto;
}
*/
// Importo Totale Documento (2.1.1.9)
// Valorizzare limporto complessivo lordo della fattura (onnicomprensivo di Iva, bollo, contributi previdenziali, ecc…)
@ -1005,8 +1008,9 @@ class FatturaElettronica
$dettaglio['AliquotaIVA'] = $percentuale;
if (!empty($riga['idritenutaacconto']) && empty($riga['is_descrizione'])) {
if ($riga['calcolo_ritenuta_acconto'] == 'IMP+RIV')
$dettaglio['Ritenuta'] = 'SI';
if ($riga['calcolo_ritenuta_acconto'] == 'IMP+RIV') {
$dettaglio['Ritenuta'] = 'SI';
}
}
// Controllo aggiuntivo codice_natura_fe per evitare che venga riportato il tag vuoto

View File

@ -52,7 +52,6 @@ switch (filter('op')) {
$id_record = $fattura_pa->saveFattura(post('pagamento'), post('id_segment'), post('id_tipo'));
$fattura_pa->saveRighe(post('articoli'), post('iva'), post('conto'), post('movimentazione'));
$fattura_pa->getFattura()->updateSconto();
$fattura_pa->saveAllegati();

View File

@ -163,11 +163,10 @@ class FatturaElettronica
$sede->indirizzo = $info['Indirizzo'];
$sede->cap = $info['CAP'];
$sede->citta = $info['Comune'];
if (!empty($info['Provincia'])) {
if (!empty($info['Provincia'])) {
$sede->provincia = $info['Provincia'];
}
$sede->nazione()->associate(Nazione::where('iso2', $info['Nazione'])->first());
$contatti = $xml['Contatti'];
if (!empty($contatti)) {
@ -376,6 +375,8 @@ class FatturaElettronica
$stato_documento = StatoFattura::where('descrizione', 'Emessa')->first();
$fattura->stato()->associate($stato_documento);
// Nodo ScontoMaggiorazione generale per il documento ignorato (issue #542)
/*
// Sconto globale
$sconto = $dati_generali['ScontoMaggiorazione'];
if (!empty($sconto)) {
@ -386,7 +387,7 @@ class FatturaElettronica
$fattura->sconto_globale = $unitario;
$fattura->tipo_sconto_globale = $tipo;
}
}*/
// Ritenuta d'Acconto
$ritenuta = $dati_generali['DatiRitenuta'];

View File

@ -1,6 +1,7 @@
<?php
include_once DOCROOT.'/modules/fatture/modutil.php';
include_once DOCROOT.'/modules/interventi/modutil.php';
// Fatture di vendita e acquisto
$results = $dbo->fetchArray("SELECT co_documenti.id, co_statidocumento.descrizione AS stato_fattura
@ -35,6 +36,39 @@ foreach ($results as $result) {
}
}
// Aggiornamento sconti incodizionati per Interventi
$id_iva = setting('Iva predefinita');
$iva = $dbo->fetchOne('SELECT * FROM co_iva WHERE id='.prepare($id_iva));
$interventi = $dbo->fetchArray('SELECT * FROM in_interventi WHERE sconto_globale != 0');
foreach ($interventi as $intervento) {
$costi = get_costi_intervento($intervento['id']);
$sconto_globale = $costi['sconto_globale'];
if ($intervento['tipo_sconto_globale'] == 'PRC') {
$descrizione = $sconto_globale >= 0 ? tr('Sconto percentuale') : tr('Maggiorazione percentuale');
$descrizione .= ' '.Translator::numberToLocale($intervento['sconto_globale']).'%';
} else {
$descrizione = $sconto_globale >= 0 ? tr('Sconto unitario') : tr('Maggiorazione unitaria');
}
$valore_iva = $sconto_globale * $iva['percentuale'] / 100;
$dbo->insert('in_righe_interventi', [
'idintervento' => $intervento['id'],
'descrizione' => $descrizione,
'qta' => 1,
'sconto' => $sconto_globale,
'sconto_unitario' => $sconto_globale,
'tipo_sconto' => 'UNT',
'idiva' => $id_iva['id'],
'desc_iva' => $iva['descrizione'],
'iva' => $valore_iva,
]);
}
$dbo->query('ALTER TABLE `in_interventi` DROP `sconto_globale`, DROP `tipo_sconto_globale`, DROP `tipo_sconto`');
// File e cartelle deprecate
$files = [
'plugins/xml/AT_v1.0.xml',
@ -48,6 +82,12 @@ $files = [
'plugins/xml/SE_v1.0.xml',
'plugins/exportFE/view.php',
'plugins/exportFE/src/stylesheet-1.2.1.xsl',
'modules/contratti/src/Components/Sconto.php',
'modules/fatture/src/Components/Sconto.php',
'modules/ordini/src/Components/Sconto.php',
'modules/ddt/src/Components/Sconto.php',
'modules/preventivi/src/Components/Sconto.php',
'include/src/Components/Discount.php',
];
foreach ($files as $key => $value) {

View File

@ -109,4 +109,21 @@ INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `slow`,
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati dei contratti'), 'Pianificabile', 'IF(is_pianificabile, ''S&igrave;'', ''No'')', 4, 1, 0, 0, 1),
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati dei contratti'), 'Icona', 'icona', 3, 1, 0, 0, 1),
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati dei contratti'), 'Descrizione', 'descrizione', 2, 1, 0, 0, 1),
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati dei contratti'), 'id', 'id', 1, 0, 0, 1, 0);
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati dei contratti'), 'id', 'id', 1, 0, 0, 1, 0);
-- Aggiornamento sconti incodizionati
ALTER TABLE `co_documenti` DROP `sconto_globale`, DROP `tipo_sconto_globale`;
ALTER TABLE `co_preventivi` DROP `sconto_globale`, DROP `tipo_sconto_globale`;
ALTER TABLE `co_contratti` DROP `sconto_globale`, DROP `tipo_sconto_globale`;
ALTER TABLE `or_ordini` DROP `sconto_globale`, DROP `tipo_sconto_globale`;
ALTER TABLE `dt_ddt` DROP `sconto_globale`, DROP `tipo_sconto_globale`;
ALTER TABLE `co_righe_documenti` DROP `sconto_globale`;
ALTER TABLE `co_righe_preventivi` DROP `sconto_globale`;
ALTER TABLE `co_righe_contratti` DROP `sconto_globale`;
ALTER TABLE `or_righe_ordini` DROP `sconto_globale`;
ALTER TABLE `dt_righe_ddt` DROP `sconto_globale`;
-- Fix per la tabella in_righe_interventi
ALTER TABLE `in_righe_interventi` ADD `is_descrizione` TINYINT(1) NOT NULL AFTER `idintervento`, ADD `idarticolo` INT(11) AFTER `idintervento`, ADD FOREIGN KEY (`idarticolo`) REFERENCES `mg_articoli`(`id`);
ALTER TABLE `mg_articoli_interventi` ADD `is_descrizione` TINYINT(1) NOT NULL AFTER `idintervento`;