Aggiornamento Preventivi
This commit is contained in:
parent
33fee0163d
commit
4ecb0f8009
|
@ -7,7 +7,10 @@ use Illuminate\Database\Eloquent\Model as Original;
|
|||
abstract class Model extends Original
|
||||
{
|
||||
// Retrocompatibilità MySQL
|
||||
const UPDATED_AT = null;
|
||||
public function setUpdatedAtAttribute($value)
|
||||
{
|
||||
// to Disable updated_at
|
||||
}
|
||||
|
||||
/**
|
||||
* Crea una nuova istanza del modello.
|
||||
|
|
|
@ -198,9 +198,6 @@ switch (post('op')) {
|
|||
flash()->info(tr('Riga aggiunta!'));
|
||||
}
|
||||
|
||||
// Ricalcolo inps, ritenuta e bollo
|
||||
ricalcola_costiagg_fattura($id_record);
|
||||
|
||||
break;
|
||||
|
||||
case 'manage_descrizione':
|
||||
|
@ -265,9 +262,9 @@ switch (post('op')) {
|
|||
|
||||
// eliminazione contratto
|
||||
case 'delete':
|
||||
$dbo->query('DELETE FROM co_contratti WHERE id='.prepare($id_record));
|
||||
$dbo->query('DELETE FROM co_promemoria WHERE idcontratto='.prepare($id_record));
|
||||
$dbo->query('DELETE FROM co_righe_contratti WHERE idcontratto='.prepare($id_record));
|
||||
|
||||
$contratto->delete();
|
||||
|
||||
flash()->info(tr('Contratto eliminato!'));
|
||||
|
||||
|
|
|
@ -54,4 +54,5 @@ if (get('is_descrizione') !== null) {
|
|||
|
||||
$options['op'] = 'manage_sconto';
|
||||
}
|
||||
|
||||
echo App::load($file.'.php', $result, $options);
|
||||
|
|
|
@ -23,8 +23,6 @@ $riga = $documento->getRighe()->find($id_riga);
|
|||
$result = $riga->toArray();
|
||||
$result['prezzo'] = $riga->prezzo_unitario_vendita;
|
||||
|
||||
// Importazione della gestione dedicata
|
||||
|
||||
// Importazione della gestione dedicata
|
||||
$file = 'riga';
|
||||
if ($riga->isDescrizione()) {
|
||||
|
|
|
@ -119,7 +119,7 @@ function editRow(id){
|
|||
}
|
||||
|
||||
function deleteRow(id){
|
||||
if(confirm("'.tr('Rimuovere questa riga dal contratto?').'")){
|
||||
if(confirm("'.tr('Rimuovere questa riga dal documento?').'")){
|
||||
$("#delete-form-" + id).submit();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
use Modules\Anagrafiche\Anagrafica;
|
||||
use Modules\Articoli\Articolo as ArticoloOriginale;
|
||||
use Modules\Preventivi\Components\Descrizione;
|
||||
use Modules\Interventi\TipoSessione;
|
||||
use Modules\Preventivi\Components\Articolo;
|
||||
use Modules\Preventivi\Components\Riga;
|
||||
|
@ -29,72 +31,35 @@ switch (post('op')) {
|
|||
|
||||
case 'update':
|
||||
if (isset($id_record)) {
|
||||
$idstato = post('idstato');
|
||||
$nome = post('nome');
|
||||
$idanagrafica = post('idanagrafica');
|
||||
$idsede = post('idsede');
|
||||
$idagente = post('idagente');
|
||||
$idreferente = post('idreferente');
|
||||
$idpagamento = post('idpagamento');
|
||||
$idporto = post('idporto');
|
||||
$tempi_consegna = post('tempi_consegna');
|
||||
$numero = post('numero');
|
||||
$preventivo->idstato= post('idstato');
|
||||
$preventivo->nome= post('nome');
|
||||
$preventivo->idanagrafica= post('idanagrafica');
|
||||
$preventivo->idsede= post('idsede');
|
||||
$preventivo->idagente= post('idagente');
|
||||
$preventivo->idreferente= post('idreferente');
|
||||
$preventivo->idpagamento= post('idpagamento');
|
||||
$preventivo->idporto= post('idporto');
|
||||
$preventivo->tempi_consegna= post('tempi_consegna');
|
||||
$preventivo->numero= post('numero');
|
||||
$preventivo->data_bozza= post('data_bozza');
|
||||
$preventivo->data_accettazione= post('data_accettazione');
|
||||
$preventivo->data_rifiuto= post('data_rifiuto');
|
||||
$preventivo->data_conclusione= post('data_conclusione');
|
||||
$preventivo->esclusioni= post('esclusioni');
|
||||
$preventivo->descrizione= post('descrizione');
|
||||
$preventivo->id_documento_fe= post('id_documento_fe');
|
||||
$preventivo->num_item= post('num_item');
|
||||
$preventivo->codice_cig= post('codice_cig');
|
||||
$preventivo->codice_cup= post('codice_cup');
|
||||
$preventivo->validita= post('validita');
|
||||
$preventivo->idtipointervento= post('idtipointervento');
|
||||
$preventivo->idiva= post('idiva');
|
||||
|
||||
$tipo_sconto = post('tipo_sconto_generico');
|
||||
$sconto = post('sconto_generico');
|
||||
$preventivo->save();
|
||||
|
||||
// $budget = post('budget');
|
||||
// $budget = str_replace( ",", ".", $budget );
|
||||
|
||||
$data_bozza = post('data_bozza');
|
||||
$data_accettazione = post('data_accettazione');
|
||||
$data_rifiuto = post('data_rifiuto');
|
||||
$data_conclusione = post('data_conclusione');
|
||||
$esclusioni = post('esclusioni');
|
||||
$descrizione = post('descrizione');
|
||||
$validita = post('validita');
|
||||
$idtipointervento = post('idtipointervento');
|
||||
|
||||
// $costo_diritto_chiamata = post('costo_diritto_chiamata');
|
||||
// $ore_lavoro = str_replace( ",", ".", post('ore_lavoro') );
|
||||
// $costo_orario = post('costo_orario');
|
||||
// $costo_km = post('costo_km');
|
||||
|
||||
$idiva = post('idiva');
|
||||
|
||||
$id_documento_fe = post('id_documento_fe');
|
||||
$num_item = post('num_item');
|
||||
$codice_cig = post('codice_cig');
|
||||
$codice_cup = post('codice_cup');
|
||||
|
||||
$query = 'UPDATE co_preventivi SET idstato='.prepare($idstato).','.
|
||||
' nome='.prepare($nome).','.
|
||||
' idanagrafica='.prepare($idanagrafica).','.
|
||||
' idsede='.prepare($idsede).','.
|
||||
' idagente='.prepare($idagente).','.
|
||||
' idreferente='.prepare($idreferente).','.
|
||||
' idpagamento='.prepare($idpagamento).','.
|
||||
' idporto='.prepare($idporto).','.
|
||||
' tempi_consegna='.prepare($tempi_consegna).','.
|
||||
' numero='.prepare($numero).','.
|
||||
' data_bozza='.prepare($data_bozza).','.
|
||||
' data_accettazione='.prepare($data_accettazione).','.
|
||||
' data_rifiuto='.prepare($data_rifiuto).','.
|
||||
' data_conclusione='.prepare($data_conclusione).','.
|
||||
' esclusioni='.prepare($esclusioni).','.
|
||||
' descrizione='.prepare($descrizione).','.
|
||||
' id_documento_fe='.prepare($id_documento_fe).','.
|
||||
' num_item='.prepare($num_item).','.
|
||||
' codice_cig='.prepare($codice_cig).','.
|
||||
' codice_cup='.prepare($codice_cup).','.
|
||||
' validita='.prepare($validita).','.
|
||||
' idtipointervento='.prepare($idtipointervento).','.
|
||||
' idiva='.prepare($idiva).' WHERE id='.prepare($id_record);
|
||||
$dbo->query($query);
|
||||
|
||||
// update_budget_preventivo( $id_record );
|
||||
flash()->info(tr('Preventivo modificato correttamente!'));
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
// Duplica preventivo
|
||||
|
@ -140,25 +105,6 @@ switch (post('op')) {
|
|||
}
|
||||
break;
|
||||
|
||||
// Scollegamento articolo da ordine
|
||||
case 'unlink_articolo':
|
||||
if (post('idriga') !== null) {
|
||||
$idriga = post('idriga');
|
||||
$idarticolo = post('idarticolo');
|
||||
|
||||
// Leggo la quantità di questo articolo nell'ordine
|
||||
$query = 'SELECT qta, subtotale FROM co_righe_preventivi WHERE id='.prepare($idriga);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$qta = floatval($rs[0]['qta']);
|
||||
$subtotale = $rs[0]['subtotale'];
|
||||
|
||||
// Elimino la riga dal preventivo
|
||||
$dbo->query('DELETE FROM co_righe_preventivi WHERE id='.prepare($idriga));
|
||||
|
||||
flash()->info(tr('Riga rimossa!'));
|
||||
}
|
||||
break;
|
||||
|
||||
// Scollegamento intervento da preventivo
|
||||
case 'unlink':
|
||||
if (isset($_GET['idpreventivo']) && isset($_GET['idintervento'])) {
|
||||
|
@ -174,59 +120,46 @@ switch (post('op')) {
|
|||
}
|
||||
break;
|
||||
|
||||
// eliminazione preventivo
|
||||
// Eliminazione preventivo
|
||||
case 'delete':
|
||||
$rs_revisioni = $dbo->fetchArray('SELECT master_revision FROM co_preventivi WHERE id='.prepare($id_record));
|
||||
|
||||
//Cancello preventivo e revisioni
|
||||
$dbo->query('DELETE FROM co_preventivi WHERE master_revision='.prepare($rs_revisioni[0]['master_revision']));
|
||||
|
||||
$dbo->update('in_interventi', [
|
||||
'id_preventivo' => null,
|
||||
], ['id_preventivo' => $id_record]);
|
||||
$preventivo->delete();
|
||||
|
||||
flash()->info(tr('Preventivo eliminato!'));
|
||||
|
||||
break;
|
||||
|
||||
// Aggiungo una riga al preventivo
|
||||
case 'addriga':
|
||||
$idarticolo = post('idarticolo');
|
||||
$idiva = post('idiva');
|
||||
$descrizione = post('descrizione');
|
||||
case 'manage_articolo':
|
||||
if (post('idriga') != null) {
|
||||
$articolo = Articolo::find(post('idriga'));
|
||||
} else {
|
||||
$originale = ArticoloOriginale::find(post('idarticolo'));
|
||||
$articolo = Articolo::build($preventivo, $originale);
|
||||
}
|
||||
|
||||
$qta = post('qta');
|
||||
$prezzo = post('prezzo');
|
||||
$prezzo_acquisto = post('prezzo_acquisto');
|
||||
|
||||
// Calcolo dello sconto
|
||||
$sconto_unitario = post('sconto');
|
||||
$tipo_sconto = post('tipo_sconto');
|
||||
$sconto = calcola_sconto([
|
||||
'sconto' => $sconto_unitario,
|
||||
'prezzo' => $prezzo,
|
||||
'tipo' => $tipo_sconto,
|
||||
'qta' => $qta,
|
||||
]);
|
||||
$articolo->descrizione = post('descrizione');
|
||||
$articolo->um = post('um') ?: null;
|
||||
|
||||
$subtot = $prezzo * $qta;
|
||||
$articolo->id_iva = post('idiva');
|
||||
|
||||
$um = post('um');
|
||||
//$articolo->prezzo_unitario_acquisto = post('prezzo_acquisto') ?: 0;
|
||||
$articolo->prezzo_unitario_vendita = post('prezzo');
|
||||
$articolo->sconto_unitario = post('sconto');
|
||||
$articolo->tipo_sconto = post('tipo_sconto');
|
||||
|
||||
// Lettura iva dell'articolo
|
||||
$rs2 = $dbo->fetchArray('SELECT descrizione, percentuale, indetraibile FROM co_iva WHERE id='.prepare($idiva));
|
||||
$iva = ($subtot - $sconto) / 100 * $rs2[0]['percentuale'];
|
||||
$iva_indetraibile = $iva / 100 * $rs2[0]['indetraibile'];
|
||||
try {
|
||||
$articolo->qta = $qta;
|
||||
} catch (UnexpectedValueException $e) {
|
||||
flash()->error(tr('Alcuni serial number sono già stati utilizzati!'));
|
||||
}
|
||||
|
||||
$dbo->query('INSERT INTO co_righe_preventivi(idpreventivo, idarticolo, idiva, desc_iva, iva, iva_indetraibile, descrizione, prezzo_unitario_acquisto, subtotale, um, qta, sconto, sconto_unitario, tipo_sconto, is_descrizione, `order`) VALUES ('.prepare($id_record).', '.prepare($idarticolo).', '.prepare($idiva).', '.prepare($rs2[0]['descrizione']).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($prezzo_acquisto).', '.prepare($subtot).', '.prepare($um).', '.prepare($qta).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', '.prepare(empty($qta)).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_preventivi AS t WHERE idpreventivo='.prepare($id_record).'))');
|
||||
$articolo->save();
|
||||
|
||||
// Messaggi informativi
|
||||
if (!empty($idarticolo)) {
|
||||
flash()->info(tr('Articolo aggiunto!'));
|
||||
} elseif (!empty($qta)) {
|
||||
flash()->info(tr('Riga aggiunta!'));
|
||||
if (post('idriga') != null) {
|
||||
flash()->info(tr('Articolo modificato!'));
|
||||
} else {
|
||||
flash()->info(tr('Riga descrittiva aggiunta!'));
|
||||
flash()->info(tr('Articolo aggiunto!'));
|
||||
}
|
||||
|
||||
break;
|
||||
|
@ -254,62 +187,72 @@ switch (post('op')) {
|
|||
|
||||
break;
|
||||
|
||||
case 'editriga':
|
||||
$idriga = post('idriga');
|
||||
$descrizione = post('descrizione');
|
||||
$idarticolo = post('idarticolo');
|
||||
//Info riga Preventivo
|
||||
$rs = $dbo->fetchArray('SELECT * FROM co_righe_preventivi WHERE id='.prepare($idriga));
|
||||
$is_descrizione = $rs[0]['is_descrizione'];
|
||||
case 'manage_riga':
|
||||
if (post('idriga') != null) {
|
||||
$riga = Riga::find(post('idriga'));
|
||||
} else {
|
||||
$riga = Riga::build($preventivo);
|
||||
}
|
||||
|
||||
$qta = post('qta');
|
||||
$prezzo = post('prezzo');
|
||||
$prezzo_acquisto = post('prezzo_acquisto');
|
||||
$subtot = $prezzo * $qta;
|
||||
|
||||
// Calcolo dello sconto
|
||||
$sconto_unitario = post('sconto');
|
||||
$tipo_sconto = post('tipo_sconto');
|
||||
$sconto = calcola_sconto([
|
||||
'sconto' => $sconto_unitario,
|
||||
'prezzo' => $prezzo,
|
||||
'tipo' => $tipo_sconto,
|
||||
'qta' => $qta,
|
||||
]);
|
||||
$riga->descrizione = post('descrizione');
|
||||
$riga->um = post('um') ?: null;
|
||||
|
||||
$idiva = post('idiva');
|
||||
$um = post('um');
|
||||
$riga->id_iva = post('idiva');
|
||||
|
||||
// Calcolo iva
|
||||
$rs2 = $dbo->fetchArray('SELECT descrizione, percentuale, indetraibile FROM co_iva WHERE id='.prepare($idiva));
|
||||
$iva = ($subtot - $sconto) / 100 * $rs2[0]['percentuale'];
|
||||
$iva_indetraibile = $iva / 100 * $rs2[0]['indetraibile'];
|
||||
$desc_iva = $rs2[0]['descrizione'];
|
||||
//$riga->prezzo_unitario_acquisto = post('prezzo_acquisto') ?: 0;
|
||||
$riga->prezzo_unitario_vendita = post('prezzo');
|
||||
$riga->sconto_unitario = post('sconto');
|
||||
$riga->tipo_sconto = post('tipo_sconto');
|
||||
|
||||
if ($is_descrizione == 0) {
|
||||
// Modifica riga generica sul documento
|
||||
$query = 'UPDATE co_righe_preventivi SET idarticolo='.prepare($idarticolo).', idiva='.prepare($idiva).', desc_iva='.prepare($desc_iva).', iva='.prepare($iva).', iva_indetraibile='.prepare($iva_indetraibile).', descrizione='.prepare($descrizione).', prezzo_unitario_acquisto='.prepare($prezzo_acquisto).',subtotale='.prepare($subtot).', sconto='.prepare($sconto).', sconto_unitario='.prepare($sconto_unitario).', tipo_sconto='.prepare($tipo_sconto).', um='.prepare($um).', qta='.prepare($qta).' WHERE id='.prepare($idriga);
|
||||
$riga->qta = $qta;
|
||||
|
||||
$riga->save();
|
||||
|
||||
if (post('idriga') != null) {
|
||||
flash()->info(tr('Riga modificata!'));
|
||||
} else {
|
||||
$query = 'UPDATE co_righe_preventivi SET descrizione='.prepare($descrizione).' WHERE id='.prepare($idriga);
|
||||
flash()->info(tr('Riga aggiunta!'));
|
||||
}
|
||||
$dbo->query($query);
|
||||
|
||||
flash()->info('Riga modificata!');
|
||||
break;
|
||||
|
||||
case 'update_position':
|
||||
$orders = explode(',', $_POST['order']);
|
||||
$order = 0;
|
||||
case 'manage_descrizione':
|
||||
if (post('idriga') != null) {
|
||||
$riga = Descrizione::find(post('idriga'));
|
||||
} else {
|
||||
$riga = Descrizione::build($preventivo);
|
||||
}
|
||||
|
||||
foreach ($orders as $idriga) {
|
||||
$dbo->query('UPDATE `co_righe_preventivi` SET `order`='.prepare($order).' WHERE id='.prepare($idriga));
|
||||
++$order;
|
||||
$riga->descrizione = post('descrizione');
|
||||
|
||||
$riga->save();
|
||||
|
||||
if (post('idriga') != null) {
|
||||
flash()->info(tr('Riga descrittiva modificata!'));
|
||||
} else {
|
||||
flash()->info(tr('Riga descrittiva aggiunta!'));
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
// Eliminazione riga
|
||||
case 'delete_riga':
|
||||
$id_riga = post('idriga');
|
||||
if ($id_riga !== null) {
|
||||
$riga = Descrizione::find($id_riga) ?: Riga::find($id_riga);
|
||||
$riga = $riga ? $riga : Articolo::find($id_riga);
|
||||
$riga = $riga ? $riga : Sconto::find($id_riga);
|
||||
|
||||
$riga->delete();
|
||||
|
||||
flash()->info(tr('Riga eliminata!'));
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 'add_revision':
|
||||
|
||||
//Copio il preventivo
|
||||
$rs_preventivo = $dbo->fetchArray("SELECT * FROM co_preventivi WHERE id='".$id_record."'");
|
||||
|
||||
|
|
|
@ -4,27 +4,6 @@ include_once __DIR__.'/../../core.php';
|
|||
|
||||
use Modules\Preventivi\Preventivo;
|
||||
|
||||
/**
|
||||
* Questa funzione rimuove un articolo dal ddt data e lo riporta in magazzino
|
||||
* $idarticolo integer codice dell'articolo da scollegare dall'ordine
|
||||
* $idordine integer codice dell'ordine da cui scollegare l'articolo.
|
||||
*/
|
||||
function rimuovi_articolo_dapreventivo($idarticolo, $idpreventivo, $idriga)
|
||||
{
|
||||
global $dir;
|
||||
|
||||
$dbo = database();
|
||||
|
||||
// Leggo la quantità di questo articolo nell'ordine
|
||||
$query = 'SELECT qta, subtotale FROM co_righe_preventivi WHERE id='.prepare($idriga);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$qta = floatval($rs[0]['qta']);
|
||||
$subtotale = $rs[0]['subtotale'];
|
||||
|
||||
// Elimino la riga dall'ordine
|
||||
$dbo->query('DELETE FROM co_righe_preventivi WHERE id='.prepare($idriga));
|
||||
}
|
||||
|
||||
function get_imponibile_preventivo($idpreventivo)
|
||||
{
|
||||
$preventivo = Preventivo::find($idpreventivo);
|
||||
|
@ -51,30 +30,3 @@ function get_stato_preventivo($idpreventivo)
|
|||
return 'Non evaso';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Aggiorna il budget del preventivo leggendo tutte le righe inserite.
|
||||
*
|
||||
* @deprecated 2.3
|
||||
*/
|
||||
function update_budget_preventivo($idpreventivo)
|
||||
{
|
||||
$dbo = database();
|
||||
|
||||
// Totale articoli
|
||||
$rs = $dbo->fetchArray('SELECT SUM(subtotale) AS totale FROM co_righe_preventivi GROUP BY idpreventivo HAVING idpreventivo='.prepare($idpreventivo));
|
||||
$totale_articoli = $rs[0]['totale'];
|
||||
|
||||
$rs = $dbo->fetchArray('SELECT SUM(sconto*qta) AS totale FROM co_righe_preventivi GROUP BY idpreventivo HAVING idpreventivo='.prepare($idpreventivo));
|
||||
$totale_sconto = $rs[0]['totale'];
|
||||
|
||||
$rs = $dbo->fetchArray('SELECT SUM(iva) AS totale FROM co_righe_preventivi GROUP BY idpreventivo HAVING idpreventivo='.prepare($idpreventivo));
|
||||
$totale_iva = $rs[0]['totale'];
|
||||
|
||||
// Totale costo ore, km e diritto di chiamata
|
||||
// $rs = $dbo->fetchArray("SELECT SUM(costo_orario*ore_lavoro + costo_diritto_chiamata) AS totale FROM co_preventivi GROUP BY id HAVING id=\"".$idpreventivo."\"");
|
||||
// $totale_lavoro = $rs[0]['totale'];
|
||||
|
||||
// Aggiorno il budget su co_preventivi
|
||||
$dbo->query('UPDATE co_preventivi SET budget='.prepare(($totale_articoli - $totale_sconto) + $totale_iva).' WHERE id='.prepare($idpreventivo));
|
||||
}
|
||||
|
|
|
@ -9,7 +9,7 @@ $documento = Preventivo::find($id_record);
|
|||
|
||||
// Impostazioni per la gestione
|
||||
$options = [
|
||||
'op' => 'addriga',
|
||||
'op' => 'manage_riga',
|
||||
'action' => 'add',
|
||||
'dir' => $documento->direzione,
|
||||
'idanagrafica' => $documento['idanagrafica'],
|
||||
|
@ -43,8 +43,12 @@ if ($listino[0]['prc_guadagno'] > 0) {
|
|||
$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';
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ $documento = Preventivo::find($id_record);
|
|||
|
||||
// Impostazioni per la gestione
|
||||
$options = [
|
||||
'op' => 'editriga',
|
||||
'op' => 'manage_riga',
|
||||
'action' => 'edit',
|
||||
'dir' => $documento->direzione,
|
||||
'idanagrafica' => $documento['idanagrafica'],
|
||||
|
@ -23,18 +23,19 @@ $riga = $documento->getRighe()->find($id_riga);
|
|||
$result = $riga->toArray();
|
||||
$result['prezzo'] = $riga->prezzo_unitario_vendita;
|
||||
|
||||
// Importazione della gestione dedicata
|
||||
|
||||
// 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);
|
||||
|
|
|
@ -2,11 +2,8 @@
|
|||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
/*
|
||||
ARTICOLI + RIGHE GENERICHE
|
||||
*/
|
||||
$q_art = 'SELECT *, round(sconto_unitario,'.setting('Cifre decimali per importi').') AS sconto_unitario, round(sconto,'.setting('Cifre decimali per importi').') AS sconto, round(subtotale,'.setting('Cifre decimali per importi').') AS subtotale, IFNULL((SELECT codice FROM mg_articoli WHERE id=idarticolo), "") AS codice FROM co_righe_preventivi WHERE idpreventivo='.prepare($id_record).' ORDER BY `order`';
|
||||
$rs = $dbo->fetchArray($q_art);
|
||||
// Righe documento
|
||||
$righe = $preventivo->getRighe();
|
||||
|
||||
echo '
|
||||
<table class="table table-striped table-hover table-condensed table-bordered">
|
||||
|
@ -15,7 +12,7 @@ echo '
|
|||
<th>'.tr('Descrizione').'</th>
|
||||
<th width="120">'.tr('Q.tà').' <i title="'.tr('da evadere').' / '.tr('totale').'" class="tip fa fa-question-circle-o"></i></th>
|
||||
<th width="80">'.tr('U.m.').'</th>
|
||||
<th width="160">'.tr('Prezzo unitario').'</th>
|
||||
<th width="120">'.tr('Costo unitario').'</th>
|
||||
<th width="120">'.tr('Iva').'</th>
|
||||
<th width="120">'.tr('Imponibile').'</th>
|
||||
<th width="60"></th>
|
||||
|
@ -23,77 +20,68 @@ echo '
|
|||
</thead>
|
||||
<tbody class="sortable">';
|
||||
|
||||
// se ho almeno un articolo caricato mostro la riga
|
||||
foreach ($rs as $r) {
|
||||
foreach ($righe as $riga) {
|
||||
echo '
|
||||
<tr data-id="'.$r['id'].'">
|
||||
<td>';
|
||||
<tr data-id="'.$riga->id.'">';
|
||||
|
||||
if (!empty($r['idarticolo'])) {
|
||||
echo Modules::link('Articoli', $r['idarticolo'], $r['codice'].' - '.$r['descrizione']);
|
||||
// Descrizione
|
||||
$descrizione = nl2br($riga->descrizione);
|
||||
if ($riga->isArticolo()) {
|
||||
$descrizione = Modules::link('Articoli', $riga->idarticolo, $riga->articolo->codice.' - '.$descrizione);
|
||||
}
|
||||
echo '
|
||||
<td>
|
||||
'.$descrizione.'
|
||||
</td>';
|
||||
|
||||
if ($riga->isDescrizione()) {
|
||||
echo '
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>';
|
||||
} else {
|
||||
echo nl2br($r['descrizione']);
|
||||
}
|
||||
|
||||
// Q.tà
|
||||
echo '
|
||||
<td class="text-center">
|
||||
'.Translator::numberToLocale($riga->qta_rimanente, 'qta').' / '.Translator::numberToLocale($riga->qta, 'qta').'
|
||||
</td>';
|
||||
|
||||
// q.tà
|
||||
echo '
|
||||
<td class="text-center">';
|
||||
if (empty($r['is_descrizione'])) {
|
||||
echo '
|
||||
<span >'.Translator::numberToLocale($r['qta'] - $r['qta_evasa'], 'qta').' / '.Translator::numberToLocale($r['qta'], 'qta').'</span>';
|
||||
}
|
||||
// Unità di misura
|
||||
echo '
|
||||
<td class="text-center">
|
||||
'.$riga->um.'
|
||||
</td>';
|
||||
|
||||
// um
|
||||
// Costo unitario
|
||||
echo '
|
||||
<td class="text-center">';
|
||||
if (empty($r['is_descrizione'])) {
|
||||
echo '
|
||||
'.$r['um'];
|
||||
}
|
||||
echo '
|
||||
</td>';
|
||||
<td class="text-right">
|
||||
'.moneyFormat($riga->prezzo_unitario_vendita);
|
||||
|
||||
// prezzo di vendita unitario
|
||||
echo '
|
||||
<td class="text-right">';
|
||||
if (empty($r['is_descrizione'])) {
|
||||
echo '
|
||||
'.moneyFormat($r['subtotale'] / $r['qta']);
|
||||
|
||||
if ($r['sconto_unitario'] > 0) {
|
||||
if ($riga->sconto_unitario > 0) {
|
||||
echo '
|
||||
<br><small class="label label-danger">'.tr('sconto _TOT_ _TYPE_', [
|
||||
'_TOT_' => Translator::numberToLocale($r['sconto_unitario']),
|
||||
'_TYPE_' => ($r['tipo_sconto'] == 'PRC' ? '%' : currency()),
|
||||
'_TOT_' => Translator::numberToLocale($riga->sconto_unitario),
|
||||
'_TYPE_' => ($riga->tipo_sconto == 'PRC' ? '%' : currency()),
|
||||
]).'</small>';
|
||||
}
|
||||
}
|
||||
|
||||
echo '
|
||||
echo'
|
||||
</td>';
|
||||
|
||||
// iva
|
||||
// IVA
|
||||
echo '
|
||||
<td class="text-right">';
|
||||
if (empty($r['is_descrizione'])) {
|
||||
echo '
|
||||
'.moneyFormat($r['iva']).'
|
||||
<br><small class="help-block">'.$r['desc_iva'].'</small>';
|
||||
}
|
||||
echo'
|
||||
<td class="text-right">
|
||||
'.moneyFormat($riga->iva).'<br>
|
||||
<small class="help-block">'.$riga->aliquota->descrizione.(($riga->aliquota->esente) ? ' ('.$riga->aliquota->codice_natura_fe.')' : null).'</small>
|
||||
</td>';
|
||||
|
||||
// Imponibile
|
||||
echo '
|
||||
<td class="text-right">';
|
||||
if (empty($r['is_descrizione'])) {
|
||||
echo '
|
||||
'.moneyFormat($r['subtotale'] - $r['sconto']);
|
||||
<td class="text-right">
|
||||
'.moneyFormat($riga->imponibile_scontato).'
|
||||
</td>';
|
||||
}
|
||||
|
||||
// Possibilità di rimuovere una riga solo se il preventivo non è stato pagato
|
||||
|
@ -101,19 +89,17 @@ foreach ($rs as $r) {
|
|||
<td class="text-center">';
|
||||
|
||||
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'>
|
||||
<input type='hidden' name='op' value='unlink_articolo'>
|
||||
<input type='hidden' name='idriga' value='".$r['id']."'>
|
||||
<input type='hidden' name='idarticolo' value='".$r['idarticolo']."'>
|
||||
echo '
|
||||
<form action="" method="post" id="delete-form-'.$riga->id.'" role="form">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
<input type="hidden" name="op" value="delete_riga">
|
||||
<input type="hidden" name="idriga" value="'.$riga->id.'">
|
||||
|
||||
<div class='btn-group'>
|
||||
<a class='btn btn-xs btn-warning' title='Modifica riga' onclick=\"launch_modal( 'Modifica riga', '".$rootdir.'/modules/preventivi/row-edit.php?id_module='.$id_module.'&id_record='.$id_record.'&idriga='.$r['id']."', 1 );\"><i class='fa fa-edit'></i></a>
|
||||
|
||||
<a href='javascript:;' class='btn btn-xs btn-danger' title='Rimuovi questa riga' onclick=\"if( confirm('Rimuovere questa riga dal preventivo?') ){ $('#delete-form-".$r['id']."').submit(); }\"><i class='fa fa-trash'></i></a>
|
||||
<div class="btn-group">
|
||||
<a class="btn btn-xs btn-warning" onclick="editRow('.$riga->id.')"><i class="fa fa-edit"></i></a>
|
||||
<a class="btn btn-xs btn-danger" onclick="deleteRow('.$riga->id.')"><i class="fa fa-trash"></i></a>
|
||||
</div>
|
||||
</form>";
|
||||
</form>';
|
||||
}
|
||||
|
||||
echo '
|
||||
|
@ -126,38 +112,32 @@ foreach ($rs as $r) {
|
|||
</tr>';
|
||||
}
|
||||
|
||||
// Calcoli
|
||||
$totale_acquisto = 0;
|
||||
foreach ($rs as $r) {
|
||||
$totale_acquisto += ($r['prezzo_unitario_acquisto'] * $r['qta']);
|
||||
echo '
|
||||
<script>
|
||||
function editRow(id){
|
||||
launch_modal("'.tr('Modifica riga').'", "'.$module->fileurl('row-edit.php').'?id_module=" + globals.id_module + "&id_record=" + globals.id_record + "&idriga=" + id);
|
||||
}
|
||||
$imponibile = sum(array_column($rs, 'subtotale'));
|
||||
$sconto = sum(array_column($rs, 'sconto'));
|
||||
$iva = sum(array_column($rs, 'iva'));
|
||||
|
||||
$imponibile_scontato = sum($imponibile, -$sconto);
|
||||
|
||||
$totale = sum([
|
||||
$imponibile_scontato,
|
||||
$iva,
|
||||
]);
|
||||
$totale_guadagno = sum([
|
||||
$imponibile_scontato
|
||||
- $totale_acquisto,
|
||||
]);
|
||||
function deleteRow(id){
|
||||
if(confirm("'.tr('Rimuovere questa riga dal documento?').'")){
|
||||
$("#delete-form-" + id).submit();
|
||||
}
|
||||
}
|
||||
</script>';
|
||||
|
||||
echo '
|
||||
</tbody>';
|
||||
|
||||
// SCONTO
|
||||
if (abs($sconto) > 0) {
|
||||
if (!empty($preventivo->sconto)) {
|
||||
// Totale imponibile scontato
|
||||
echo '
|
||||
<tr>
|
||||
<td colspan="5" class="text-right">
|
||||
<b>'.tr('Imponibile', [], ['upper' => true]).':</b>
|
||||
</td>
|
||||
<td align="right">
|
||||
'.moneyFormat($imponibile, 2).'
|
||||
<td class="text-right">
|
||||
'.moneyFormat($preventivo->imponibile, 2).'
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>';
|
||||
|
@ -167,20 +147,20 @@ if (abs($sconto) > 0) {
|
|||
<td colspan="5" class="text-right">
|
||||
<b>'.tr('Sconto', [], ['upper' => true]).':</b>
|
||||
</td>
|
||||
<td align="right">
|
||||
'.moneyFormat($sconto, 2).'
|
||||
<td class="text-right">
|
||||
'.moneyFormat($preventivo->sconto, 2).'
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>';
|
||||
|
||||
// Totale imponibile
|
||||
// Totale imponibile scontato
|
||||
echo '
|
||||
<tr>
|
||||
<td colspan="5" class="text-right">
|
||||
<b>'.tr('Imponibile scontato', [], ['upper' => true]).':</b>
|
||||
</td>
|
||||
<td align="right">
|
||||
'.moneyFormat($imponibile_scontato, 2).'
|
||||
<td class="text-right">
|
||||
'.moneyFormat($preventivo->imponibile_scontato, 2).'
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>';
|
||||
|
@ -191,8 +171,8 @@ if (abs($sconto) > 0) {
|
|||
<td colspan="5" class="text-right">
|
||||
<b>'.tr('Imponibile', [], ['upper' => true]).':</b>
|
||||
</td>
|
||||
<td align="right">
|
||||
'.moneyFormat($imponibile, 2).'
|
||||
<td class="text-right">
|
||||
<span id="budget">'.moneyFormat($preventivo->imponibile, 2).'</span>
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>';
|
||||
|
@ -202,22 +182,22 @@ if (abs($sconto) > 0) {
|
|||
echo '
|
||||
<tr>
|
||||
<td colspan="5" class="text-right">
|
||||
<b>'.tr('IVA', [], ['upper' => true]).':</b>
|
||||
<b>'.tr('Iva', [], ['upper' => true]).':</b>
|
||||
</td>
|
||||
<td align="right">
|
||||
'.moneyFormat($iva, 2).'
|
||||
<td class="text-right">
|
||||
'.moneyFormat($preventivo->iva, 2).'
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>';
|
||||
|
||||
// Totale preventivo
|
||||
// Totale contratto
|
||||
echo '
|
||||
<tr>
|
||||
<td colspan="5" class="text-right">
|
||||
<b>'.tr('Totale', [], ['upper' => true]).':</b>
|
||||
</td>
|
||||
<td align="right">
|
||||
'.moneyFormat($totale, 2).'
|
||||
<td class="text-right">
|
||||
'.moneyFormat($preventivo->totale, 2).'
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>';
|
||||
|
|
|
@ -20,4 +20,13 @@ trait RelationTrait
|
|||
{
|
||||
return $this->parent();
|
||||
}
|
||||
|
||||
public function delete()
|
||||
{
|
||||
$parent = $this->parent;
|
||||
$parent->save();
|
||||
|
||||
return parent::delete();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -131,6 +131,30 @@ class Preventivo extends Document
|
|||
return $this->hasMany(Intervento::class, 'id_preventivo');
|
||||
}
|
||||
|
||||
public function fixBudget()
|
||||
{
|
||||
$this->budget = $this->imponibile_scontato;
|
||||
}
|
||||
|
||||
public function save(array $options = [])
|
||||
{
|
||||
$this->fixBudget();
|
||||
|
||||
return parent::save($options);
|
||||
}
|
||||
|
||||
public function delete()
|
||||
{
|
||||
$this->interventi()->update(['id_preventivo' => null]);
|
||||
$revision = $this->master_revision;
|
||||
|
||||
$result = parent::delete();
|
||||
|
||||
self::where('master_revision', $revision)->delete();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
// Metodi statici
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue