Bugfix
This commit is contained in:
parent
6ad8122f41
commit
2efd4b6300
|
@ -9,7 +9,7 @@ if ($options['dir'] == 'entrata') {
|
||||||
$show_rivalsa_inps = (setting('Percentuale rivalsa INPS') != '');
|
$show_rivalsa_inps = (setting('Percentuale rivalsa INPS') != '');
|
||||||
$show_ritenuta_acconto = (setting("Percentuale ritenuta d'acconto") != '');
|
$show_ritenuta_acconto = (setting("Percentuale ritenuta d'acconto") != '');
|
||||||
|
|
||||||
$show_ritenuta_acconto |= !empty($result['id_ritenuta_acconto_predefined']);
|
$show_ritenuta_acconto |= !empty($options['id_ritenuta_acconto_predefined']);
|
||||||
} else {
|
} else {
|
||||||
$show_rivalsa_inps = 1;
|
$show_rivalsa_inps = 1;
|
||||||
$show_ritenuta_acconto = 1;
|
$show_ritenuta_acconto = 1;
|
||||||
|
@ -28,19 +28,18 @@ if ($options['action'] == 'edit') {
|
||||||
// TODO: Luca S. questi campi non dovrebbero essere definiti all'interno della scheda fornitore?
|
// TODO: Luca S. questi campi non dovrebbero essere definiti all'interno della scheda fornitore?
|
||||||
$id_rivalsa_inps = '';
|
$id_rivalsa_inps = '';
|
||||||
$id_ritenuta_acconto = '';
|
$id_ritenuta_acconto = '';
|
||||||
// questo campo non andrebbe letto da impostazioni
|
|
||||||
$calcolo_ritenuta_acconto = setting("Metodologia calcolo ritenuta d'acconto predefinito");
|
|
||||||
}
|
}
|
||||||
// Fattura di vendita
|
// Fattura di vendita
|
||||||
elseif ($options['dir'] == 'entrata') {
|
elseif ($options['dir'] == 'entrata') {
|
||||||
// Caso particolare per aggiunta articolo
|
// Caso particolare per aggiunta articolo
|
||||||
$id_rivalsa_inps = ($options['op'] == 'addarticolo') ? '' : setting('Percentuale rivalsa INPS');
|
$id_rivalsa_inps = ($options['op'] == 'addarticolo') ? '' : setting('Percentuale rivalsa INPS');
|
||||||
|
|
||||||
$id_ritenuta_acconto = $result['id_ritenuta_acconto_predefined'] ?: setting("Percentuale ritenuta d'acconto");
|
$id_ritenuta_acconto = $options['id_ritenuta_acconto_predefined'] ?: setting("Percentuale ritenuta d'acconto");
|
||||||
$calcolo_ritenuta_acconto = setting("Metodologia calcolo ritenuta d'acconto predefinito");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$calcolo_ritenuta_acconto = $calcolo_ritenuta_acconto ?: setting("Metodologia calcolo ritenuta d'acconto predefinito");
|
||||||
|
|
||||||
if ($show_rivalsa_inps == 1 || $show_ritenuta_acconto == 1) {
|
if ($show_rivalsa_inps == 1 || $show_ritenuta_acconto == 1) {
|
||||||
echo '
|
echo '
|
||||||
<div class="row">';
|
<div class="row">';
|
||||||
|
@ -49,7 +48,7 @@ if ($options['action'] == 'edit') {
|
||||||
if ($show_rivalsa_inps == 1) {
|
if ($show_rivalsa_inps == 1) {
|
||||||
echo '
|
echo '
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
{[ "type": "select", "label": "'.tr('Rivalsa INPS').'", "name": "idrivalsainps", "value": "'.$id_rivalsa_inps.'", "values": "query=SELECT * FROM co_rivalsainps" ]}
|
{[ "type": "select", "label": "'.tr('Rivalsa INPS').'", "name": "id_rivalsa_inps", "value": "'.$id_rivalsa_inps.'", "values": "query=SELECT * FROM co_rivalsainps" ]}
|
||||||
</div>';
|
</div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,7 +56,7 @@ if ($options['action'] == 'edit') {
|
||||||
if ($show_ritenuta_acconto == 1) {
|
if ($show_ritenuta_acconto == 1) {
|
||||||
echo '
|
echo '
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
{[ "type": "select", "label": "'.tr("Ritenuta d'acconto").'", "name": "idritenutaacconto", "value": "'.$id_ritenuta_acconto.'", "values": "query=SELECT * FROM co_ritenutaacconto" ]}
|
{[ "type": "select", "label": "'.tr("Ritenuta d'acconto").'", "name": "id_ritenuta_acconto", "value": "'.$id_ritenuta_acconto.'", "values": "query=SELECT * FROM co_ritenutaacconto" ]}
|
||||||
</div>';
|
</div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,7 +64,7 @@ if ($options['action'] == 'edit') {
|
||||||
if ($show_calcolo_ritenuta_acconto == 1) {
|
if ($show_calcolo_ritenuta_acconto == 1) {
|
||||||
echo '
|
echo '
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
{[ "type": "select", "label": "'.tr("Calcola ritenuta d'acconto su").'", "name": "calcolo_ritenutaacconto", "value": "'.((empty($calcolo_ritenuta_acconto)) ? 'Imponibile' : $calcolo_ritenuta_acconto).'", "values": "list=\"Imponibile\":\"Imponibile\", \"Imponibile + rivalsa inps\":\"Imponibile + rivalsa inps\"", "required": "1" ]}
|
{[ "type": "select", "label": "'.tr("Calcola ritenuta d'acconto su").'", "name": "calcolo_ritenuta_acconto", "value": "'.$calcolo_ritenuta_acconto.'", "values": "list=\"Imponibile\":\"Imponibile\", \"Imponibile + rivalsa inps\":\"Imponibile + rivalsa inps\"", "required": "1" ]}
|
||||||
</div>';
|
</div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,9 +73,11 @@ if ($options['action'] == 'edit') {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Conto
|
// Conto
|
||||||
|
if (empty($options['hide_conto'])) {
|
||||||
echo '
|
echo '
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
{[ "type": "select", "label": "'.tr('Conto').'", "name": "idconto", "required": 1, "value": "'.$result['idconto'].'", "ajax-source": "'.$options['conti'].'" ]}
|
{[ "type": "select", "label": "'.tr('Conto').'", "name": "idconto", "required": 1, "value": "'.$result['idconto'].'", "ajax-source": "'.$options['conti'].'" ]}
|
||||||
</div>
|
</div>
|
||||||
</div>';
|
</div>';
|
||||||
|
}
|
||||||
|
|
|
@ -35,7 +35,6 @@ class Anagrafica extends Model
|
||||||
$model = parent::new();
|
$model = parent::new();
|
||||||
|
|
||||||
$model->ragione_sociale = $ragione_sociale;
|
$model->ragione_sociale = $ragione_sociale;
|
||||||
$model->updateTipologie($tipologie);
|
|
||||||
|
|
||||||
$ultimo = database()->fetchOne('SELECT codice FROM an_anagrafiche ORDER BY CAST(codice AS SIGNED) DESC LIMIT 1');
|
$ultimo = database()->fetchOne('SELECT codice FROM an_anagrafiche ORDER BY CAST(codice AS SIGNED) DESC LIMIT 1');
|
||||||
$codice = Generator::generate(setting('Formato codice anagrafica'), $ultimo['codice']);
|
$codice = Generator::generate(setting('Formato codice anagrafica'), $ultimo['codice']);
|
||||||
|
@ -43,6 +42,9 @@ class Anagrafica extends Model
|
||||||
$model->codice = $codice;
|
$model->codice = $codice;
|
||||||
$model->save();
|
$model->save();
|
||||||
|
|
||||||
|
$model->updateTipologie($tipologie);
|
||||||
|
$model->save();
|
||||||
|
|
||||||
return $model;
|
return $model;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -113,14 +113,14 @@ switch (post('op')) {
|
||||||
|
|
||||||
// Duplica articolo
|
// Duplica articolo
|
||||||
case 'copy':
|
case 'copy':
|
||||||
|
|
||||||
$dbo->query('CREATE TEMPORARY TABLE tmp SELECT * FROM mg_articoli WHERE id = '.prepare($id_record));
|
$dbo->query('CREATE TEMPORARY TABLE tmp SELECT * FROM mg_articoli WHERE id = '.prepare($id_record));
|
||||||
$dbo->query('ALTER TABLE tmp DROP id');
|
$dbo->query('ALTER TABLE tmp DROP id');
|
||||||
$dbo->query('INSERT INTO mg_articoli SELECT NULL,tmp.* FROM tmp');
|
$dbo->query('INSERT INTO mg_articoli SELECT NULL,tmp.* FROM tmp');
|
||||||
$id_record = $dbo->lastInsertedID();
|
$id_record = $dbo->lastInsertedID();
|
||||||
$dbo->query('DROP TEMPORARY TABLE tmp');
|
$dbo->query('DROP TEMPORARY TABLE tmp');
|
||||||
$dbo->query('UPDATE mg_articoli SET qta=0 WHERE id='.prepare($id_record));
|
$dbo->query('UPDATE mg_articoli SET qta=0 WHERE id='.prepare($id_record));
|
||||||
$_SESSION['infos'][] = tr('Articolo duplicato correttamente!');
|
|
||||||
|
flash()->info(tr('Articolo duplicato correttamente!'));
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ switch (post('op')) {
|
||||||
'top' => post('top'),
|
'top' => post('top'),
|
||||||
], ['id' => $id_record]);
|
], ['id' => $id_record]);
|
||||||
|
|
||||||
$_SESSION['infos'][] = tr('Salvataggio completato!');
|
flash()->info(tr('Salvataggio completato!'));
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ switch (post('op')) {
|
||||||
]);
|
]);
|
||||||
$id_record = $dbo->lastInsertedID();
|
$id_record = $dbo->lastInsertedID();
|
||||||
|
|
||||||
$_SESSION['infos'][] = tr('Nuovo campo personalizzato creato!');
|
flash()->info(tr('Nuovo campo personalizzato creato!'));
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -59,8 +59,8 @@ switch (post('op')) {
|
||||||
$totale_ddt = get_totale_ddt($id_record);
|
$totale_ddt = get_totale_ddt($id_record);
|
||||||
|
|
||||||
if ($dir == 'uscita') {
|
if ($dir == 'uscita') {
|
||||||
$idrivalsainps = post('idrivalsainps');
|
$idrivalsainps = post('id_rivalsa_inps');
|
||||||
$idritenutaacconto = post('idritenutaacconto');
|
$idritenutaacconto = post('id_ritenuta_acconto');
|
||||||
$bollo = post('bollo');
|
$bollo = post('bollo');
|
||||||
} else {
|
} else {
|
||||||
$idrivalsainps = 0;
|
$idrivalsainps = 0;
|
||||||
|
|
|
@ -4,6 +4,8 @@ include_once __DIR__.'/../../core.php';
|
||||||
|
|
||||||
use Modules\Fatture\Fattura;
|
use Modules\Fatture\Fattura;
|
||||||
use Modules\Fatture\Articolo;
|
use Modules\Fatture\Articolo;
|
||||||
|
use Modules\Fatture\Riga;
|
||||||
|
use Modules\Fatture\Descrizione;
|
||||||
use Modules\Articoli\Articolo as ArticoloOriginale;
|
use Modules\Articoli\Articolo as ArticoloOriginale;
|
||||||
use Modules\Fatture\Tipo;
|
use Modules\Fatture\Tipo;
|
||||||
use Modules\Anagrafiche\Anagrafica;
|
use Modules\Anagrafiche\Anagrafica;
|
||||||
|
@ -55,8 +57,8 @@ switch (post('op')) {
|
||||||
if ($dir == 'uscita') {
|
if ($dir == 'uscita') {
|
||||||
$data = [
|
$data = [
|
||||||
'numero' => post('numero'),
|
'numero' => post('numero'),
|
||||||
'idrivalsainps' => post('idrivalsainps'),
|
'idrivalsainps' => post('id_rivalsa_inps'),
|
||||||
'idritenutaacconto' => post('idritenutaacconto'),
|
'idritenutaacconto' => post('id_ritenuta_acconto'),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -250,16 +252,11 @@ switch (post('op')) {
|
||||||
|
|
||||||
case 'addintervento':
|
case 'addintervento':
|
||||||
if (!empty($id_record) && post('idintervento') !== null) {
|
if (!empty($id_record) && post('idintervento') !== null) {
|
||||||
$idintervento = post('idintervento');
|
aggiungi_intervento_in_fattura(post('idintervento'), $id_record, post('descrizione'), post('idiva'), post('idconto'), post('id_rivalsa_inps'), post('id_ritenuta_acconto'), post('calcolo_ritenuta_acconto'));
|
||||||
$descrizione = post('descrizione');
|
|
||||||
$idiva = post('idiva');
|
|
||||||
$idconto = post('idconto');
|
|
||||||
|
|
||||||
aggiungi_intervento_in_fattura($idintervento, $id_record, $descrizione, $idiva, $idconto);
|
flash()->info(tr('Intervento _NUM_ aggiunto!', [
|
||||||
|
|
||||||
$_SESSION['infos'][] = tr('Intervento _NUM_ aggiunto!', [
|
|
||||||
'_NUM_' => $idintervento,
|
'_NUM_' => $idintervento,
|
||||||
]);
|
]));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -480,8 +477,7 @@ switch (post('op')) {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'addarticolo':
|
case 'add_articolo':
|
||||||
if (!empty($id_record) && post('idarticolo') !== null) {
|
|
||||||
$qta = post('qta');
|
$qta = post('qta');
|
||||||
if (!empty($record['is_reversed'])) {
|
if (!empty($record['is_reversed'])) {
|
||||||
$qta = -$qta;
|
$qta = -$qta;
|
||||||
|
@ -499,91 +495,65 @@ switch (post('op')) {
|
||||||
$articolo->id_iva = post('idiva');
|
$articolo->id_iva = post('idiva');
|
||||||
$articolo->idconto = post('idconto');
|
$articolo->idconto = post('idconto');
|
||||||
|
|
||||||
$articolo->calcolo_ritenuta_acconto = post('calcolo_ritenutaacconto');
|
$articolo->calcolo_ritenuta_acconto = post('calcolo_ritenuta_acconto');
|
||||||
$articolo->id_ritenuta_acconto = post('idritenutaacconto');
|
$articolo->id_ritenuta_acconto = post('id_ritenuta_acconto');
|
||||||
|
$articolo->id_rivalsa_inps = post('id_rivalsa_inps');
|
||||||
|
|
||||||
$articolo->setSubtotale(post('prezzo'), $qta);
|
$articolo->costo_unitario = post('prezzo');
|
||||||
|
$articolo->qta = $qta;
|
||||||
$articolo->sconto_unitario = post('sconto');
|
$articolo->sconto_unitario = post('sconto');
|
||||||
$articolo->tipo_sconto = post('tipo_sconto');
|
$articolo->tipo_sconto = post('tipo_sconto');
|
||||||
|
|
||||||
$articolo->save();
|
$articolo->save();
|
||||||
//add_articolo_infattura($id_record, $idarticolo, $descrizione, $idiva, $qta, $prezzo * $qta, $sconto, $sconto_unitario, $tipo_sconto, '0', $idconto, $idum, $idrivalsainps, $idritenutaacconto, $calcolo_ritenutaacconto);
|
|
||||||
|
|
||||||
ricalcola_costiagg_fattura($id_record);
|
ricalcola_costiagg_fattura($id_record);
|
||||||
|
|
||||||
flash()->info(tr('Articolo aggiunto!'));
|
flash()->info(tr('Articolo aggiunto!'));
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'addriga':
|
case 'add_riga':
|
||||||
if (!empty($id_record)) {
|
|
||||||
// Selezione costi da intervento
|
|
||||||
$descrizione = post('descrizione');
|
|
||||||
$idiva = post('idiva');
|
|
||||||
$idconto = post('idconto');
|
|
||||||
$um = post('um');
|
|
||||||
$calcolo_ritenutaacconto = post('calcolo_ritenutaacconto');
|
|
||||||
|
|
||||||
$qta = post('qta');
|
$qta = post('qta');
|
||||||
if (!empty($record['is_reversed'])) {
|
if (!empty($record['is_reversed'])) {
|
||||||
$qta = -$qta;
|
$qta = -$qta;
|
||||||
}
|
}
|
||||||
|
|
||||||
$prezzo = post('prezzo');
|
$riga = Riga::new($fattura);
|
||||||
|
|
||||||
// Calcolo dello sconto
|
$riga->descrizione = post('descrizione');
|
||||||
$sconto_unitario = post('sconto');
|
$um = post('um');
|
||||||
$tipo_sconto = post('tipo_sconto');
|
if (!empty($um)) {
|
||||||
$sconto = calcola_sconto([
|
$riga->um = $um;
|
||||||
'sconto' => $sconto_unitario,
|
|
||||||
'prezzo' => $prezzo,
|
|
||||||
'tipo' => $tipo_sconto,
|
|
||||||
'qta' => $qta,
|
|
||||||
]);
|
|
||||||
|
|
||||||
$subtot = $prezzo * $qta;
|
|
||||||
|
|
||||||
// Calcolo iva
|
|
||||||
$query = 'SELECT * FROM co_iva WHERE id='.prepare($idiva);
|
|
||||||
$rs = $dbo->fetchArray($query);
|
|
||||||
$iva = ($subtot - $sconto) / 100 * $rs[0]['percentuale'];
|
|
||||||
$iva_indetraibile = $iva / 100 * $rs[0]['indetraibile'];
|
|
||||||
$desc_iva = $rs[0]['descrizione'];
|
|
||||||
|
|
||||||
// Calcolo rivalsa inps
|
|
||||||
$query = 'SELECT * FROM co_rivalsainps WHERE id='.prepare(post('idrivalsainps'));
|
|
||||||
$rs = $dbo->fetchArray($query);
|
|
||||||
$rivalsainps = ($prezzo * $qta - $sconto) / 100 * $rs[0]['percentuale'];
|
|
||||||
|
|
||||||
// Calcolo ritenuta d'acconto
|
|
||||||
$query = 'SELECT * FROM co_ritenutaacconto WHERE id='.prepare(post('idritenutaacconto'));
|
|
||||||
$rs = $dbo->fetchArray($query);
|
|
||||||
if ($calcolo_ritenutaacconto == 'Imponibile') {
|
|
||||||
$ritenutaacconto = (($prezzo * $qta) - $sconto) / 100 * $rs[0]['percentuale'];
|
|
||||||
} else {
|
|
||||||
$ritenutaacconto = (($prezzo * $qta) - $sconto + $rivalsainps) / 100 * $rs[0]['percentuale'];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Aggiunta riga generica sul documento
|
$riga->id_iva = post('idiva');
|
||||||
$query = 'INSERT INTO co_righe_documenti(iddocumento, idconto, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, calcolo_ritenutaacconto, is_descrizione, `order`) VALUES('.prepare($id_record).', '.prepare($idconto).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($subtot).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', '.prepare($um).', '.prepare($qta).', '.prepare(post('idrivalsainps')).', '.prepare($rivalsainps).', '.prepare(post('idritenutaacconto')).', '.prepare($ritenutaacconto).', '.prepare(post('calcolo_ritenutaacconto')).', '.prepare(empty($qta)).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))';
|
$riga->idconto = post('idconto');
|
||||||
$dbo->query($query);
|
|
||||||
|
$riga->calcolo_ritenuta_acconto = post('calcolo_ritenuta_acconto');
|
||||||
|
$riga->id_ritenuta_acconto = post('id_ritenuta_acconto');
|
||||||
|
$riga->id_rivalsa_inps = post('id_rivalsa_inps');
|
||||||
|
|
||||||
|
$riga->costo_unitario = post('prezzo');
|
||||||
|
$riga->qta = $qta;
|
||||||
|
$riga->sconto_unitario = post('sconto');
|
||||||
|
$riga->tipo_sconto = post('tipo_sconto');
|
||||||
|
|
||||||
|
$riga->save();
|
||||||
|
|
||||||
// Messaggi informativi
|
|
||||||
if (!empty($idarticolo)) {
|
|
||||||
flash()->info(tr('Articolo aggiunto!'));
|
|
||||||
} elseif (!empty($qta)) {
|
|
||||||
flash()->info(tr('Riga aggiunta!'));
|
flash()->info(tr('Riga aggiunta!'));
|
||||||
} else {
|
|
||||||
flash()->info(tr('Riga descrittiva aggiunta!'));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ricalcolo inps, ritenuta e bollo
|
// Ricalcolo inps, ritenuta e bollo
|
||||||
if ($dir == 'entrata') {
|
|
||||||
ricalcola_costiagg_fattura($id_record);
|
ricalcola_costiagg_fattura($id_record);
|
||||||
} else {
|
|
||||||
ricalcola_costiagg_fattura($id_record);
|
break;
|
||||||
}
|
|
||||||
}
|
case 'add_descrizione':
|
||||||
|
$riga = Descrizione::new($fattura);
|
||||||
|
$riga->descrizione = post('descrizione');
|
||||||
|
$riga->save();
|
||||||
|
|
||||||
|
flash()->info(tr('Riga descrittiva aggiunta!'));
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'editriga':
|
case 'editriga':
|
||||||
|
@ -594,7 +564,7 @@ switch (post('op')) {
|
||||||
$idiva = post('idiva');
|
$idiva = post('idiva');
|
||||||
$idconto = post('idconto');
|
$idconto = post('idconto');
|
||||||
$um = post('um');
|
$um = post('um');
|
||||||
$calcolo_ritenutaacconto = post('calcolo_ritenutaacconto');
|
$calcolo_ritenutaacconto = post('calcolo_ritenuta_acconto');
|
||||||
|
|
||||||
$qta = post('qta');
|
$qta = post('qta');
|
||||||
if (!empty($record['is_reversed'])) {
|
if (!empty($record['is_reversed'])) {
|
||||||
|
@ -652,12 +622,12 @@ switch (post('op')) {
|
||||||
$desc_iva = $rs[0]['descrizione'];
|
$desc_iva = $rs[0]['descrizione'];
|
||||||
|
|
||||||
// Calcolo rivalsa inps
|
// Calcolo rivalsa inps
|
||||||
$query = 'SELECT * FROM co_rivalsainps WHERE id='.prepare(post('idrivalsainps'));
|
$query = 'SELECT * FROM co_rivalsainps WHERE id='.prepare(post('id_rivalsa_inps'));
|
||||||
$rs = $dbo->fetchArray($query);
|
$rs = $dbo->fetchArray($query);
|
||||||
$rivalsainps = ($prezzo * $qta - $sconto) / 100 * $rs[0]['percentuale'];
|
$rivalsainps = ($prezzo * $qta - $sconto) / 100 * $rs[0]['percentuale'];
|
||||||
|
|
||||||
// Calcolo ritenuta d'acconto
|
// Calcolo ritenuta d'acconto
|
||||||
$query = 'SELECT * FROM co_ritenutaacconto WHERE id='.prepare(post('idritenutaacconto'));
|
$query = 'SELECT * FROM co_ritenutaacconto WHERE id='.prepare(post('id_ritenuta_acconto'));
|
||||||
$rs = $dbo->fetchArray($query);
|
$rs = $dbo->fetchArray($query);
|
||||||
if ($calcolo_ritenutaacconto == 'Imponibile') {
|
if ($calcolo_ritenutaacconto == 'Imponibile') {
|
||||||
$ritenutaacconto = (($prezzo * $qta) - $sconto) / 100 * $rs[0]['percentuale'];
|
$ritenutaacconto = (($prezzo * $qta) - $sconto) / 100 * $rs[0]['percentuale'];
|
||||||
|
@ -667,7 +637,7 @@ switch (post('op')) {
|
||||||
|
|
||||||
if ($is_descrizione == 0) {
|
if ($is_descrizione == 0) {
|
||||||
// Modifica riga generica sul documento
|
// Modifica riga generica sul documento
|
||||||
$query = 'UPDATE co_righe_documenti SET idconto='.prepare($idconto).', idiva='.prepare($idiva).', desc_iva='.prepare($desc_iva).', iva='.prepare($iva).', iva_indetraibile='.prepare($iva_indetraibile).', descrizione='.prepare($descrizione).', subtotale='.prepare($subtot).', sconto='.prepare($sconto).', sconto_unitario='.prepare($sconto_unitario).', tipo_sconto='.prepare($tipo_sconto).', um='.prepare($um).', idritenutaacconto='.prepare(post('idritenutaacconto')).', ritenutaacconto='.prepare($ritenutaacconto).', idrivalsainps='.prepare(post('idrivalsainps')).', rivalsainps='.prepare($rivalsainps).', calcolo_ritenutaacconto='.prepare(post(calcolo_ritenutaacconto)).', qta='.prepare($qta).' WHERE id='.prepare($idriga).' AND iddocumento='.prepare($iddocumento);
|
$query = 'UPDATE co_righe_documenti SET idconto='.prepare($idconto).', idiva='.prepare($idiva).', desc_iva='.prepare($desc_iva).', iva='.prepare($iva).', iva_indetraibile='.prepare($iva_indetraibile).', descrizione='.prepare($descrizione).', subtotale='.prepare($subtot).', sconto='.prepare($sconto).', sconto_unitario='.prepare($sconto_unitario).', tipo_sconto='.prepare($tipo_sconto).', um='.prepare($um).', idritenutaacconto='.prepare(post('id_ritenuta_acconto')).', ritenutaacconto='.prepare($ritenutaacconto).', idrivalsainps='.prepare(post('id_rivalsa_inps')).', rivalsainps='.prepare($rivalsainps).', calcolo_ritenutaacconto='.prepare(post(calcolo_ritenutaacconto)).', qta='.prepare($qta).' WHERE id='.prepare($idriga).' AND iddocumento='.prepare($iddocumento);
|
||||||
} else {
|
} else {
|
||||||
// Modifica riga descrizione sul documento
|
// Modifica riga descrizione sul documento
|
||||||
$query = 'UPDATE co_righe_documenti SET descrizione='.prepare($descrizione).' WHERE id='.prepare($idriga).' AND iddocumento='.prepare($iddocumento);
|
$query = 'UPDATE co_righe_documenti SET descrizione='.prepare($descrizione).' WHERE id='.prepare($idriga).' AND iddocumento='.prepare($iddocumento);
|
||||||
|
|
|
@ -73,6 +73,18 @@ echo '
|
||||||
</div>
|
</div>
|
||||||
</div>';
|
</div>';
|
||||||
|
|
||||||
|
$options = [
|
||||||
|
'action' => 'add',
|
||||||
|
'hide_conto' => true,
|
||||||
|
'dir' => $dir,
|
||||||
|
];
|
||||||
|
|
||||||
|
// Leggo la ritenuta d'acconto predefinita per l'anagrafica e se non c'è leggo quella predefinita generica
|
||||||
|
$ritenuta_acconto = $dbo->fetchOne('SELECT id_ritenuta_acconto_'.($dir == 'uscita' ? 'acquisti' : 'vendite').' AS id_ritenuta_acconto FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica));
|
||||||
|
$options['id_ritenuta_acconto_predefined'] = $ritenuta_acconto['id_ritenuta_acconto'];
|
||||||
|
|
||||||
|
echo App::internalLoad('conti.php', [], $options);
|
||||||
|
|
||||||
// Leggo l'iva predefinita dall'articolo e se non c'è leggo quella predefinita generica
|
// Leggo l'iva predefinita dall'articolo e se non c'è leggo quella predefinita generica
|
||||||
$idiva = $idiva ?: setting('Iva predefinita');
|
$idiva = $idiva ?: setting('Iva predefinita');
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ if (empty($idconto)) {
|
||||||
|
|
||||||
// Impostazioni per la gestione
|
// Impostazioni per la gestione
|
||||||
$options = [
|
$options = [
|
||||||
'op' => 'addriga',
|
'op' => 'add_riga',
|
||||||
'action' => 'add',
|
'action' => 'add',
|
||||||
'dir' => $dir,
|
'dir' => $dir,
|
||||||
'conti' => $conti,
|
'conti' => $conti,
|
||||||
|
@ -48,7 +48,7 @@ $result['idiva'] = $iva[0]['idiva'] ?: setting('Iva predefinita');
|
||||||
|
|
||||||
// Leggo la ritenuta d'acconto predefinita per l'anagrafica e se non c'è leggo quella predefinita generica
|
// Leggo la ritenuta d'acconto predefinita per l'anagrafica e se non c'è leggo quella predefinita generica
|
||||||
$ritenuta_acconto = $dbo->fetchOne('SELECT id_ritenuta_acconto_'.($dir == 'uscita' ? 'acquisti' : 'vendite').' AS id_ritenuta_acconto FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica));
|
$ritenuta_acconto = $dbo->fetchOne('SELECT id_ritenuta_acconto_'.($dir == 'uscita' ? 'acquisti' : 'vendite').' AS id_ritenuta_acconto FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica));
|
||||||
$result['id_ritenuta_acconto_predefined'] = $ritenuta_acconto['id_ritenuta_acconto'];
|
$options['id_ritenuta_acconto_predefined'] = $ritenuta_acconto['id_ritenuta_acconto'];
|
||||||
|
|
||||||
// Sconto unitario
|
// Sconto unitario
|
||||||
$rss = $dbo->fetchArray('SELECT prc_guadagno FROM mg_listini WHERE id=(SELECT idlistino_'.($dir == 'uscita' ? 'acquisti' : 'vendite').' FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica).')');
|
$rss = $dbo->fetchArray('SELECT prc_guadagno FROM mg_listini WHERE id=(SELECT idlistino_'.($dir == 'uscita' ? 'acquisti' : 'vendite').' FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica).')');
|
||||||
|
@ -61,10 +61,12 @@ if (!empty($rss)) {
|
||||||
$file = 'riga';
|
$file = 'riga';
|
||||||
if (get('is_descrizione') !== null) {
|
if (get('is_descrizione') !== null) {
|
||||||
$file = 'descrizione';
|
$file = 'descrizione';
|
||||||
|
|
||||||
|
$options['op'] = 'add_descrizione';
|
||||||
} elseif (get('is_articolo') !== null) {
|
} elseif (get('is_articolo') !== null) {
|
||||||
$file = 'articolo';
|
$file = 'articolo';
|
||||||
|
|
||||||
$options['op'] = 'addarticolo';
|
$options['op'] = 'add_articolo';
|
||||||
}
|
}
|
||||||
|
|
||||||
echo App::load($file.'.php', $result, $options);
|
echo App::load($file.'.php', $result, $options);
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\Fatture;
|
||||||
|
|
||||||
|
use Base\Description;
|
||||||
|
|
||||||
|
class Descrizione extends Description
|
||||||
|
{
|
||||||
|
protected $table = 'co_righe_documenti';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Crea una nuova riga collegata ad una fattura.
|
||||||
|
*
|
||||||
|
* @param Fattura $fattura
|
||||||
|
*
|
||||||
|
* @return self
|
||||||
|
*/
|
||||||
|
public static function new(Fattura $fattura)
|
||||||
|
{
|
||||||
|
$model = parent::new();
|
||||||
|
|
||||||
|
$model->fattura()->associate($fattura);
|
||||||
|
|
||||||
|
return $model;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function fattura()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(Fattura::class, 'iddocumento');
|
||||||
|
}
|
||||||
|
}
|
|
@ -310,6 +310,18 @@ class Fattura extends Model
|
||||||
return $this->getTipo()['reversed'] == 1;
|
return $this->getTipo()['reversed'] == 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function updateSconto()
|
||||||
|
{
|
||||||
|
// Aggiornamento sconto
|
||||||
|
aggiorna_sconto([
|
||||||
|
'parent' => 'co_documenti',
|
||||||
|
'row' => 'co_righe_documenti',
|
||||||
|
], [
|
||||||
|
'parent' => 'id',
|
||||||
|
'row' => 'iddocumento',
|
||||||
|
], $this->id);
|
||||||
|
}
|
||||||
|
|
||||||
public function anagrafica()
|
public function anagrafica()
|
||||||
{
|
{
|
||||||
return $this->belongsTo(Anagrafica::class, 'idanagrafica');
|
return $this->belongsTo(Anagrafica::class, 'idanagrafica');
|
||||||
|
@ -335,15 +347,8 @@ class Fattura extends Model
|
||||||
return $this->hasMany(Riga::class, 'iddocumento');
|
return $this->hasMany(Riga::class, 'iddocumento');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function updateSconto()
|
public function descrizioni()
|
||||||
{
|
{
|
||||||
// Aggiornamento sconto
|
return $this->hasMany(Descrizione::class, 'iddocumento');
|
||||||
aggiorna_sconto([
|
|
||||||
'parent' => 'co_documenti',
|
|
||||||
'row' => 'co_righe_documenti',
|
|
||||||
], [
|
|
||||||
'parent' => 'id',
|
|
||||||
'row' => 'iddocumento',
|
|
||||||
], $this->id);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -352,12 +352,13 @@ function calcola_ore_intervento($orario_inizio, $orario_fine)
|
||||||
return $ore;
|
return $ore;
|
||||||
}
|
}
|
||||||
|
|
||||||
function aggiungi_intervento_in_fattura($id_intervento, $id_fattura, $descrizione, $id_iva, $id_conto)
|
function aggiungi_intervento_in_fattura($id_intervento, $id_fattura, $descrizione, $id_iva, $id_conto, $id_rivalsa_inps = null, $id_ritenuta_acconto = null,$calcolo_ritenuta_acconto = null)
|
||||||
{
|
{
|
||||||
$dbo = database();
|
$dbo = database();
|
||||||
|
|
||||||
$id_ritenuta_acconto = setting("Percentuale ritenuta d'acconto");
|
$id_rivalsa_inps = $id_rivalsa_inps ?: setting('Percentuale rivalsa INPS');
|
||||||
$id_rivalsa_inps = setting('Percentuale rivalsa INPS');
|
$id_ritenuta_acconto = $id_ritenuta_acconto ?: setting("Percentuale ritenuta d'acconto");
|
||||||
|
$calcolo_ritenuta_acconto = $calcolo_ritenuta_acconto ?: setting("Metodologia calcolo ritenuta d'acconto predefinito");
|
||||||
|
|
||||||
// Leggo l'anagrafica del cliente
|
// Leggo l'anagrafica del cliente
|
||||||
$rs = $dbo->fetchArray('SELECT idanagrafica, codice, (SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE idintervento='.prepare($id_intervento).') AS data FROM `in_interventi` WHERE id='.prepare($id_intervento));
|
$rs = $dbo->fetchArray('SELECT idanagrafica, codice, (SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE idintervento='.prepare($id_intervento).') AS data FROM `in_interventi` WHERE id='.prepare($id_intervento));
|
||||||
|
@ -395,13 +396,13 @@ function aggiungi_intervento_in_fattura($id_intervento, $id_fattura, $descrizion
|
||||||
// Calcolo ritenuta d'acconto
|
// Calcolo ritenuta d'acconto
|
||||||
$query = 'SELECT * FROM co_ritenutaacconto WHERE id='.prepare($id_ritenuta_acconto);
|
$query = 'SELECT * FROM co_ritenutaacconto WHERE id='.prepare($id_ritenuta_acconto);
|
||||||
$rs = $dbo->fetchArray($query);
|
$rs = $dbo->fetchArray($query);
|
||||||
if (setting("Metodologia calcolo ritenuta d'acconto predefinito") == 'Imponibile') {
|
if ($calcolo_ritenuta_acconto == 'Imponibile') {
|
||||||
$ritenutaacconto = ($subtot - $sconto) / 100 * $rs[0]['percentuale'];
|
$ritenutaacconto = ($subtot - $sconto) / 100 * $rs[0]['percentuale'];
|
||||||
} else {
|
} else {
|
||||||
$ritenutaacconto = ($subtot - $sconto + $rivalsainps) / 100 * $rs[0]['percentuale'];
|
$ritenutaacconto = ($subtot - $sconto + $rivalsainps) / 100 * $rs[0]['percentuale'];
|
||||||
}
|
}
|
||||||
|
|
||||||
$query = 'INSERT INTO co_righe_documenti(iddocumento, idintervento, idconto, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, calcolo_ritenutaacconto, `order`) VALUES('.prepare($id_fattura).', '.prepare($id_intervento).', '.prepare($id_conto).', '.prepare($id_iva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($subtot).', '.prepare($sconto).', '.prepare($sconto).", 'UNT', 'ore', ".prepare($ore).', '.prepare($id_rivalsa_inps).', '.prepare($rivalsainps).', '.prepare($id_ritenuta_acconto).', '.prepare($ritenutaacconto).', '.prepare(setting("Metodologia calcolo ritenuta d'acconto predefinito")).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_fattura).'))';
|
$query = 'INSERT INTO co_righe_documenti(iddocumento, idintervento, idconto, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, calcolo_ritenutaacconto, `order`) VALUES('.prepare($id_fattura).', '.prepare($id_intervento).', '.prepare($id_conto).', '.prepare($id_iva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($subtot).', '.prepare($sconto).', '.prepare($sconto).", 'UNT', 'ore', ".prepare($ore).', '.prepare($id_rivalsa_inps).', '.prepare($rivalsainps).', '.prepare($id_ritenuta_acconto).', '.prepare($ritenutaacconto).', '.prepare($calcolo_ritenuta_acconto).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_fattura).'))';
|
||||||
$dbo->query($query);
|
$dbo->query($query);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -486,13 +487,13 @@ function aggiungi_intervento_in_fattura($id_intervento, $id_fattura, $descrizion
|
||||||
// Calcolo ritenuta d'acconto
|
// Calcolo ritenuta d'acconto
|
||||||
$query = 'SELECT * FROM co_ritenutaacconto WHERE id='.prepare($id_ritenuta_acconto);
|
$query = 'SELECT * FROM co_ritenutaacconto WHERE id='.prepare($id_ritenuta_acconto);
|
||||||
$rs = $dbo->fetchArray($query);
|
$rs = $dbo->fetchArray($query);
|
||||||
if (setting("Metodologia calcolo ritenuta d'acconto predefinito") == 'Imponibile') {
|
if ($calcolo_ritenuta_acconto == 'Imponibile') {
|
||||||
$ritenutaacconto = ($subtot - $sconto) / 100 * $rs[0]['percentuale'];
|
$ritenutaacconto = ($subtot - $sconto) / 100 * $rs[0]['percentuale'];
|
||||||
} else {
|
} else {
|
||||||
$ritenutaacconto = ($subtot - $sconto + $rivalsainps) / 100 * $rs[0]['percentuale'];
|
$ritenutaacconto = ($subtot - $sconto + $rivalsainps) / 100 * $rs[0]['percentuale'];
|
||||||
}
|
}
|
||||||
|
|
||||||
$query = 'INSERT INTO co_righe_documenti(iddocumento, idintervento, idconto, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, calcolo_ritenutaacconto, `order`) VALUES('.prepare($id_fattura).', '.prepare($id_intervento).', '.prepare($id_conto).', '.prepare($id_iva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($rsr[$i]['descrizione']).', '.prepare($subtot).', '.prepare($rsr[$i]['sconto']).', '.prepare($rsr[$i]['sconto_unitario']).', '.prepare($rsr[$i]['tipo_sconto']).', '.prepare($rsr[$i]['um']).', '.prepare($rsr[$i]['qta']).', '.prepare($id_rivalsa_inps).', '.prepare($rivalsainps).', '.prepare($id_ritenuta_acconto).', '.prepare($ritenutaacconto).', '.prepare(setting("Metodologia calcolo ritenuta d'acconto predefinito")).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_fattura).'))';
|
$query = 'INSERT INTO co_righe_documenti(iddocumento, idintervento, idconto, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, calcolo_ritenutaacconto, `order`) VALUES('.prepare($id_fattura).', '.prepare($id_intervento).', '.prepare($id_conto).', '.prepare($id_iva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($rsr[$i]['descrizione']).', '.prepare($subtot).', '.prepare($rsr[$i]['sconto']).', '.prepare($rsr[$i]['sconto_unitario']).', '.prepare($rsr[$i]['tipo_sconto']).', '.prepare($rsr[$i]['um']).', '.prepare($rsr[$i]['qta']).', '.prepare($id_rivalsa_inps).', '.prepare($rivalsainps).', '.prepare($id_ritenuta_acconto).', '.prepare($ritenutaacconto).', '.prepare($calcolo_ritenuta_acconto).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_fattura).'))';
|
||||||
$dbo->query($query);
|
$dbo->query($query);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -517,13 +518,13 @@ function aggiungi_intervento_in_fattura($id_intervento, $id_fattura, $descrizion
|
||||||
// Calcolo ritenuta d'acconto
|
// Calcolo ritenuta d'acconto
|
||||||
$query = 'SELECT * FROM co_ritenutaacconto WHERE id='.prepare($id_ritenuta_acconto);
|
$query = 'SELECT * FROM co_ritenutaacconto WHERE id='.prepare($id_ritenuta_acconto);
|
||||||
$dati = $dbo->fetchArray($query);
|
$dati = $dbo->fetchArray($query);
|
||||||
if (setting("Metodologia calcolo ritenuta d'acconto predefinito") == 'Imponibile') {
|
if ($calcolo_ritenuta_acconto == 'Imponibile') {
|
||||||
$ritenutaacconto = ($subtot - $sconto) / 100 * $dati[0]['percentuale'];
|
$ritenutaacconto = ($subtot - $sconto) / 100 * $dati[0]['percentuale'];
|
||||||
} else {
|
} else {
|
||||||
$ritenutaacconto = ($subtot - $sconto + $rivalsainps) / 100 * $dati[0]['percentuale'];
|
$ritenutaacconto = ($subtot - $sconto + $rivalsainps) / 100 * $dati[0]['percentuale'];
|
||||||
}
|
}
|
||||||
|
|
||||||
$query = 'INSERT INTO co_righe_documenti(iddocumento, idintervento, idconto, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, calcolo_ritenutaacconto, `order`) VALUES('.prepare($id_fattura).', '.prepare($id_intervento).', '.prepare($id_conto).', '.prepare($id_iva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare('Trasferta intervento '.$codice.' del '.Translator::dateToLocale($data)).', '.prepare($subtot).', '.prepare($sconto).', '.prepare($sconto).", 'UNT', '', 1, ".prepare($id_rivalsa_inps).', '.prepare($rivalsainps).', '.prepare($id_ritenuta_acconto).', '.prepare($ritenutaacconto).', '.prepare(setting("Metodologia calcolo ritenuta d'acconto predefinito")).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_fattura).'))';
|
$query = 'INSERT INTO co_righe_documenti(iddocumento, idintervento, idconto, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, calcolo_ritenutaacconto, `order`) VALUES('.prepare($id_fattura).', '.prepare($id_intervento).', '.prepare($id_conto).', '.prepare($id_iva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare('Trasferta intervento '.$codice.' del '.Translator::dateToLocale($data)).', '.prepare($subtot).', '.prepare($sconto).', '.prepare($sconto).", 'UNT', '', 1, ".prepare($id_rivalsa_inps).', '.prepare($rivalsainps).', '.prepare($id_ritenuta_acconto).', '.prepare($ritenutaacconto).', '.prepare($calcolo_ritenuta_acconto).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_fattura).'))';
|
||||||
$dbo->query($query);
|
$dbo->query($query);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -547,13 +548,13 @@ function aggiungi_intervento_in_fattura($id_intervento, $id_fattura, $descrizion
|
||||||
// Calcolo ritenuta d'acconto
|
// Calcolo ritenuta d'acconto
|
||||||
$query = 'SELECT * FROM co_ritenutaacconto WHERE id='.prepare($id_ritenuta_acconto);
|
$query = 'SELECT * FROM co_ritenutaacconto WHERE id='.prepare($id_ritenuta_acconto);
|
||||||
$rs = $dbo->fetchArray($query);
|
$rs = $dbo->fetchArray($query);
|
||||||
if (setting("Metodologia calcolo ritenuta d'acconto predefinito") == 'Imponibile') {
|
if ($calcolo_ritenuta_acconto == 'Imponibile') {
|
||||||
$ritenutaacconto = $subtot / 100 * $rs[0]['percentuale'];
|
$ritenutaacconto = $subtot / 100 * $rs[0]['percentuale'];
|
||||||
} else {
|
} else {
|
||||||
$ritenutaacconto = ($subtot + $rivalsainps) / 100 * $rs[0]['percentuale'];
|
$ritenutaacconto = ($subtot + $rivalsainps) / 100 * $rs[0]['percentuale'];
|
||||||
}
|
}
|
||||||
|
|
||||||
$query = 'INSERT INTO co_righe_documenti(iddocumento, idintervento, idconto, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, calcolo_ritenutaacconto, `order`) VALUES('.prepare($id_fattura).', NULL, '.prepare($id_conto).', '.prepare($id_iva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare('Sconto '.$descrizione).', '.prepare($subtot).', 1, '.prepare($id_rivalsa_inps).', '.prepare($rivalsainps).', '.prepare($id_ritenuta_acconto).', '.prepare($ritenutaacconto).', '.prepare(setting("Metodologia calcolo ritenuta d'acconto predefinito")).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_fattura).'))';
|
$query = 'INSERT INTO co_righe_documenti(iddocumento, idintervento, idconto, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, calcolo_ritenutaacconto, `order`) VALUES('.prepare($id_fattura).', NULL, '.prepare($id_conto).', '.prepare($id_iva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare('Sconto '.$descrizione).', '.prepare($subtot).', 1, '.prepare($id_rivalsa_inps).', '.prepare($rivalsainps).', '.prepare($id_ritenuta_acconto).', '.prepare($ritenutaacconto).', '.prepare($calcolo_ritenuta_acconto).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_fattura).'))';
|
||||||
$dbo->query($query);
|
$dbo->query($query);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -77,6 +77,26 @@ class Articolo extends Article
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function fixIvaIndetraibile()
|
||||||
|
{
|
||||||
|
$iva = database()->fetchOne('SELECT * FROM co_iva WHERE id = :id_iva', [
|
||||||
|
':id_iva' => $this->idiva,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->iva_indetraibile = $this->iva / 100 * $iva['indetraibile'];
|
||||||
|
}
|
||||||
|
public function setCostoUnitarioAttribute($value)
|
||||||
|
{
|
||||||
|
$this->prezzo_vendita = $value;
|
||||||
|
|
||||||
|
$this->fixSubtotale();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCostoUnitarioAttribute($value)
|
||||||
|
{
|
||||||
|
return $this->prezzo_vendita;
|
||||||
|
}
|
||||||
|
|
||||||
public function getSubtotaleAttribute()
|
public function getSubtotaleAttribute()
|
||||||
{
|
{
|
||||||
return $this->prezzo_vendita * $this->qta;
|
return $this->prezzo_vendita * $this->qta;
|
||||||
|
|
|
@ -73,8 +73,8 @@ switch (post('op')) {
|
||||||
$sconto = post('sconto_generico');
|
$sconto = post('sconto_generico');
|
||||||
|
|
||||||
if ($dir == 'uscita') {
|
if ($dir == 'uscita') {
|
||||||
$idrivalsainps = post('idrivalsainps');
|
$idrivalsainps = post('id_rivalsa_inps');
|
||||||
$idritenutaacconto = post('idritenutaacconto');
|
$idritenutaacconto = post('id_ritenuta_acconto');
|
||||||
$bollo = post('bollo');
|
$bollo = post('bollo');
|
||||||
} else {
|
} else {
|
||||||
$idrivalsainps = 0;
|
$idrivalsainps = 0;
|
||||||
|
|
|
@ -178,7 +178,7 @@ switch (filter('op')) {
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$_SESSION['infos'][] = tr('Permessi reimpostati.');
|
flash()->info(tr('Permessi reimpostati'));
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -439,7 +439,7 @@ class App
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
protected static function internalLoad($file, $result, $options, $directory = null)
|
public static function internalLoad($file, $result, $options, $directory = null)
|
||||||
{
|
{
|
||||||
$module = Modules::getCurrent();
|
$module = Modules::getCurrent();
|
||||||
|
|
||||||
|
|
|
@ -16,4 +16,15 @@ abstract class Description extends Model
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function new($bypass = false)
|
||||||
|
{
|
||||||
|
$model = parent::new();
|
||||||
|
|
||||||
|
if (!$bypass) {
|
||||||
|
$model->is_descrizione = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $model;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,7 @@ abstract class Article extends Row
|
||||||
|
|
||||||
public static function new(Original $articolo)
|
public static function new(Original $articolo)
|
||||||
{
|
{
|
||||||
$model = parent::new();
|
$model = parent::new(true);
|
||||||
|
|
||||||
$model->articolo()->associate($articolo);
|
$model->articolo()->associate($articolo);
|
||||||
|
|
||||||
|
@ -33,6 +33,11 @@ abstract class Article extends Row
|
||||||
|
|
||||||
abstract public function movimenta($qta);
|
abstract public function movimenta($qta);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Imposta i seriali collegati all'articolo del documento.
|
||||||
|
*
|
||||||
|
* @param array $serials
|
||||||
|
*/
|
||||||
public function setSerials($serials)
|
public function setSerials($serials)
|
||||||
{
|
{
|
||||||
database()->sync('mg_prodotti', [
|
database()->sync('mg_prodotti', [
|
||||||
|
@ -44,6 +49,11 @@ abstract class Article extends Row
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce l'elenco dei seriali collegati all'articolo del documento.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
public function getSerialsAttribute()
|
public function getSerialsAttribute()
|
||||||
{
|
{
|
||||||
if (empty($this->abilita_serial)) {
|
if (empty($this->abilita_serial)) {
|
||||||
|
@ -56,11 +66,16 @@ abstract class Article extends Row
|
||||||
return array_column($list, 'serial');
|
return array_column($list, 'serial');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Modifica la quantità dell'articolo e movimenta automaticamente il magazzino.
|
||||||
|
*
|
||||||
|
* @param double $value
|
||||||
|
*/
|
||||||
public function setQtaAttribute($value)
|
public function setQtaAttribute($value)
|
||||||
{
|
{
|
||||||
$previous = $this->qta;
|
$previous = $this->qta;
|
||||||
|
|
||||||
$this->attributes['qta'] = $value;
|
parent::setQtaAttribute($value);
|
||||||
|
|
||||||
$diff = $value - $previous;
|
$diff = $value - $previous;
|
||||||
$this->movimenta($diff);
|
$this->movimenta($diff);
|
||||||
|
|
151
src/base/Row.php
151
src/base/Row.php
|
@ -6,6 +6,8 @@ use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
abstract class Row extends Description
|
abstract class Row extends Description
|
||||||
{
|
{
|
||||||
|
protected $costo_unitario;
|
||||||
|
|
||||||
protected static function boot($bypass = false)
|
protected static function boot($bypass = false)
|
||||||
{
|
{
|
||||||
parent::boot($bypass);
|
parent::boot($bypass);
|
||||||
|
@ -17,33 +19,36 @@ abstract class Row extends Description
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
public static function new($bypass = false)
|
||||||
public function getPrezzoAttribute()
|
|
||||||
{
|
{
|
||||||
return $this->prezzo;
|
return parent::new(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getSubtotaleAttribute()
|
|
||||||
{
|
|
||||||
return $this->prezzo * $this->qta;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
public function getTotaleAttribute()
|
public function getTotaleAttribute()
|
||||||
{
|
{
|
||||||
return $this->subtotale + $this->iva;
|
return $this->subtotale + $this->iva;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce lo sconto della riga corrente in euro.
|
||||||
|
*
|
||||||
|
* @return float
|
||||||
|
*/
|
||||||
public function getScontoAttribute()
|
public function getScontoAttribute()
|
||||||
{
|
{
|
||||||
return calcola_sconto([
|
return calcola_sconto([
|
||||||
'sconto' => $this->sconto_unitario,
|
'sconto' => $this->sconto_unitario,
|
||||||
'prezzo' => $this->prezzo ?: $this->prezzo_vendita, // Compatibilità con gli interventi
|
'prezzo' => $this->costo_unitario,
|
||||||
'tipo' => $this->tipo_sconto,
|
'tipo' => $this->tipo_sconto,
|
||||||
'qta' => $this->qta,
|
'qta' => $this->qta,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Imposta l'identificatore della Rivalsa INPS, effettuando di conseguenza i conti.
|
||||||
|
*
|
||||||
|
* @param int $value
|
||||||
|
*/
|
||||||
public function setIdRivalsaINPSAttribute($value)
|
public function setIdRivalsaINPSAttribute($value)
|
||||||
{
|
{
|
||||||
$this->attributes['idrivalsainps'] = $value;
|
$this->attributes['idrivalsainps'] = $value;
|
||||||
|
@ -53,32 +58,61 @@ abstract class Row extends Description
|
||||||
$this->rivalsainps = ($this->subtotale - $this->sconto) / 100 * $rivalsa['percentuale'];
|
$this->rivalsainps = ($this->subtotale - $this->sconto) / 100 * $rivalsa['percentuale'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce il metodo di calcolo per la Ritenuta d'Acconto.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
public function getCalcoloRitenutaAccontoAttribute()
|
public function getCalcoloRitenutaAccontoAttribute()
|
||||||
{
|
{
|
||||||
return $this->calcolo_ritenutaacconto ?: 'Imponibile';
|
return $this->calcolo_ritenutaacconto ?: setting("Metodologia calcolo ritenuta d'acconto predefinito");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Imposta il metodo di calcolo per la Ritenuta d'Acconto.
|
||||||
|
*
|
||||||
|
* @param string $value
|
||||||
|
*/
|
||||||
public function setCalcoloRitenutaAccontoAttribute($value)
|
public function setCalcoloRitenutaAccontoAttribute($value)
|
||||||
{
|
{
|
||||||
return $this->attributes['calcolo_ritenutaacconto'] = $value;
|
return $this->attributes['calcolo_ritenutaacconto'] = $value;
|
||||||
|
|
||||||
|
$this->fixRitenutaAcconto();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Imposta l'identificatore della Ritenuta d'Acconto, effettuando di conseguenza i conti in base al valore del campo calcolo_ritenuta_acconto.
|
||||||
|
*
|
||||||
|
* @param int $value
|
||||||
|
*/
|
||||||
public function setIdRitenutaAccontoAttribute($value)
|
public function setIdRitenutaAccontoAttribute($value)
|
||||||
{
|
{
|
||||||
$this->attributes['idritenutaacconto'] = $value;
|
$this->attributes['idritenutaacconto'] = $value;
|
||||||
|
|
||||||
|
$this->fixRitenutaAcconto();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Effettua i conti per la Ritenuta d'Acconto.
|
||||||
|
*/
|
||||||
|
protected function fixRitenutaAcconto()
|
||||||
|
{
|
||||||
// Calcolo ritenuta d'acconto
|
// Calcolo ritenuta d'acconto
|
||||||
$ritenuta = database()->fetchOne('SELECT * FROM co_ritenutaacconto WHERE id = '.prepare($value));
|
$ritenuta = database()->fetchOne('SELECT * FROM co_ritenutaacconto WHERE id = '.prepare($this->idritenutaacconto));
|
||||||
$conto = ($this->subtotale - $this->sconto);
|
$conto = ($this->subtotale - $this->sconto);
|
||||||
|
|
||||||
if ($this->calcolo_ritenutaacconto == 'Imponibile + rivalsa inps') {
|
if ($this->calcolo_ritenuta_acconto == 'Imponibile + rivalsa inps') {
|
||||||
$conto += $this->rivalsainps;
|
$conto += $this->rivalsainps;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->ritenutaacconto = $conto / 100 * $ritenuta['percentuale'];
|
$this->attributes['ritenutaacconto'] = $conto / 100 * $ritenuta['percentuale'];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Retrocompatibilità */
|
/**
|
||||||
|
* Imposta il valore dello sconto.
|
||||||
|
*
|
||||||
|
* @param float $value
|
||||||
|
*/
|
||||||
public function setScontoUnitarioAttribute($value)
|
public function setScontoUnitarioAttribute($value)
|
||||||
{
|
{
|
||||||
$this->attributes['sconto_unitario'] = $value;
|
$this->attributes['sconto_unitario'] = $value;
|
||||||
|
@ -86,6 +120,11 @@ abstract class Row extends Description
|
||||||
$this->fixSconto();
|
$this->fixSconto();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Imposta il tipo dello sconto.
|
||||||
|
*
|
||||||
|
* @param string $value
|
||||||
|
*/
|
||||||
public function setTipoScontoAttribute($value)
|
public function setTipoScontoAttribute($value)
|
||||||
{
|
{
|
||||||
$this->attributes['tipo_sconto'] = $value;
|
$this->attributes['tipo_sconto'] = $value;
|
||||||
|
@ -93,11 +132,29 @@ abstract class Row extends Description
|
||||||
$this->fixSconto();
|
$this->fixSconto();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Effettua i conti per lo sconto totale.
|
||||||
|
*/
|
||||||
protected function fixSconto()
|
protected function fixSconto()
|
||||||
{
|
{
|
||||||
$this->attributes['sconto'] = $this->sconto;
|
$this->attributes['sconto'] = $this->sconto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Imposta l'identificatore dell'IVA, effettuando di conseguenza i conti.
|
||||||
|
*
|
||||||
|
* @param int $value
|
||||||
|
*/
|
||||||
|
public function setIdIvaAttribute($value)
|
||||||
|
{
|
||||||
|
$this->attributes['idiva'] = $value;
|
||||||
|
|
||||||
|
$this->fixIva();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Effettua i conti per l'IVA.
|
||||||
|
*/
|
||||||
protected function fixIva()
|
protected function fixIva()
|
||||||
{
|
{
|
||||||
$iva = database()->fetchOne('SELECT * FROM co_iva WHERE id = :id_iva', [
|
$iva = database()->fetchOne('SELECT * FROM co_iva WHERE id = :id_iva', [
|
||||||
|
@ -107,34 +164,66 @@ abstract class Row extends Description
|
||||||
|
|
||||||
$valore = ($this->subtotale - $this->sconto) * $iva['percentuale'] / 100;
|
$valore = ($this->subtotale - $this->sconto) * $iva['percentuale'] / 100;
|
||||||
|
|
||||||
$this->desc_iva = $descrizione;
|
$this->attributes['desc_iva'] = $descrizione;
|
||||||
$this->iva = $valore;
|
$this->attributes['iva'] = $valore;
|
||||||
|
|
||||||
// Compatibilità con gli interventi
|
$this->fixIvaIndetraibile();
|
||||||
if (!isset($this->prezzo_vendita)) {
|
|
||||||
$this->iva_indetraibile = $valore / 100 * $iva['indetraibile'];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->attributes['sconto'] = $this->sconto;
|
/**
|
||||||
}
|
* Effettua i conti per l'IVA indetraibile.
|
||||||
|
*/
|
||||||
public function setIdIvaAttribute($value)
|
protected function fixIvaIndetraibile()
|
||||||
{
|
{
|
||||||
$this->attributes['idiva'] = $value;
|
$iva = database()->fetchOne('SELECT * FROM co_iva WHERE id = :id_iva', [
|
||||||
|
':id_iva' => $this->idiva,
|
||||||
|
]);
|
||||||
|
|
||||||
$this->fixIva();
|
$this->attributes['iva_indetraibile'] = $this->iva / 100 * $iva['indetraibile'];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getPrezzoAttribute()
|
/**
|
||||||
|
* Imposta la quantità della riga.
|
||||||
|
*
|
||||||
|
* @param float $value
|
||||||
|
*/
|
||||||
|
public function setQtaAttribute($value)
|
||||||
{
|
{
|
||||||
return $this->subtotale / $this->qta;
|
$this->attributes['qta'] = $value;
|
||||||
|
|
||||||
|
$this->fixSubtotale();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setSubtotale($prezzo, $qta)
|
/**
|
||||||
|
* Imposta il costo unitario della riga.
|
||||||
|
*
|
||||||
|
* @param float $value
|
||||||
|
*/
|
||||||
|
public function setCostoUnitarioAttribute($value)
|
||||||
{
|
{
|
||||||
$this->qta = $qta;
|
$this->costo_unitario = $value;
|
||||||
|
|
||||||
$this->subtotale = $prezzo * $qta;
|
$this->fixSubtotale();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce il costo unitario della riga.
|
||||||
|
*/
|
||||||
|
public function getCostoUnitarioAttribute()
|
||||||
|
{
|
||||||
|
if (empty($this->costo_unitario)) {
|
||||||
|
$this->costo_unitario = $this->subtotale / $this->qta;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->costo_unitario;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Effettua i conti per il subtotale della riga.
|
||||||
|
*/
|
||||||
|
protected function fixSubtotale()
|
||||||
|
{
|
||||||
|
$this->attributes['subtotale'] = $this->costo_unitario * $this->qta;
|
||||||
|
|
||||||
$this->fixIva();
|
$this->fixIva();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue