Aggiunta gestione inline campo costo e prezzo unitario nei documenti

This commit is contained in:
MatteoPistorello 2023-09-29 15:34:02 +02:00
parent 69bb54b04b
commit 92354a0281
13 changed files with 264 additions and 245 deletions

View File

@ -632,10 +632,12 @@ switch (post('op')) {
if (!empty($riga)) {
$riga->qta = post('qta');
$riga->setPrezzoUnitario(post('prezzo'), $riga->idiva);
$riga->setSconto(post('sconto'), post('tipo_sconto'));
$riga->costo_unitario = post('costo') ?: 0;
$riga->save();
flash()->info(tr('Quantità aggiornata!'));
flash()->info(tr('Riga aggiornata!'));
}
break;

View File

@ -22,7 +22,7 @@ include_once __DIR__.'/init.php';
$block_edit = $record['is_completato'];
$order_row_desc = $_SESSION['module_'.$id_module]['order_row_desc'];
$righe = $order_row_desc ? $contratto->getRighe()->sortByDesc('created_at') : $contratto->getRighe();
$colspan = ($block_edit ? '5' : '6');
$colspan = '7';
echo '
<div class="table-responsive row-list">
@ -39,12 +39,10 @@ echo '
<th width="35" class="text-center">'.tr('#').'</th>
<th>'.tr('Descrizione').'</th>
<th class="text-center tip" width="150">'.tr('Q.').'</th>
<th class="text-center" width="140">'.tr('Prezzo unitario').'</th>';
if (!$block_edit) {
echo '<th class="text-center" width="150">'.tr('Sconto unitario').'</th>';
}
echo '
<th class="text-center" width="140">'.tr('Importo').'</th>
<th class="text-center" width="150">'.tr('Costo unitario').'</th>
<th class="text-center" width="180">'.tr('Prezzo unitario').'</th>
<th class="text-center" width="140">'.tr('Sconto unitario').'</th>
<th class="text-center" width="130">'.tr('Importo').'</th>
<th width="80"></th>
</tr>
</thead>
@ -104,11 +102,12 @@ foreach ($righe as $riga) {
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>';
} else {
// Quantità e unità di misura
echo '
<td class="text-center">
<td>
{[ "type": "number", "name": "qta_'.$riga->id.'", "value": "'.$riga->qta.'", "min-value": "0", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-after": "<span class=\'tip\' title=\''.tr('Quantità evasa').' / '.tr('totale').': '.tr('_QTA_ / _TOT_', ['_QTA_' => numberFormat($riga->qta_evasa, 'qta'), '_TOT_' => numberFormat($riga->qta, 'qta')]).'\'>'.$riga->um.' <small><i class=\'text-muted fa fa-info-circle\'></i></small></span>", "disabled": "'.($riga->isSconto() ? 1 : 0).'", "disabled": "'.$block_edit.'" ]}
<div class="progress" style="height:4px;">';
// Visualizzazione evasione righe per documento
@ -129,45 +128,27 @@ foreach ($righe as $riga) {
</div>
</td>';
// Costi unitari
echo '
<td>
{[ "type": "number", "name": "costo_'.$riga->id.'", "value": "'.$riga->costo_unitario.'", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-after": "'.currency().'", "disabled": "'.$block_edit.'" ]}
</td>';
// Prezzi unitari
echo '
<td class="text-right">';
// Provvigione riga
if (abs($riga->provvigione_unitaria) > 0) {
$text = provvigioneInfo($riga);
echo '<span class="pull-left text-info" title="'.$text.'"><i class="fa fa-handshake-o"></i></span>';
}
echo moneyFormat($riga->prezzo_unitario_corrente);
if ($dir == 'entrata' && $riga->costo_unitario != 0) {
echo '
<br><small class="text-muted">
'.tr('Acquisto').': '.moneyFormat($riga->costo_unitario).'
</small>';
}
if (abs($riga->sconto_unitario) > 0) {
$text = discountInfo($riga);
echo '
<br><small class="label label-danger">'.$text.'</small>';
}
$tiposconto = '';
if ($riga['sconto'] == 0) {
$tipo_sconto = (setting('Tipo di sconto predefinito') == '%' ? 'PRC' : 'UNT');
}
echo '
<td>
{[ "type": "number", "name": "prezzo_'.$riga->id.'", "value": "'.$riga->prezzo_unitario_corrente.'", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-before": "'.(abs($riga->provvigione_unitaria) > 0 ? '<span class=\'tip text-info\' title=\''.provvigioneInfo($riga).'\'><small><i class=\'fa fa-handshake-o\'></i></small></span>' : '').'", "icon-after": "'.currency().'", "disabled": "'.$block_edit.'" ]}
</td>';
// Sconto unitario
if (!$block_edit) {
echo '
<td class="text-center">
{[ "type": "number", "name": "sconto_'.$riga->id.'", "value": "'.($riga->sconto_percentuale ?: $riga->sconto_unitario_corrente).'", "min-value": "0", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-after": "choice|untprc|'.($tipo_sconto ?: $riga->tipo_sconto).'" ]}
</td>';
$tipo_sconto = '';
if ($riga['sconto'] == 0) {
$tipo_sconto = (setting('Tipo di sconto predefinito') == '%' ? 'PRC' : 'UNT');
}
echo '
<td>
{[ "type": "number", "name": "sconto_'.$riga->id.'", "value": "'.($riga->sconto_percentuale ?: $riga->sconto_unitario_corrente).'", "min-value": "0", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-after": "choice|untprc|'.($tipo_sconto ?: $riga->tipo_sconto).'", "disabled": "'.$block_edit.'" ]}
</td>';
// Importo
echo '
@ -544,6 +525,8 @@ function aggiornaInline(id) {
var qta = input("qta_"+ id).get();
var sconto = input("sconto_"+ id).get();
var tipo_sconto = input("tipo_sconto_"+ id).get();
var prezzo = input("prezzo_"+ id).get();
var costo = input("costo_"+ id).get();
$.ajax({
url: globals.rootdir + "/actions.php",
@ -556,6 +539,8 @@ function aggiornaInline(id) {
qta: qta,
sconto: sconto,
tipo_sconto: tipo_sconto,
prezzo: prezzo,
costo: costo
},
success: function (response) {
caricaRighe(id);

View File

@ -652,10 +652,12 @@ switch (filter('op')) {
if (!empty($riga)) {
$riga->qta = post('qta');
$riga->setPrezzoUnitario(post('prezzo'), $riga->idiva);
$riga->setSconto(post('sconto'), post('tipo_sconto'));
$riga->costo_unitario = post('costo') ?: 0;
$riga->save();
flash()->info(tr('Quantità aggiornata!'));
flash()->info(tr('Riga aggiornata!'));
}
break;

View File

@ -22,8 +22,7 @@ include_once __DIR__.'/init.php';
$block_edit = $record['flag_completato'];
$order_row_desc = $_SESSION['module_'.$id_module]['order_row_desc'];
$righe = $order_row_desc ? $ddt->getRighe()->sortByDesc('created_at') : $ddt->getRighe();
$colspan = ($block_edit ? '5' : '6');
$direzione = $ddt->direzione;
$colspan = $dir == 'entrata' ? '7' : '6';
echo '
<div class="table-responsive row-list">
@ -39,13 +38,14 @@ echo '
</th>
<th width="35" class="text-center">'.tr('#').'</th>
<th>'.tr('Descrizione').'</th>
<th class="text-center tip" width="150">'.tr('Q.').'</th>
<th class="text-center" width="140">'.tr('Prezzo unitario').'</th>';
if (!$block_edit) {
echo '<th class="text-center" width="150">'.tr('Sconto unitario').'</th>';
<th class="text-center tip" width="150">'.tr('Q.').'</th>';
if ($dir == 'entrata') {
echo '<th class="text-center" width="150">'.tr('Costo unitario').'</th>';
}
echo '
<th class="text-center" width="140">'.tr('Importo').'</th>
<th class="text-center" width="180">'.tr('Prezzo unitario').'</th>
<th class="text-center" width="140">'.tr('Sconto unitario').'</th>
<th class="text-center" width="130">'.tr('Importo').'</th>
<th width="80"></th>
</tr>
</thead>
@ -138,14 +138,18 @@ foreach ($righe as $riga) {
if ($riga->isDescrizione()) {
echo '
<td></td>
<td></td>';
if ($dir == 'entrata') {
echo '<td></td>';
}
echo '
<td></td>
<td></td>
<td></td>';
} else {
// Quantità e unità di misura
echo '
<td class="text-center">
<td>
{[ "type": "number", "name": "qta_'.$riga->id.'", "value": "'.$riga->qta.'", "min-value": "0", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-after": "<span class=\'tip\' title=\''.tr('Quantità evasa').' / '.tr('totale').': '.tr('_QTA_ / _TOT_', ['_QTA_' => numberFormat($riga->qta_evasa, 'qta'), '_TOT_' => numberFormat($riga->qta, 'qta')]).'\'>'.$riga->um.' <small><i class=\'text-muted fa fa-info-circle\'></i></small></span>", "disabled": "'.($riga->isSconto() ? 1 : 0).'", "disabled": "'.$block_edit.'" ]}
<div class="progress" style="height:4px;">';
// Visualizzazione evasione righe per documento
@ -166,45 +170,29 @@ foreach ($righe as $riga) {
</div>
</td>';
// Costi unitari
if ($dir == 'entrata') {
echo '
<td>
{[ "type": "number", "name": "costo_'.$riga->id.'", "value": "'.$riga->costo_unitario.'", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-after": "'.currency().'", "disabled": "'.$block_edit.'" ]}
</td>';
}
// Prezzi unitari
echo '
<td class="text-right">';
// Provvigione riga
if (abs($riga->provvigione_unitaria) > 0) {
$text = provvigioneInfo($riga);
echo '<span class="pull-left text-info" title="'.$text.'"><i class="fa fa-handshake-o"></i></span>';
}
echo moneyFormat($riga->prezzo_unitario_corrente);
if ($dir == 'entrata' && $riga->costo_unitario != 0) {
echo '
<br><small class="text-muted">
'.tr('Acquisto').': '.moneyFormat($riga->costo_unitario).'
</small>';
}
if (abs($riga->sconto_unitario) > 0) {
$text = discountInfo($riga);
echo '
<br><small class="label label-danger">'.$text.'</small>';
}
echo '
<td>
{[ "type": "number", "name": "prezzo_'.$riga->id.'", "value": "'.$riga->prezzo_unitario_corrente.'", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-before": "'.(abs($riga->provvigione_unitaria) > 0 ? '<span class=\'tip text-info\' title=\''.provvigioneInfo($riga).'\'><small><i class=\'fa fa-handshake-o\'></i></small></span>' : '').'", "icon-after": "'.currency().'", "disabled": "'.$block_edit.'" ]}
</td>';
$tiposconto = '';
// Sconto unitario
$tipo_sconto = '';
if ($riga['sconto'] == 0) {
$tipo_sconto = (setting('Tipo di sconto predefinito') == '%' ? 'PRC' : 'UNT');
}
// Sconto unitario
if (!$block_edit) {
echo '
<td class="text-center">
{[ "type": "number", "name": "sconto_'.$riga->id.'", "value": "'.($riga->sconto_percentuale ?: $riga->sconto_unitario_corrente).'", "min-value": "0", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-after": "choice|untprc|'.($tipo_sconto ?: $riga->tipo_sconto).'" ]}
echo '
<td>
{[ "type": "number", "name": "sconto_'.$riga->id.'", "value": "'.($riga->sconto_percentuale ?: $riga->sconto_unitario_corrente).'", "min-value": "0", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-after": "choice|untprc|'.($tipo_sconto ?: $riga->tipo_sconto).'", "disabled": "'.$block_edit.'" ]}
</td>';
}
// Importo
echo '
@ -608,6 +596,8 @@ function aggiornaInline(id) {
var qta = input("qta_"+ id).get();
var sconto = input("sconto_"+ id).get();
var tipo_sconto = input("tipo_sconto_"+ id).get();
var prezzo = input("prezzo_"+ id).get();
var costo = input("costo_"+ id).get();
$.ajax({
url: globals.rootdir + "/actions.php",
@ -620,6 +610,8 @@ function aggiornaInline(id) {
qta: qta,
sconto: sconto,
tipo_sconto: tipo_sconto,
prezzo: prezzo,
costo: costo
},
success: function (response) {
caricaRighe(id);

View File

@ -1164,6 +1164,23 @@ switch ($op) {
}
break;
case 'update_inline':
$id_riga = post('riga_id');
$riga = $riga ?: Riga::find($id_riga);
$riga = $riga ?: Articolo::find($id_riga);
if (!empty($riga)) {
$riga->qta = post('qta');
$riga->setPrezzoUnitario(post('prezzo'), $riga->idiva);
$riga->setSconto(post('sconto'), post('tipo_sconto'));
$riga->costo_unitario = post('costo') ?: 0;
$riga->save();
flash()->info(tr('Riga aggiornata!'));
}
break;
}
// Nota di debito

View File

@ -21,13 +21,13 @@ use Modules\Interventi\Intervento;
include_once __DIR__.'/init.php';
$direzione = $fattura->direzione;
$block_edit = !empty($note_accredito) || in_array($record['stato'], ['Emessa', 'Pagato', 'Parzialmente pagato']) || !$abilita_genera;
$order_row_desc = $_SESSION['module_'.$id_module]['order_row_desc'];
$righe = $order_row_desc ? $fattura->getRighe()->sortByDesc('created_at') : $fattura->getRighe();
$colspan = $dir == 'entrata' ? '8' : '7';
echo '
<div class="table-responsive">
<div class="table-responsive row-list">
<table class="table table-striped table-hover table-condensed table-bordered">
<thead>
<tr>
@ -40,10 +40,15 @@ echo '
</th>
<th width="35" class="text-center" >'.tr('#').'</th>
<th class="text-left">'.tr('Descrizione').'</th>
<th class="text-center" width="120">'.tr('Q.').'</th>
<th class="text-center" width="140">'.tr('Prezzo unitario').'</th>
<th class="text-center" width="140">'.tr('Iva unitaria').'</th>
<th class="text-center" width="140">'.tr('Importo').'</th>
<th class="text-center" width="120">'.tr('Q.').'</th>';
if ($dir == 'entrata') {
echo '<th class="text-center" width="150">'.tr('Costo unitario').'</th>';
}
echo '
<th class="text-center" width="180">'.tr('Prezzo unitario').'</th>
<th class="text-center" width="140">'.tr('Sconto unitario').'</th>
<th class="text-center" width="120">'.tr('Iva unitaria').'</th>
<th class="text-center" width="120">'.tr('Importo').'</th>
<th width="120"></th>
</tr>
</thead>
@ -179,6 +184,11 @@ foreach ($righe as $riga) {
if ($riga->isDescrizione()) {
echo '
<td></td>';
if ($dir == 'entrata') {
echo '<td></td>';
}
echo '
<td></td>
<td></td>
<td></td>
@ -186,35 +196,32 @@ foreach ($righe as $riga) {
} else {
// Quantità e unità di misura
echo '
<td class="text-center">
'.numberFormat($riga->qta, 'qta').' '.$riga->um.'
<td>
{[ "type": "number", "name": "qta_'.$riga->id.'", "value": "'.$riga->qta.'", "min-value": "0", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "disabled": "'.($riga->isSconto() ? 1 : 0).'", "disabled": "'.$block_edit.'" ]}
</td>';
// Costi unitari
if ($dir == 'entrata') {
echo '
<td>
{[ "type": "number", "name": "costo_'.$riga->id.'", "value": "'.$riga->costo_unitario.'", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-after": "'.currency().'", "disabled": "'.$block_edit.'" ]}
</td>';
}
// Prezzi unitari
if (empty($riga->prezzo_unitario_corrente) && $dir == 'entrata') {
$price_danger = 'text-danger';
} else {
$price_danger = '';
echo '
<td>
{[ "type": "number", "name": "prezzo_'.$riga->id.'", "value": "'.$riga->prezzo_unitario_corrente.'", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-before": "'.(abs($riga->provvigione_unitaria) > 0 ? '<span class=\'tip text-info\' title=\''.provvigioneInfo($riga).'\'><small><i class=\'fa fa-handshake-o\'></i></small></span>' : '').'", "icon-after": "'.currency().'", "disabled": "'.$block_edit.'" ]}
</td>';
// Sconto unitario
$tipo_sconto = '';
if ($riga['sconto'] == 0) {
$tipo_sconto = (setting('Tipo di sconto predefinito') == '%' ? 'PRC' : 'UNT');
}
echo '
<td class="text-right">
<span class="'.$price_danger.'">'.moneyFormat($riga->prezzo_unitario_corrente).'</span>';
if ($dir == 'entrata' && $riga->costo_unitario != 0) {
echo '
<br><small class="text-muted">
'.tr('Acquisto').': '.moneyFormat($riga->costo_unitario).'
</small>';
}
if (abs($riga->sconto_unitario) > 0) {
$text = discountInfo($riga);
echo '
<br><small class="label label-danger">'.$text.'</small>';
}
echo '
<td>
{[ "type": "number", "name": "sconto_'.$riga->id.'", "value": "'.($riga->sconto_percentuale ?: $riga->sconto_unitario_corrente).'", "min-value": "0", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-after": "choice|untprc|'.($tipo_sconto ?: $riga->tipo_sconto).'", "disabled": "'.$block_edit.'" ]}
</td>';
// Iva
@ -227,17 +234,8 @@ foreach ($righe as $riga) {
// Importo
echo '
<td class="text-right">
'.moneyFormat($riga->importo);
//provvigione riga
if (abs($riga->provvigione_unitaria) > 0) {
$text = provvigioneInfo($riga);
echo '
<br><small class="label label-info">'.$text.'</small>';
}
echo '</td>';
'.moneyFormat($riga->importo).'
</td>';
}
// Possibilità di rimuovere una riga solo se la fattura non è pagata
@ -312,7 +310,7 @@ $ritenuta_contributi = $fattura->totale_ritenuta_contributi;
// IMPONIBILE
echo '
<tr>
<td colspan="6" class="text-right">
<td colspan="'.$colspan.'" class="text-right">
<b>'.tr('Imponibile', [], ['upper' => true]).':</b>
</td>
<td class="text-right">
@ -325,7 +323,7 @@ echo '
if (!empty($sconto)) {
echo '
<tr>
<td colspan="6" class="text-right">
<td colspan="'.$colspan.'" class="text-right">
<b><span class="tip" title="'.tr('Un importo negativo indica uno sconto, mentre uno positivo indica una maggiorazione').'"><i class="fa fa-question-circle-o"></i> '.tr('Sconto/maggiorazione', [], ['upper' => true]).':</span></b>
</td>
<td class="text-right">
@ -337,7 +335,7 @@ if (!empty($sconto)) {
// TOTALE IMPONIBILE
echo '
<tr>
<td colspan="6" class="text-right">
<td colspan="'.$colspan.'" class="text-right">
<b>'.tr('Totale imponibile', [], ['upper' => true]).':</b>
</td>
<td class="text-right">
@ -351,7 +349,7 @@ if (!empty($sconto)) {
if (!empty($rivalsa_inps)) {
echo '
<tr>
<td colspan="6" class="text-right">';
<td colspan="'.$colspan.'" class="text-right">';
if ($dir == 'entrata') {
$descrizione_rivalsa = $database->fetchOne('SELECT CONCAT_WS(\' - \', codice, descrizione) AS descrizione FROM fe_tipo_cassa WHERE codice = '.prepare(setting('Tipo Cassa Previdenziale')));
@ -370,7 +368,7 @@ if (!empty($rivalsa_inps)) {
<td></td>
</tr>
<tr>
<td colspan="6" class="text-right">
<td colspan="'.$colspan.'" class="text-right">
<b>'.tr('Totale imponibile', [], ['upper' => true]).' :</b>
</td>
<td class="text-right">
@ -384,7 +382,7 @@ if (!empty($rivalsa_inps)) {
if (!empty($iva)) {
echo '
<tr>
<td colspan="6" class="text-right">';
<td colspan="'.$colspan.'" class="text-right">';
if ($records[0]['split_payment']) {
echo '<b>'.tr('Iva a carico del destinatario', [], ['upper' => true]).':</b>';
@ -403,7 +401,7 @@ if (!empty($iva)) {
// TOTALE
echo '
<tr>
<td colspan="6" class="text-right">
<td colspan="'.$colspan.'" class="text-right">
<b>'.tr('Totale documento', [], ['upper' => true]).':</b>
</td>
<td class="text-right">
@ -416,7 +414,7 @@ echo '
if (!empty($ritenuta_acconto)) {
echo '
<tr>
<td colspan="6" class="text-right">
<td colspan="'.$colspan.'" class="text-right">
<b>'.tr("Ritenuta d'acconto", [], ['upper' => true]).':</b>
</td>
<td class="text-right">
@ -430,7 +428,7 @@ if (!empty($ritenuta_acconto)) {
if (!empty($ritenuta_contributi)) {
echo '
<tr>
<td colspan="6" class="text-right">
<td colspan="'.$colspan.'" class="text-right">
<b>'.tr('Ritenuta previdenziale', [], ['upper' => true]).':</b>
</td>
<td class="text-right">
@ -444,7 +442,7 @@ if (!empty($ritenuta_contributi)) {
if (!empty($sconto_finale)) {
echo '
<tr>
<td colspan="6" class="text-right">
<td colspan="'.$colspan.'" class="text-right">
<b>'.tr('Sconto in fattura', [], ['upper' => true]).':</b>
</td>
<td class="text-right">
@ -458,7 +456,7 @@ if (!empty($sconto_finale)) {
if ($totale != $netto_a_pagare) {
echo '
<tr>
<td colspan="6" class="text-right">
<td colspan="'.$colspan.'" class="text-right">
<b>'.tr('Netto a pagare', [], ['upper' => true]).':</b>
</td>
<td class="text-right">
@ -472,7 +470,7 @@ if ($totale != $netto_a_pagare) {
if (!empty($fattura->provvigione)) {
echo '
<tr>
<td colspan="6" class="text-right">
<td colspan="'.$colspan.'" class="text-right">
'.tr('Provvigioni').':
</td>
<td class="text-right">
@ -483,7 +481,7 @@ if (!empty($fattura->provvigione)) {
echo '
<tr>
<td colspan="6" class="text-right">
<td colspan="'.$colspan.'" class="text-right">
'.tr('Netto da provvigioni').':
</td>
<td class="text-right">
@ -505,7 +503,7 @@ if (!$block_edit && sizeof($righe) > 0) {
<button type="button" class="btn btn-xs btn-default disabled" id="elimina_righe" onclick="rimuoviRiga(getSelectData());">
<i class="fa fa-trash"></i>
</button>';
if ($direzione == 'entrata') {
if ($dir == 'entrata') {
echo '
<button type="button" class="btn btn-xs btn-default disabled" id="confronta_righe" onclick="confrontaRighe(getSelectData());">
'.tr('Confronta prezzi').'
@ -712,4 +710,41 @@ $("#check_all").click(function(){
});
}
});
$(".tipo_icon_after").on("change", function() {
aggiornaInline($(this).closest("tr").data("id"));
});
function aggiornaInline(id) {
content_was_modified = false;
var qta = input("qta_"+ id).get();
var sconto = input("sconto_"+ id).get();
var tipo_sconto = input("tipo_sconto_"+ id).get();
var prezzo = input("prezzo_"+ id).get();
var costo = input("costo_"+ id).get();
$.ajax({
url: globals.rootdir + "/actions.php",
type: "POST",
data: {
id_module: globals.id_module,
id_record: globals.id_record,
op: "update_inline",
riga_id: id,
qta: qta,
sconto: sconto,
tipo_sconto: tipo_sconto,
prezzo: prezzo,
costo: costo
},
success: function (response) {
caricaRighe(id);
renderMessages();
},
error: function() {
caricaRighe(null);
}
});
}
init();
</script>';

View File

@ -1135,10 +1135,12 @@ switch (post('op')) {
if (!empty($riga)) {
$riga->qta = post('qta');
$riga->setPrezzoUnitario(post('prezzo'), $riga->idiva);
$riga->setSconto(post('sconto'), post('tipo_sconto'));
$riga->costo_unitario = post('costo') ?: 0;
$riga->save();
flash()->info(tr('Quantità aggiornata!'));
flash()->info(tr('Riga aggiornata!'));
}
break;

View File

@ -21,8 +21,7 @@ include_once __DIR__.'/init.php';
$block_edit = $record['flag_completato'];
$righe = $intervento->getRighe();
$colspan = ($block_edit ? '5' : '6');
$direzione = $intervento->direzione;
$colspan = '6';
$show_prezzi = Auth::user()['gruppo'] != 'Tecnici' || (Auth::user()['gruppo'] == 'Tecnici' && setting('Mostra i prezzi al tecnico'));
@ -43,13 +42,10 @@ echo '
if ($show_prezzi) {
echo '
<th class="text-center" width="140">'.tr('Prezzo di acquisto').'</th>
<th class="text-center" width="140">'.tr('Prezzo di vendita').'</th>';
if (!$block_edit) {
echo '<th class="text-center" width="150">'.tr('Sconto unitario').'</th>';
}
echo '
<th class="text-center" width="140">'.tr('Importo').'</th>';
<th class="text-center" width="140">'.tr('Costo unitario').'</th>
<th class="text-center" width="180">'.tr('Prezzo unitario').'</th>
<th class="text-center" width="140">'.tr('Sconto unitario').'</th>
<th class="text-center" width="130">'.tr('Importo').'</th>';
}
if (!$record['flag_completato']) {
@ -126,49 +122,32 @@ echo '
// Quantità e unità di misura
echo '
<td class="text-center">
<td>
{[ "type": "number", "name": "qta_'.$riga->id.'", "value": "'.$riga->qta.'", "min-value": "0", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-after": "'.($riga->um ?: '&nbsp;').'", "disabled": "'.($riga->isSconto() ? 1 : 0).'", "disabled": "'.$block_edit.'" ]}
</td>';
if ($show_prezzi) {
// Costo unitario
echo '
<td class="text-right">
'.moneyFormat($riga->costo_unitario).'
<td>
{[ "type": "number", "name": "costo_'.$riga->id.'", "value": "'.$riga->costo_unitario.'", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-after": "'.currency().'", "disabled": "'.$block_edit.'" ]}
</td>';
// Prezzo unitario
echo '
<td class="text-right">';
// Provvigione riga
if (abs($riga->provvigione_unitaria) > 0) {
$text = provvigioneInfo($riga);
echo '<span class="pull-left text-info" title="'.$text.'"><i class="fa fa-handshake-o"></i></span>';
}
echo moneyFormat($riga->prezzo_unitario);
if (abs($riga->sconto_unitario) > 0) {
$text = discountInfo($riga);
echo '
<br><small class="label label-danger">'.$text.'</small>';
}
echo '
<td>
{[ "type": "number", "name": "prezzo_'.$riga->id.'", "value": "'.$riga->prezzo_unitario_corrente.'", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-before": "'.(abs($riga->provvigione_unitaria) > 0 ? '<span class=\'tip text-info\' title=\''.provvigioneInfo($riga).'\'><small><i class=\'fa fa-handshake-o\'></i></small></span>' : '').'", "icon-after": "'.currency().'", "disabled": "'.$block_edit.'" ]}
</td>';
$tiposconto = '';
// Sconto unitario
$tipo_sconto = '';
if ($riga['sconto'] == 0) {
$tipo_sconto = (setting('Tipo di sconto predefinito') == '%' ? 'PRC' : 'UNT');
}
// Sconto unitario
if (!$block_edit) {
echo '
<td class="text-center">
{[ "type": "number", "name": "sconto_'.$riga->id.'", "value": "'.($riga->sconto_percentuale ?: $riga->sconto_unitario_corrente).'", "min-value": "0", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-after": "choice|untprc|'.($tipo_sconto ?: $riga->tipo_sconto).'" ]}
echo '
<td>
{[ "type": "number", "name": "sconto_'.$riga->id.'", "value": "'.($riga->sconto_percentuale ?: $riga->sconto_unitario_corrente).'", "min-value": "0", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-after": "choice|untprc|'.($tipo_sconto ?: $riga->tipo_sconto).'", "disabled": "'.$block_edit.'" ]}
</td>';
}
// Prezzo di vendita
echo '
@ -492,6 +471,8 @@ function aggiornaInline(id) {
var qta = input("qta_"+ id).get();
var sconto = input("sconto_"+ id).get();
var tipo_sconto = input("tipo_sconto_"+ id).get();
var prezzo = input("prezzo_"+ id).get();
var costo = input("costo_"+ id).get();
$.ajax({
url: globals.rootdir + "/actions.php",
@ -504,6 +485,8 @@ function aggiornaInline(id) {
qta: qta,
sconto: sconto,
tipo_sconto: tipo_sconto,
prezzo: prezzo,
costo: costo
},
success: function (response) {
caricaRighe(id);

View File

@ -707,10 +707,12 @@ switch (post('op')) {
if (!empty($riga)) {
$riga->qta = post('qta');
$riga->setPrezzoUnitario(post('prezzo'), $riga->idiva);
$riga->setSconto(post('sconto'), post('tipo_sconto'));
$riga->costo_unitario = post('costo') ?: 0;
$riga->save();
flash()->info(tr('Quantità aggiornata!'));
flash()->info(tr('Riga aggiornata!'));
}
break;

View File

@ -24,8 +24,8 @@ use Modules\Articoli\Articolo;
$block_edit = $record['flag_completato'];
$order_row_desc = $_SESSION['module_'.$id_module]['order_row_desc'];
$righe = $order_row_desc ? $ordine->getRighe()->sortByDesc('created_at') : $ordine->getRighe();
$colspan = ($block_edit ? '6' : '7');
$direzione = $ordine->direzione;
$dir = $ordine->direzione;
$colspan = $dir == 'entrata' ? '8' : '7';
echo '
<div class="table-responsive row-list">
@ -42,13 +42,14 @@ echo '
<th width="35" class="text-center" >'.tr('#').'</th>
<th>'.tr('Descrizione').'</th>
<th width="105">'.tr('Prev. evasione').'</th>
<th class="text-center tip" width="190">'.tr('Q.').'</th>
<th class="text-center" width="140">'.tr('Prezzo unitario').'</th>';
if (!$block_edit) {
echo '<th class="text-center" width="150">'.tr('Sconto unitario').'</th>';
<th class="text-center tip" width="190">'.tr('Q.').'</th>';
if ($dir == 'entrata') {
echo '<th class="text-center" width="150">'.tr('Costo unitario').'</th>';
}
echo '
<th class="text-center" width="140">'.tr('Importo').'</th>
<th class="text-center" width="180">'.tr('Prezzo unitario').'</th>
<th class="text-center" width="140">'.tr('Sconto unitario').'</th>
<th class="text-center" width="130">'.tr('Importo').'</th>
<th width="80"></th>
</tr>
</thead>
@ -191,14 +192,18 @@ foreach ($righe as $riga) {
if ($riga->isDescrizione()) {
echo '
<td></td>
<td></td>';
if ($dir == 'entrata') {
echo '<td></td>';
}
echo '
<td></td>
<td></td>
<td></td>';
} else {
// Quantità e unità di misura
echo '
<td class="text-center">
<td>
{[ "type": "number", "name": "qta_'.$riga->id.'", "value": "'.$riga->qta.'", "min-value": "0", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-before": "<span class=\'tip\' title=\''.($riga->confermato ? tr('Articolo confermato') : tr('Articolo non confermato')).'\'><i class=\''.($riga->confermato ? 'fa fa-check text-success' : 'fa fa-clock-o text-warning').'\'></i></span>", "icon-after": "<span class=\'tip\' title=\''.tr('Quantità evasa').' / '.tr('totale').': '.tr('_QTA_ / _TOT_', ['_QTA_' => numberFormat($riga->qta_evasa, 'qta'), '_TOT_' => numberFormat($riga->qta, 'qta')]).'\'>'.$riga->um.' <small><i class=\'text-muted fa fa-info-circle\'></i></small></span>", "disabled": "'.($riga->isSconto() ? 1 : 0).'", "disabled": "'.$block_edit.'" ]}
<div class="progress" style="height:4px;">';
// Visualizzazione evasione righe per documento
@ -219,38 +224,29 @@ foreach ($righe as $riga) {
</div>
</td>';
// Costi unitari
if ($dir == 'entrata') {
echo '
<td>
{[ "type": "number", "name": "costo_'.$riga->id.'", "value": "'.$riga->costo_unitario.'", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-after": "'.currency().'", "disabled": "'.$block_edit.'" ]}
</td>';
}
// Prezzi unitari
echo '
<td class="text-right">';
// Provvigione riga
if (abs($riga->provvigione_unitaria) > 0) {
$text = provvigioneInfo($riga);
echo '<span class="pull-left text-info" title="'.$text.'"><i class="fa fa-handshake-o"></i></span>';
}
echo moneyFormat($riga->prezzo_unitario_corrente);
if (abs($riga->sconto_unitario) > 0) {
$text = discountInfo($riga);
echo '
<br><small class="label label-danger">'.$text.'</small>';
}
echo '
<td>
{[ "type": "number", "name": "prezzo_'.$riga->id.'", "value": "'.$riga->prezzo_unitario_corrente.'", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-before": "'.(abs($riga->provvigione_unitaria) > 0 ? '<span class=\'tip text-info\' title=\''.provvigioneInfo($riga).'\'><small><i class=\'fa fa-handshake-o\'></i></small></span>' : '').'", "icon-after": "'.currency().'", "disabled": "'.$block_edit.'" ]}
</td>';
$tiposconto = '';
// Sconto unitario
$tipo_sconto = '';
if ($riga['sconto'] == 0) {
$tipo_sconto = (setting('Tipo di sconto predefinito') == '%' ? 'PRC' : 'UNT');
}
// Sconto unitario
if (!$block_edit) {
echo '
<td class="text-center">
{[ "type": "number", "name": "sconto_'.$riga->id.'", "value": "'.($riga->sconto_percentuale ?: $riga->sconto_unitario_corrente).'", "min-value": "0", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-after": "choice|untprc|'.($tipo_sconto ?: $riga->tipo_sconto).'" ]}
echo '
<td>
{[ "type": "number", "name": "sconto_'.$riga->id.'", "value": "'.($riga->sconto_percentuale ?: $riga->sconto_unitario_corrente).'", "min-value": "0", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-after": "choice|untprc|'.($tipo_sconto ?: $riga->tipo_sconto).'", "disabled": "'.$block_edit.'" ]}
</td>';
}
// Importo
echo '
@ -437,7 +433,7 @@ if (!$block_edit && sizeof($righe) > 0) {
<button type="button" class="btn btn-xs btn-default disabled" id="elimina_righe" onclick="rimuoviRiga(getSelectData());">
<i class="fa fa-trash"></i>
</button>';
if ($direzione == 'entrata') {
if ($dir == 'entrata') {
echo '
<button type="button" class="btn btn-xs btn-default disabled" id="confronta_righe" onclick="confrontaRighe(getSelectData());">
'.tr('Confronta prezzi').'
@ -655,6 +651,8 @@ function aggiornaInline(id) {
var qta = input("qta_"+ id).get();
var sconto = input("sconto_"+ id).get();
var tipo_sconto = input("tipo_sconto_"+ id).get();
var prezzo = input("prezzo_"+ id).get();
var costo = input("costo_"+ id).get();
$.ajax({
url: globals.rootdir + "/actions.php",
@ -667,6 +665,8 @@ function aggiornaInline(id) {
qta: qta,
sconto: sconto,
tipo_sconto: tipo_sconto,
prezzo: prezzo,
costo: costo
},
success: function (response) {
caricaRighe(id);

View File

@ -507,10 +507,12 @@ switch (post('op')) {
if (!empty($riga)) {
$riga->qta = post('qta');
$riga->setPrezzoUnitario(post('prezzo'), $riga->idiva);
$riga->setSconto(post('sconto'), post('tipo_sconto'));
$riga->costo_unitario = post('costo') ?: 0;
$riga->save();
flash()->info(tr('Quantità aggiornata!'));
flash()->info(tr('Riga aggiornata!'));
}
break;

View File

@ -22,7 +22,7 @@ include_once __DIR__.'/init.php';
$block_edit = $record['is_completato'];
$order_row_desc = $_SESSION['module_'.$id_module]['order_row_desc'];
$righe = $order_row_desc ? $preventivo->getRighe()->sortByDesc('created_at') : $preventivo->getRighe();
$colspan = ($block_edit ? '6' : '7');
$colspan = '8';
echo '
<div class="table-responsive row-list">
@ -39,13 +39,11 @@ echo '
<th width="35" class="text-center" >'.tr('#').'</th>
<th>'.tr('Descrizione').'</th>
<th width="105">'.tr('Prev. evasione').'</th>
<th class="text-center tip" width="190">'.tr('Q.').'</th>
<th class="text-center" width="140">'.tr('Prezzo unitario').'</th>';
if (!$block_edit) {
echo '<th class="text-center" width="150">'.tr('Sconto unitario').'</th>';
}
echo '
<th class="text-center" width="140">'.tr('Importo').'</th>
<th class="text-center tip" width="160">'.tr('Q.').'</th>
<th class="text-center" width="150">'.tr('Costo unitario').'</th>
<th class="text-center" width="180">'.tr('Prezzo unitario').'</th>
<th class="text-center" width="140">'.tr('Sconto unitario').'</th>
<th class="text-center" width="130">'.tr('Importo').'</th>
<th width="80"></th>
</tr>
</thead>
@ -68,7 +66,7 @@ foreach ($righe as $key => $riga) {
$iva_gruppo = 0;
$has_gruppo = true;
$style_titolo = 'style="background-color:'.$color_gruppo.'"';
$colspan_titolo = 'colspan="6"';
$colspan_titolo = 'colspan="7"';
}
$subtotale_gruppo += $riga->totale_imponibile;
$iva_gruppo += $riga->iva;
@ -155,6 +153,7 @@ foreach ($righe as $key => $riga) {
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>';
} else {
// Info evasione
@ -186,38 +185,27 @@ foreach ($righe as $key => $riga) {
</div>
</td>';
// Prezzi unitari
echo '
<td class="text-right">';
// Provvigione riga
if (abs($riga->provvigione_unitaria) > 0) {
$text = provvigioneInfo($riga);
echo '<span class="pull-left text-info" title="'.$text.'"><i class="fa fa-handshake-o"></i></span>';
}
echo moneyFormat($riga->prezzo_unitario_corrente);
if (abs($riga->sconto_unitario) > 0) {
$text = discountInfo($riga);
echo '
<br><small class="label label-danger">'.$text.'</small>';
}
// Costi unitari
echo '
<td>
{[ "type": "number", "name": "costo_'.$riga->id.'", "value": "'.$riga->costo_unitario.'", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-after": "'.currency().'", "disabled": "'.$block_edit.'" ]}
</td>';
$tiposconto = '';
// Prezzi unitari
echo '
<td class="text-right">
{[ "type": "number", "name": "prezzo_'.$riga->id.'", "value": "'.$riga->prezzo_unitario_corrente.'", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-before": "'.(abs($riga->provvigione_unitaria) > 0 ? '<span class=\'tip text-info\' title=\''.provvigioneInfo($riga).'\'><small><i class=\'fa fa-handshake-o\'></i></small></span>' : '').'", "icon-after": "'.currency().'", "disabled": "'.$block_edit.'" ]}
</td>';
// Sconto unitario
$tipo_sconto = '';
if ($riga['sconto'] == 0) {
$tipo_sconto = (setting('Tipo di sconto predefinito') == '%' ? 'PRC' : 'UNT');
}
// Sconto unitario
if (!$block_edit) {
echo '
echo '
<td class="text-center">
{[ "type": "number", "name": "sconto_'.$riga->id.'", "value": "'.($riga->sconto_percentuale ?: $riga->sconto_unitario_corrente).'", "min-value": "0", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-after": "choice|untprc|'.($tipo_sconto ?: $riga->tipo_sconto).'" ]}
{[ "type": "number", "name": "sconto_'.$riga->id.'", "value": "'.($riga->sconto_percentuale ?: $riga->sconto_unitario_corrente).'", "min-value": "0", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-after": "choice|untprc|'.($tipo_sconto ?: $riga->tipo_sconto).'", "disabled": "'.$block_edit.'" ]}
</td>';
}
// Importo
echo '
@ -656,6 +644,8 @@ function aggiornaInline(id) {
var qta = input("qta_"+ id).get();
var sconto = input("sconto_"+ id).get();
var tipo_sconto = input("tipo_sconto_"+ id).get();
var prezzo = input("prezzo_"+ id).get();
var costo = input("costo_"+ id).get();
$.ajax({
url: globals.rootdir + "/actions.php",
@ -668,6 +658,8 @@ function aggiornaInline(id) {
qta: qta,
sconto: sconto,
tipo_sconto: tipo_sconto,
prezzo: prezzo,
costo: costo
},
success: function (response) {
caricaRighe(id);

View File

@ -286,9 +286,14 @@ class HTMLWrapper implements WrapperInterface
];
}
$disabled = '';
if (in_array('disabled', $extras)) {
$disabled = '1';
}
$value = (empty($pieces[2]) || !in_array($pieces[2], array_column($choices, 'id'))) ? $choices[0]['id'] : $pieces[2];
$result = '{[ "type": "select", "name": "tipo_'.prepareToField($values['name']).'", "id": "tipo_'.prepareToField($values['name']).'_'.rand(0, 99).'", "value": "'.prepareToField($value).'", "values": '.json_encode($choices).', "class": "no-search tipo_icon_after", "extra": "'.$extra.'" ]}';
$result = '{[ "type": "select", "name": "tipo_'.prepareToField($values['name']).'", "id": "tipo_'.prepareToField($values['name']).'_'.rand(0, 99).'", "value": "'.prepareToField($value).'", "values": '.json_encode($choices).', "class": "no-search tipo_icon_after", "extra": "'.$extra.'", "disabled": "'.$disabled.'" ]}';
$result = \HTMLBuilder\HTMLBuilder::replace($result);