mirror of
https://github.com/devcode-it/openstamanager.git
synced 2025-01-29 07:02:41 +01:00
ff0ff38f8f
Allineo qta evase per le righe dei preventivi inseriti in una fattura Allineo qta evase per le righe dei contratti inseriti in una fattura
378 lines
16 KiB
PHP
378 lines
16 KiB
PHP
<?php
|
|
|
|
include_once __DIR__.'/../../core.php';
|
|
|
|
use Modules\Anagrafiche\Anagrafica;
|
|
use Modules\Interventi\TipoSessione;
|
|
use Modules\Preventivi\Components\Articolo;
|
|
use Modules\Preventivi\Components\Riga;
|
|
use Modules\Preventivi\Preventivo;
|
|
|
|
switch (post('op')) {
|
|
case 'add':
|
|
$idanagrafica = post('idanagrafica');
|
|
$nome = post('nome');
|
|
$idtipointervento = post('idtipointervento');
|
|
|
|
$anagrafica = Anagrafica::find($idanagrafica);
|
|
$tipo = TipoSessione::find($idtipointervento);
|
|
|
|
$preventivo = Preventivo::build($anagrafica, $tipo, $nome);
|
|
$id_record = $preventivo->id;
|
|
|
|
flash()->info(tr('Aggiunto preventivo numero _NUM_!', [
|
|
'_NUM_' => $preventivo['numero'],
|
|
]));
|
|
|
|
break;
|
|
|
|
case 'update':
|
|
if (isset($id_record)) {
|
|
$idstato = post('idstato');
|
|
$nome = post('nome');
|
|
$idanagrafica = post('idanagrafica');
|
|
$idagente = post('idagente');
|
|
$idreferente = post('idreferente');
|
|
$idpagamento = post('idpagamento');
|
|
$idporto = post('idporto');
|
|
$tempi_consegna = post('tempi_consegna');
|
|
$numero = post('numero');
|
|
|
|
$tipo_sconto = post('tipo_sconto_generico');
|
|
$sconto = post('sconto_generico');
|
|
|
|
// $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).','.
|
|
' 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).','.
|
|
' tipo_sconto_globale='.prepare($tipo_sconto).','.
|
|
' sconto_globale='.prepare($sconto).','.
|
|
' id_documento_fe='.prepare($id_documento_fe).','.
|
|
' num_item='.prepare($num_item).','.
|
|
' codice_cig='.prepare($codice_cig).','.
|
|
' codice_cup='.prepare($codice_cup).','.
|
|
' validita='.prepare($validita).','.
|
|
' idtipointervento='.prepare($idtipointervento).','.
|
|
' idiva='.prepare($idiva).' WHERE id='.prepare($id_record);
|
|
$dbo->query($query);
|
|
|
|
aggiorna_sconto([
|
|
'parent' => 'co_preventivi',
|
|
'row' => 'co_righe_preventivi',
|
|
], [
|
|
'parent' => 'id',
|
|
'row' => 'idpreventivo',
|
|
], $id_record);
|
|
|
|
// update_budget_preventivo( $id_record );
|
|
flash()->info(tr('Preventivo modificato correttamente!'));
|
|
}
|
|
break;
|
|
|
|
// Duplica preventivo
|
|
case 'copy':
|
|
$dbo->query('CREATE TEMPORARY TABLE tmp SELECT * FROM co_preventivi WHERE id = '.prepare($id_record));
|
|
$dbo->query('ALTER TABLE tmp DROP id');
|
|
$dbo->query('INSERT INTO co_preventivi SELECT NULL,tmp.* FROM tmp');
|
|
$id_record = $dbo->lastInsertedID();
|
|
$dbo->query('DROP TEMPORARY TABLE tmp');
|
|
|
|
// Codice preventivo: calcolo il successivo in base al formato specificato
|
|
$numero = Preventivo::getNextNumero();
|
|
|
|
$dbo->query('UPDATE co_preventivi SET idstato=1, numero = '.prepare($numero).', master_revision = id WHERE id='.prepare($id_record));
|
|
|
|
//copio anche le righe del preventivo
|
|
$dbo->query('CREATE TEMPORARY TABLE tmp SELECT * FROM co_righe_preventivi WHERE idpreventivo = '.filter('id_record'));
|
|
$dbo->query('ALTER TABLE tmp DROP id');
|
|
$dbo->query('UPDATE tmp SET idpreventivo = '.prepare($id_record));
|
|
$dbo->query('INSERT INTO co_righe_preventivi SELECT NULL,tmp.* FROM tmp');
|
|
$dbo->query('DROP TEMPORARY TABLE tmp');
|
|
|
|
flash()->info(tr('Preventivo duplicato correttamente!'));
|
|
|
|
break;
|
|
|
|
case 'addintervento':
|
|
if (post('idintervento') !== null) {
|
|
// Selezione costi da intervento
|
|
$idintervento = post('idintervento');
|
|
$rs = $dbo->fetchArray('SELECT * FROM in_interventi WHERE id='.prepare($idintervento));
|
|
$costo_km = $rs[0]['prezzo_km_unitario'];
|
|
$costo_orario = $rs[0]['prezzo_ore_unitario'];
|
|
|
|
$dbo->update('in_interventi', [
|
|
'id_preventivo' => $id_record,
|
|
], ['id' => $idintervento]);
|
|
|
|
// Imposto il preventivo nello stato "In lavorazione" se inizio ad aggiungere interventi
|
|
$dbo->query("UPDATE `co_preventivi` SET idstato=(SELECT `id` FROM `co_statipreventivi` WHERE `descrizione`='In lavorazione') WHERE `id`=".prepare($id_record));
|
|
|
|
flash()->info(tr('Intervento _NUM_ aggiunto!', [
|
|
'_NUM_' => $rs[0]['codice'],
|
|
]));
|
|
}
|
|
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'])) {
|
|
$idintervento = get('idintervento');
|
|
|
|
$dbo->update('in_interventi', [
|
|
'id_preventivo' => null,
|
|
], ['id' => $idintervento]);
|
|
|
|
flash()->info(tr('Intervento _NUM_ rimosso!', [
|
|
'_NUM_' => $idintervento,
|
|
]));
|
|
}
|
|
break;
|
|
|
|
// 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]);
|
|
|
|
flash()->info(tr('Preventivo eliminato!'));
|
|
|
|
break;
|
|
|
|
// Aggiungo una riga al preventivo
|
|
case 'addriga':
|
|
$idarticolo = post('idarticolo');
|
|
$idiva = post('idiva');
|
|
$descrizione = post('descrizione');
|
|
|
|
$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,
|
|
]);
|
|
|
|
$subtot = $prezzo * $qta;
|
|
|
|
$um = post('um');
|
|
|
|
// 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'];
|
|
|
|
$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).'))');
|
|
|
|
// Messaggi informativi
|
|
if (!empty($idarticolo)) {
|
|
flash()->info(tr('Articolo aggiunto!'));
|
|
} elseif (!empty($qta)) {
|
|
flash()->info(tr('Riga aggiunta!'));
|
|
} else {
|
|
flash()->info(tr('Riga descrittiva aggiunta!'));
|
|
}
|
|
|
|
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'];
|
|
|
|
$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,
|
|
]);
|
|
|
|
$idiva = post('idiva');
|
|
$um = post('um');
|
|
|
|
// 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'];
|
|
|
|
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);
|
|
} else {
|
|
$query = 'UPDATE co_righe_preventivi SET descrizione='.prepare($descrizione).' WHERE id='.prepare($idriga);
|
|
}
|
|
$dbo->query($query);
|
|
|
|
flash()->info('Riga modificata!');
|
|
break;
|
|
|
|
case 'update_position':
|
|
$orders = explode(',', $_POST['order']);
|
|
$order = 0;
|
|
|
|
foreach ($orders as $idriga) {
|
|
$dbo->query('UPDATE `co_righe_preventivi` SET `order`='.prepare($order).' WHERE id='.prepare($idriga));
|
|
++$order;
|
|
}
|
|
|
|
break;
|
|
|
|
case 'add_revision':
|
|
|
|
//Copio il preventivo
|
|
$rs_preventivo = $dbo->fetchArray("SELECT * FROM co_preventivi WHERE id='".$id_record."'");
|
|
|
|
//Tolgo il flag default_revision da tutte le revisioni e dal record_principale
|
|
$dbo->query('UPDATE co_preventivi SET default_revision=0 WHERE master_revision='.prepare($rs_preventivo[0]['master_revision']));
|
|
|
|
$preventivo = [
|
|
'numero' => $rs_preventivo[0]['numero'],
|
|
'nome' => $rs_preventivo[0]['nome'],
|
|
'idagente' => $rs_preventivo[0]['idagente'],
|
|
'data_bozza' => $rs_preventivo[0]['data_bozza'],
|
|
'data_accettazione' => $rs_preventivo[0]['data_accettazione'],
|
|
'data_rifiuto' => $rs_preventivo[0]['data_rifiuto'],
|
|
'data_conclusione' => $rs_preventivo[0]['data_conclusione'],
|
|
'data_pagamento' => $rs_preventivo[0]['data_pagamento'],
|
|
'budget' => $rs_preventivo[0]['budget'],
|
|
'descrizione' => $rs_preventivo[0]['descrizione'],
|
|
'idstato' => $rs_preventivo[0]['idstato'],
|
|
'validita' => $rs_preventivo[0]['validita'],
|
|
'tempi_consegna' => $rs_preventivo[0]['tempi_consegna'],
|
|
'idanagrafica' => $rs_preventivo[0]['idanagrafica'],
|
|
'esclusioni' => $rs_preventivo[0]['esclusioni'],
|
|
'idreferente' => $rs_preventivo[0]['idreferente'],
|
|
'idpagamento' => $rs_preventivo[0]['idpagamento'],
|
|
'idporto' => $rs_preventivo[0]['idporto'],
|
|
'idtipointervento' => $rs_preventivo[0]['idtipointervento'],
|
|
'idiva' => $rs_preventivo[0]['idiva'],
|
|
'costo_diritto_chiamata' => $rs_preventivo[0]['costo_diritto_chiamata'],
|
|
'ore_lavoro' => $rs_preventivo[0]['ore_lavoro'],
|
|
'costo_orario' => $rs_preventivo[0]['costo_orario'],
|
|
'costo_km' => $rs_preventivo[0]['costo_km'],
|
|
'sconto_globale' => $rs_preventivo[0]['sconto_globale'],
|
|
'tipo_sconto_globale' => $rs_preventivo[0]['tipo_sconto_globale'],
|
|
'master_revision' => $rs_preventivo[0]['master_revision'],
|
|
'default_revision' => '1',
|
|
];
|
|
|
|
$dbo->insert('co_preventivi', $preventivo);
|
|
$id_record_new = $dbo->lastInsertedID();
|
|
|
|
$rs_righe_preventivo = $dbo->fetchArray('SELECT * FROM co_righe_preventivi WHERE idpreventivo='.prepare($id_record));
|
|
|
|
for ($i = 0; $i < sizeof($rs_righe_preventivo); ++$i) {
|
|
$righe_preventivo = [
|
|
'idpreventivo' => $id_record_new,
|
|
'idarticolo' => $rs_righe_preventivo[$i]['idarticolo'],
|
|
'is_descrizione' => $rs_righe_preventivo[$i]['is_descrizione'],
|
|
'idiva' => $rs_righe_preventivo[$i]['idiva'],
|
|
'desc_iva' => $rs_righe_preventivo[$i]['desc_iva'],
|
|
'iva' => $rs_righe_preventivo[$i]['iva'],
|
|
'iva_indetraibile' => $rs_righe_preventivo[$i]['iva_indetraibile'],
|
|
'descrizione' => $rs_righe_preventivo[$i]['descrizione'],
|
|
'subtotale' => $rs_righe_preventivo[$i]['subtotale'],
|
|
'sconto' => $rs_righe_preventivo[$i]['sconto'],
|
|
'sconto_unitario' => $rs_righe_preventivo[$i]['sconto_unitario'],
|
|
'tipo_sconto' => $rs_righe_preventivo[$i]['tipo_sconto'],
|
|
'sconto_globale' => $rs_righe_preventivo[$i]['sconto_globale'],
|
|
'um' => $rs_righe_preventivo[$i]['um'],
|
|
'qta' => $rs_righe_preventivo[$i]['qta'],
|
|
'order' => $rs_righe_preventivo[$i]['order'],
|
|
];
|
|
$dbo->insert('co_righe_preventivi', $righe_preventivo);
|
|
}
|
|
|
|
$id_record = $id_record_new;
|
|
|
|
flash()->info(tr('Aggiunta nuova revisione!'));
|
|
break;
|
|
}
|
|
|
|
if (post('op') !== null && post('op') != 'update') {
|
|
aggiorna_sconto([
|
|
'parent' => 'co_preventivi',
|
|
'row' => 'co_righe_preventivi',
|
|
], [
|
|
'parent' => 'id',
|
|
'row' => 'idpreventivo',
|
|
], $id_record);
|
|
}
|