Aggiornamento seriali
Aggiornamento del sistema di gestione dei seriali, ora unficato e semplificato all'interno della tabella mg_prodotii. Generalizzazione delle operazioni di trasferimento delle righe tra ordini, ddt e fatture (file modules/fatture/crea_documento.php)..
This commit is contained in:
parent
c56a36340d
commit
14ae98604d
|
@ -240,7 +240,7 @@ switch ($module_name) {
|
|||
// Elenco lotti in base all'articolo
|
||||
elseif ($op == 'getlotti') {
|
||||
$idarticolo = $get['idarticolo'];
|
||||
$q = 'SELECT DISTINCT(lotto) FROM mg_prodotti WHERE idarticolo="'.$idarticolo.'" '.Modules::getAdditionalsQuery('Magazzino').' ORDER BY lotto ASC';
|
||||
$q = 'SELECT DISTINCT(lotto) FROM mg_prodotti WHERE id_articolo="'.$idarticolo.'" '.Modules::getAdditionalsQuery('Magazzino').' ORDER BY lotto ASC';
|
||||
$rs = $dbo->fetchArray($q);
|
||||
$n = sizeof($rs);
|
||||
|
||||
|
@ -249,7 +249,7 @@ switch ($module_name) {
|
|||
for ($i = 0; $i < $n; ++$i) {
|
||||
$dir = 'entrata';
|
||||
|
||||
$qs = 'SELECT COUNT(serial) AS num_seriali FROM mg_prodotti WHERE idarticolo='.prepare($idarticolo).' AND lotto='.prepare($rs[$i]['lotto']).' '.
|
||||
$qs = 'SELECT COUNT(serial) AS num_seriali FROM mg_prodotti WHERE id_articolo='.prepare($idarticolo).' AND lotto='.prepare($rs[$i]['lotto']).' '.
|
||||
'AND (serial NOT IN(SELECT serial FROM co_righe_documenti INNER JOIN co_documenti ON co_righe_documenti.iddocumento = co_documenti.id INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento = co_tipidocumento.id WHERE lotto='.prepare($rs[$i]['lotto']).' AND serial=mg_prodotti.serial AND dir = '.prepare($dir).') '.
|
||||
'AND serial NOT IN(SELECT serial FROM or_righe_ordini INNER JOIN or_ordini ON or_righe_ordini.idordine = or_ordini.id INNER JOIN or_tipiordine ON or_ordini.idtipoordine = or_tipiordine.id WHERE lotto='.prepare($rs[$i]['lotto']).' AND serial=mg_prodotti.serial AND dir = '.prepare($dir).') '.
|
||||
'AND serial NOT IN(SELECT serial FROM dt_righe_ddt INNER JOIN dt_ddt ON dt_righe_ddt.idddt = dt_ddt.id INNER JOIN dt_tipiddt ON dt_ddt.idtipoddt = dt_tipiddt.id WHERE lotto='.prepare($rs[$i]['lotto']).' AND serial=mg_prodotti.serial AND dir = '.prepare($dir).') '.
|
||||
|
@ -283,7 +283,7 @@ switch ($module_name) {
|
|||
}
|
||||
|
||||
if ($dir == 'entrata') {
|
||||
$q = 'SELECT DISTINCT(serial) FROM mg_prodotti WHERE idarticolo='.prepare($idarticolo).' AND lotto='.prepare($lotto).
|
||||
$q = 'SELECT DISTINCT(serial) FROM mg_prodotti WHERE id_articolo='.prepare($idarticolo).' AND lotto='.prepare($lotto).
|
||||
' AND (serial NOT IN(SELECT serial FROM co_righe_documenti INNER JOIN co_documenti ON co_righe_documenti.iddocumento = co_documenti.id INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento = co_tipidocumento.id WHERE lotto='.prepare($lotto).' AND serial=mg_prodotti.serial AND dir = '.prepare($dir).')'.
|
||||
' AND serial NOT IN(SELECT serial FROM or_righe_ordini INNER JOIN or_ordini ON or_righe_ordini.idordine = or_ordini.id INNER JOIN or_tipiordine ON or_ordini.idtipoordine = or_tipiordine.id WHERE lotto='.prepare($lotto).' AND serial=mg_prodotti.serial AND dir = '.prepare($dir).') '.
|
||||
' AND serial NOT IN(SELECT serial FROM dt_righe_ddt INNER JOIN dt_ddt ON dt_righe_ddt.idddt = dt_ddt.id INNER JOIN dt_tipiddt ON dt_ddt.idtipoddt = dt_tipiddt.id WHERE lotto='.prepare($lotto).' AND serial=mg_prodotti.serial AND dir = '.prepare($dir).') '.
|
||||
|
@ -292,7 +292,7 @@ switch ($module_name) {
|
|||
$rs = $dbo->fetchArray($q);
|
||||
$n = sizeof($rs);
|
||||
} else {
|
||||
$q = 'SELECT DISTINCT(serial) FROM mg_prodotti WHERE idarticolo='.prepare($idarticolo).' AND lotto='.prepare($lotto).' AND (serial NOT IN(SELECT serial FROM co_righe_documenti WHERE lotto='.prepare($lotto).' AND serial=mg_prodotti.serial ) AND serial NOT IN(SELECT serial FROM or_righe_ordini WHERE lotto='.prepare($lotto).' AND serial=mg_prodotti.serial) AND serial NOT IN(SELECT serial FROM dt_righe_ddt WHERE lotto='.prepare($lotto).' AND serial=mg_prodotti.serial) AND serial NOT IN(SELECT serial FROM mg_articoli_interventi WHERE lotto='.prepare($lotto).' AND serial=mg_prodotti.serial) '.$additional_where_serial.' ) '.Modules::getAdditionalsQuery('Magazzino').' ORDER BY serial ASC';
|
||||
$q = 'SELECT DISTINCT(serial) FROM mg_prodotti WHERE id_articolo='.prepare($idarticolo).' AND lotto='.prepare($lotto).' AND (serial NOT IN(SELECT serial FROM co_righe_documenti WHERE lotto='.prepare($lotto).' AND serial=mg_prodotti.serial ) AND serial NOT IN(SELECT serial FROM or_righe_ordini WHERE lotto='.prepare($lotto).' AND serial=mg_prodotti.serial) AND serial NOT IN(SELECT serial FROM dt_righe_ddt WHERE lotto='.prepare($lotto).' AND serial=mg_prodotti.serial) AND serial NOT IN(SELECT serial FROM mg_articoli_interventi WHERE lotto='.prepare($lotto).' AND serial=mg_prodotti.serial) '.$additional_where_serial.' ) '.Modules::getAdditionalsQuery('Magazzino').' ORDER BY serial ASC';
|
||||
$rs = $dbo->fetchArray($q);
|
||||
$n = sizeof($rs);
|
||||
}
|
||||
|
@ -314,7 +314,7 @@ switch ($module_name) {
|
|||
$idarticolo = $get['idarticolo'];
|
||||
$lotto = $get['lotto'];
|
||||
$serial = $get['serial'];
|
||||
$q = 'SELECT DISTINCT(altro) FROM mg_prodotti WHERE idarticolo="'.$idarticolo.'" AND lotto="'.$lotto.'" AND serial="'.$serial.'" AND (altro NOT IN(SELECT altro FROM co_righe_documenti WHERE lotto="'.$lotto.'" AND serial="'.$serial.'" AND altro=mg_prodotti.altro) AND altro NOT IN(SELECT altro FROM or_righe_ordini WHERE lotto="'.$lotto.'" AND serial="'.$serial.'" AND altro=mg_prodotti.altro) AND altro NOT IN(SELECT altro FROM dt_righe_ddt WHERE lotto="'.$lotto.'" AND serial="'.$serial.'" AND altro=mg_prodotti.altro) AND altro NOT IN(SELECT altro FROM mg_articoli_interventi WHERE lotto="'.$lotto.'" AND serial="'.$serial.'" AND altro=mg_prodotti.altro)) '.Modules::getAdditionalsQuery('Magazzino').' ORDER BY altro ASC';
|
||||
$q = 'SELECT DISTINCT(altro) FROM mg_prodotti WHERE id_articolo="'.$idarticolo.'" AND lotto="'.$lotto.'" AND serial="'.$serial.'" AND (altro NOT IN(SELECT altro FROM co_righe_documenti WHERE lotto="'.$lotto.'" AND serial="'.$serial.'" AND altro=mg_prodotti.altro) AND altro NOT IN(SELECT altro FROM or_righe_ordini WHERE lotto="'.$lotto.'" AND serial="'.$serial.'" AND altro=mg_prodotti.altro) AND altro NOT IN(SELECT altro FROM dt_righe_ddt WHERE lotto="'.$lotto.'" AND serial="'.$serial.'" AND altro=mg_prodotti.altro) AND altro NOT IN(SELECT altro FROM mg_articoli_interventi WHERE lotto="'.$lotto.'" AND serial="'.$serial.'" AND altro=mg_prodotti.altro)) '.Modules::getAdditionalsQuery('Magazzino').' ORDER BY altro ASC';
|
||||
$rs = $dbo->fetchArray($q);
|
||||
$n = sizeof($rs);
|
||||
|
||||
|
|
|
@ -232,6 +232,7 @@ switch ($op) {
|
|||
|
||||
if (!empty($search)) {
|
||||
$search_fields[] = 'descrizione LIKE '.prepare('%'.$search.'%');
|
||||
$search_fields[] = 'codice LIKE '.prepare('%'.$search.'%');
|
||||
}
|
||||
|
||||
$wh = '';
|
||||
|
@ -522,7 +523,7 @@ switch ($op) {
|
|||
if (Modules::getModule('Magazzino')['permessi'] != '-') {
|
||||
$query = 'SELECT DISTINCT serial AS descrizione FROM mg_prodotti |where|';
|
||||
|
||||
$where[] = 'idarticolo='.prepare($superselect['idarticolo']);
|
||||
$where[] = 'id_articolo='.prepare($superselect['idarticolo']);
|
||||
$where[] = 'lotto='.prepare($superselect['lotto']);
|
||||
|
||||
foreach ($elements as $element) {
|
||||
|
@ -540,7 +541,7 @@ switch ($op) {
|
|||
if (Modules::getModule('Magazzino')['permessi'] != '-') {
|
||||
$query = 'SELECT DISTINCT altro AS descrizione FROM mg_prodotti |where|';
|
||||
|
||||
$where[] = 'idarticolo='.prepare($superselect['idarticolo']);
|
||||
$where[] = 'id_articolo='.prepare($superselect['idarticolo']);
|
||||
$where[] = 'lotto='.prepare($superselect['lotto']);
|
||||
$where[] = 'serial='.prepare($superselect['serial']);
|
||||
|
||||
|
|
|
@ -68,7 +68,7 @@ if (file_exists($docroot.'/modules/'.$module_dir.'/add.php') && $module['permess
|
|||
echo '
|
||||
<button type="button" class="btn btn-primary" data-toggle="modal" data-title="'.tr('Aggiungi').'..." data-target="#bs-popup" data-href="add.php?id_module='.$id_module.'"><i class="fa fa-plus"></i></button>';
|
||||
}
|
||||
echo '
|
||||
echo '
|
||||
</a>
|
||||
<a class="back-btn" href="controller.php?id_module='.$id_module.'"><i class="fa fa-chevron-left"></i> '.tr("Torna all'elenco").'</a>
|
||||
</li>';
|
||||
|
@ -122,6 +122,7 @@ $backto = filter('backto');
|
|||
// Scelta del redirect dopo un submit
|
||||
if (!empty($backto)) {
|
||||
$hash = filter('hash');
|
||||
$hash = !starts_with($hash, '#') ? '#'.$hash : $hash;
|
||||
if ($backto == 'record-edit') {
|
||||
redirect(ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.$hash);
|
||||
exit();
|
||||
|
|
|
@ -378,7 +378,7 @@ class Auth extends \Util\Singleton
|
|||
{
|
||||
$database = Database::getConnection();
|
||||
|
||||
if ($database->isInstalled()) {
|
||||
if ($database->isInstalled() || !$database->fetchNum("SHOW TABLES LIKE 'zz_logs'")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -862,11 +862,20 @@ function start_superselect() {
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reimposta i contenuti di un <select> creato con select2.
|
||||
*/
|
||||
jQuery.fn.selectClear = function () {
|
||||
this.val([]).trigger("change");
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
* Resetta i contenuti di un <select> creato con select2.
|
||||
*/
|
||||
jQuery.fn.selectReset = function () {
|
||||
this.val('').trigger("change");
|
||||
this.selectClear();
|
||||
this.empty();
|
||||
|
||||
return this;
|
||||
|
@ -1130,6 +1139,9 @@ String.prototype.toLocale = function () {
|
|||
x[0] = x[0].split("").reverse().join("");
|
||||
x[0] = x[0].replace(/(.{3})/g, "$1" + globals.thousands);
|
||||
x[0] = x[0].split("").reverse().join("");
|
||||
if(x[0][0] == globals.thousands){
|
||||
x[0] = x[0].substr(1);
|
||||
}
|
||||
}
|
||||
|
||||
return x[0] + globals.decimals + x[1];
|
||||
|
|
|
@ -159,7 +159,7 @@ switch (post('op')) {
|
|||
$n_prodotti = $n_lotti * $n_serial * $n_altro;
|
||||
|
||||
// Creo la query per le combinazioni prodotto con ogni combinazione
|
||||
$query = 'INSERT INTO mg_prodotti(idarticolo, lotto, serial, altro) VALUES';
|
||||
$query = 'INSERT INTO mg_prodotti(id_articolo, lotto, serial, altro) VALUES';
|
||||
|
||||
// Contatore prodotti da inserire
|
||||
$c = 0;
|
||||
|
@ -182,7 +182,7 @@ switch (post('op')) {
|
|||
$insert = str_replace('|altro|', prepare($this_altro), $insert);
|
||||
|
||||
// Verifico che questa combinazione non esista già
|
||||
$np = $dbo->fetchNum('SELECT id FROM mg_prodotti WHERE idarticolo='.prepare($id_record).' AND lotto='.prepare($this_lotto).' AND serial='.prepare($this_serial).' AND altro='.prepare($this_altro));
|
||||
$np = $dbo->fetchNum('SELECT id FROM mg_prodotti WHERE id_articolo='.prepare($id_record).' AND lotto='.prepare($this_lotto).' AND serial='.prepare($this_serial).' AND altro='.prepare($this_altro));
|
||||
if ($np == 0) {
|
||||
$query .= $insert.', ';
|
||||
++$c;
|
||||
|
@ -227,10 +227,19 @@ switch (post('op')) {
|
|||
}
|
||||
break;
|
||||
|
||||
case 'delmovimento':
|
||||
$idmovimento = post('idmovimento');
|
||||
|
||||
$query = 'DELETE FROM mg_movimenti WHERE id='.prepare($idmovimento);
|
||||
if ($dbo->query($query)) {
|
||||
$_SESSION['infos'][] = tr('Movimento rimosso!');
|
||||
}
|
||||
break;
|
||||
|
||||
case 'delete':
|
||||
$dbo->query('DELETE FROM mg_articoli WHERE id='.prepare($id_record));
|
||||
$dbo->query('DELETE FROM mg_movimenti WHERE idarticolo='.prepare($id_record));
|
||||
$dbo->query('DELETE FROM mg_prodotti WHERE idarticolo='.prepare($id_record));
|
||||
$dbo->query('DELETE FROM mg_prodotti WHERE id_articolo='.prepare($id_record));
|
||||
$dbo->query('DELETE FROM mg_articoli_automezzi WHERE idarticolo='.prepare($id_record));
|
||||
|
||||
$_SESSION['infos'][] = tr('Articolo eliminato!');
|
||||
|
|
|
@ -16,10 +16,10 @@ $search_serial = $get['search_serial'];
|
|||
$search_altro = $get['search_altro'];
|
||||
|
||||
// Calcolo prossimo lotto e serial number
|
||||
$rs = $dbo->fetchArray('SELECT MAX(lotto) AS max_lotto, MAX(serial) AS max_serial, MAX(altro) AS max_altro FROM mg_prodotti WHERE idarticolo='.prepare($id_record));
|
||||
$max_lotto = $rs[0]['max_lotto'];
|
||||
$rs = $dbo->fetchArray('SELECT MAX(lotto) AS max_lotto, MAX(serial) AS max_serial, MAX(altro) AS max_altro FROM mg_prodotti WHERE id_articolo='.prepare($id_record));
|
||||
//$max_lotto = $rs[0]['max_lotto'];
|
||||
$max_serial = $rs[0]['max_serial'];
|
||||
$max_altro = $rs[0]['max_altro'];
|
||||
//$max_altro = $rs[0]['max_altro'];
|
||||
|
||||
//$next_lotto = get_next_code($max_lotto);
|
||||
$next_serial = get_next_code($max_serial);
|
||||
|
@ -138,29 +138,27 @@ echo '
|
|||
<div class="box-body">
|
||||
<div class="text-right">
|
||||
<small style="color:#f00;">';
|
||||
|
||||
// Visualizzo, in base alle impostazioni scelte, se il magazzino verrà movimentato
|
||||
if (get_var("Movimenta il magazzino durante l'inserimento o eliminazione dei lotti/serial number")) {
|
||||
echo tr("La cancellazione decrementerà la quantità dell'articolo!");
|
||||
} else {
|
||||
echo tr("L'inserimento decrementerà la quantità dell'articolo!");
|
||||
}
|
||||
|
||||
echo '
|
||||
</small>
|
||||
</div>';
|
||||
|
||||
// Conteggio totale prodotti
|
||||
$rs = $dbo->fetchArray('SELECT COUNT(id) AS tot FROM mg_prodotti WHERE idarticolo='.prepare($id_record));
|
||||
$rs = $dbo->fetchArray('SELECT COUNT(id) AS tot FROM mg_prodotti WHERE id_articolo='.prepare($id_record));
|
||||
$tot_prodotti = $rs[0]['tot'];
|
||||
|
||||
// Visualizzazione di tutti i prodotti
|
||||
$query = 'SELECT * FROM mg_prodotti WHERE idarticolo='.prepare($id_record).' AND lotto LIKE '.prepare('%'.$search_lotto.'%').' AND serial LIKE '.prepare('%'.$search_serial.'%').' AND altro LIKE '.prepare('%'.$search_altro.'%').' ORDER BY created_at DESC, lotto DESC, serial DESC, altro DESC';
|
||||
|
||||
if (!empty($get['show_all3']) && $search_lotto == '' && $search_serial == '' && $search_altro == '') {
|
||||
$query .= ' LIMIT 0, 20';
|
||||
}
|
||||
|
||||
$query = 'SELECT * FROM mg_prodotti WHERE id_articolo='.prepare($id_record).(!empty($search_serial) ? ' AND serial LIKE '.prepare('%'.$search_serial.'%') : '').' ORDER BY created_at DESC, lotto DESC, serial DESC, altro DESC';
|
||||
$rs2 = $dbo->fetchArray($query);
|
||||
echo '
|
||||
|
||||
echo '
|
||||
<table class="table table-striped table-hover table-condensed table-bordered text-center datatables">
|
||||
<thead>
|
||||
<tr>
|
||||
|
@ -168,129 +166,135 @@ $rs2 = $dbo->fetchArray($query);
|
|||
<th id="th_Data di creazione">'.tr('Data di creazione').'</th>
|
||||
<th id="th_Documento di vendita">'.tr('Documento di vendita').'</th>
|
||||
<th id="th_Totale">'.tr('Totale').'</th>
|
||||
<th></th>
|
||||
<th class="text-center">#</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>';
|
||||
|
||||
for ($i = 0; $i < count($rs2); ++$i) {
|
||||
for ($i = 0; $i < count($rs2); ++$i) {
|
||||
echo '
|
||||
<tr>
|
||||
|
||||
<td>'.$rs2[$i]['serial'].'</td>';
|
||||
|
||||
echo '
|
||||
<td>'.Translator::timestampToLocale($rs2[$i]['created_at']).'</td>';
|
||||
|
||||
// Ricerca vendite
|
||||
$vendite = $dbo->fetchArray('SELECT * FROM mg_prodotti WHERE dir=\'entrata\' AND id_articolo='.prepare($id_record).' AND serial='.prepare($rs2[$i]['serial']));
|
||||
|
||||
if (!empty($vendite)) {
|
||||
echo '
|
||||
<tr>
|
||||
<td>';
|
||||
|
||||
<td>'.$rs2[$i]['serial'].'</td>';
|
||||
$totali = [];
|
||||
|
||||
echo '
|
||||
<td>'.Translator::timestampToLocale($rs2[$i]['created_at']).'</td>';
|
||||
|
||||
// Ricerca vendite su ddt
|
||||
$query3 = 'SELECT *, ( SELECT descrizione FROM dt_tipiddt WHERE id=(SELECT idtipoddt FROM dt_ddt WHERE id=idddt) ) AS tipo_documento, ( SELECT `dir` FROM dt_tipiddt WHERE id=(SELECT idtipoddt FROM dt_ddt WHERE id=idddt) ) AS `dir`, ( SELECT numero FROM dt_ddt WHERE id=idddt ) AS numero, ( SELECT numero_esterno FROM dt_ddt WHERE id=idddt ) AS numero_esterno, ( SELECT data FROM dt_ddt WHERE id=idddt ) AS data FROM dt_righe_ddt WHERE idarticolo='.prepare($id_record).' AND lotto='.prepare($rs2[$i]['lotto']).' AND serial='.prepare($rs2[$i]['serial']).' AND altro='.prepare($rs2[$i]['altro']);
|
||||
$rs3 = $dbo->fetchArray($query3);
|
||||
|
||||
// Ricerca vendite su fatture
|
||||
$query4 = 'SELECT *, ( SELECT descrizione FROM co_tipidocumento WHERE id=(SELECT idtipodocumento FROM co_documenti WHERE id=iddocumento) ) AS tipo_documento, ( SELECT `dir` FROM co_tipidocumento WHERE id=(SELECT idtipodocumento FROM co_documenti WHERE id=iddocumento) ) AS `dir`, ( SELECT numero FROM co_documenti WHERE id=iddocumento ) AS numero, ( SELECT numero_esterno FROM co_documenti WHERE id=iddocumento ) AS numero_esterno, ( SELECT data FROM co_documenti WHERE id=iddocumento ) AS data FROM co_righe_documenti WHERE idarticolo='.prepare($id_record).' AND lotto='.prepare($rs2[$i]['lotto']).' AND serial='.prepare($rs2[$i]['serial']).' AND altro='.prepare($rs2[$i]['altro']);
|
||||
$rs4 = $dbo->fetchArray($query4);
|
||||
|
||||
// Ricerca inserimenti su ordini
|
||||
$query5 = 'SELECT *, ( SELECT descrizione FROM or_tipiordine WHERE id=(SELECT idtipoordine FROM or_ordini WHERE id=idordine) ) AS tipo_documento, ( SELECT `dir` FROM or_tipiordine WHERE id=(SELECT idtipoordine FROM or_ordini WHERE id=idordine) ) AS `dir`, ( SELECT numero FROM or_ordini WHERE id=idordine ) AS numero, ( SELECT numero_esterno FROM or_ordini WHERE id=idordine ) AS numero_esterno, ( SELECT data FROM or_ordini WHERE id=idordine ) AS data FROM or_righe_ordini WHERE idarticolo='.prepare($id_record).' AND lotto='.prepare($rs2[$i]['lotto']).' AND serial='.prepare($rs2[$i]['serial']).' AND altro='.prepare($rs2[$i]['altro']);
|
||||
$rs5 = $dbo->fetchArray($query5);
|
||||
|
||||
// Ricerca inserimenti su interventi
|
||||
$query6 = 'SELECT mg_articoli_interventi.*, in_interventi.codice, ( SELECT orario_inizio FROM in_interventi_tecnici WHERE idintervento=mg_articoli_interventi.idintervento LIMIT 0,1 ) AS data FROM mg_articoli_interventi JOIN in_interventi ON in_interventi.id = mg_articoli_interventi.idintervento WHERE idarticolo='.prepare($id_record).' AND lotto='.prepare($rs2[$i]['lotto']).' AND serial='.prepare($rs2[$i]['serial']).' AND altro='.prepare($rs2[$i]['altro']);
|
||||
$rs6 = $dbo->fetchArray($query6);
|
||||
|
||||
if (!empty($rs3) || !empty($rs4) || !empty($rs5) || !empty($rs6)) {
|
||||
foreach ($vendite as $vendita) {
|
||||
// Venduto su fatture
|
||||
if (!empty($rs4)) {
|
||||
$numero = ($rs4[0]['numero_esterno'] != '') ? $rs4[0]['numero_esterno'] : $rs4[0]['numero'];
|
||||
if (!empty($vendita['id_riga_documento'])) {
|
||||
$module_id = Modules::getModule('Fatture di vendita')['id'];
|
||||
$id = $rs4[0]['iddocumento'];
|
||||
$documento = $rs4[0]['tipo_documento'];
|
||||
$data = $rs4[0]['data'];
|
||||
|
||||
$subtotale = $rs4[0]['subtotale'];
|
||||
$iva = $rs4[0]['iva'];
|
||||
// Ricerca vendite su fatture
|
||||
$query = 'SELECT *, ( SELECT descrizione FROM co_tipidocumento WHERE id=(SELECT idtipodocumento FROM co_documenti WHERE id=iddocumento) ) AS tipo_documento, ( SELECT `dir` FROM co_tipidocumento WHERE id=(SELECT idtipodocumento FROM co_documenti WHERE id=iddocumento) ) AS `dir`, ( SELECT numero FROM co_documenti WHERE id=iddocumento ) AS numero, ( SELECT numero_esterno FROM co_documenti WHERE id=iddocumento ) AS numero_esterno, ( SELECT data FROM co_documenti WHERE id=iddocumento ) AS data FROM co_righe_documenti WHERE co_righe_documenti.id='.prepare($vendita['id_riga_documento']);
|
||||
$data = $dbo->fetchArray($query);
|
||||
|
||||
$id = $data[0]['iddocumento'];
|
||||
}
|
||||
|
||||
// Venduto su ddt
|
||||
elseif (!empty($rs3)) {
|
||||
elseif (!empty($vendita['id_riga_ddt'])) {
|
||||
$numero = ($rs3[0]['numero_esterno'] != '') ? $rs3[0]['numero_esterno'] : $rs3[0]['numero'];
|
||||
$module_id = Modules::getModule('Ddt di vendita')['id'];
|
||||
$id = $rs3[0]['idddt'];
|
||||
$documento = $rs3[0]['tipo_documento'];
|
||||
$data = $rs3[0]['data'];
|
||||
|
||||
$subtotale = $rs3[0]['subtotale'];
|
||||
$iva = $rs3[0]['iva'];
|
||||
$query = 'SELECT *, ( SELECT descrizione FROM dt_tipiddt WHERE id=(SELECT idtipoddt FROM dt_ddt WHERE id=idddt) ) AS tipo_documento, ( SELECT `dir` FROM dt_tipiddt WHERE id=(SELECT idtipoddt FROM dt_ddt WHERE id=idddt) ) AS `dir`, ( SELECT numero FROM dt_ddt WHERE id=idddt ) AS numero, ( SELECT numero_esterno FROM dt_ddt WHERE id=idddt ) AS numero_esterno, ( SELECT data FROM dt_ddt WHERE id=idddt ) AS data FROM dt_righe_ddt WHERE dt_righe_ddt.id='.prepare($vendita['id_riga_ddt']);
|
||||
$data = $dbo->fetchArray($query);
|
||||
|
||||
$id = $data[0]['idddt'];
|
||||
}
|
||||
|
||||
// Inserito su ordini
|
||||
elseif (!empty($rs5)) {
|
||||
$numero = ($rs5[0]['numero_esterno'] != '') ? $rs5[0]['numero_esterno'] : $rs5[0]['numero'];
|
||||
elseif (!empty($vendita['id_riga_ordine'])) {
|
||||
$module_id = Modules::getModule('Ordini cliente')['id'];
|
||||
$id = $rs5[0]['idordine'];
|
||||
$documento = $rs5[0]['tipo_documento'];
|
||||
$data = $rs5[0]['data'];
|
||||
|
||||
$subtotale = $rs5[0]['subtotale'];
|
||||
$iva = $rs5[0]['iva'];
|
||||
// Ricerca inserimenti su ordini
|
||||
$query = 'SELECT *, ( SELECT descrizione FROM or_tipiordine WHERE id=(SELECT idtipoordine FROM or_ordini WHERE id=idordine) ) AS tipo_documento, ( SELECT `dir` FROM or_tipiordine WHERE id=(SELECT idtipoordine FROM or_ordini WHERE id=idordine) ) AS `dir`, ( SELECT numero FROM or_ordini WHERE id=idordine ) AS numero, ( SELECT numero_esterno FROM or_ordini WHERE id=idordine ) AS numero_esterno, ( SELECT data FROM or_ordini WHERE id=idordine ) AS data FROM or_righe_ordini WHERE or_righe_ordini.id='.prepare($vendita['id_riga_ordine']);
|
||||
$data = $dbo->fetchArray($query);
|
||||
|
||||
$id = $data[0]['idordine'];
|
||||
}
|
||||
|
||||
// Inserito su intervento
|
||||
elseif (!empty($rs6)) {
|
||||
$numero = ($rs6[0]['numero_esterno'] != '') ? $rs6[0]['numero_esterno'] : $rs6[0]['numero'];
|
||||
elseif (!empty($vendita['id_riga_intervento'])) {
|
||||
$module_id = Modules::getModule('Interventi')['id'];
|
||||
$id = $rs6[0]['idintervento'];
|
||||
$documento = tr('Intervento').' '.$rs6[0]['codice'];
|
||||
$data = $rs6[0]['data'];
|
||||
$extra = str_replace('_QTA_', $rs6[0]['qta'], tr('(q.tà _QTA_)'));
|
||||
|
||||
$totale = $rs6[0]['prezzo_vendita'] * $rs6[0]['qta'];
|
||||
// Ricerca inserimenti su interventi
|
||||
$query = 'SELECT mg_articoli_interventi.*, in_interventi.codice, ( SELECT orario_inizio FROM in_interventi_tecnici WHERE idintervento=mg_articoli_interventi.idintervento LIMIT 0,1 ) AS data FROM mg_articoli_interventi JOIN in_interventi ON in_interventi.id = mg_articoli_interventi.idintervento WHERE mg_articoli_interventi.id='.prepare($vendita['id_riga_intervento']);
|
||||
$data = $dbo->fetchArray($query);
|
||||
|
||||
$id = $data[0]['idintervento'];
|
||||
|
||||
$data[0]['tipo_documento'] = tr('Intervento').' '.$data[0]['codice'];
|
||||
$data[0]['subtotale'] = $data[0]['prezzo_vendita'] * $data[0]['qta'];
|
||||
$data[0]['iva'] = 0;
|
||||
|
||||
$extra = str_replace('_QTA_', $data[0]['qta'], tr('(q.tà _QTA_)'));
|
||||
}
|
||||
|
||||
if (empty($totale) && !empty($subtotale) && !empty($iva)) {
|
||||
$totale = $subtotale + $iva;
|
||||
}
|
||||
$totali[] = [$data[0]['subtotale'], $data[0]['iva']];
|
||||
|
||||
$text = str_replace(['_DOC_', '_NUM_', '_DATE_'], [$documento, $numero, Translator::dateToLocale($data)], tr('_DOC_ n<sup>o</sup> _NUM_ del _DATE_')).(!empty($extra) ? ' '.$extra : '');
|
||||
$numero = !empty($rs6[0]['numero_esterno']) ? $data[0]['numero_esterno'] : $data[0]['numero'];
|
||||
|
||||
$text = str_replace(['_DOC_', '_NUM_', '_DATE_', '_TOT_'], [$data[0]['tipo_documento'], $numero, Translator::dateToLocale($data[0]['data'])], tr('_DOC_ n<sup>o</sup> _NUM_ del _DATE_')).(!empty($extra) ? ' '.$extra : '');
|
||||
|
||||
echo '
|
||||
<td>
|
||||
'.Modules::link($module_id, $id, $text).'
|
||||
</td>
|
||||
'.Modules::link($module_id, $id, $text).'<br>';
|
||||
}
|
||||
|
||||
<td class="text-center">
|
||||
<span>€ '.Translator::numberToLocale($totale).'</span>';
|
||||
echo '
|
||||
</td>
|
||||
|
||||
<td class="text-center">';
|
||||
foreach ($totali as $value) {
|
||||
$subtotale = $value[0];
|
||||
$iva = $value[1];
|
||||
|
||||
echo '
|
||||
<span>€ '.Translator::numberToLocale($subtotale + $iva).'</span>';
|
||||
if (!empty($subtotale) && !empty($iva)) {
|
||||
echo '
|
||||
<br/>
|
||||
<small style="color:#555;">'.Translator::numberToLocale($subtotale).' + '.Translator::numberToLocale($iva).'</small>';
|
||||
<small style="color:#555;">('.Translator::numberToLocale($subtotale).' + '.Translator::numberToLocale($iva).')</small>';
|
||||
}
|
||||
echo '
|
||||
</td>
|
||||
|
||||
<td></td>';
|
||||
<br>';
|
||||
}
|
||||
// Non venduto
|
||||
else {
|
||||
// Documento di vendita
|
||||
echo '
|
||||
<td></td>';
|
||||
|
||||
// Totale
|
||||
echo '
|
||||
<td></td>';
|
||||
|
||||
echo '
|
||||
<td>
|
||||
<a class="btn btn-danger btn-sm ask" data-backto="record-edit" data-op="delprodotto" data-idprodotto="'.$rs2[$i]['id'].'">
|
||||
<i class="fa fa-trash"></i>
|
||||
</a>
|
||||
</td>';
|
||||
}
|
||||
echo '
|
||||
</tr>';
|
||||
</td>
|
||||
|
||||
<td></td>';
|
||||
}
|
||||
|
||||
// Non venduto
|
||||
else {
|
||||
// Documento di vendita
|
||||
echo '
|
||||
<td></td>';
|
||||
|
||||
// Totale
|
||||
echo '
|
||||
<td></td>';
|
||||
|
||||
echo '
|
||||
<td class="text-center">
|
||||
<a class="btn btn-danger btn-sm ask" data-backto="record-edit" data-op="delprodotto" data-idprodotto="'.$rs2[$i]['id'].'">
|
||||
<i class="fa fa-trash"></i>
|
||||
</a>
|
||||
</td>';
|
||||
}
|
||||
echo '
|
||||
</tr>';
|
||||
}
|
||||
echo '
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
|
|
@ -41,8 +41,9 @@ if (!empty($rs2)) {
|
|||
<th class="text-center" width="100">'.tr('Q.tà').'</th>
|
||||
<th width="720">'.tr('Causale').'</th>
|
||||
<th>'.tr('Data').'</th>
|
||||
<th class="text-center">#</th>
|
||||
</tr>';
|
||||
foreach($rs2 as $r){
|
||||
foreach ($rs2 as $r) {
|
||||
// Quantità
|
||||
echo '
|
||||
<tr>
|
||||
|
@ -54,7 +55,21 @@ if (!empty($rs2)) {
|
|||
|
||||
// Data
|
||||
echo '
|
||||
<td>'.Translator::timestampToLocale($r['created_at']).'</td>
|
||||
<td>'.Translator::timestampToLocale($r['created_at']).'</td>';
|
||||
|
||||
// Operazioni
|
||||
echo '
|
||||
<td class="text-center">';
|
||||
|
||||
if (Auth::admin()) {
|
||||
echo '
|
||||
<a class="btn btn-danger btn-sm ask" data-backto="record-edit" data-op="delmovimento" data-idmovimento="'.$r['id'].'">
|
||||
<i class="fa fa-trash"></i>
|
||||
</a>';
|
||||
}
|
||||
|
||||
echo '
|
||||
</td>
|
||||
</tr>';
|
||||
}
|
||||
echo '
|
||||
|
|
|
@ -121,7 +121,7 @@ elseif ($get['op'] == 'addfattura') {
|
|||
$iva_indetraibile = $importo / 100 * $rs2[0]['indetraibile'];
|
||||
|
||||
// Inserimento riga in fattura
|
||||
$dbo->query('INSERT INTO co_righe_documenti(iddocumento, descrizione, desc_iva, iva, iva_indetraibile, subtotale, um, qta, idgruppo, `order`) VALUES('.prepare($iddocumento).', '.prepare($descrizione).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($importo).", '-', 1, (SELECT IFNULL(MAX(`idgruppo`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento=".prepare($iddocumento)."), (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento=".prepare($iddocumento)."))");
|
||||
$dbo->query('INSERT INTO co_righe_documenti(iddocumento, descrizione, desc_iva, iva, iva_indetraibile, subtotale, um, qta, `order`) VALUES('.prepare($iddocumento).', '.prepare($descrizione).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($importo).", '-', 1, (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento=".prepare($iddocumento)."))");
|
||||
|
||||
redirect($rootdir.'/editor.php?id_module='.Modules::getModule('Fatture di vendita')['id'].'&id_record='.$iddocumento.'&dir=entrata');
|
||||
exit();
|
||||
|
|
|
@ -150,11 +150,7 @@ switch (post('op')) {
|
|||
$sconto = ($tipo_sconto == 'PRC') ? ($prezzo * $sconto_unitario) / 100 : $sconto_unitario;
|
||||
$sconto = $sconto * $qta;
|
||||
|
||||
// Calcolo idgruppo per questo inserimento
|
||||
$ridgruppo = $dbo->fetchArray('SELECT IFNULL(MAX(idgruppo) + 1, 0) AS idgruppo FROM dt_righe_ddt WHERE idddt = '.prepare($id_record));
|
||||
$idgruppo = $ridgruppo[0]['idgruppo'];
|
||||
|
||||
add_articolo_inddt($id_record, $idarticolo, $descrizione, $idiva, $qta, $prezzo * $qta, $sconto, $sconto_unitario, $tipo_sconto, $lotto, $serial, $altro, $idgruppo);
|
||||
add_articolo_inddt($id_record, $idarticolo, $descrizione, $idiva, $qta, $prezzo * $qta, $sconto, $sconto_unitario, $tipo_sconto);
|
||||
|
||||
// Ricalcolo inps, ritenuta e bollo
|
||||
ricalcola_costiagg_ddt($id_record);
|
||||
|
@ -186,7 +182,7 @@ switch (post('op')) {
|
|||
$iva = ($subtot - $sconto) / 100 * $rs[0]['percentuale'];
|
||||
$iva_indetraibile = $iva / 100 * $rs[0]['indetraibile'];
|
||||
|
||||
$query = 'INSERT INTO dt_righe_ddt(idddt, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idgruppo, `order`) VALUES('.prepare($id_record).', '.prepare($idiva).', '.prepare($rs[0]['descrizione']).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($subtot).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', '.prepare($um).', '.prepare($qta).', (SELECT IFNULL(MAX(`idgruppo`) + 1, 0) FROM dt_righe_ddt AS t WHERE idddt='.prepare($id_record).'), (SELECT IFNULL(MAX(`order`) + 1, 0) FROM dt_righe_ddt AS t WHERE idddt='.prepare($id_record).'))';
|
||||
$query = 'INSERT INTO dt_righe_ddt(idddt, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, `order`) VALUES('.prepare($id_record).', '.prepare($idiva).', '.prepare($rs[0]['descrizione']).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($subtot).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', '.prepare($um).', '.prepare($qta).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM dt_righe_ddt AS t WHERE idddt='.prepare($id_record).'))';
|
||||
|
||||
if ($dbo->query($query)) {
|
||||
$_SESSION['infos'][] = tr('Riga aggiunta!');
|
||||
|
@ -224,12 +220,13 @@ switch (post('op')) {
|
|||
for ($i = 0; $i < sizeof($post['qta_da_evadere']); ++$i) {
|
||||
// Processo solo le righe da evadere
|
||||
if ($post['evadere'][$i] == 'on') {
|
||||
$idrigaordine = post('idrigaordine')[$i];
|
||||
$idrigaordine = post('idriga')[$i];
|
||||
$idarticolo = post('idarticolo')[$i];
|
||||
$descrizione = post('descrizione')[$i];
|
||||
|
||||
$qta = $post['qta_da_evadere'][$i];
|
||||
$um = post('um')[$i];
|
||||
$abilita_serial = post('abilita_serial')[$i];
|
||||
|
||||
$subtot = $post['subtot'][$i] * $qta;
|
||||
$sconto = $post['sconto'][$i];
|
||||
|
@ -243,12 +240,12 @@ switch (post('op')) {
|
|||
$rs = $dbo->fetchArray($q);
|
||||
$iva_indetraibile = $iva / 100 * $rs[0]['indetraibile'];
|
||||
|
||||
// Lettura lotto, serial, altro dalla riga dell'ordine
|
||||
$q = 'SELECT lotto, serial, altro FROM or_righe_ordini WHERE id='.prepare($idrigaordine);
|
||||
$rs = $dbo->fetchArray($q);
|
||||
|
||||
// Inserisco la riga in ddt
|
||||
$dbo->query('INSERT INTO dt_righe_ddt(idddt, idordine, idarticolo, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, um, qta, lotto, serial, altro, idgruppo, `order`) VALUES('.prepare($id_record).', '.prepare($idordine).', '.prepare($idarticolo).', '.prepare($idiva).', '.prepare($rs[0]['descrizione']).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($subtot).', '.prepare($sconto).', '.prepare($um).', '.prepare($qta).', '.prepare($rs[0]['lotto']).', '.prepare($rs[0]['serial']).', '.prepare($rs[0]['altro']).', (SELECT IFNULL(MAX(`idgruppo`) + 1, 0) FROM dt_righe_ddt AS t WHERE idddt='.prepare($id_record).'), (SELECT IFNULL(MAX(`order`) + 1, 0) FROM dt_righe_ddt AS t WHERE idddt='.prepare($id_record).'))');
|
||||
$dbo->query('INSERT INTO dt_righe_ddt(idddt, idordine, idarticolo, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, um, qta, abilita_serial, `order`) VALUES('.prepare($id_record).', '.prepare($idordine).', '.prepare($idarticolo).', '.prepare($idiva).', '.prepare($rs[0]['descrizione']).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($subtot).', '.prepare($sconto).', '.prepare($um).', '.prepare($qta).', '.prepare($abilita_serial).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM dt_righe_ddt AS t WHERE idddt='.prepare($id_record).'))');
|
||||
$riga = $dbo->lastInsertedID();
|
||||
|
||||
// Aggiornamento seriali dalla riga dell'ordine
|
||||
$dbo->sync('mg_prodotti', ['id_riga_ddt' => $riga, 'dir' => $dir, 'id_articolo' => $idarticolo], ['serial' => (array) $post['serial'][$i]]);
|
||||
|
||||
// Scalo la quantità dall'ordine
|
||||
$dbo->query('UPDATE or_righe_ordini SET qta_evasa = qta_evasa+'.$qta.' WHERE id='.prepare($idrigaordine));
|
||||
|
@ -277,24 +274,20 @@ switch (post('op')) {
|
|||
$idriga = post('idriga');
|
||||
$idarticolo = post('idarticolo');
|
||||
|
||||
if ($id_record != '' && $idarticolo != '') {
|
||||
$res = rimuovi_articolo_daddt($idarticolo, $id_record, $idriga);
|
||||
if (!rimuovi_articolo_daddt($idarticolo, $id_record, $idriga)) {
|
||||
$_SESSION['errors'][] = tr('Alcuni serial number sono già stati utilizzati!');
|
||||
|
||||
if (!$res) {
|
||||
$_SESSION['errors'][] = tr('Alcuni serial number sono già stati utilizzati!');
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Ricalcolo inps, ritenuta e bollo
|
||||
if ($post['dir'] == 'entrata') {
|
||||
ricalcola_costiagg_ddt($id_record);
|
||||
} else {
|
||||
ricalcola_costiagg_ddt($id_record, 0, 0, 0);
|
||||
}
|
||||
|
||||
$_SESSION['infos'][] = tr('Articolo rimosso!');
|
||||
return;
|
||||
}
|
||||
|
||||
// Ricalcolo inps, ritenuta e bollo
|
||||
if ($dir == 'entrata') {
|
||||
ricalcola_costiagg_ddt($id_record);
|
||||
} else {
|
||||
ricalcola_costiagg_ddt($id_record, 0, 0, 0);
|
||||
}
|
||||
|
||||
$_SESSION['infos'][] = tr('Articolo rimosso!');
|
||||
break;
|
||||
|
||||
// Scollegamento riga generica da ddt
|
||||
|
@ -347,13 +340,20 @@ switch (post('op')) {
|
|||
$subtot = $prezzo * $qta;
|
||||
|
||||
// Lettura idarticolo dalla riga ddt
|
||||
$rs = $dbo->fetchArray('SELECT idgruppo, idddt, abilita_serial, idarticolo, idordine, qta FROM dt_righe_ddt WHERE id='.prepare($idriga));
|
||||
$rs = $dbo->fetchArray('SELECT idddt, abilita_serial, idarticolo, idordine, qta FROM dt_righe_ddt WHERE id='.prepare($idriga));
|
||||
$idarticolo = $rs[0]['idarticolo'];
|
||||
$idordine = $rs[0]['idordine'];
|
||||
$old_qta = $rs[0]['qta'];
|
||||
$idgruppo = $rs[0]['idgruppo'];
|
||||
$idddt = $rs[0]['idddt'];
|
||||
$abilita_serial = $rs[0]['abilita_serial'];
|
||||
|
||||
// Controllo per gestire i serial
|
||||
if (!empty($idarticolo)) {
|
||||
if (!controlla_seriali('id_riga_ddt', $idriga, $old_qta, $qta, $dir)) {
|
||||
$_SESSION['errors'][] = tr('Alcuni serial number sono già stati utilizzati!');
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Calcolo iva
|
||||
$query = 'SELECT * FROM co_iva WHERE id='.prepare($idiva);
|
||||
|
@ -363,40 +363,9 @@ switch (post('op')) {
|
|||
$desc_iva = $rs[0]['descrizione'];
|
||||
|
||||
// Modifica riga generica sul ddt
|
||||
$query = 'UPDATE dt_righe_ddt SET 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).' WHERE idgruppo='.prepare($idgruppo).' AND idddt='.prepare($idddt);
|
||||
$query = 'UPDATE dt_righe_ddt SET 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).', qta='.prepare($qta).' WHERE id='.prepare($idriga);
|
||||
if ($dbo->query($query)) {
|
||||
// Modifica della quantità
|
||||
$dbo->query('UPDATE dt_righe_ddt SET qta='.prepare($qta).' WHERE idgruppo='.prepare($idgruppo));
|
||||
|
||||
// Modifica per gestire i serial
|
||||
if (!empty($idarticolo)) {
|
||||
$new_qta = $qta - $old_qta;
|
||||
$new_qta = ($old_qta < $qta) ? $new_qta : -$new_qta;
|
||||
|
||||
if (!empty($abilita_serial)) {
|
||||
if ($old_qta < $qta) {
|
||||
for ($i = 0; $i < $new_qta; ++$i) {
|
||||
$dbo->query('INSERT INTO dt_righe_ddt(idddt, idarticolo, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idgruppo, `order`) SELECT idddt, idarticolo, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idgruppo, `order` FROM dt_righe_ddt WHERE id='.prepare($idriga));
|
||||
}
|
||||
} else {
|
||||
if ($dir == 'uscita') {
|
||||
if ($new_qta > $dbo->fetchArray("SELECT COUNT(*) AS rimovibili FROM dt_righe_ddt WHERE serial NOT IN (SELECT serial FROM vw_serials WHERE dir = 'entrata') AND idgruppo=".prepare($idgruppo).' AND idddt='.prepare($idddt))[0]['rimovibili']) {
|
||||
$_SESSION['errors'][] = tr('Alcuni serial number sono già stati utilizzati!');
|
||||
|
||||
return;
|
||||
} else {
|
||||
$deletes = $dbo->fetchArray('SELECT id FROM dt_righe_ddt AS t WHERE idgruppo = '.prepare($idgruppo).' AND idddt='.prepare($idddt)." AND serial NOT IN (SELECT serial FROM vw_serials WHERE dir = 'entrata') ORDER BY serial ASC LIMIT ".$new_qta);
|
||||
}
|
||||
} else {
|
||||
$deletes = $dbo->fetchArray('SELECT id FROM dt_righe_ddt AS t WHERE idgruppo = '.prepare($idgruppo).' AND idddt='.prepare($idddt).' ORDER BY serial ASC LIMIT '.$new_qta);
|
||||
}
|
||||
|
||||
foreach ((array) $deletes as $delete) {
|
||||
$dbo->query('DELETE FROM dt_righe_ddt WHERE id = '.prepare($delete['id']));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Controlli aggiuntivi sulle quantità evase degli ordini
|
||||
if (!empty($idordine) && $qta > 0) {
|
||||
$rs = $dbo->fetchArray('SELECT qta_evasa, qta FROM or_righe_ordini WHERE idordine='.prepare($idordine).' AND idarticolo='.prepare($idarticolo));
|
||||
|
@ -409,8 +378,7 @@ switch (post('op')) {
|
|||
$dbo->query('UPDATE or_righe_ordini SET qta_evasa = '.prepare($qta_ordine).' WHERE idordine='.prepare($idordine).' AND idarticolo='.prepare($idarticolo));
|
||||
}
|
||||
|
||||
$new_qta = ($old_qta < $qta) ? $new_qta : -$new_qta;
|
||||
|
||||
$new_qta = $qta - $old_qta;
|
||||
$new_qta = ($dir == 'entrata') ? -$new_qta : $new_qta;
|
||||
add_movimento_magazzino($idarticolo, $new_qta, ['idddt' => $id_record]);
|
||||
}
|
||||
|
@ -429,19 +397,18 @@ switch (post('op')) {
|
|||
|
||||
// eliminazione ddt
|
||||
case 'delete':
|
||||
if ($dir == 'uscita') {
|
||||
$non_rimovibili = $dbo->fetchArray("SELECT COUNT(*) AS non_rimovibili FROM dt_righe_ddt WHERE serial IN (SELECT serial FROM vw_serials WHERE dir = 'entrata') AND idddt=".prepare($id_record))[0]['non_rimovibili'];
|
||||
if ($non_rimovibili != 0) {
|
||||
// Se ci sono degli articoli collegati
|
||||
$rs = $dbo->fetchArray('SELECT id, idarticolo FROM dt_righe_ddt WHERE idddt='.prepare($id_record));
|
||||
|
||||
foreach ($rs as $value) {
|
||||
$non_rimovibili = seriali_non_rimuovibili('id_riga_ddt', $value['id'], $dir);
|
||||
if (!empty($non_rimovibili)) {
|
||||
$_SESSION['errors'][] = tr('Alcuni serial number sono già stati utilizzati!');
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Se ci sono degli articoli collegati
|
||||
$query = 'SELECT id, idarticolo FROM dt_righe_ddt WHERE idddt='.prepare($id_record);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
|
||||
for ($i = 0; $i < sizeof($rs); ++$i) {
|
||||
rimuovi_articolo_daddt($rs[$i]['idarticolo'], $id_record, $rs[$i]['id']);
|
||||
}
|
||||
|
@ -464,16 +431,18 @@ switch (post('op')) {
|
|||
break;
|
||||
|
||||
case 'add_serial':
|
||||
$idgruppo = $post['idgruppo'];
|
||||
$serial = $post['serial'];
|
||||
$idriga = $post['idriga'];
|
||||
$idarticolo = $post['idarticolo'];
|
||||
|
||||
$q = 'SELECT * FROM dt_righe_ddt WHERE idddt='.prepare($id_record).' AND idgruppo='.prepare($idgruppo).' ORDER BY id';
|
||||
$rs = $dbo->fetchArray($q);
|
||||
|
||||
foreach ($rs as $i => $r) {
|
||||
$dbo->query('UPDATE dt_righe_ddt SET serial='.prepare($serial[$i]).' WHERE id='.prepare($r['id']));
|
||||
$serials = (array) $post['serial'];
|
||||
foreach ($serials as $key => $value) {
|
||||
if (empty($value)) {
|
||||
unset($serials[$key]);
|
||||
}
|
||||
}
|
||||
|
||||
$dbo->sync('mg_prodotti', ['id_riga_ddt' => $idriga, 'dir' => $dir, 'id_articolo' => $idarticolo], ['serial' => $serials]);
|
||||
|
||||
break;
|
||||
|
||||
case 'update_position':
|
||||
|
|
|
@ -1,108 +0,0 @@
|
|||
<?php
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
$module = Modules::getModule($id_module);
|
||||
|
||||
if ($module['name'] == 'Ddt di vendita') {
|
||||
$dir = 'entrata';
|
||||
} else {
|
||||
$dir = 'uscita';
|
||||
}
|
||||
|
||||
$idarticolo = get('idarticolo');
|
||||
$idgruppo = get('idgruppo');
|
||||
|
||||
$q2 = 'SELECT * FROM dt_righe_ddt INNER JOIN mg_articoli ON dt_righe_ddt.idarticolo=mg_articoli.id WHERE dt_righe_ddt.idddt='.prepare($id_record).' AND dt_righe_ddt.idgruppo='.prepare($idgruppo);
|
||||
$rs2 = $dbo->fetchArray($q2);
|
||||
|
||||
echo '
|
||||
<p>'.tr('Articolo').': '.$rs2[0]['codice'].' - '.$rs2[0]['descrizione'].'</p>
|
||||
|
||||
<form action="'.$rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'" method="post">
|
||||
<input type="hidden" name="op" value="add_serial">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
<input type="hidden" name="idgruppo" value="'.$rs2[0]['idgruppo'].'">
|
||||
<input type="hidden" name="dir" value="'.$dir.'">';
|
||||
|
||||
$serials = [];
|
||||
$array = array_column($rs2, 'serial');
|
||||
foreach ($array as $value) {
|
||||
if (!empty($value)) {
|
||||
$serials[] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
if ($dir == 'entrata') {
|
||||
echo '
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "select", "label": "'.tr('Serial').'", "name": "serial[]", "multiple": 1, "value": "'.implode(',', $serials).'", "values": "query=SELECT serial AS id, serial AS descrizione FROM vw_serials WHERE dir=\'uscita\' AND serial NOT IN (SELECT serial FROM vw_serials WHERE dir=\'entrata\' AND record != \'ddt-'.$id_record.'\')", "extra": "data-maximum=\"'.count($rs2).'\"" ]}
|
||||
</div>
|
||||
</div>';
|
||||
} else {
|
||||
echo '
|
||||
<p>'.tr('Inserisci i numeri seriali degli articoli aggiunti:').'</p>';
|
||||
|
||||
foreach ($array as $key => $serial) {
|
||||
if ($key % 3 == 0) {
|
||||
echo '
|
||||
<div class="row">';
|
||||
}
|
||||
|
||||
$res = $dbo->fetchArray("SELECT record FROM vw_serials WHERE dir='entrata' AND serial = ".prepare($serial));
|
||||
|
||||
echo '
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "name": "serial[]", "value": "'.$serial.'"'.(!empty($res) ? ', "readonly": 1' : '').' ]}';
|
||||
|
||||
if (!empty($res)) {
|
||||
$pieces = explode('-', $res[0]['record']);
|
||||
switch ($pieces[0]) {
|
||||
case 'int':
|
||||
$modulo = 'Interventi';
|
||||
break;
|
||||
|
||||
case 'ddt':
|
||||
$modulo = 'Ddt di vendita';
|
||||
break;
|
||||
|
||||
case 'fat':
|
||||
$modulo = 'Fatture di vendita';
|
||||
break;
|
||||
|
||||
case 'ord':
|
||||
$modulo = 'Ordini cliente';
|
||||
break;
|
||||
}
|
||||
|
||||
echo '
|
||||
'.Modules::link($modulo, $pieces[1], tr('Visualizza vendita').' <i class="fa fa-external-link"></i>', null);
|
||||
}
|
||||
echo '
|
||||
</div>';
|
||||
|
||||
if (($key + 1) % 3 == 0) {
|
||||
echo '
|
||||
</div>
|
||||
<br>';
|
||||
}
|
||||
}
|
||||
if (($key + 1) % 3 != 0) {
|
||||
echo '
|
||||
</div>';
|
||||
}
|
||||
}
|
||||
|
||||
echo '
|
||||
|
||||
<!-- PULSANTI -->
|
||||
<div class="row">
|
||||
<div class="col-md-12 text-right">
|
||||
<button type="submit" class="btn btn-primary pull-right"><i class="fa fa-barcode"></i> '.tr('Aggiorna').'</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>';
|
||||
|
||||
echo '
|
||||
<script src="'.$rootdir.'/lib/init.js"></script>';
|
|
@ -1,236 +0,0 @@
|
|||
<?php
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
if ($_GET['dir'] == 'entrata') {
|
||||
$dir = 'entrata';
|
||||
$module_name = 'Fatture di vendita';
|
||||
} else {
|
||||
$dir = 'uscita';
|
||||
$module_name = 'Fatture di acquisto';
|
||||
}
|
||||
|
||||
$idddt = $get['idddt'];
|
||||
|
||||
// Info documento
|
||||
$q = 'SELECT * FROM dt_ddt WHERE id='.prepare($idddt);
|
||||
$rs = $dbo->fetchArray($q);
|
||||
$numero = $rs[0]['numero'];
|
||||
$idanagrafica = $rs[0]['idanagrafica'];
|
||||
$idpagamento = $rs[0]['idpagamento'];
|
||||
$idconto = $rs[0]['idconto'];
|
||||
|
||||
/*
|
||||
Form di inserimento riga documento
|
||||
*/
|
||||
|
||||
echo '
|
||||
<p>'.str_replace('_NUM_', $numero, tr('Ddt numero _NUM_')).'</p>';
|
||||
|
||||
//Selezione articoli del ddt da portare nella fattura, escludo quelli completamente evasi
|
||||
$query = 'SELECT *, (qta - qta_evasa) AS qta_rimanente FROM dt_ddt INNER JOIN dt_righe_ddt ON dt_ddt.id=dt_righe_ddt.idddt WHERE dt_ddt.id='.prepare($idddt).' HAVING qta_rimanente > 0';
|
||||
$rs = $dbo->fetchArray($query);
|
||||
|
||||
if (!empty($rs)) {
|
||||
echo '
|
||||
<p>'.tr('Seleziona le righe che vuoi inserire nella fattura e la relativa quantità').'.</p><br/><br/>';
|
||||
|
||||
echo '
|
||||
<form id="link_form" action="'.$rootdir.'/editor.php?id_module='.Modules::getModule($module_name)['id'].'&id_record='.$idddt.'" method="post">
|
||||
<input type="hidden" name="idddt" value="'.$idddt.'">
|
||||
<input type="hidden" name="idanagrafica" value="'.$idanagrafica.'">
|
||||
<input type="hidden" name="idconto" value="'.$idconto.'">
|
||||
<input type="hidden" name="idpagamento" value="'.$idpagamento.'">
|
||||
|
||||
<input type="hidden" name="op" value="fattura_da_ddt">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
<input type="hidden" name="dir" value="'.$dir.'">';
|
||||
|
||||
echo '
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "date", "label": "'.tr('Data fattura').'", "name": "data", "required": 1, "value": "-now-" ]}
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
echo '
|
||||
<div class="clearfix"></div>
|
||||
<br>
|
||||
|
||||
<table class="table table-striped table-hover table-condensed">
|
||||
<tr>
|
||||
<th>'.tr('Descrizione').'</th>
|
||||
<th width="10%%">'.tr('Q.tà').'</th>
|
||||
<th width="15%">'.tr('Q.tà da evadere').'</th>
|
||||
<th width="20%">'.tr('Subtot.').'</th>
|
||||
<th width="10%">'.tr('Da evadere').'</th>
|
||||
<th width="2%"></th>
|
||||
</tr>';
|
||||
$totale = 0.00;
|
||||
|
||||
foreach ($rs as $i => $r) {
|
||||
// Descrizione
|
||||
echo '
|
||||
<tr>
|
||||
<td>
|
||||
<input type="hidden" name="idrigaddt[]" value="'.$r['id'].'" />
|
||||
<input type="hidden" id="idarticolo_'.$i.'" name="idarticolo[]" value="'.$r['idarticolo'].'" />
|
||||
<input type="hidden" id="descrizione_'.$i.'" name="descrizione[]"" value="'.$r['descrizione'].'" />
|
||||
|
||||
'.nl2br($r['descrizione']).'
|
||||
<small>';
|
||||
if ($r['lotto'] != '') {
|
||||
echo '<br/>'.tr('Lotto').': '.$r['lotto'];
|
||||
}
|
||||
if ($r['serial'] != '') {
|
||||
echo '<br/>'.tr('SN').': '.$r['serial'];
|
||||
}
|
||||
if ($r['altro'] != '') {
|
||||
echo '<br/>'.$r['altro'];
|
||||
}
|
||||
echo '
|
||||
</small>
|
||||
</td>';
|
||||
|
||||
// Q.tà rimanente
|
||||
echo '
|
||||
<td id=truerimanente_'.$i.'">
|
||||
<input type="hidden" id="qtamax_'.$i.'" value="'.($r['qta'] - $r['qta_evasa']).'" />
|
||||
<input type="hidden" id="um_'.$i.'" name="um[]" value="'.$r['um'].'" />
|
||||
<p class="text-center">'.$r['qta_rimanente'].'</p>
|
||||
</td>';
|
||||
|
||||
// Q.tà da evadere
|
||||
echo '
|
||||
<td>
|
||||
<input class="form-control inputmask-decimal" type="text" id="qta_'.$i.'" name="qta_da_evadere[]" value="'.($r['qta'] - $r['qta_evasa']).'" onkeyup="ricalcola_subtotale_riga('.$i.');" />
|
||||
</td>';
|
||||
|
||||
// Subtotale
|
||||
$subtotale = $r['subtotale'] / $r['qta'] * ($r['qta'] - $r['qta_evasa']);
|
||||
$sconto = $r['sconto'] / $r['qta'] * ($r['qta'] - $r['qta_evasa']);
|
||||
$iva = $r['iva'] / $r['qta'] * ($r['qta'] - $r['qta_evasa']);
|
||||
|
||||
echo '
|
||||
<td>
|
||||
<input type="hidden" id="subtot_'.$i.'" name="subtot[]" value="'.Translator::numberToLocale($r['subtotale'] / $r['qta']).'" />
|
||||
<input type="hidden" id="sconto_'.$i.'" name="sconto[]" value="'.Translator::numberToLocale($r['sconto'] / $r['qta']).'" />
|
||||
<input type="hidden" id="idiva_'.$i.'" name="idiva[]" value="'.$r['idiva'].'" />
|
||||
<input type="hidden" id="iva_'.$i.'" name="iva[]" value="'.Translator::numberToLocale($r['iva'] / $r['qta']).'" />
|
||||
|
||||
<big id="subtotale_'.$i.'">'.Translator::numberToLocale($subtotale - $sconto + $iva).' €</big><br/>
|
||||
|
||||
<small style="color:#777;" id="subtotaledettagli_'.$i.'">'.Translator::numberToLocale($subtotale - $sconto).' + '.Translator::numberToLocale($iva).'</small>
|
||||
</td>';
|
||||
|
||||
// Checkbox - da evadere?
|
||||
echo '
|
||||
<td>
|
||||
<input type="checkbox" checked="checked" id="checked_'.$i.'" name="evadere[]" value="on" onclick="ricalcola_subtotale_riga('.$i.');" />
|
||||
</td>
|
||||
</tr>';
|
||||
|
||||
$totale += $subtotale - $sconto + $iva;
|
||||
}
|
||||
|
||||
// Totale
|
||||
echo '
|
||||
<tr>
|
||||
<td colspan="4" align="right" class="text-right">
|
||||
<b>Totale:</b>
|
||||
</td>
|
||||
<td class="text-right" colspan="2">
|
||||
<big id="totale">'.Translator::numberToLocale($totale).' €</big>
|
||||
</td>
|
||||
</tr>
|
||||
</table>';
|
||||
|
||||
echo '
|
||||
<!-- PULSANTI -->
|
||||
<div class="row">
|
||||
<div class="col-md-12 text-right">
|
||||
<button type="submit" id="submit_btn" class="btn btn-primary pull-right">
|
||||
<i class="fa fa-plus"></i> '.($dir == 'entrata' ? tr('Crea fattura di vendita') : tr('Crea fattura di acquisto')).'
|
||||
</button>
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
echo '
|
||||
</form>';
|
||||
} else {
|
||||
echo '
|
||||
<b>'.tr('Non ci sono articoli da evadere in questo ddt').'...</b>';
|
||||
}
|
||||
|
||||
echo '
|
||||
<script src="'.$rootdir.'/lib/init.js"></script>';
|
||||
|
||||
?>
|
||||
|
||||
<script type="text/javascript">
|
||||
function ricalcola_subtotale_riga( r ){
|
||||
subtot = $("#subtot_"+r).val().toEnglish();
|
||||
|
||||
sconto = $("#sconto_"+r).val().toEnglish();
|
||||
|
||||
subtot = subtot-sconto;
|
||||
|
||||
qta = $("#qta_"+r).val().toEnglish();
|
||||
if( isNaN(qta) )
|
||||
qta = 0;
|
||||
|
||||
qtamax = $("#qtamax_"+r).val().toEnglish();
|
||||
if( isNaN(qtamax) )
|
||||
qtamax = 0;
|
||||
|
||||
iva = $("#iva_"+r).val().toEnglish();
|
||||
|
||||
// Se inserisco una quantità da evadere maggiore di quella rimanente, la imposto al massimo possibile
|
||||
if( qta>qtamax ){
|
||||
qta = qtamax;
|
||||
$('#qta_'+r).val( qta );
|
||||
}
|
||||
|
||||
// Se tolgo la spunta della casella dell'evasione devo azzerare i conteggi
|
||||
if( !$('#checked_'+r).is(':checked') )
|
||||
qta = 0;
|
||||
|
||||
subtotale = (subtot*qta+iva*qta).toFixedLocale();
|
||||
|
||||
$("#subtotale_"+r).html(subtotale+" €");
|
||||
$("#subtotaledettagli_"+r).html( (subtot*qta).toFixed(2)+" + " + (iva*qta).toFixed(2) );
|
||||
|
||||
ricalcola_totale();
|
||||
}
|
||||
|
||||
|
||||
function ricalcola_totale(){
|
||||
r = 0;
|
||||
totale = 0.00;
|
||||
$('input[id*=qta_]').each( function(){
|
||||
qta = $(this).val().toEnglish();
|
||||
|
||||
if( !$('#checked_'+r).is(':checked') || isNaN(qta) )
|
||||
qta = 0;
|
||||
|
||||
subtot = $("#subtot_"+r).val().toEnglish();
|
||||
|
||||
sconto = $("#sconto_"+r).val().toEnglish();
|
||||
|
||||
subtot = subtot-sconto;
|
||||
|
||||
iva = $("#iva_"+r).val().toEnglish();
|
||||
|
||||
totale += subtot*qta+iva*qta;
|
||||
|
||||
r++;
|
||||
});
|
||||
|
||||
$('#totale').html( (totale.toFixedLocale()) + " €" );
|
||||
|
||||
if( totale==0 )
|
||||
$('#submit_btn').hide();
|
||||
else
|
||||
$('#submit_btn').show();
|
||||
}
|
||||
</script>
|
|
@ -157,7 +157,7 @@ if ($records[0]['stato'] != 'Evaso') {
|
|||
|
||||
if ($records[0]['stato'] != 'Evaso') {
|
||||
?>
|
||||
<a class="btn btn-sm btn-info" data-href="<?php echo $rootdir ?>/modules/ddt/creafattura.php?idddt=<?php echo $id_record ?>&dir=<?php echo $dir ?>" data-toggle="modal" data-title="Crea fattura" data-target="#bs-popup">
|
||||
<a class="btn btn-sm btn-info" data-href="<?php echo $rootdir ?>/modules/fatture/crea_documento.php?id_module=<?php echo $id_module ?>&id_record=<?php echo $id_record ?>&documento=fattura" data-toggle="modal" data-title="Crea fattura" data-target="#bs-popup">
|
||||
<i class="fa fa-magic"></i> <?php echo tr('Crea fattura da ddt'); ?>...</i>
|
||||
</a>
|
||||
<?php
|
||||
|
|
|
@ -55,23 +55,19 @@ function rimuovi_articolo_daddt($idarticolo, $idddt, $idrigaddt)
|
|||
global $dir;
|
||||
|
||||
// Leggo la quantità di questo articolo in ddt
|
||||
$query = 'SELECT idgruppo, qta, subtotale FROM dt_righe_ddt WHERE id='.prepare($idrigaddt);
|
||||
$query = 'SELECT qta, subtotale FROM dt_righe_ddt WHERE id='.prepare($idrigaddt);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$qta = floatval($rs[0]['qta']);
|
||||
$subtotale = $rs[0]['subtotale'];
|
||||
|
||||
$idgruppo = $rs[0]['idgruppo'];
|
||||
|
||||
// Leggo l'idordine
|
||||
$query = 'SELECT idordine FROM dt_righe_ddt WHERE id='.prepare($idrigaddt);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$idordine = $rs[0]['idordine'];
|
||||
|
||||
if ($dir == 'uscita') {
|
||||
$non_rimovibili = $dbo->fetchArray("SELECT COUNT(*) AS non_rimovibili FROM dt_righe_ddt WHERE serial IN (SELECT serial FROM vw_serials WHERE dir = 'entrata') AND idgruppo=".prepare($idgruppo).' AND idddt='.prepare($idddt))[0]['non_rimovibili'];
|
||||
if ($non_rimovibili != 0) {
|
||||
return false;
|
||||
}
|
||||
$non_rimovibili = seriali_non_rimuovibili('id_riga_ddt', $idrigaddt, $dir);
|
||||
if (!empty($non_rimovibili)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Ddt di vendita
|
||||
|
@ -97,7 +93,7 @@ function rimuovi_articolo_daddt($idarticolo, $idddt, $idrigaddt)
|
|||
$dbo->query($query);
|
||||
|
||||
// Elimino la riga dal ddt
|
||||
$dbo->query('DELETE FROM `dt_righe_ddt` WHERE idgruppo='.prepare($idgruppo).' AND idddt='.prepare($idddt));
|
||||
$dbo->query('DELETE FROM `dt_righe_ddt` WHERE id='.prepare($idrigaddt).' AND idddt='.prepare($idddt));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -274,7 +270,7 @@ function ricalcola_costiagg_ddt($idddt, $idrivalsainps = '', $idritenutaacconto
|
|||
* $qta float quantità dell'articolo nell'ordine
|
||||
* $prezzo float prezzo totale degli articoli (prezzounitario*qtà).
|
||||
*/
|
||||
function add_articolo_inddt($idddt, $idarticolo, $descrizione, $idiva, $qta, $prezzo, $sconto = 0, $sconto_unitario = 0, $tipo_sconto = 'UNT', $lotto = '', $serial = '', $altro = '', $idgruppo = 0)
|
||||
function add_articolo_inddt($idddt, $idarticolo, $descrizione, $idiva, $qta, $prezzo, $sconto = 0, $sconto_unitario = 0, $tipo_sconto = 'UNT')
|
||||
{
|
||||
global $dbo;
|
||||
global $dir;
|
||||
|
@ -300,20 +296,8 @@ function add_articolo_inddt($idddt, $idarticolo, $descrizione, $idiva, $qta, $pr
|
|||
|
||||
if ($qta > 0) {
|
||||
$rsart = $dbo->fetchArray('SELECT abilita_serial FROM mg_articoli WHERE id='.prepare($idarticolo));
|
||||
$qta_in = !empty($rsart[0]['abilita_serial']) ? $qta : 1;
|
||||
|
||||
for ($i = 0; $i < $qta_in; ++$i) {
|
||||
/*
|
||||
$iva = $iva / $qta_in;
|
||||
$qta = $qta / $qta_in;
|
||||
$ubtotale = $subtotale / $qta_in;
|
||||
$sconto = $sconto / $qta_in;
|
||||
|
||||
$iva_indetraibile = $iva / 100 * $rs2[0]['indetraibile'];
|
||||
*/
|
||||
|
||||
$dbo->query('INSERT INTO dt_righe_ddt(idddt, idarticolo, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, qta, abilita_serial, serial, um, idgruppo, `order`) VALUES ('.prepare($idddt).', '.prepare($idarticolo).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($prezzo).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', '.prepare($qta).', '.prepare($rsart[0]['abilita_serial']).', '.prepare($serial).', '.prepare($um).', '.prepare($idgruppo).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM dt_righe_ddt AS t WHERE idddt='.prepare($idddt).'))');
|
||||
}
|
||||
$dbo->query('INSERT INTO dt_righe_ddt(idddt, idarticolo, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, qta, abilita_serial, um, `order`) VALUES ('.prepare($idddt).', '.prepare($idarticolo).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($prezzo).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', '.prepare($qta).', '.prepare($rsart[0]['abilita_serial']).', '.prepare($um).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM dt_righe_ddt AS t WHERE idddt='.prepare($idddt).'))');
|
||||
|
||||
$idriga = $dbo->lastInsertedID();
|
||||
|
||||
|
|
|
@ -19,31 +19,21 @@ echo '
|
|||
/*
|
||||
Articoli e righe generiche
|
||||
*/
|
||||
$q_art = 'SELECT *, (SELECT codice FROM mg_articoli WHERE id=idarticolo) AS codice FROM `dt_righe_ddt` WHERE idddt='.prepare($id_record).' GROUP BY idgruppo ORDER BY `order`';
|
||||
$q_art = 'SELECT *, (SELECT codice FROM mg_articoli WHERE id=idarticolo) AS codice FROM `dt_righe_ddt` WHERE idddt='.prepare($id_record).' ORDER BY `order`';
|
||||
$rs = $dbo->fetchArray($q_art);
|
||||
|
||||
if (!empty($rs)) {
|
||||
foreach ($rs as $r) {
|
||||
if (!empty($r['idarticolo'])) {
|
||||
$qserial = 'SELECT * FROM dt_righe_ddt WHERE idddt='.prepare($id_record).' AND idarticolo='.prepare($r['idarticolo']).' AND idgruppo='.prepare($r['idgruppo']);
|
||||
$rsserial = $dbo->fetchArray($qserial);
|
||||
|
||||
$mancanti = 0;
|
||||
$serials = [];
|
||||
|
||||
if (!empty($r['abilita_serial'])) {
|
||||
foreach ($rsserial as $seriali) {
|
||||
$seriali['serial'] = trim($seriali['serial']);
|
||||
if (!empty($seriali['serial'])) {
|
||||
$serials[] = $seriali['serial'];
|
||||
} else {
|
||||
++$mancanti;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Individuazione dei seriali
|
||||
if (!empty($r['idarticolo']) && !empty($r['abilita_serial'])) {
|
||||
$serials = array_column($dbo->fetchArray('SELECT serial FROM mg_prodotti WHERE serial IS NOT NULL AND id_riga_ddt='.prepare($r['id'])), 'serial');
|
||||
$mancanti = $r['qta'] - count($serials);
|
||||
|
||||
if ($mancanti > 0) {
|
||||
$extra = 'class="warning"';
|
||||
} else {
|
||||
$mancanti = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -60,20 +50,11 @@ if (!empty($rs)) {
|
|||
echo '
|
||||
<br><b><small class="text-danger">'.str_replace('_NUM_', $mancanti, tr('_NUM_ serial mancanti')).'</small></b>';
|
||||
}
|
||||
|
||||
if (!empty($serials)) {
|
||||
echo '
|
||||
<br>'.tr('SN').': '.implode(', ', $serials);
|
||||
}
|
||||
} else {
|
||||
if ($r['lotto'] != '') {
|
||||
echo '<br>Lotto: '.$r['lotto'];
|
||||
}
|
||||
if ($r['serial'] != '') {
|
||||
echo '<br>SN: '.$r['serial'];
|
||||
}
|
||||
if ($r['altro'] != '') {
|
||||
echo '<br>'.$r['altro'];
|
||||
}
|
||||
}
|
||||
} else {
|
||||
echo nl2br($r['descrizione']);
|
||||
|
@ -81,10 +62,20 @@ if (!empty($rs)) {
|
|||
|
||||
// Aggiunta riferimento a ordine
|
||||
if (!empty($r['idordine'])) {
|
||||
$rso = $dbo->fetchArray('SELECT numero, numero_esterno, data FROM or_ordini WHERE id='.prepare($r['idordine']));
|
||||
$rso = $dbo->fetchArray('SELECT numero, numero_esterno, data, dir FROM or_ordini JOIN or_tipiordine ON or_tipiordine.id = or_ordini.idtipoordine WHERE or_ordini.id='.prepare($r['idordine']));
|
||||
$numero = ($rso[0]['numero_esterno'] != '') ? $rso[0]['numero_esterno'] : $rso[0]['numero'];
|
||||
echo '<br>Rif. ordine n<sup>o</sup>'.$numero.' del '.Translator::dateToLocale($rso[0]['data']);
|
||||
|
||||
$ref = $rso[0]['dir'] == 'entrata' ? 'Ordini cliente' : 'Ordini fornitore';
|
||||
$ref_id = $r['idordine'];
|
||||
|
||||
$descrizione = str_replace(['_NUM_', '_DATE_'], [$numero, Translator::dateToLocale($rso[0]['data'])], tr('Rif. ordine _NUM_ del _DATE_'));
|
||||
}
|
||||
|
||||
if(!empty($descrizione)){
|
||||
echo '
|
||||
<br>'.Modules::link($ref, $ref_id, $descrizione.' <i class="fa fa-external-link"></i>', $descrizione);
|
||||
}
|
||||
|
||||
echo '
|
||||
</td>';
|
||||
|
||||
|
@ -159,7 +150,7 @@ if (!empty($rs)) {
|
|||
|
||||
if (!empty($r['idarticolo']) && $r['abilita_serial']) {
|
||||
echo "
|
||||
<a class='btn btn-primary btn-xs'data-toggle='tooltip' title='Aggiorna SN...' onclick=\"launch_modal( 'Aggiorna SN', '".$rootdir.'/modules/ddt/add_serial.php?id_module='.$id_module.'&id_record='.$id_record.'&idgruppo='.$r['idgruppo'].'&idarticolo='.$r['idarticolo']."', 1 );\"><i class='fa fa-barcode' aria-hidden='true'></i></a>";
|
||||
<a class='btn btn-primary btn-xs'data-toggle='tooltip' title='Aggiorna SN...' onclick=\"launch_modal( 'Aggiorna SN', '".$rootdir.'/modules/fatture/add_serial.php?id_module='.$id_module.'&id_record='.$id_record.'&idriga='.$r['id'].'&idarticolo='.$r['idarticolo']."', 1 );\"><i class='fa fa-barcode' aria-hidden='true'></i></a>";
|
||||
}
|
||||
|
||||
echo "
|
||||
|
|
|
@ -182,15 +182,24 @@ switch (post('op')) {
|
|||
|
||||
// eliminazione documento
|
||||
case 'delete':
|
||||
if ($dir == 'uscita') {
|
||||
$non_rimovibili = $dbo->fetchArray("SELECT COUNT(*) AS non_rimovibili FROM co_righe_documenti WHERE serial IN (SELECT serial FROM vw_serials WHERE dir = 'entrata') AND iddocumento=".prepare($id_record))[0]['non_rimovibili'];
|
||||
if ($non_rimovibili != 0) {
|
||||
// Se ci sono degli articoli collegati (ma non collegati a preventivi o interventi) li rimetto nel magazzino
|
||||
$query = 'SELECT id, idarticolo FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).' AND NOT idarticolo=0 AND idpreventivo=0 AND idintervento IS NULL';
|
||||
$rs = $dbo->fetchArray($query);
|
||||
|
||||
foreach ($rs as $value) {
|
||||
$non_rimovibili = seriali_non_rimuovibili('id_riga_documenti', $value['id'], $dir);
|
||||
if (!empty($non_rimovibili)) {
|
||||
$_SESSION['errors'][] = tr('Alcuni serial number sono già stati utilizzati!');
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
for ($i = 0; $i < sizeof($rs); ++$i) {
|
||||
rimuovi_articolo_dafattura($rs[$i]['idarticolo'], $id_record, $rs[$i]['id']);
|
||||
}
|
||||
|
||||
|
||||
// Se ci sono dei preventivi collegati li rimetto nello stato "In attesa di pagamento"
|
||||
$query = 'SELECT idpreventivo FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).' AND idpreventivo IS NOT NULL';
|
||||
$rs = $dbo->fetchArray($query);
|
||||
|
@ -207,14 +216,6 @@ switch (post('op')) {
|
|||
$dbo->query("UPDATE in_interventi SET idstatointervento=(SELECT idstatointervento FROM in_statiintervento WHERE descrizione='Completato') WHERE id=".prepare($rs[$i]['idintervento']));
|
||||
}
|
||||
|
||||
// Se ci sono degli articoli collegati (ma non collegati a preventivi o interventi) li rimetto nel magazzino
|
||||
$query = 'SELECT id, idarticolo FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).' AND NOT idarticolo=0 AND idpreventivo=0 AND idintervento IS NULL';
|
||||
$rs = $dbo->fetchArray($query);
|
||||
|
||||
for ($i = 0; $i < sizeof($rs); ++$i) {
|
||||
rimuovi_articolo_dafattura($rs[$i]['idarticolo'], $id_record, $rs[$i]['id']);
|
||||
}
|
||||
|
||||
// Se delle righe sono state create da un ordine, devo riportare la quantità evasa nella tabella degli ordini al valore di prima, riaggiungendo la quantità che sto togliendo
|
||||
$rs = $dbo->fetchArray('SELECT qta, descrizione, idarticolo, idordine, idiva FROM co_righe_documenti WHERE iddocumento='.prepare($iddocumento));
|
||||
foreach ($rs as $r) {
|
||||
|
@ -267,11 +268,11 @@ switch (post('op')) {
|
|||
// TODO: sistemare la duplicazione delle righe generiche e degli articoli, ingorando interventi, ddt, ordini, preventivi
|
||||
/*
|
||||
foreach ($righe as $riga) {
|
||||
$dbo->query('INSERT INTO co_righe_documenti(iddocumento, idordine, idddt, idintervento, idarticolo, idpreventivo, idcontratto, idtecnico, idagente, idautomezzo, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, idritenutaacconto, ritenutaacconto, idrivalsainps, rivalsainps, um, qta, lotto, serial, altro, idgruppo, `order`) VALUES('.prepare($id_record).', 0, 0, 0, '.prepare($riga['idarticolo']).', '.prepare($riga['idpreventivo']).', '.prepare($riga['idcontratto']).', '.prepare($riga['idtecnico']).', '.prepare($riga['idagente']).', '.prepare($riga['idautomezzo']).', '.prepare($riga['idiva']).', '.prepare($riga['desc_iva']).', '.prepare($riga['iva']).', '.prepare($riga['iva_indetraibile']).', '.prepare($riga['descrizione']).', '.prepare($riga['subtotale']).', '.prepare($riga['sconto']).', '.prepare($riga['idritenutaacconto']).', '.prepare($riga['ritenutaacconto']).', '.prepare($riga['idrivalsainps']).', '.prepare($riga['rivalsainps']).', '.prepare($riga['um']).', '.prepare($riga['qta']).', '.prepare($riga['lotto']).', '.prepare($riga['serial']).', '.prepare($riga['altro']).', (SELECT IFNULL(MAX(`idgruppo`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'), (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))');
|
||||
$dbo->query('INSERT INTO co_righe_documenti(iddocumento, idordine, idddt, idintervento, idarticolo, idpreventivo, idcontratto, idtecnico, idagente, idautomezzo, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, idritenutaacconto, ritenutaacconto, idrivalsainps, rivalsainps, um, qta, `order`) VALUES('.prepare($id_record).', 0, 0, 0, '.prepare($riga['idarticolo']).', '.prepare($riga['idpreventivo']).', '.prepare($riga['idcontratto']).', '.prepare($riga['idtecnico']).', '.prepare($riga['idagente']).', '.prepare($riga['idautomezzo']).', '.prepare($riga['idiva']).', '.prepare($riga['desc_iva']).', '.prepare($riga['iva']).', '.prepare($riga['iva_indetraibile']).', '.prepare($riga['descrizione']).', '.prepare($riga['subtotale']).', '.prepare($riga['sconto']).', '.prepare($riga['idritenutaacconto']).', '.prepare($riga['ritenutaacconto']).', '.prepare($riga['idrivalsainps']).', '.prepare($riga['rivalsainps']).', '.prepare($riga['um']).', '.prepare($riga['qta']).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))');
|
||||
|
||||
// Scarico/carico nuovamente l'articolo da magazzino
|
||||
if (!empty($riga['idarticolo'])) {
|
||||
add_articolo_infattura($id_record, $riga['idarticolo'], $riga['descrizione'], $riga['idiva'], $riga['qta'], $riga['subtotale'], 0, 0, 0);
|
||||
add_articolo_infattura($id_record, $riga['idarticolo'], $riga['descrizione'], $riga['idiva'], $riga['qta'], $riga['subtotale']);
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
@ -326,7 +327,10 @@ switch (post('op')) {
|
|||
// Collego in fattura eventuali articoli collegati all'intervento
|
||||
$rs2 = $dbo->fetchArray('SELECT mg_articoli_interventi.*, idarticolo FROM mg_articoli_interventi INNER JOIN mg_articoli ON mg_articoli_interventi.idarticolo=mg_articoli.id WHERE idintervento='.prepare($idintervento).' AND ( idintervento NOT IN(SELECT idintervento FROM co_righe_preventivi WHERE idpreventivo IN(SELECT idpreventivo FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).')) AND idintervento NOT IN(SELECT idintervento FROM co_righe_contratti WHERE idcontratto IN(SELECT idcontratto FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).')) )');
|
||||
for ($i = 0; $i < sizeof($rs2); ++$i) {
|
||||
add_articolo_infattura($id_record, $rs2[$i]['idarticolo'], $rs2[$i]['descrizione'], $idiva, $rs2[$i]['qta'], $rs2[$i]['prezzo_vendita'] * $rs2[$i]['qta'], $rs2[$i]['sconto'], $rs2[$i]['sconto_unitario'], $rs2[$i]['tipo_sconto'], $idintervento, '', $rs2[$i]['serial']);
|
||||
$riga = add_articolo_infattura($id_record, $rs2[$i]['idarticolo'], $rs2[$i]['descrizione'], $idiva, $rs2[$i]['qta'], $rs2[$i]['prezzo_vendita'] * $rs2[$i]['qta'], $rs2[$i]['sconto'], $rs2[$i]['sconto_unitario'], $rs2[$i]['tipo_sconto'], $idintervento);
|
||||
|
||||
// Lettura lotto, serial, altro dalla riga dell'ordine
|
||||
$rs = $dbo->query('INSERT INTO mg_prodotti (id_riga_documento, id_articolo, dir, serial, lotto, altro) SELECT '.prepare($riga).', '.prepare($idarticolo).', '.prepare($dir).', serial, lotto, altro FROM mg_prodotti AS t WHERE id_riga_intervento='.prepare($rs2[$i]['id']));
|
||||
}
|
||||
|
||||
// Subtot
|
||||
|
@ -358,7 +362,7 @@ switch (post('op')) {
|
|||
$rs = $dbo->fetchArray($query);
|
||||
$ritenutaacconto = ($subtot - $sconto + $rivalsainps) / 100 * $rs[0]['percentuale'];
|
||||
|
||||
$query = 'INSERT INTO co_righe_documenti(iddocumento, idintervento, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, idgruppo, `order`) VALUES('.prepare($id_record).', NULL, '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare('Trasferta intervento '.$codice.' del '.Translator::dateToLocale($data)).', '.prepare($subtot).", 'km' ".prepare($km).', '.prepare(get_var('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', '.prepare(get_var("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', (SELECT IFNULL(MAX(`idgruppo`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'), (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))';
|
||||
$query = 'INSERT INTO co_righe_documenti(iddocumento, idintervento, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, `order`) VALUES('.prepare($id_record).', NULL, '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare('Trasferta intervento '.$codice.' del '.Translator::dateToLocale($data)).', '.prepare($subtot).", 'km' ".prepare($km).', '.prepare(get_var('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', '.prepare(get_var("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))';
|
||||
$dbo->query($query);
|
||||
}
|
||||
|
||||
|
@ -386,7 +390,7 @@ switch (post('op')) {
|
|||
$rs = $dbo->fetchArray($query);
|
||||
$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, idgruppo, `order`) VALUES('.prepare($id_record).', NULL, '.prepare($idconto).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($rsr[$i]['descrizione']).', '.prepare($subtot).", 0, 0, 'UNT', ".prepare($rsr[$i]['um']).', '.prepare($rsr[$i]['qta']).', '.prepare(get_var('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', '.prepare(get_var("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', (SELECT IFNULL(MAX(`idgruppo`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'), (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))';
|
||||
$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, `order`) VALUES('.prepare($id_record).', NULL, '.prepare($idconto).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($rsr[$i]['descrizione']).', '.prepare($subtot).", 0, 0, 'UNT', ".prepare($rsr[$i]['um']).', '.prepare($rsr[$i]['qta']).', '.prepare(get_var('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', '.prepare(get_var("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))';
|
||||
$dbo->query($query);
|
||||
}
|
||||
}
|
||||
|
@ -415,7 +419,7 @@ switch (post('op')) {
|
|||
$ritenutaacconto = ($subtot - $sconto + $rivalsainps) / 100 * $rs[0]['percentuale'];
|
||||
|
||||
// Aggiunta riga intervento sul documento
|
||||
$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, idgruppo, `order`) VALUES('.prepare($id_record).', '.prepare($idintervento).', '.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($qta).', '.prepare(get_var('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', '.prepare(get_var("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', (SELECT IFNULL(MAX(`idgruppo`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'), (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))';
|
||||
$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, `order`) VALUES('.prepare($id_record).', '.prepare($idintervento).', '.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($qta).', '.prepare(get_var('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', '.prepare(get_var("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))';
|
||||
if ($dbo->query($query)) {
|
||||
// Ricalcolo inps, ritenuta e bollo
|
||||
if ($dir == 'entrata') {
|
||||
|
@ -496,7 +500,6 @@ switch (post('op')) {
|
|||
'sconto' => $riga['sconto'],
|
||||
'sconto_unitario' => $riga['sconto_unitario'],
|
||||
'#order' => '(SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).')',
|
||||
'#idgruppo' => '(SELECT IFNULL(MAX(`idgruppo`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).')',
|
||||
'idritenutaacconto' => get_var("Percentuale ritenuta d'acconto"),
|
||||
'ritenutaacconto' => $ritenutaacconto,
|
||||
'idrivalsainps' => get_var('Percentuale rivalsa INPS'),
|
||||
|
@ -509,7 +512,7 @@ switch (post('op')) {
|
|||
}
|
||||
} else {
|
||||
// Aggiunta riga preventivo sul documento
|
||||
$query = 'INSERT INTO co_righe_documenti(iddocumento, idpreventivo, idconto, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idritenutaacconto, ritenutaacconto, idrivalsainps, rivalsainps, `order`, idgruppo) VALUES('.prepare($id_record).', '.prepare($idpreventivo).', '.prepare($idconto).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($prezzo).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).", '-', 1, ".prepare(get_var("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', '.prepare(get_var('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'), (SELECT IFNULL(MAX(`idgruppo`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))';
|
||||
$query = 'INSERT INTO co_righe_documenti(iddocumento, idpreventivo, idconto, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idritenutaacconto, ritenutaacconto, idrivalsainps, rivalsainps, `order`) VALUES('.prepare($id_record).', '.prepare($idpreventivo).', '.prepare($idconto).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($prezzo).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).", '-', 1, ".prepare(get_var("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', '.prepare(get_var('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))';
|
||||
$dbo->query($query);
|
||||
|
||||
// Aggiorno lo stato degli interventi collegati al preventivo se ce ne sono
|
||||
|
@ -580,7 +583,7 @@ switch (post('op')) {
|
|||
$ritenutaacconto = ($prezzo - $sconto + $rivalsainps) / 100 * $rs[0]['percentuale'];
|
||||
|
||||
// Aggiunta riga contratto sul documento
|
||||
$query = 'INSERT INTO co_righe_documenti(iddocumento, idcontratto, idconto, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, idgruppo, `order`) VALUES('.prepare($id_record).', '.prepare($idcontratto).', '.prepare($idconto).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($prezzo).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).", '-', 1, ".prepare(get_var('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', '.prepare(get_var("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', (SELECT IFNULL(MAX(`idgruppo`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'), (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))';
|
||||
$query = 'INSERT INTO co_righe_documenti(iddocumento, idcontratto, idconto, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, `order`) VALUES('.prepare($id_record).', '.prepare($idcontratto).', '.prepare($idconto).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($prezzo).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).", '-', 1, ".prepare(get_var('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', '.prepare(get_var("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))';
|
||||
if ($dbo->query($query)) {
|
||||
$_SESSION['infos'][] = str_replace('_NUM_', $numero, tr('Contratto _NUM_ aggiunto!'));
|
||||
|
||||
|
@ -619,11 +622,7 @@ switch (post('op')) {
|
|||
$sconto = ($tipo_sconto == 'PRC') ? ($prezzo * $sconto_unitario) / 100 : $sconto_unitario;
|
||||
$sconto = $sconto * $qta;
|
||||
|
||||
// Calcolo idgruppo per questo inserimento
|
||||
$ridgruppo = $dbo->fetchArray('SELECT IFNULL(MAX(idgruppo) + 1, 0) AS idgruppo FROM co_righe_documenti WHERE iddocumento = '.prepare($id_record));
|
||||
$idgruppo = $ridgruppo[0]['idgruppo'];
|
||||
|
||||
add_articolo_infattura($id_record, $idarticolo, $descrizione, $idiva, $qta, $prezzo * $qta, $sconto, $sconto_unitario, $tipo_sconto, '0', $lotto, $serial, $altro, $idgruppo, $idconto, $idum);
|
||||
add_articolo_infattura($id_record, $idarticolo, $descrizione, $idiva, $qta, $prezzo * $qta, $sconto, $sconto_unitario, $tipo_sconto, '0', $idconto, $idum);
|
||||
|
||||
$_SESSION['infos'][] = tr('Articolo aggiunto!');
|
||||
}
|
||||
|
@ -664,12 +663,8 @@ switch (post('op')) {
|
|||
$rs = $dbo->fetchArray($query);
|
||||
$ritenutaacconto = (($prezzo * $qta) + $rivalsainps) / 100 * $rs[0]['percentuale'];
|
||||
|
||||
// Calcolo idgruppo per questo inserimento
|
||||
$ridgruppo = $dbo->fetchArray('SELECT IFNULL(MAX(idgruppo) + 1, 0) AS idgruppo FROM co_righe_documenti WHERE iddocumento = '.prepare($id_record));
|
||||
$idgruppo = $ridgruppo[0]['idgruppo'];
|
||||
|
||||
// Aggiunta riga generica sul documento
|
||||
$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, idgruppo, `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).', (SELECT IFNULL(MAX(`idgruppo`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'), (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))';
|
||||
$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, `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).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))';
|
||||
|
||||
if ($dbo->query($query)) {
|
||||
$_SESSION['infos'][] = tr('Riga aggiunta!');
|
||||
|
@ -705,13 +700,21 @@ switch (post('op')) {
|
|||
$subtot = $prezzo * $qta;
|
||||
|
||||
// Lettura idarticolo dalla riga documento
|
||||
$rs = $dbo->fetchArray('SELECT idgruppo, iddocumento, idarticolo, qta, abilita_serial FROM co_righe_documenti WHERE id='.prepare($idriga));
|
||||
$rs = $dbo->fetchArray('SELECT iddocumento, idarticolo, qta, abilita_serial FROM co_righe_documenti WHERE id='.prepare($idriga));
|
||||
$idarticolo = $rs[0]['idarticolo'];
|
||||
$old_qta = $rs[0]['qta'];
|
||||
$idgruppo = $rs[0]['idgruppo'];
|
||||
$iddocumento = $rs[0]['iddocumento'];
|
||||
$abilita_serial = $rs[0]['abilita_serial'];
|
||||
|
||||
// Controllo per gestire i serial
|
||||
if (!empty($idarticolo)) {
|
||||
if (!controlla_seriali('id_riga_documento', $idriga, $old_qta, $qta, $dir)) {
|
||||
$_SESSION['errors'][] = tr('Alcuni serial number sono già stati utilizzati!');
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Calcolo iva
|
||||
$query = 'SELECT * FROM co_iva WHERE id='.prepare($idiva);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
|
@ -730,42 +733,11 @@ switch (post('op')) {
|
|||
$ritenutaacconto = (($prezzo * $qta) - $sconto + $rivalsainps) / 100 * $rs[0]['percentuale'];
|
||||
|
||||
// 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).' WHERE idgruppo='.prepare($idgruppo).' 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('idritenutaacconto')).', ritenutaacconto='.prepare($ritenutaacconto).', idrivalsainps='.prepare(post('idrivalsainps')).', rivalsainps='.prepare($rivalsainps).', qta='.prepare($qta).' WHERE id='.prepare($idriga).' AND iddocumento='.prepare($iddocumento);
|
||||
if ($dbo->query($query)) {
|
||||
// Modifica della quantità
|
||||
$dbo->query('UPDATE co_righe_documenti SET qta='.prepare($qta).' WHERE idgruppo='.prepare($idgruppo));
|
||||
|
||||
// Modifica per gestire i serial
|
||||
if (!empty($idarticolo)) {
|
||||
$new_qta = $qta - $old_qta;
|
||||
$new_qta = ($old_qta < $qta) ? $new_qta : -$new_qta;
|
||||
|
||||
if (!empty($abilita_serial)) {
|
||||
if ($old_qta < $qta) {
|
||||
for ($i = 0; $i < $new_qta; ++$i) {
|
||||
$dbo->query('INSERT INTO co_righe_documenti(iddocumento, idarticolo, idconto, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, idgruppo, `order`) SELECT iddocumento, idarticolo, idconto, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, idgruppo, `order` FROM co_righe_documenti WHERE id='.prepare($idriga));
|
||||
}
|
||||
} else {
|
||||
if ($dir == 'uscita') {
|
||||
if ($new_qta > $dbo->fetchArray("SELECT COUNT(*) AS rimovibili FROM co_righe_documenti WHERE serial NOT IN (SELECT serial FROM vw_serials WHERE dir = 'entrata') AND idgruppo=".prepare($idgruppo).' AND iddocumento='.prepare($iddocumento))[0]['rimovibili']) {
|
||||
$_SESSION['errors'][] = tr('Alcuni serial number sono già stati utilizzati!');
|
||||
|
||||
return;
|
||||
} else {
|
||||
$deletes = $dbo->fetchArray('SELECT id FROM co_righe_documenti AS t WHERE idgruppo = '.prepare($idgruppo).' AND iddocumento='.prepare($iddocumento)." AND serial NOT IN (SELECT serial FROM vw_serials WHERE dir = 'entrata') ORDER BY serial ASC LIMIT ".$new_qta);
|
||||
}
|
||||
} else {
|
||||
$deletes = $dbo->fetchArray('SELECT id FROM co_righe_documenti AS t WHERE idgruppo = '.prepare($idgruppo).' AND iddocumento='.prepare($iddocumento).' ORDER BY serial ASC LIMIT '.$new_qta);
|
||||
}
|
||||
|
||||
foreach ((array) $deletes as $delete) {
|
||||
$dbo->query('DELETE FROM co_righe_documenti WHERE id = '.prepare($delete['id']));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$new_qta = ($old_qta < $qta) ? $new_qta : -$new_qta;
|
||||
|
||||
$new_qta = ($dir == 'entrata') ? -$new_qta : $new_qta;
|
||||
add_movimento_magazzino($idarticolo, $new_qta, ['iddocumento' => $id_record]);
|
||||
}
|
||||
|
@ -809,7 +781,7 @@ switch (post('op')) {
|
|||
for ($i = 0; $i < sizeof($post['qta_da_evadere']); ++$i) {
|
||||
// Processo solo le righe da evadere
|
||||
if ($post['evadere'][$i] == 'on') {
|
||||
$idrigaddt = post('idrigaddt')[$i];
|
||||
$idrigaddt = post('idriga')[$i];
|
||||
$idarticolo = post('idarticolo')[$i];
|
||||
$descrizione = post('descrizione')[$i];
|
||||
$qta = $post['qta_da_evadere'][$i];
|
||||
|
@ -819,7 +791,7 @@ switch (post('op')) {
|
|||
$sconto = $sconto * $qta;
|
||||
$idiva = post('idiva')[$i];
|
||||
|
||||
$qprc = 'SELECT tipo_sconto, sconto_unitario FROM dt_righe_ddt WHERE id='.$idrigaddt;
|
||||
$qprc = 'SELECT tipo_sconto, sconto_unitario FROM dt_righe_ddt WHERE id='.prepare($idrigaddt);
|
||||
$rsprc = $dbo->fetchArray($qprc);
|
||||
|
||||
$sconto_unitario = $rsprc[0]['sconto_unitario'];
|
||||
|
@ -837,31 +809,19 @@ switch (post('op')) {
|
|||
$rs = $dbo->fetchArray($q);
|
||||
$iva_indetraibile = $iva / 100 * $rs[0]['indetraibile'];
|
||||
|
||||
// Lettura lotto, serial, altro dalla riga dell'ordine
|
||||
$q = 'SELECT lotto, serial, altro, descrizione FROM dt_righe_ddt WHERE id='.prepare($idrigaddt);
|
||||
$rs = $dbo->fetchArray($q);
|
||||
|
||||
// Se sto aggiungendo un articolo uso la funzione per inserirlo e incrementare la giacenza
|
||||
if (!empty($idarticolo)) {
|
||||
$idiva_acquisto = $idiva;
|
||||
$prezzo_acquisto = $subtot;
|
||||
add_articolo_infattura($id_record, $idarticolo, $rs[0]['descrizione'], $idiva_acquisto, $qta, $prezzo_acquisto, $sconto, $sconto_unitario, $tipo_sconto, $rs[0]['lotto'], $rs[0]['serial'], $rs[0]['altro'], $rs[0]['idgruppo']);
|
||||
$riga = add_articolo_infattura($id_record, $idarticolo, $descrizione, $idiva_acquisto, $qta, $prezzo_acquisto, $sconto, $sconto_unitario, $tipo_sconto);
|
||||
|
||||
// Aggiornamento seriali dalla riga dell'ordine
|
||||
$dbo->sync('mg_prodotti', ['id_riga_documento' => $idriga, 'dir' => $dir, 'id_articolo' => $idarticolo], ['serial' => (array) $post['serial'][$i]]);
|
||||
}
|
||||
|
||||
// Inserimento riga normale
|
||||
elseif ($qta != 0) {
|
||||
// Se la riga che sto inserendo è simile ad altre già inserite, aggiorno solo la quantità...
|
||||
$query = 'SELECT id FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).' AND descrizione='.prepare($descrizione).' AND (subtotale/qta)='.($subtot / $qta).' AND um='.prepare($um).' AND sconto='.prepare($sconto / $qta).' AND idiva='.prepare($idiva);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
|
||||
if (sizeof($rs) > 0) {
|
||||
$query = 'UPDATE co_righe_documenti SET qta=qta+'.$qta.' WHERE id='.prepare($rs[0]['id']);
|
||||
}
|
||||
|
||||
// ...altrimenti aggiungo una nuova riga
|
||||
else {
|
||||
$query = 'INSERT INTO co_righe_documenti(iddocumento, idarticolo, descrizione, idddt, idiva, desc_iva, iva, iva_indetraibile, subtotale, sconto, um, qta, idgruppo, `order`) VALUES('.prepare($id_record).', '.prepare($idarticolo).', '.prepare($descrizione).', '.prepare($idddt).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($subtot).', '.prepare($sconto).', '.prepare($um).', '.prepare($qta).', (SELECT IFNULL(MAX(`idgruppo`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'), (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))';
|
||||
}
|
||||
$query = 'INSERT INTO co_righe_documenti(iddocumento, idarticolo, descrizione, idddt, idiva, desc_iva, iva, iva_indetraibile, subtotale, sconto, um, qta, `order`) VALUES('.prepare($id_record).', '.prepare($idarticolo).', '.prepare($descrizione).', '.prepare($idddt).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($subtot).', '.prepare($sconto).', '.prepare($um).', '.prepare($qta).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))';
|
||||
|
||||
$dbo->query($query);
|
||||
}
|
||||
|
@ -899,7 +859,7 @@ switch (post('op')) {
|
|||
for ($i = 0; $i < sizeof($post['qta_da_evadere']); ++$i) {
|
||||
// Processo solo le righe da evadere
|
||||
if ($post['evadere'][$i] == 'on') {
|
||||
$idrigaordine = post('idrigaordine')[$i];
|
||||
$idrigaordine = post('idriga')[$i];
|
||||
$idarticolo = post('idarticolo')[$i];
|
||||
$descrizione = post('descrizione')[$i];
|
||||
$qta = post('qta_da_evadere')[$i];
|
||||
|
@ -926,15 +886,14 @@ switch (post('op')) {
|
|||
$rs = $dbo->fetchArray($query);
|
||||
$desc_iva = $rs[0]['descrizione'];
|
||||
|
||||
// Lettura lotto, serial, altro dalla riga dell'ordine
|
||||
$q = 'SELECT lotto, serial, altro, descrizione FROM or_righe_ordini WHERE id='.prepare($idrigaordine);
|
||||
$rs = $dbo->fetchArray($q);
|
||||
|
||||
// Se sto aggiungendo un articolo uso la funzione per inserirlo e incrementare la giacenza
|
||||
if (!empty($idarticolo)) {
|
||||
$idiva_acquisto = $idiva;
|
||||
$prezzo_acquisto = $subtot;
|
||||
$idriga = add_articolo_infattura($id_record, $idarticolo, $rs[0]['descrizione'], $idiva_acquisto, $qta, $prezzo_acquisto, $sconto, $sconto_unitario, $tipo_sconto, '0', $rs[0]['lotto'], $rs[0]['serial'], $rs[0]['altro']);
|
||||
$idriga = add_articolo_infattura($id_record, $idarticolo, $descrizione, $idiva_acquisto, $qta, $prezzo_acquisto, $sconto, $sconto_unitario, $tipo_sconto);
|
||||
|
||||
// Aggiornamento seriali dalla riga dell'ordine
|
||||
$dbo->sync('mg_prodotti', ['id_riga_documento' => $idriga, 'dir' => $dir, 'id_articolo' => $idarticolo], ['serial' => (array) $post['serial'][$i]]);
|
||||
|
||||
// Imposto la provenienza dell'ordine
|
||||
$dbo->query('UPDATE co_righe_documenti SET idordine='.prepare($idordine).' WHERE id='.prepare($idriga));
|
||||
|
@ -942,7 +901,7 @@ switch (post('op')) {
|
|||
|
||||
// Inserimento riga normale
|
||||
elseif ($qta != 0) {
|
||||
$dbo->query('INSERT INTO co_righe_documenti(iddocumento, idarticolo, idordine, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, um, qta, idgruppo, `order`) VALUES('.prepare($id_record).', '.prepare($idarticolo).', '.prepare($idordine).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($subtot).', '.prepare($sconto).', '.prepare($um).', '.prepare($qta).', (SELECT IFNULL(MAX(`idgruppo`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'), (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))');
|
||||
$dbo->query('INSERT INTO co_righe_documenti(iddocumento, idarticolo, idordine, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, um, qta, `order`) VALUES('.prepare($id_record).', '.prepare($idarticolo).', '.prepare($idordine).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($subtot).', '.prepare($sconto).', '.prepare($um).', '.prepare($qta).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))');
|
||||
$idriga = $dbo->lastInsertedID();
|
||||
}
|
||||
|
||||
|
@ -958,7 +917,7 @@ switch (post('op')) {
|
|||
|
||||
// aggiungi righe da ddt
|
||||
case 'add_ddt':
|
||||
$idddt = $post['idddt'];
|
||||
$idddt = $post['iddocumento'];
|
||||
|
||||
$rs = $dbo->fetchArray('SELECT * FROM co_documenti WHERE id='.prepare($id_record));
|
||||
$idconto = $rs[0]['idconto'];
|
||||
|
@ -967,7 +926,7 @@ switch (post('op')) {
|
|||
for ($i = 0; $i < sizeof($post['qta_da_evadere']); ++$i) {
|
||||
// Processo solo le righe da evadere
|
||||
if ($post['evadere'][$i] == 'on') {
|
||||
$idrigaddt = post('idrigaddt')[$i];
|
||||
$idrigaddt = post('idriga')[$i];
|
||||
$idarticolo = post('idarticolo')[$i];
|
||||
$descrizione = post('descrizione')[$i];
|
||||
|
||||
|
@ -997,20 +956,19 @@ switch (post('op')) {
|
|||
$rs = $dbo->fetchArray($query);
|
||||
$desc_iva = $rs[0]['descrizione'];
|
||||
|
||||
// Lettura lotto, serial, altro dalla riga dell'ordine
|
||||
$q = 'SELECT lotto, serial, altro, descrizione FROM dt_righe_ddt WHERE id='.prepare($idrigaddt);
|
||||
$rs = $dbo->fetchArray($q);
|
||||
|
||||
// Se sto aggiungendo un articolo uso la funzione per inserirlo e incrementare la giacenza
|
||||
if (!empty($idarticolo)) {
|
||||
$idiva_acquisto = $idiva;
|
||||
$prezzo_acquisto = $subtot;
|
||||
add_articolo_infattura($id_record, $idarticolo, $rs[0]['descrizione'], $idiva_acquisto, $qta, $prezzo_acquisto, 0, 0, 'UNT', 0, $rs[0]['lotto'], $rs[0]['serial'], $rs[0]['altro'], 0, $idconto);
|
||||
$riga = add_articolo_infattura($id_record, $idarticolo, $descrizione, $idiva_acquisto, $qta, $prezzo_acquisto, 0, 0, 'UNT', 0, $idconto);
|
||||
|
||||
// Lettura lotto, serial, altro dalla riga dell'ddt
|
||||
$rs = $dbo->query('INSERT INTO mg_prodotti (id_riga_documento, id_articolo, dir, serial, lotto, altro) SELECT '.prepare($riga).', '.prepare($idarticolo).', '.prepare($dir).', serial, lotto, altro FROM mg_prodotti AS t WHERE id_riga_ddt='.prepare($idrigaddt));
|
||||
}
|
||||
|
||||
// Inserimento riga normale
|
||||
elseif ($qta != 0) {
|
||||
$query = 'INSERT INTO co_righe_documenti(iddocumento, idarticolo, descrizione, idconto, idddt, idiva, desc_iva, iva, iva_indetraibile, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idgruppo, `order`) VALUES('.prepare($id_record).', '.prepare($idarticolo).', '.prepare($descrizione).', '.prepare($idconto).', '.prepare($idddt).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($subtot).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', '.prepare($um).', '.prepare($qta).', (SELECT IFNULL(MAX(`idgruppo`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'), (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))';
|
||||
$query = 'INSERT INTO co_righe_documenti(iddocumento, idarticolo, descrizione, idconto, idddt, idiva, desc_iva, iva, iva_indetraibile, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, `order`) VALUES('.prepare($id_record).', '.prepare($idarticolo).', '.prepare($descrizione).', '.prepare($idconto).', '.prepare($idddt).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($subtot).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', '.prepare($um).', '.prepare($qta).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))';
|
||||
$dbo->query($query);
|
||||
}
|
||||
|
||||
|
@ -1031,13 +989,12 @@ switch (post('op')) {
|
|||
$idriga = post('idriga');
|
||||
|
||||
// Lettura preventivi collegati
|
||||
$query = 'SELECT idgruppo, iddocumento, idintervento FROM co_righe_documenti WHERE id='.prepare($idriga);
|
||||
$query = 'SELECT iddocumento, idintervento FROM co_righe_documenti WHERE id='.prepare($idriga);
|
||||
$rsp = $dbo->fetchArray($query);
|
||||
$id_record = $rsp[0]['iddocumento'];
|
||||
$idgruppo = $rsp[0]['idgruppo'];
|
||||
$idintervento = $rsp[0]['idintervento'];
|
||||
|
||||
$query = 'DELETE FROM `co_righe_documenti` WHERE iddocumento='.prepare($id_record).' AND idgruppo='.prepare($idgruppo);
|
||||
$query = 'DELETE FROM `co_righe_documenti` WHERE iddocumento='.prepare($id_record).' AND id='.prepare($idriga);
|
||||
|
||||
$dbo->query($query);
|
||||
|
||||
|
@ -1073,9 +1030,7 @@ switch (post('op')) {
|
|||
$idriga = post('idriga');
|
||||
$idarticolo = post('idarticolo');
|
||||
|
||||
$res = rimuovi_articolo_dafattura($idarticolo, $id_record, $idriga);
|
||||
|
||||
if (!$res) {
|
||||
if (!rimuovi_articolo_dafattura($idarticolo, $id_record, $idriga)) {
|
||||
$_SESSION['errors'][] = tr('Alcuni serial number sono già stati utilizzati!');
|
||||
|
||||
return;
|
||||
|
@ -1100,13 +1055,12 @@ switch (post('op')) {
|
|||
$idriga = post('idriga');
|
||||
|
||||
// Lettura preventivi collegati
|
||||
$query = 'SELECT idgruppo, iddocumento, idpreventivo FROM co_righe_documenti WHERE id='.prepare($idriga);
|
||||
$query = 'SELECT iddocumento, idpreventivo FROM co_righe_documenti WHERE id='.prepare($idriga);
|
||||
$rsp = $dbo->fetchArray($query);
|
||||
$id_record = $rsp[0]['iddocumento'];
|
||||
$idgruppo = $rsp[0]['idgruppo'];
|
||||
$idpreventivo = $rsp[0]['idpreventivo'];
|
||||
|
||||
$query = 'DELETE FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).' AND idgruppo='.prepare($idgruppo);
|
||||
$query = 'DELETE FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).' AND id='.prepare($idriga);
|
||||
|
||||
if ($dbo->query($query)) {
|
||||
// Se ci sono dei preventivi collegati li rimetto nello stato "In attesa di pagamento"
|
||||
|
@ -1230,16 +1184,18 @@ switch (post('op')) {
|
|||
break;
|
||||
|
||||
case 'add_serial':
|
||||
$idgruppo = $post['idgruppo'];
|
||||
$serial = $post['serial'];
|
||||
$idriga = $post['idriga'];
|
||||
$idarticolo = $post['idarticolo'];
|
||||
|
||||
$q = 'SELECT * FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).' AND idgruppo='.prepare($idgruppo).' ORDER BY id';
|
||||
$rs = $dbo->fetchArray($q);
|
||||
|
||||
foreach ($rs as $i => $r) {
|
||||
$dbo->query('UPDATE co_righe_documenti SET serial='.prepare($serial[$i]).' WHERE id='.prepare($r['id']));
|
||||
$serials = (array) $post['serial'];
|
||||
foreach ($serials as $key => $value) {
|
||||
if (empty($value)) {
|
||||
unset($serials[$key]);
|
||||
}
|
||||
}
|
||||
|
||||
$dbo->sync('mg_prodotti', ['id_riga_documento' => $idriga, 'dir' => $dir, 'id_articolo' => $idarticolo], ['serial' => $serials]);
|
||||
|
||||
break;
|
||||
|
||||
case 'update_position':
|
||||
|
|
|
@ -37,6 +37,6 @@ echo '
|
|||
$('#id_ddt').change( function(){
|
||||
$('#righeddt').html('<i>Caricamento in corso...</i>');
|
||||
|
||||
$('#righeddt').load(globals.rootdir + '/modules/fatture/add_ddt_righe.php?id_module=' + globals.id_module + '&id_record=' + globals.id_record + '&idddt=' + $(this).find('option:selected').val());
|
||||
$('#righeddt').load(globals.rootdir + '/modules/fatture/crea_documento.php?id_module=' + <?php echo Modules::getModule('Ddt di vendita')['id'] ?> + '&id_record=' + $(this).find('option:selected').val() + '&documento=fattura&op=add_ddt&iddocumento=' + globals.id_record);
|
||||
});
|
||||
</script>
|
||||
|
|
|
@ -1,216 +0,0 @@
|
|||
<?php
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
$module = Modules::getModule($id_module);
|
||||
|
||||
if ($module['name'] == 'Fatture di vendita') {
|
||||
$dir = 'entrata';
|
||||
} else {
|
||||
$dir = 'uscita';
|
||||
}
|
||||
|
||||
$idddt = get('idddt');
|
||||
|
||||
// Info documento
|
||||
$q = 'SELECT * FROM dt_ddt WHERE id='.prepare($idddt);
|
||||
$rs = $dbo->fetchArray($q);
|
||||
|
||||
$numero = $rs[0]['numero'];
|
||||
$idanagrafica = $rs[0]['idanagrafica'];
|
||||
$idpagamento = $rs[0]['idpagamento'];
|
||||
$idconto = $rs[0]['idconto'];
|
||||
|
||||
/*
|
||||
Form di inserimento riga documento
|
||||
*/
|
||||
echo '
|
||||
<form action="'.$rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'" method="post">
|
||||
<input type="hidden" name="op" value="add_ddt">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
<input type="hidden" name="dir" value="'.$dir.'">
|
||||
<input type="hidden" name="idddt" value="'.$idddt.'">';
|
||||
|
||||
// Selezione righe ddt da portare nella fattura
|
||||
$query = "SELECT *, IFNULL((SELECT codice FROM mg_articoli WHERE id=idarticolo),'') AS codice FROM dt_ddt INNER JOIN dt_righe_ddt ON dt_ddt.id=dt_righe_ddt.idddt WHERE dt_ddt.id=".prepare($idddt).' AND (qta - qta_evasa) > 0';
|
||||
$rs = $dbo->fetchArray($query);
|
||||
|
||||
if (!empty($rs)) {
|
||||
echo '
|
||||
<p>'.tr('Seleziona le righe che vuoi inserire nella fattura e la quantità').':</p>
|
||||
|
||||
<table class="table table-striped table-hover table-condensed">
|
||||
<tr>
|
||||
<th>'.tr('Descrizione').'</th>
|
||||
<th width="10%">'.tr('Q.tà').'</th>
|
||||
<th width="20%" class="text-center">'.tr('Q.tà da evadere').'</th>
|
||||
<th width="25%" class="text-right">'.tr('Subtot.').'</th>
|
||||
<th width="15%" class="text-right">'.tr('Da evadere').'</th>
|
||||
</tr>';
|
||||
|
||||
$totale = 0.00;
|
||||
|
||||
foreach ($rs as $i => $r) {
|
||||
// Descrizione
|
||||
echo '
|
||||
<tr>
|
||||
<td class="text-left">
|
||||
<input type="hidden" name="idrigaddt[]" value="'.$r['id'].'"/>
|
||||
<input type="hidden" id="idarticolo_'.$i.'" name="idarticolo[]" value="'.$r['idarticolo'].'"/>
|
||||
<input type="hidden" id="descrizione_'.$i.'" name="descrizione[]" value="'.$r['descrizione'].'"/>';
|
||||
|
||||
if ($r['codice'] != '') {
|
||||
echo '
|
||||
<b>'.$r['codice'].'</b><br/>';
|
||||
}
|
||||
|
||||
echo '
|
||||
'.nl2br($r['descrizione']).'
|
||||
<small>';
|
||||
|
||||
if ($r['lotto'] != '') {
|
||||
echo '
|
||||
<br/>Lotto: '.$r['lotto'];
|
||||
}
|
||||
if ($r['serial'] != '') {
|
||||
echo '
|
||||
<br/>SN: '.$r['serial'];
|
||||
}
|
||||
if ($r['altro'] != '') {
|
||||
echo '
|
||||
<br/>'.$r['altro'];
|
||||
}
|
||||
|
||||
echo '
|
||||
</small>
|
||||
</td>';
|
||||
|
||||
// Q.tà rimanente
|
||||
echo '
|
||||
<td class="text-center" id="rimanente_'.$i.'">
|
||||
<input type="hidden" id="qtamax_'.$i.'" value="'.($r['qta'] - $r['qta_evasa']).'"/>
|
||||
<input type="hidden" id="um_'.$i.'" name="um[]" value="'.$r['um'].'"/>
|
||||
'.Translator::numberToLocale(($r['qta'] - $r['qta_evasa'])).'
|
||||
</td>';
|
||||
|
||||
// Q.tà da evadere
|
||||
echo '
|
||||
<td class="text-left">
|
||||
{[ "type": "number", "name": "qta_da_evadere[]", "id": "qta_'.$i.'", "value": "'.($r['qta'] - $r['qta_evasa']).'", "decimals": "qta", "extra": "onkeyup=\"ricalcola_subtotale_riga('.$i.');\"" ]}
|
||||
</td>';
|
||||
|
||||
// Subtotale
|
||||
$subtotale = $r['subtotale'] / $r['qta'] * ($r['qta'] - $r['qta_evasa']);
|
||||
$sconto = $r['sconto'] / $r['qta'] * ($r['qta'] - $r['qta_evasa']);
|
||||
$iva = $r['iva'] / $r['qta'] * ($r['qta'] - $r['qta_evasa']);
|
||||
|
||||
echo '
|
||||
<td class="text-right">
|
||||
<input type="hidden" id="subtot_'.$i.'" name="subtot[]" value="'.Translator::numberToLocale($r['subtotale'] / $r['qta']).'" />
|
||||
<input type="hidden" id="sconto_'.$i.'" name="sconto[]" value="'.Translator::numberToLocale($r['sconto'] / $r['qta']).'" />
|
||||
<input type="hidden" id="idiva_'.$i.'" name="idiva[]" value="'.$r['idiva'].'" />
|
||||
<input type="hidden" id="iva_'.$i.'" name="iva[]" value="'.Translator::numberToLocale($r['iva'] / $r['qta']).'" />
|
||||
|
||||
<big id="subtotale_'.$i.'">'.Translator::numberToLocale($subtotale - $sconto + $iva).' €</big><br/><small style="color:#777;" id="subtotaledettagli_'.$i.'">'.Translator::numberToLocale($subtotale - $sconto).' + '.Translator::numberToLocale($iva).'</small>
|
||||
</td>';
|
||||
|
||||
// Checkbox - da evadere?
|
||||
echo '
|
||||
<td class="text-right">
|
||||
<input type="checkbox" checked="checked" id="checked_'.$i.'" name="evadere[]" value="on" onclick="ricalcola_subtotale_riga('.$i.');" />
|
||||
</td>
|
||||
</tr>';
|
||||
|
||||
$totale += $subtotale - $sconto + $iva;
|
||||
}
|
||||
|
||||
// Totale
|
||||
echo '
|
||||
<tr>
|
||||
<td colspan="4" align="right" class="text-right">
|
||||
<b>Totale:</b>
|
||||
</td>
|
||||
<td class="text-right" colspan="2">
|
||||
<big id="totale">'.Translator::numberToLocale($totale).' €</big>
|
||||
</td>
|
||||
</tr>';
|
||||
echo '
|
||||
</table>';
|
||||
} else {
|
||||
echo '
|
||||
<p>'.tr('Non ci sono articoli da evadere in questo ddt').'...</p>';
|
||||
}
|
||||
|
||||
echo '
|
||||
|
||||
<!-- PULSANTI -->
|
||||
<div class="row">
|
||||
<div class="col-md-12 text-right">
|
||||
<button type="submit" class="btn btn-primary pull-right"><i class="fa fa-plus"></i> '.tr('Aggiungi').'</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>';
|
||||
|
||||
echo '
|
||||
<script src="'.$rootdir.'/lib/init.js"></script>';
|
||||
|
||||
?>
|
||||
|
||||
<script type="text/javascript">
|
||||
function ricalcola_subtotale_riga( r ){
|
||||
subtot = $("#subtot_" + r).val().toEnglish();
|
||||
|
||||
sconto = $("#sconto_" + r).val().toEnglish();
|
||||
subtot = subtot - sconto;
|
||||
|
||||
qta = $("#qta_" + r).val().toEnglish();
|
||||
if(isNaN(qta)) qta = 0;
|
||||
|
||||
qtamax = $("#qtamax_" + r).val().toEnglish();
|
||||
if(isNaN(qtamax)) qtamax = 0;
|
||||
|
||||
iva = $("#iva_" + r).val().toEnglish();
|
||||
|
||||
// Se inserisco una quantità da evadere maggiore di quella rimanente, la imposto al massimo possibile
|
||||
if(qta > qtamax){
|
||||
qta = qtamax;
|
||||
$('#qta_' + r).val(qta);
|
||||
}
|
||||
|
||||
if(qta == 0) $('#checked_' + r).prop("checked", false);
|
||||
|
||||
// Se tolgo la spunta della casella dell'evasione devo azzerare i conteggi
|
||||
if(!$('#checked_' + r).is(':checked')) qta = 0;
|
||||
|
||||
subtotale = (subtot * qta + iva * qta).toFixedLocale();
|
||||
|
||||
$("#subtotale_" + r).html(subtotale + " €");
|
||||
$("#subtotaledettagli_" + r).html((subtot * qta).toFixed(2) + " + " + (iva * qta).toFixed(2));
|
||||
|
||||
ricalcola_totale();
|
||||
}
|
||||
|
||||
function ricalcola_totale(){
|
||||
r = 0;
|
||||
totale = 0.00;
|
||||
$('input[id*=qta_]').each( function(){
|
||||
qta = $(this).val().toEnglish();
|
||||
|
||||
if( !$('#checked_' + r).is(':checked') || isNaN(qta) )
|
||||
qta = 0;
|
||||
|
||||
subtot = $("#subtot_" + r).val().toEnglish();
|
||||
|
||||
sconto = $("#sconto_" + r).val().toEnglish();
|
||||
|
||||
subtot = subtot-sconto;
|
||||
|
||||
iva = $("#iva_" + r).val().toEnglish();
|
||||
|
||||
totale += subtot*qta+iva*qta;
|
||||
r++;
|
||||
});
|
||||
|
||||
$('#totale').html( (totale.toFixedLocale()) + " €" );
|
||||
}
|
||||
</script>
|
|
@ -4,91 +4,123 @@ include_once __DIR__.'/../../core.php';
|
|||
|
||||
$module = Modules::getModule($id_module);
|
||||
|
||||
if ($module['name'] == 'Fatture di vendita') {
|
||||
// Controllo sulla direzione monetaria
|
||||
$entrate = [
|
||||
'Fatture di vendita',
|
||||
'Ddt di vendita',
|
||||
'Ordini cliente',
|
||||
];
|
||||
|
||||
if (in_array($module['name'], $entrate)) {
|
||||
$dir = 'entrata';
|
||||
} else {
|
||||
$dir = 'uscita';
|
||||
}
|
||||
|
||||
$idarticolo = get('idarticolo');
|
||||
$idgruppo = get('idgruppo');
|
||||
$data = [
|
||||
'fat' => [
|
||||
'table' => 'co_righe_documenti',
|
||||
'id' => 'iddocumento',
|
||||
],
|
||||
'ddt' => [
|
||||
'table' => 'dt_righe_ddt',
|
||||
'id' => 'idddt',
|
||||
],
|
||||
'ord' => [
|
||||
'table' => 'or_righe_ordini',
|
||||
'id' => 'idordine',
|
||||
],
|
||||
'int' => [
|
||||
'table' => 'mg_articoli_interventi',
|
||||
'id' => 'idintervento',
|
||||
],
|
||||
];
|
||||
|
||||
$q2 = 'SELECT * FROM co_righe_documenti INNER JOIN mg_articoli ON co_righe_documenti.idarticolo=mg_articoli.id WHERE co_righe_documenti.iddocumento='.prepare($id_record).' AND co_righe_documenti.idgruppo='.prepare($idgruppo);
|
||||
$rs2 = $dbo->fetchArray($q2);
|
||||
// Individuazione delle tabelle interessate
|
||||
if (in_array($module['name'], ['Fatture di vendita', 'Fatture di acquisto'])) {
|
||||
$modulo = 'fat';
|
||||
} elseif (in_array($module['name'], ['Ddt di vendita', 'Ddt di acquisto'])) {
|
||||
$modulo = 'ddt';
|
||||
} elseif (in_array($module['name'], ['Ordini cliente', 'Ordini fornitore'])) {
|
||||
$modulo = 'ord';
|
||||
} else {
|
||||
$modulo = 'int';
|
||||
}
|
||||
|
||||
$table = $data[$modulo]['table'];
|
||||
$id = $data[$modulo]['id'];
|
||||
$riga = str_replace('id', 'id_riga_', $id);
|
||||
|
||||
$idarticolo = get('idarticolo');
|
||||
$idriga = get('idriga');
|
||||
|
||||
$rs = $dbo->fetchArray('SELECT mg_articoli.codice, mg_articoli.descrizione, '.$table.'.qta FROM '.$table.' INNER JOIN mg_articoli ON '.$table.'.idarticolo=mg_articoli.id WHERE '.$table.'.'.$id.'='.prepare($id_record).' AND '.$table.'.id='.prepare($idriga));
|
||||
|
||||
echo '
|
||||
<p>'.tr('Articolo').': '.$rs2[0]['codice'].' - '.$rs2[0]['descrizione'].'</p>
|
||||
<p>'.tr('Articolo').': '.$rs[0]['codice'].' - '.$rs[0]['descrizione'].'</p>
|
||||
|
||||
<form action="'.$rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'" method="post">
|
||||
<input type="hidden" name="op" value="add_serial">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
<input type="hidden" name="idgruppo" value="'.$rs2[0]['idgruppo'].'">
|
||||
<input type="hidden" name="idriga" value="'.$idriga.'">
|
||||
<input type="hidden" name="idarticolo" value="'.$idarticolo.'">
|
||||
<input type="hidden" name="dir" value="'.$dir.'">';
|
||||
|
||||
$serials = [];
|
||||
$array = array_column($rs2, 'serial');
|
||||
foreach ($array as $value) {
|
||||
if (!empty($value)) {
|
||||
$serials[] = $value;
|
||||
}
|
||||
}
|
||||
$info = $dbo->fetchArray('SELECT * FROM mg_prodotti WHERE serial IS NOT NULL AND '.$riga.'='.prepare($idriga));
|
||||
$serials = array_column($info, 'serial');
|
||||
|
||||
if ($dir == 'entrata') {
|
||||
echo '
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "select", "label": "'.tr('Serial').'", "name": "serial[]", "multiple": 1, "value": "'.implode(',', $serials).'", "values": "query=SELECT serial AS id, serial AS descrizione FROM vw_serials WHERE dir=\'uscita\' AND serial NOT IN (SELECT serial FROM vw_serials WHERE dir=\'entrata\' AND record != \'fat-'.$id_record.'\')", "extra": "data-maximum=\"'.count($rs2).'\"" ]}
|
||||
{[ "type": "select", "label": "'.tr('Serial').'", "name": "serial[]", "multiple": 1, "value": "'.implode(',', $serials).'", "values": "query=SELECT DISTINCT serial AS id, serial AS descrizione FROM mg_prodotti WHERE dir=\'uscita\' AND serial NOT IN (SELECT serial FROM mg_prodotti WHERE dir=\'entrata\' AND '.$riga.' != \''.$idriga.'\')", "extra": "data-maximum=\"'.intval($rs[0]['qta']).'\"" ]}
|
||||
</div>
|
||||
</div>';
|
||||
} else {
|
||||
echo '
|
||||
<p>'.tr('Inserisci i numeri seriali degli articoli aggiunti:').'</p>';
|
||||
|
||||
foreach ($array as $key => $serial) {
|
||||
if ($key % 3 == 0) {
|
||||
for ($i = 0; $i < $rs[0]['qta']; ++$i) {
|
||||
if ($i % 3 == 0) {
|
||||
echo '
|
||||
<div class="row">';
|
||||
}
|
||||
|
||||
$res = $dbo->fetchArray("SELECT record FROM vw_serials WHERE dir='entrata' AND serial = ".prepare($serial));
|
||||
$res = $dbo->fetchArray("SELECT * FROM mg_prodotti WHERE dir='entrata' AND serial = ".prepare($serials[$i]));
|
||||
|
||||
echo '
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "name": "serial[]", "value": "'.$serial.'"'.(!empty($res) ? ', "readonly": 1' : '').' ]}';
|
||||
{[ "type": "text", "name": "serial[]", "value": "'.$serials[$i].'"'.(!empty($res) ? ', "readonly": 1' : '').' ]}';
|
||||
|
||||
if(!empty($res)){
|
||||
$pieces = explode('-', $res[0]['record']);
|
||||
switch($pieces[0]){
|
||||
case 'int':
|
||||
$modulo = 'Interventi';
|
||||
break;
|
||||
|
||||
case 'ddt':
|
||||
$modulo = 'Ddt di vendita';
|
||||
break;
|
||||
|
||||
case 'fat':
|
||||
$modulo = 'Fatture di vendita';
|
||||
break;
|
||||
|
||||
case 'ord':
|
||||
$modulo = 'Ordini cliente';
|
||||
break;
|
||||
if (!empty($res)) {
|
||||
if (!empty($res[0]['id_riga_intervento'])) {
|
||||
$modulo = 'Interventi';
|
||||
$pos = 'int';
|
||||
} elseif (!empty($res[0]['id_riga_ddt'])) {
|
||||
$modulo = 'Ddt di vendita';
|
||||
$pos = 'ddt';
|
||||
} elseif (!empty($res[0]['id_riga_documento'])) {
|
||||
$modulo = 'Fatture di vendita';
|
||||
$pos = 'fat';
|
||||
} elseif (!empty($res[0]['id_riga_ordine'])) {
|
||||
$modulo = 'Ordini cliente';
|
||||
$pos = 'ord';
|
||||
}
|
||||
|
||||
$r = $dbo->select($data[$pos]['table'], $data[$pos]['id'], ['id' => $res[0][str_replace('id', 'id_riga_', $data[$pos]['id'])]]);
|
||||
|
||||
echo '
|
||||
'.Modules::link($modulo, $pieces[1], tr('Visualizza vendita').' <i class="fa fa-external-link"></i>', null);
|
||||
'.Modules::link($modulo, $r[0][$data[$pos]['id']], tr('Visualizza vendita').' <i class="fa fa-external-link"></i>', null);
|
||||
}
|
||||
echo '
|
||||
</div>';
|
||||
|
||||
if (($key + 1) % 3 == 0) {
|
||||
if (($i + 1) % 3 == 0) {
|
||||
echo '
|
||||
</div>
|
||||
<br>';
|
||||
}
|
||||
}
|
||||
if (($key + 1) % 3 != 0) {
|
||||
if ($i % 3 != 0) {
|
||||
echo '
|
||||
</div>';
|
||||
}
|
||||
|
|
|
@ -0,0 +1,289 @@
|
|||
<?php
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
$module = Modules::getModule($id_module);
|
||||
|
||||
$data = [
|
||||
'ddt' => [
|
||||
'table' => 'dt_ddt',
|
||||
'rows' => 'dt_righe_ddt',
|
||||
'id' => 'idddt',
|
||||
'condition' => '(id_riga_documento IS NOT NULL)',
|
||||
],
|
||||
'ord' => [
|
||||
'table' => 'or_ordini',
|
||||
'rows' => 'or_righe_ordini',
|
||||
'id' => 'idordine',
|
||||
'condition' => '(id_riga_ddt IS NOT NULL OR id_riga_documento IS NOT NULL)',
|
||||
],
|
||||
];
|
||||
|
||||
$documento = get('documento');
|
||||
|
||||
if ($module['name'] == 'Ordini cliente' || $module['name'] == 'Ordini fornitore') {
|
||||
$pos = 'ord';
|
||||
$op = ($documento == 'ddt') ? 'ddt_da_ordine' : 'fattura_da_ordine';
|
||||
|
||||
$head = tr('Ordine numero _NUM_');
|
||||
} else {
|
||||
$pos = 'ddt';
|
||||
$op = 'fattura_da_ddt';
|
||||
|
||||
$head = tr('Ddt numero _NUM_');
|
||||
}
|
||||
|
||||
$table = $data[$pos]['table'];
|
||||
$rows = $data[$pos]['rows'];
|
||||
$id = $data[$pos]['id'];
|
||||
$row = str_replace('id', 'id_riga_', $id);
|
||||
|
||||
if ($module['name'] == 'Ordini cliente' || $module['name'] == 'Ddt di vendita') {
|
||||
$dir = 'entrata';
|
||||
} else {
|
||||
$dir = 'uscita';
|
||||
}
|
||||
|
||||
if ($module['name'] == 'Ordini cliente') {
|
||||
$module_name = ($documento == 'ddt') ? 'Ddt di vendita' : 'Fatture di vendita';
|
||||
} elseif ($module['name'] == 'Ordini fornitore') {
|
||||
$module_name = ($documento == 'ddt') ? 'Ddt di acquisto' : 'Fatture di acquisto';
|
||||
} elseif ($module['name'] == 'Ddt di acquisto') {
|
||||
$module_name = 'Fatture di acquisto';
|
||||
} elseif ($module['name'] == 'Ddt di vendita') {
|
||||
$module_name = 'Fatture di vendita';
|
||||
}
|
||||
|
||||
$op = !empty($get['op']) ? $get['op'] : $op;
|
||||
|
||||
$button = ($documento == 'ddt') ? tr('Crea ddt') : tr('Crea fattura');
|
||||
$button = !empty($get['op']) ? tr('Aggiungi') : $button;
|
||||
|
||||
// Info documento
|
||||
$rs = $dbo->fetchArray('SELECT * FROM '.$table.' WHERE id='.prepare($id_record));
|
||||
$numero = !empty($rs[0]['numero_esterno']) ? $rs[0]['numero_esterno'] : $rs[0]['numero'];
|
||||
$idanagrafica = $rs[0]['idanagrafica'];
|
||||
$idpagamento = $rs[0]['idpagamento'];
|
||||
$idconto = $rs[0]['idconto'];
|
||||
|
||||
/*
|
||||
Form di inserimento riga documento
|
||||
*/
|
||||
echo '
|
||||
<p>'.str_replace('_NUM_', $numero, $head).'.</p>';
|
||||
|
||||
// Selezione articoli dell'ordine da portare nel ddt
|
||||
$rs = $dbo->fetchArray('SELECT *, (qta - qta_evasa) AS qta_rimanente FROM '.$table.' INNER JOIN '.$rows.' ON '.$table.'.id='.$rows.'.'.$id.' WHERE '.$table.'.id='.prepare($id_record).' HAVING qta_rimanente > 0');
|
||||
|
||||
if (!empty($rs)) {
|
||||
echo '
|
||||
<p>'.tr('Seleziona le righe che vuoi inserire nel documento e la quantità').'.</p>
|
||||
|
||||
<form action="'.$rootdir.'/editor.php?id_module='.Modules::getModule($module_name)['id'].(!empty($get['iddocumento']) ? '&id_record='.$get['iddocumento'] : '').'" method="post">
|
||||
<input type="hidden" name="'.$id.'" value="'.$id_record.'">
|
||||
<input type="hidden" name="idanagrafica" value="'.$idanagrafica.'">
|
||||
<input type="hidden" name="idconto" value="'.$idconto.'">
|
||||
<input type="hidden" name="idpagamento" value="'.$idpagamento.'">
|
||||
<input type="hidden" name="iddocumento" value="'.$id_record.'">
|
||||
|
||||
<input type="hidden" name="op" value="'.$op.'">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
<input type="hidden" name="dir" value="'.$dir.'">';
|
||||
|
||||
if (empty($get['op'])) {
|
||||
echo '
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "date", "label": "'.tr('Data del documento').'", "name": "data", "required": 1, "value": "-now-" ]}
|
||||
</div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
echo '
|
||||
<div class="clearfix"></div>
|
||||
<br>
|
||||
|
||||
<table class="table table-striped table-hover table-condensed">
|
||||
<tr>
|
||||
<th>'.tr('Descrizione').'</th>
|
||||
<th width="10%">'.tr('Q.tà').'</th>
|
||||
<th width="15%">'.tr('Q.tà da evadere').'</th>
|
||||
<th width="20%">'.tr('Subtot.').'</th>
|
||||
<th width="20%">'.tr('Seriali').'</th>
|
||||
</tr>';
|
||||
|
||||
$totale = 0.00;
|
||||
|
||||
foreach ($rs as $i => $r) {
|
||||
// Descrizione
|
||||
echo '
|
||||
<tr>
|
||||
<td>
|
||||
<input type="hidden" name="idriga[]" value="'.$r['id'].'" />
|
||||
<input type="hidden" name="abilita_serial[]" value="'.$r['abilita_serial'].'" />
|
||||
<input type="hidden" id="idarticolo_'.$i.'" name="idarticolo[]" value="'.$r['idarticolo'].'" />
|
||||
<input type="hidden" id="descrizione_'.$i.'" name="descrizione[]" value="'.$r['descrizione'].'" />';
|
||||
|
||||
// Checkbox - da evadere?
|
||||
echo '
|
||||
<input type="checkbox" checked="checked" id="checked_'.$i.'" name="evadere[]" value="on" onclick="ricalcola_subtotale_riga('.$i.');" />';
|
||||
|
||||
echo nl2br($r['descrizione']);
|
||||
|
||||
echo '
|
||||
</td>';
|
||||
|
||||
// Q.tà rimanente
|
||||
echo '
|
||||
<td>
|
||||
<input type="hidden" id="qtamax_'.$i.'" value="'.($r['qta'] - $r['qta_evasa']).'" />
|
||||
<input type="hidden" id="um_'.$i.'" name="um[]" value="'.$r['um'].'" />
|
||||
<p class="text-center">'.Translator::numberToLocale($r['qta_rimanente']).'</p>
|
||||
</td>';
|
||||
|
||||
// Q.tà da evadere
|
||||
echo '
|
||||
<td>
|
||||
{[ "type": "number", "name": "qta_da_evadere[]", "id": "qta_'.$i.'", "required": 1, "value": "'.$r['qta_rimanente'].'", "extra" : "onchange=\"ricalcola_subtotale_riga('.$i.');\"" ]}
|
||||
</td>';
|
||||
|
||||
// Subtotale
|
||||
$subtotale = $r['subtotale'] / $r['qta'] * ($r['qta'] - $r['qta_evasa']);
|
||||
$sconto = $r['sconto'] / $r['qta'] * ($r['qta'] - $r['qta_evasa']);
|
||||
$iva = $r['iva'] / $r['qta'] * ($r['qta'] - $r['qta_evasa']);
|
||||
|
||||
echo '
|
||||
<td>
|
||||
<input type="hidden" id="subtot_'.$i.'" name="subtot[]" value="'.($r['subtotale'] / $r['qta']).'" />
|
||||
<input type="hidden" id="sconto_'.$i.'" name="sconto[]" value="'.($r['sconto'] / $r['qta']).'" />
|
||||
<input type="hidden" id="idiva_'.$i.'" name="idiva[]" value="'.$r['idiva'].'" />
|
||||
<input type="hidden" id="iva_'.$i.'" name="iva[]" value="'.($r['iva'] / $r['qta']).'" />
|
||||
|
||||
<big id="subtotale_'.$i.'">'.Translator::numberToLocale($subtotale - $sconto + $iva).' €</big><br/>
|
||||
|
||||
<small style="color:#777;" id="subtotaledettagli_'.$i.'">'.Translator::numberToLocale($subtotale - $sconto).' + '.Translator::numberToLocale($iva).'</small>
|
||||
</td>';
|
||||
|
||||
// Seriali
|
||||
echo '
|
||||
<td>';
|
||||
if (!empty($r['abilita_serial'])) {
|
||||
echo '
|
||||
{[ "type": "select", "name": "serial['.$i.'][]", "id": "serial_'.$i.'", "multiple": 1, "values": "query=SELECT DISTINCT serial AS id, serial AS descrizione FROM mg_prodotti WHERE dir=\''.$dir.'\' AND '.$row.' = \''.$r['id'].'\' AND serial NOT IN (SELECT serial FROM mg_prodotti WHERE dir=\''.$dir.'\' AND '.$data[$pos]['condition'].' AND dir=\''.$dir.'\')", "extra": "data-maximum=\"'.intval($r['qta_rimanente']).'\"" ]}
|
||||
';
|
||||
} else {
|
||||
echo '-';
|
||||
}
|
||||
echo '
|
||||
</td>
|
||||
</tr>';
|
||||
|
||||
$totale += $subtotale - $sconto + $iva;
|
||||
}
|
||||
|
||||
// Totale
|
||||
echo '
|
||||
<tr>
|
||||
<td colspan="4" align="right" class="text-right">
|
||||
<b>'.tr('Totale').':</b>
|
||||
</td>
|
||||
<td class="text-right" colspan="2">
|
||||
<big id="totale">'.Translator::numberToLocale($totale).' €</big>
|
||||
</td>
|
||||
</tr>
|
||||
</table>';
|
||||
|
||||
echo '
|
||||
|
||||
<!-- PULSANTI -->
|
||||
<div class="row">
|
||||
<div class="col-md-12 text-right">
|
||||
<button type="submit" id="submit_btn" class="btn btn-primary pull-right">
|
||||
<i class="fa fa-plus"></i> '.$button.'
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>';
|
||||
} else {
|
||||
echo '
|
||||
<p>'.tr('Non ci sono articoli da evadere').'...</p>';
|
||||
}
|
||||
|
||||
echo '
|
||||
<script src="'.$rootdir.'/lib/init.js"></script>';
|
||||
|
||||
?>
|
||||
|
||||
<script type="text/javascript">
|
||||
function ricalcola_subtotale_riga( r ){
|
||||
subtot = $("#subtot_"+r).val().toEnglish();
|
||||
|
||||
sconto = $("#sconto_"+r).val().toEnglish();
|
||||
subtot = subtot-sconto;
|
||||
|
||||
qta = $("#qta_"+r).val().toEnglish();
|
||||
if( isNaN(qta) ){
|
||||
qta = 0;
|
||||
}
|
||||
|
||||
qtamax = $("#qtamax_"+r).val().toEnglish();
|
||||
if( isNaN(qtamax) ){
|
||||
qtamax = 0;
|
||||
}
|
||||
|
||||
iva = $("#iva_"+r).val().toEnglish();
|
||||
|
||||
// Se inserisco una quantità da evadere maggiore di quella rimanente, la imposto al massimo possibile
|
||||
if( qta>qtamax ){
|
||||
qta = qtamax.toFixedLocale(2);
|
||||
$('#qta_'+r).val( qta );
|
||||
}
|
||||
|
||||
$("#serial_"+r).selectClear();
|
||||
$("#serial_"+r).select2("destroy");
|
||||
$("#serial_"+r).data('maximum', qta);
|
||||
start_superselect();
|
||||
|
||||
// Se tolgo la spunta della casella dell'evasione devo azzerare i conteggi
|
||||
if( !$('#checked_'+r).is(':checked') ){
|
||||
qta = 0;
|
||||
}
|
||||
|
||||
subtotale = (subtot*qta+iva*qta).toFixedLocale(2);
|
||||
|
||||
$("#subtotale_"+r).html(subtotale+" €");
|
||||
$("#subtotaledettagli_"+r).html( (subtot*qta).toFixed(2)+" + " + (iva*qta).toFixed(2) );
|
||||
|
||||
ricalcola_totale();
|
||||
}
|
||||
|
||||
function ricalcola_totale(){
|
||||
r = 0;
|
||||
totale = 0.00;
|
||||
$('input[id*=qta_]').each( function(){
|
||||
qta = $(this).val().toEnglish();
|
||||
|
||||
if( !$('#checked_'+r).is(':checked') || isNaN(qta) ){
|
||||
qta = 0;
|
||||
}
|
||||
|
||||
subtot = $("#subtot_"+r).val().toEnglish();
|
||||
|
||||
sconto = $("#sconto_"+r).val().toEnglish();
|
||||
subtot = subtot-sconto;
|
||||
|
||||
iva = $("#iva_"+r).val().toEnglish();
|
||||
|
||||
totale += subtot*qta+iva*qta;
|
||||
|
||||
r++;
|
||||
});
|
||||
|
||||
$('#totale').html( (totale.toFixedLocale()) + " €" );
|
||||
|
||||
if( totale==0 )
|
||||
$('#submit_btn').hide();
|
||||
else
|
||||
$('#submit_btn').show();
|
||||
}
|
||||
</script>
|
|
@ -2,6 +2,12 @@
|
|||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
if (isset($id_record)) {
|
||||
$records = $dbo->fetchArray('SELECT *, co_documenti.idagente AS idagente_fattura, co_documenti.note, co_documenti.note_aggiuntive, co_documenti.idpagamento, co_documenti.id AS iddocumento, co_statidocumento.descrizione AS `stato`, co_tipidocumento.descrizione AS `descrizione_tipodoc`, (SELECT descrizione FROM co_ritenutaacconto WHERE id=idritenutaacconto) AS ritenutaacconto_desc, (SELECT descrizione FROM co_rivalsainps WHERE id=idrivalsainps) AS rivalsainps_desc FROM ((co_documenti LEFT OUTER JOIN co_statidocumento ON co_documenti.idstatodocumento=co_statidocumento.id) INNER JOIN an_anagrafiche ON co_documenti.idanagrafica=an_anagrafiche.idanagrafica) INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE co_documenti.id='.prepare($id_record));
|
||||
if ($module['name'] == 'Fatture di vendita') {
|
||||
$dir = 'entrata';
|
||||
} else {
|
||||
$dir = 'uscita';
|
||||
}
|
||||
|
||||
if (isset($id_record)) {
|
||||
$records = $dbo->fetchArray('SELECT *, co_documenti.idagente AS idagente_fattura, co_documenti.note, co_documenti.note_aggiuntive, co_documenti.idpagamento, co_documenti.id AS iddocumento, co_statidocumento.descrizione AS `stato`, co_tipidocumento.descrizione AS `descrizione_tipodoc`, (SELECT descrizione FROM co_ritenutaacconto WHERE id=idritenutaacconto) AS ritenutaacconto_desc, (SELECT descrizione FROM co_rivalsainps WHERE id=idrivalsainps) AS rivalsainps_desc FROM ((co_documenti LEFT OUTER JOIN co_statidocumento ON co_documenti.idstatodocumento=co_statidocumento.id) INNER JOIN an_anagrafiche ON co_documenti.idanagrafica=an_anagrafiche.idanagrafica) INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE co_tipidocumento.dir = '.prepare($dir).' AND co_documenti.id='.prepare($id_record));
|
||||
}
|
||||
|
|
|
@ -597,7 +597,7 @@ function ricalcola_costiagg_fattura($iddocumento, $idrivalsainps = '', $idritenu
|
|||
* $prezzo float prezzo totale dell'articolo (prezzounitario*qtà)
|
||||
* $idintervento integer id dell'intervento da cui arriva l'articolo (per non creare casini quando si rimuoverà un articolo dalla fattura).
|
||||
*/
|
||||
function add_articolo_infattura($iddocumento, $idarticolo, $descrizione, $idiva, $qta, $prezzo, $sconto = 0, $sconto_unitario = 0, $tipo_sconto = 'UNT', $idintervento = 0, $lotto = '', $serial = '', $altro = '', $idgruppo = 0, $idconto = 0, $idum = 0)
|
||||
function add_articolo_infattura($iddocumento, $idarticolo, $descrizione, $idiva, $qta, $prezzo, $sconto = 0, $sconto_unitario = 0, $tipo_sconto = 'UNT', $idintervento = 0, $idconto = 0, $idum = 0)
|
||||
{
|
||||
global $dbo;
|
||||
global $dir;
|
||||
|
@ -616,10 +616,6 @@ function add_articolo_infattura($iddocumento, $idarticolo, $descrizione, $idiva,
|
|||
$um = $idum;
|
||||
}
|
||||
|
||||
if (empty($idgruppo)) {
|
||||
$idgruppo = $dbo->fetchArray('SELECT IFNULL(MAX(`idgruppo`) + 1, 0) AS idgruppo FROM co_righe_documenti AS t WHERE iddocumento='.prepare($iddocumento))[0]['idgruppo'];
|
||||
}
|
||||
|
||||
// Lettura iva dell'articolo
|
||||
$rs2 = $dbo->fetchArray('SELECT * FROM co_iva WHERE id='.prepare($idiva));
|
||||
$iva = ($prezzo - $sconto) / 100 * $rs2[0]['percentuale'];
|
||||
|
@ -627,21 +623,8 @@ function add_articolo_infattura($iddocumento, $idarticolo, $descrizione, $idiva,
|
|||
|
||||
if ($qta > 0) {
|
||||
$rsart = $dbo->fetchArray('SELECT abilita_serial FROM mg_articoli WHERE id='.prepare($idarticolo));
|
||||
$qta_in = !empty($rsart[0]['abilita_serial']) ? $qta : 1;
|
||||
|
||||
for ($i = 0; $i < $qta_in; ++$i) {
|
||||
/*
|
||||
$iva = $iva / $qta_in;
|
||||
$qta = $qta / $qta_in;
|
||||
$ubtotale = $subtotale / $qta_in;
|
||||
$sconto = $sconto / $qta_in;
|
||||
|
||||
$iva_indetraibile = $iva / 100 * $rs2[0]['indetraibile'];
|
||||
*/
|
||||
|
||||
$dbo->query('INSERT INTO co_righe_documenti(iddocumento, idarticolo, idintervento, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, qta, abilita_serial, serial, idconto, um, idgruppo, `order`) VALUES ('.prepare($iddocumento).', '.prepare($idarticolo).', '.(!empty($idintervento) ? prepare($idintervento) : 'NULL').', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($prezzo).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', '.prepare($qta).', '.prepare($rsart[0]['abilita_serial']).', '.prepare($serial).', '.prepare($idconto).', '.prepare($um).', '.prepare($idgruppo).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($iddocumento).'))');
|
||||
}
|
||||
|
||||
$dbo->query('INSERT INTO co_righe_documenti(iddocumento, idarticolo, idintervento, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, qta, abilita_serial, idconto, um, `order`) VALUES ('.prepare($iddocumento).', '.prepare($idarticolo).', '.(!empty($idintervento) ? prepare($idintervento) : 'NULL').', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($prezzo).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', '.prepare($qta).', '.prepare($rsart[0]['abilita_serial']).', '.prepare($idconto).', '.prepare($um).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($iddocumento).'))');
|
||||
$idriga = $dbo->lastInsertedID();
|
||||
|
||||
/*
|
||||
|
@ -682,7 +665,7 @@ function rimuovi_articolo_dafattura($idarticolo, $iddocumento, $idrigadocumento)
|
|||
global $dir;
|
||||
|
||||
// Leggo la quantità di questo articolo in fattura
|
||||
$query = 'SELECT idgruppo, qta, idintervento, idpreventivo, idordine, idddt, subtotale, descrizione, lotto, serial, altro FROM co_righe_documenti WHERE id='.prepare($idrigadocumento);
|
||||
$query = 'SELECT qta, idintervento, idpreventivo, idordine, idddt, subtotale, descrizione, lotto, serial, altro FROM co_righe_documenti WHERE id='.prepare($idrigadocumento);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$idintervento = $rs[0]['idintervento'];
|
||||
$idpreventivo = $rs[0]['idpreventivo'];
|
||||
|
@ -691,19 +674,15 @@ function rimuovi_articolo_dafattura($idarticolo, $iddocumento, $idrigadocumento)
|
|||
$qta = $rs[0]['qta'];
|
||||
$subtotale = $rs[0]['subtotale'];
|
||||
|
||||
$idgruppo = $rs[0]['idgruppo'];
|
||||
|
||||
$descrizione = $rs[0]['descrizione'];
|
||||
|
||||
$lotto = $rs[0]['lotto'];
|
||||
$serial = $rs[0]['serial'];
|
||||
$altro = $rs[0]['altro'];
|
||||
|
||||
if ($dir == 'uscita') {
|
||||
$non_rimovibili = $dbo->fetchArray("SELECT COUNT(*) AS non_rimovibili FROM co_righe_documenti WHERE serial IN (SELECT serial FROM vw_serials WHERE dir = 'entrata') AND idgruppo=".prepare($idgruppo).' AND iddocumento='.prepare($iddocumento))[0]['non_rimovibili'];
|
||||
if ($non_rimovibili != 0) {
|
||||
return false;
|
||||
}
|
||||
$non_rimovibili = seriali_non_rimuovibili('id_riga_documento', $idrigadocumento, $dir);
|
||||
if (!empty($non_rimovibili)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Se l'articolo è stato aggiunto in fattura perché era collegato ad un intervento o
|
||||
|
@ -735,15 +714,15 @@ function rimuovi_articolo_dafattura($idarticolo, $iddocumento, $idrigadocumento)
|
|||
|
||||
if ($dir == 'uscita') {
|
||||
// Elimino eventuali articoli caricati in mg_prodotti esclusivamente con la fattura di acquisto
|
||||
$query = 'SELECT lotto, serial, altro, idarticolo FROM co_righe_documenti WHERE id='.prepare($idrigadocumento).' AND idddt = 0 AND idordine = 0';
|
||||
$query = 'SELECT lotto, serial, altro, id_articolo FROM co_righe_documenti WHERE id='.prepare($idrigadocumento).' AND idddt = 0 AND idordine = 0';
|
||||
$rs = $dbo->fetchArray($query);
|
||||
if (sizeof($rs) > 0) {
|
||||
$dbo->query('DELETE FROM `mg_prodotti` WHERE lotto='.prepare($rs[0]['lotto']).' AND serial='.prepare($rs[0]['serial']).' AND altro='.prepare($rs[0]['altro']).' AND idarticolo='.prepare($rs[0]['idarticolo']));
|
||||
$dbo->query('DELETE FROM `mg_prodotti` WHERE lotto='.prepare($rs[0]['lotto']).' AND serial='.prepare($rs[0]['serial']).' AND altro='.prepare($rs[0]['altro']).' AND id_articolo='.prepare($rs[0]['id_articolo']));
|
||||
}
|
||||
}
|
||||
|
||||
// Elimino la riga dal documento
|
||||
$dbo->query('DELETE FROM `co_righe_documenti` WHERE idgruppo='.prepare($idgruppo).' AND iddocumento='.prepare($iddocumento));
|
||||
$dbo->query('DELETE FROM `co_righe_documenti` WHERE id='.prepare($idrigadocumento).' AND iddocumento='.prepare($iddocumento));
|
||||
|
||||
// Elimino i movimenti avvenuti nel magazzino per questo articolo lotto, serial, altro
|
||||
$dbo->query('DELETE FROM `mg_movimenti` WHERE idarticolo = '.prepare($idarticolo).' AND iddocumento = '.prepare($iddocumento).' AND id = '.prepare($idrigadocumento));
|
||||
|
@ -761,9 +740,6 @@ function aggiorna_sconto($tables, $fields, $id_record, $options = [])
|
|||
|
||||
$descrizione = strtoupper(tr('Sconto'));
|
||||
|
||||
// Opzione per disabilitare l'idgruppo (per preventivi)
|
||||
$id_gruppo = !isset($options['idgruppo']) || !empty($options['idgruppo']);
|
||||
|
||||
// Rimozione dello sconto precedente
|
||||
$dbo->query('DELETE FROM '.$tables['row']." WHERE descrizione LIKE '%".$descrizione."%' AND ".$fields['row'].'='.prepare($id_record));
|
||||
|
||||
|
@ -774,7 +750,7 @@ function aggiorna_sconto($tables, $fields, $id_record, $options = [])
|
|||
// Aggiorno l'eventuale sconto gestendolo con le righe in fattura
|
||||
if (!empty($sconto[0]['sconto_globale'])) {
|
||||
if ($sconto[0]['tipo_sconto_globale'] == 'PRC') {
|
||||
$subtotale = $dbo->fetchArray('SELECT SUM(subtotale - sconto) AS imponibile FROM (SELECT '.$tables['row'].'.subtotale, '.$tables['row'].'.sconto FROM '.$tables['row'].' WHERE '.$fields['row'].'='.prepare($id_record).($id_gruppo ? ' GROUP BY idgruppo' : '').') AS t')[0]['imponibile'];
|
||||
$subtotale = $dbo->fetchArray('SELECT SUM(subtotale - sconto) AS imponibile FROM (SELECT '.$tables['row'].'.subtotale, '.$tables['row'].'.sconto FROM '.$tables['row'].' WHERE '.$fields['row'].'='.prepare($id_record).') AS t')[0]['imponibile'];
|
||||
$subtotale = -$subtotale / 100 * $sconto[0]['sconto_globale'];
|
||||
|
||||
$descrizione = $descrizione.' '.Translator::numberToLocale($sconto[0]['sconto_globale']).'%';
|
||||
|
@ -798,10 +774,44 @@ function aggiorna_sconto($tables, $fields, $id_record, $options = [])
|
|||
'#order' => '(SELECT IFNULL(MAX(`order`) + 1, 0) FROM '.$tables['row'].' AS t WHERE '.$fields['row'].'='.prepare($id_record).')',
|
||||
];
|
||||
|
||||
if ($id_gruppo) {
|
||||
$values['#idgruppo'] = '(SELECT IFNULL(MAX(`idgruppo`) + 1, 0) FROM '.$tables['row'].' AS t WHERE '.$fields['row'].'='.prepare($id_record).')';
|
||||
}
|
||||
|
||||
$dbo->insert($tables['row'], $values);
|
||||
}
|
||||
}
|
||||
|
||||
function controlla_seriali($field, $id_riga, $old_qta, $new_qta, $dir)
|
||||
{
|
||||
$dbo = Database::getConnection();
|
||||
|
||||
if ($old_qta >= $new_qta) {
|
||||
// Controllo sulla possibilità di rimuovere i seriali (se non utilizzati da documenti di vendita)
|
||||
if ($dir == 'uscita' && $new_qta < count(seriali_non_rimuovibili($field, $id_riga, $dir))) {
|
||||
return false;
|
||||
} else {
|
||||
// Controllo sul numero di seriali effettivi da rimuovere
|
||||
$count = $dbo->fetchArray('SELECT COUNT(*) AS tot FROM mg_prodotti WHERE '.$field.'='.prepare($id_riga))[0]['tot'];
|
||||
if ($new_qta < $count) {
|
||||
$deletes = $dbo->fetchArray("SELECT id FROM mg_prodotti WHERE serial NOT IN (SELECT serial FROM mg_prodotti WHERE dir = 'entrata' AND ".$field.'!='.prepare($id_riga).') AND '.$field.'='.prepare($id_riga).' ORDER BY serial DESC LIMIT '.abs($count - $new_qta));
|
||||
|
||||
// Rimozione
|
||||
foreach ($deletes as $delete) {
|
||||
$dbo->query('DELETE FROM mg_prodotti WHERE id = '.prepare($delete['id']));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function seriali_non_rimuovibili($field, $id_riga, $dir)
|
||||
{
|
||||
$dbo = Database::getConnection();
|
||||
|
||||
$results = [];
|
||||
|
||||
if ($dir == 'uscita') {
|
||||
$results = $dbo->fetchArray("SELECT serial FROM mg_prodotti WHERE serial IN (SELECT serial FROM mg_prodotti WHERE dir = 'entrata') AND ".$field.'='.prepare($id_riga));
|
||||
}
|
||||
|
||||
return $results;
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ include_once __DIR__.'/../../core.php';
|
|||
/*
|
||||
Righe fattura
|
||||
*/
|
||||
$q = "SELECT *, IFNULL((SELECT codice FROM mg_articoli WHERE id=idarticolo),'') AS codice, (SELECT descrizione FROM co_pianodeiconti3 WHERE co_pianodeiconti3.id=IF(co_righe_documenti.idconto = 0, (SELECT idconto FROM co_documenti WHERE iddocumento=".prepare($id_record)." LIMIT 1), co_righe_documenti.idconto)) AS descrizione_conto FROM `co_righe_documenti` WHERE iddocumento=".prepare($id_record).' GROUP BY idgruppo ORDER BY `order`';
|
||||
$q = "SELECT *, IFNULL((SELECT codice FROM mg_articoli WHERE id=idarticolo),'') AS codice, (SELECT descrizione FROM co_pianodeiconti3 WHERE co_pianodeiconti3.id=IF(co_righe_documenti.idconto = 0, (SELECT idconto FROM co_documenti WHERE iddocumento=".prepare($id_record)." LIMIT 1), co_righe_documenti.idconto)) AS descrizione_conto FROM `co_righe_documenti` WHERE iddocumento=".prepare($id_record).' ORDER BY `order`';
|
||||
$rs = $dbo->fetchArray($q);
|
||||
|
||||
echo '
|
||||
|
@ -34,26 +34,18 @@ if (!empty($rs)) {
|
|||
|
||||
$delete = 'unlink_articolo';
|
||||
|
||||
$qserial = 'SELECT * FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).' AND idarticolo='.prepare($r['idarticolo']).' AND idgruppo='.prepare($r['idgruppo']);
|
||||
$rsserial = $dbo->fetchArray($qserial);
|
||||
|
||||
$mancanti = 0;
|
||||
$serials = [];
|
||||
|
||||
// Individuazione dei seriali
|
||||
if (!empty($r['abilita_serial'])) {
|
||||
foreach ($rsserial as $seriali) {
|
||||
$seriali['serial'] = trim($seriali['serial']);
|
||||
if (!empty($seriali['serial'])) {
|
||||
$serials[] = $seriali['serial'];
|
||||
} else {
|
||||
++$mancanti;
|
||||
}
|
||||
$serials = array_column($dbo->fetchArray('SELECT serial FROM mg_prodotti WHERE serial IS NOT NULL AND id_riga_documento='.prepare($r['id'])), 'serial');
|
||||
$mancanti = $r['qta'] - count($serials);
|
||||
|
||||
if ($mancanti > 0) {
|
||||
$extra = 'class="warning"';
|
||||
} else {
|
||||
$mancanti = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if ($mancanti > 0) {
|
||||
$extra = 'class="warning"';
|
||||
}
|
||||
}
|
||||
// Preventivi
|
||||
elseif (!empty($r['idpreventivo'])) {
|
||||
|
@ -101,36 +93,37 @@ if (!empty($rs)) {
|
|||
echo '
|
||||
<br>'.tr('SN').': '.implode(', ', $serials);
|
||||
}
|
||||
} else {
|
||||
if ($r['lotto'] != '') {
|
||||
echo '
|
||||
<br>'.tr('Lotto').': '.$r['lotto'];
|
||||
}
|
||||
if ($r['serial'] != '') {
|
||||
echo '
|
||||
<br>'.tr('SN').': '.$r['serial'];
|
||||
}
|
||||
if ($r['altro'] != '') {
|
||||
echo '
|
||||
<br>'.$r['altro'];
|
||||
}
|
||||
}
|
||||
|
||||
// Aggiunta riferimento a ordine
|
||||
if (!empty($r['idordine'])) {
|
||||
$rso = $dbo->fetchArray('SELECT numero, numero_esterno, data FROM or_ordini WHERE id='.prepare($r['idordine']));
|
||||
$rso = $dbo->fetchArray('SELECT numero, numero_esterno, data, dir FROM or_ordini JOIN or_tipiordine ON or_tipiordine.id = or_ordini.idtipoordine WHERE or_ordini.id='.prepare($r['idordine']));
|
||||
$numero = ($rso[0]['numero_esterno'] != '') ? $rso[0]['numero_esterno'] : $rso[0]['numero'];
|
||||
echo '
|
||||
<br>'.str_replace(['_NUM_', '_DATE_'], [$numero, Translator::dateToLocale($rso[0]['data'])], tr('Rif. ordine _NUM_ del _DATE_'));
|
||||
|
||||
$ref = $rso[0]['dir'] == 'entrata' ? 'Ordini cliente' : 'Ordini fornitore';
|
||||
$ref_id = $r['idordine'];
|
||||
|
||||
$descrizione = str_replace(['_NUM_', '_DATE_'], [$numero, Translator::dateToLocale($rso[0]['data'])], tr('Rif. ordine _NUM_ del _DATE_'));
|
||||
} elseif (!empty($r['idddt'])) {
|
||||
$rso = $dbo->fetchArray('SELECT numero, numero_esterno, data FROM dt_ddt WHERE id='.prepare($r['idddt']));
|
||||
$rso = $dbo->fetchArray('SELECT numero, numero_esterno, data FROM dt_ddt JOIN dt_tipiddt ON dt_tipiddt.id = dt_ddt.idtipoddt WHERE dt_ddt.id='.prepare($r['idddt']));
|
||||
$numero = ($rso[0]['numero_esterno'] != '') ? $rso[0]['numero_esterno'] : $rso[0]['numero'];
|
||||
echo '
|
||||
<br>'.str_replace(['_NUM_', '_DATE_'], [$numero, Translator::dateToLocale($rso[0]['data'])], tr('Rif. ddt _NUM_ del _DATE_'));
|
||||
|
||||
$ref = $rso[0]['dir'] == 'entrata' ? 'Ddt di vendita' : 'Ddt di acquisto';
|
||||
$ref_id = $r['idddt'];
|
||||
|
||||
$descrizione = str_replace(['_NUM_', '_DATE_'], [$numero, Translator::dateToLocale($rso[0]['data'])], tr('Rif. ddt _NUM_ del _DATE_'));
|
||||
} elseif (!empty($r['idpreventivo'])) {
|
||||
$rso = $dbo->fetchArray('SELECT numero, data_bozza FROM co_preventivi WHERE id='.prepare($r['idpreventivo']));
|
||||
|
||||
$ref = 'Preventivi';
|
||||
$ref_id = $r['idpreventivo'];
|
||||
|
||||
$descrizione = str_replace(['_NUM_', '_DATE_'], [$rso[0]['numero'], Translator::dateToLocale($rso[0]['data_bozza'])], tr('Rif. preventivo _NUM_ del _DATE_'));
|
||||
}
|
||||
|
||||
if(!empty($descrizione)){
|
||||
echo '
|
||||
<br>'.str_replace(['_NUM_', '_DATE_'], [$rso[0]['numero'], Translator::dateToLocale($rso[0]['data_bozza'])], tr('Rif. preventivo _NUM_ del _DATE_'));
|
||||
<br>'.Modules::link($ref, $ref_id, $descrizione.' <i class="fa fa-external-link"></i>', $descrizione);
|
||||
}
|
||||
|
||||
echo '
|
||||
|
@ -194,7 +187,7 @@ if (!empty($rs)) {
|
|||
|
||||
if (!empty($r['idarticolo']) && $r['abilita_serial'] && (empty($r['idddt']) || empty($r['idintervento']))) {
|
||||
echo "
|
||||
<a class='btn btn-primary btn-xs'data-toggle='tooltip' title='Aggiorna SN...' onclick=\"launch_modal( 'Aggiorna SN', '".$rootdir.'/modules/fatture/add_serial.php?id_module='.$id_module.'&id_record='.$id_record.'&idgruppo='.$r['idgruppo'].'&idarticolo='.$r['idarticolo']."', 1 );\"><i class='fa fa-barcode' aria-hidden='true'></i></a>";
|
||||
<a class='btn btn-primary btn-xs'data-toggle='tooltip' title='Aggiorna SN...' onclick=\"launch_modal( 'Aggiorna SN', '".$rootdir.'/modules/fatture/add_serial.php?id_module='.$id_module.'&id_record='.$id_record.'&idriga='.$r['id'].'&idarticolo='.$r['idarticolo']."', 1 );\"><i class='fa fa-barcode' aria-hidden='true'></i></a>";
|
||||
}
|
||||
|
||||
echo "
|
||||
|
|
|
@ -437,11 +437,8 @@ switch (post('op')) {
|
|||
|
||||
add_movimento_magazzino($idarticolo_originale, $qta, ['idautomezzo' => $idautomezzo, 'idintervento' => $id_record]);
|
||||
|
||||
$rs = $dbo->fetchArray('SELECT idgruppo FROM mg_articoli_interventi WHERE id='.prepare($idriga));
|
||||
$idgruppo = $rs[0]['idgruppo'];
|
||||
|
||||
// Elimino questo articolo dall'intervento
|
||||
$dbo->query('DELETE FROM mg_articoli_interventi WHERE idgruppo='.prepare($idgruppo));
|
||||
$dbo->query('DELETE FROM mg_articoli_interventi WHERE id='.prepare($idriga));
|
||||
|
||||
// Elimino il collegamento al componente
|
||||
$dbo->query('DELETE FROM my_impianto_componenti WHERE idimpianto='.prepare($idimpianto).' AND idintervento='.prepare($id_record));
|
||||
|
@ -469,17 +466,13 @@ switch (post('op')) {
|
|||
// Aggiorno l'automezzo dell'intervento
|
||||
$dbo->query('UPDATE in_interventi SET idautomezzo='.prepare($idautomezzo).' WHERE id='.prepare($id_record).' '.Modules::getAdditionalsQuery($id_module));
|
||||
|
||||
// Calcolo idgruppo per questo inserimento
|
||||
$ridgruppo = $dbo->fetchArray('SELECT IFNULL(MAX(idgruppo) + 1, 0) AS idgruppo FROM mg_articoli_interventi WHERE idintervento = '.prepare($id_record));
|
||||
$idgruppo = $ridgruppo[0]['idgruppo'];
|
||||
|
||||
$rsart = $dbo->fetchArray('SELECT abilita_serial, prezzo_acquisto FROM mg_articoli WHERE id='.prepare($idarticolo));
|
||||
$qta_in = !empty($rsart[0]['abilita_serial']) ? $qta : 1;
|
||||
$prezzo_acquisto = $rsart[0]['prezzo_acquisto'];
|
||||
|
||||
for ($i = 0; $i < $qta_in; ++$i) {
|
||||
// Aggiunto il collegamento fra l'articolo e l'intervento
|
||||
$dbo->query('INSERT INTO mg_articoli_interventi(idarticolo, idintervento, idimpianto, idautomezzo, descrizione, prezzo_vendita, prezzo_acquisto, sconto, sconto_unitario, tipo_sconto, idiva_vendita, qta, um, abilita_serial, serial, idgruppo) VALUES ('.prepare($idarticolo).', '.prepare($id_record).', '.(empty($idimpianto) ? 'NULL' : prepare($idimpianto)).', '.prepare($idautomezzo).', '.prepare($descrizione).', '.prepare($prezzo_vendita).', '.prepare($prezzo_acquisto).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', (SELECT idiva_vendita FROM mg_articoli WHERE id='.prepare($idarticolo).'), '.prepare($qta).', '.prepare($um).', '.prepare($rsart[0]['abilita_serial']).', '.prepare(!empty($serials[$i]) ? $serials[$i] : '').', '.prepare($idgruppo).')');
|
||||
$dbo->query('INSERT INTO mg_articoli_interventi(idarticolo, idintervento, idimpianto, idautomezzo, descrizione, prezzo_vendita, prezzo_acquisto, sconto, sconto_unitario, tipo_sconto, idiva_vendita, qta, um, abilita_serial, serial) VALUES ('.prepare($idarticolo).', '.prepare($id_record).', '.(empty($idimpianto) ? 'NULL' : prepare($idimpianto)).', '.prepare($idautomezzo).', '.prepare($descrizione).', '.prepare($prezzo_vendita).', '.prepare($prezzo_acquisto).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', (SELECT idiva_vendita FROM mg_articoli WHERE id='.prepare($idarticolo).'), '.prepare($qta).', '.prepare($um).', '.prepare($rsart[0]['abilita_serial']).', '.prepare(!empty($serials[$i]) ? $serials[$i] : '').')');
|
||||
}
|
||||
|
||||
link_componente_to_articolo($id_record, $idimpianto, $idarticolo, $qta);
|
||||
|
@ -502,10 +495,8 @@ switch (post('op')) {
|
|||
|
||||
add_movimento_magazzino($idarticolo, $qta, ['idautomezzo' => $idautomezzo, 'idintervento' => $id_record]);
|
||||
|
||||
$idgruppo = $dbo->fetchArray('SELECT idgruppo FROM mg_articoli_interventi WHERE id='.prepare($idriga).' AND idintervento='.prepare($id_record))[0]['idgruppo'];
|
||||
|
||||
// Elimino questo articolo dall'intervento
|
||||
$dbo->query('DELETE FROM mg_articoli_interventi WHERE idgruppo='.prepare($idgruppo).' AND idintervento='.prepare($id_record));
|
||||
$dbo->query('DELETE FROM mg_articoli_interventi WHERE id='.prepare($idriga).' AND idintervento='.prepare($id_record));
|
||||
|
||||
// Elimino il collegamento al componente
|
||||
$dbo->query('DELETE FROM my_impianto_componenti WHERE idimpianto='.prepare($idimpianto).' AND idintervento='.prepare($id_record));
|
||||
|
@ -514,16 +505,18 @@ switch (post('op')) {
|
|||
break;
|
||||
|
||||
case 'add_serial':
|
||||
$idgruppo = $post['idgruppo'];
|
||||
$serial = $post['serial'];
|
||||
$idriga = $post['idriga'];
|
||||
$idarticolo = $post['idarticolo'];
|
||||
|
||||
$q = 'SELECT * FROM mg_articoli_interventi WHERE idintervento='.prepare($id_record).' AND idgruppo='.prepare($idgruppo).' ORDER BY id';
|
||||
$rs = $dbo->fetchArray($q);
|
||||
|
||||
foreach ($rs as $i => $r) {
|
||||
$dbo->query('UPDATE mg_articoli_interventi SET serial='.prepare($serial[$i]).' WHERE id='.prepare($r['id']));
|
||||
$serials = (array) $post['serial'];
|
||||
foreach ($serials as $key => $value) {
|
||||
if (empty($value)) {
|
||||
unset($serials[$key]);
|
||||
}
|
||||
}
|
||||
|
||||
$dbo->sync('mg_prodotti', ['id_riga_intervento' => $idriga, 'dir' => $dir, 'id_articolo' => $idarticolo], ['serial' => $serials]);
|
||||
|
||||
break;
|
||||
|
||||
case 'firma':
|
||||
|
|
|
@ -1,47 +0,0 @@
|
|||
<?php
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
$idarticolo = get('idarticolo');
|
||||
$idgruppo = get('idgruppo');
|
||||
|
||||
$q2 = 'SELECT * FROM mg_articoli_interventi INNER JOIN in_interventi ON mg_articoli_interventi.idintervento=in_interventi.id WHERE mg_articoli_interventi.idintervento='.prepare($id_record).' AND mg_articoli_interventi.idgruppo='.prepare($idgruppo);
|
||||
$rs2 = $dbo->fetchArray($q2);
|
||||
|
||||
echo '
|
||||
<p>'.tr('Articolo').': '.$rs2[0]['codice'].' - '.$rs2[0]['descrizione'].'</p>
|
||||
|
||||
<form action="'.$rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'" method="post">
|
||||
<input type="hidden" name="op" value="add_serial">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
<input type="hidden" name="idddt" value="'.$id_record.'">
|
||||
<input type="hidden" name="idgruppo" value="'.$rs2[0]['idgruppo'].'">
|
||||
<input type="hidden" name="dir" value="'.$dir.'">';
|
||||
|
||||
$serials = [];
|
||||
$array = array_column($rs2, 'serial');
|
||||
foreach ($array as $value) {
|
||||
if (!empty($value)) {
|
||||
$serials[] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
echo '
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "select", "label": "'.tr('Serial').'", "name": "serial[]", "multiple": 1, "value": "'.implode(',', $serials).'", "values": "query=SELECT serial AS id, serial AS descrizione FROM vw_serials WHERE dir=\'uscita\' AND serial NOT IN (SELECT serial FROM vw_serials WHERE dir=\'entrata\' AND record != \'int-'.$id_record.'\')", "extra": "data-maximum=\"'.count($rs2).'\"" ]}
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
echo '
|
||||
|
||||
<!-- PULSANTI -->
|
||||
<div class="row">
|
||||
<div class="col-md-12 text-right">
|
||||
<button type="submit" class="btn btn-primary pull-right"><i class="fa fa-barcode"></i> '.tr('Aggiorna').'</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>';
|
||||
|
||||
echo '
|
||||
<script src="'.$rootdir.'/lib/init.js"></script>';
|
|
@ -4,7 +4,7 @@ include_once __DIR__.'/../../core.php';
|
|||
|
||||
include_once $docroot.'/modules/articoli/modutil.php';
|
||||
|
||||
$query = 'SELECT *, (SELECT codice FROM mg_articoli WHERE id=mg_articoli_interventi.idarticolo) AS codice, mg_articoli_interventi.id AS idriga, (SELECT prc_guadagno FROM mg_listini WHERE id=(SELECT idlistino FROM an_anagrafiche WHERE idanagrafica=(SELECT idanagrafica FROM in_interventi WHERE id=mg_articoli_interventi.idintervento) ) ) AS prc_guadagno FROM mg_articoli_interventi WHERE idintervento='.prepare($id_record).' '.Modules::getAdditionalsQuery('Magazzino').' GROUP BY idgruppo';
|
||||
$query = 'SELECT *, (SELECT codice FROM mg_articoli WHERE id=mg_articoli_interventi.idarticolo) AS codice, mg_articoli_interventi.id AS idriga, (SELECT prc_guadagno FROM mg_listini WHERE id=(SELECT idlistino FROM an_anagrafiche WHERE idanagrafica=(SELECT idanagrafica FROM in_interventi WHERE id=mg_articoli_interventi.idintervento) ) ) AS prc_guadagno FROM mg_articoli_interventi WHERE idintervento='.prepare($id_record).' '.Modules::getAdditionalsQuery('Magazzino');
|
||||
$rs = $dbo->fetchArray($query);
|
||||
|
||||
if (!empty($rs)) {
|
||||
|
@ -33,27 +33,18 @@ if (!empty($rs)) {
|
|||
</tr>';
|
||||
|
||||
foreach ($rs as $r) {
|
||||
$qserial = 'SELECT * FROM mg_articoli_interventi WHERE idintervento='.prepare($id_record).' AND idarticolo='.prepare($r['idarticolo']).' AND idgruppo='.prepare($r['idgruppo']);
|
||||
$rsserial = $dbo->fetchArray($qserial);
|
||||
// Individuazione dei seriali
|
||||
if (!empty($r['idarticolo']) && !empty($r['abilita_serial'])) {
|
||||
$serials = array_column($dbo->fetchArray('SELECT serial FROM mg_prodotti WHERE serial IS NOT NULL AND id_riga_intervento='.prepare($r['id'])), 'serial');
|
||||
$mancanti = $r['qta'] - count($serials);
|
||||
|
||||
$mancanti = 0;
|
||||
$serials = [];
|
||||
|
||||
if (!empty($r['abilita_serial'])) {
|
||||
foreach ($rsserial as $seriali) {
|
||||
$seriali['serial'] = trim($seriali['serial']);
|
||||
if (!empty($seriali['serial'])) {
|
||||
$serials[] = $seriali['serial'];
|
||||
} else {
|
||||
++$mancanti;
|
||||
}
|
||||
if ($mancanti > 0) {
|
||||
$extra = 'class="warning"';
|
||||
} else {
|
||||
$mancanti = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if ($mancanti > 0) {
|
||||
$extra = 'class="warning"';
|
||||
}
|
||||
|
||||
echo '
|
||||
<tr '.$extra.'>
|
||||
<td>
|
||||
|
@ -132,7 +123,7 @@ if (!empty($rs)) {
|
|||
|
||||
if ($r['abilita_serial']) {
|
||||
echo '
|
||||
<button type="button" class="btn btn-info btn-xs" data-toggle="tooltip" onclick="launch_modal(\''.tr('Modifica articoli').'\', \''.$rootdir.'/modules/interventi/add_serial.php?id_module='.$id_module.'&id_record='.$id_record.'&idarticolo='.$r['idriga'].'&idgruppo='.$r['idgruppo'].'\', 1);"><i class="fa fa-barcode"></i></button>';
|
||||
<button type="button" class="btn btn-info btn-xs" data-toggle="tooltip" onclick="launch_modal(\''.tr('Modifica articoli').'\', \''.$rootdir.'/modules/fatture/add_serial.php?id_module='.$id_module.'&id_record='.$id_record.'&idarticolo='.$r['idriga'].'&idriga='.$r['id'].'\', 1);"><i class="fa fa-barcode"></i></button>';
|
||||
}
|
||||
|
||||
echo '
|
||||
|
|
|
@ -144,11 +144,7 @@ switch (post('op')) {
|
|||
$sconto = ($tipo_sconto == 'PRC') ? ($prezzo * $sconto_unitario) / 100 : $sconto_unitario;
|
||||
$sconto = $sconto * $qta;
|
||||
|
||||
// Calcolo idgruppo per questo inserimento
|
||||
$ridgruppo = $dbo->fetchArray('SELECT IFNULL(MAX(idgruppo) + 1, 0) AS idgruppo FROM or_righe_ordini WHERE idordine = '.prepare($id_record));
|
||||
$idgruppo = $ridgruppo[0]['idgruppo'];
|
||||
|
||||
add_articolo_inordine($id_record, $idarticolo, $descrizione, $idiva, $qta, $prezzo_vendita * $qta, $sconto, $sconto_unitario, $tipo_sconto, '', '', '', $idgruppo);
|
||||
add_articolo_inordine($id_record, $idarticolo, $descrizione, $idiva, $qta, $prezzo_vendita * $qta, $sconto, $sconto_unitario, $tipo_sconto);
|
||||
|
||||
$_SESSION['infos'][] = tr('Articolo aggiunto!');
|
||||
}
|
||||
|
@ -177,7 +173,7 @@ switch (post('op')) {
|
|||
$iva = ($subtot - $sconto) / 100 * $rs[0]['percentuale'];
|
||||
$iva_indetraibile = $iva / 100 * $rs[0]['indetraibile'];
|
||||
|
||||
$query = 'INSERT INTO or_righe_ordini(idordine, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idgruppo, `order`) VALUES('.prepare($id_record).', '.prepare($idiva).', '.prepare($rs[0]['descrizione']).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($subtot).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', '.prepare($um).', '.prepare($qta).', (SELECT IFNULL(MAX(`idgruppo`) + 1, 0) FROM or_righe_ordini AS t WHERE idordine='.prepare($id_record).'), (SELECT IFNULL(MAX(`order`) + 1, 0) FROM or_righe_ordini AS t WHERE idordine='.prepare($id_record).'))';
|
||||
$query = 'INSERT INTO or_righe_ordini(idordine, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, `order`) VALUES('.prepare($id_record).', '.prepare($idiva).', '.prepare($rs[0]['descrizione']).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($subtot).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', '.prepare($um).', '.prepare($qta).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM or_righe_ordini AS t WHERE idordine='.prepare($id_record).'))';
|
||||
|
||||
if ($dbo->query($query)) {
|
||||
$_SESSION['infos'][] = tr('Riga aggiunta!');
|
||||
|
@ -198,7 +194,11 @@ switch (post('op')) {
|
|||
$idriga = post('idriga');
|
||||
|
||||
if ($id_record != '' && $idarticolo != '') {
|
||||
rimuovi_articolo_daordine($idarticolo, $id_record, $idriga);
|
||||
if (!rimuovi_articolo_daordine($idarticolo, $id_record, $idriga)) {
|
||||
$_SESSION['errors'][] = tr('Alcuni serial number sono già stati utilizzati!');
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// if( $dbo->query($query) ){
|
||||
// Ricalcolo inps, ritenuta e bollo
|
||||
|
@ -250,6 +250,22 @@ switch (post('op')) {
|
|||
$sconto = ($tipo_sconto == 'PRC') ? ($prezzo * $sconto_unitario) / 100 : $sconto_unitario;
|
||||
$sconto = $sconto * $qta;
|
||||
|
||||
// Lettura idarticolo dalla riga documento
|
||||
$rs = $dbo->fetchArray('SELECT idordine, idarticolo, qta, abilita_serial FROM or_righe_ordini WHERE id='.prepare($idriga));
|
||||
$idarticolo = $rs[0]['idarticolo'];
|
||||
$old_qta = $rs[0]['qta'];
|
||||
$idordine = $rs[0]['idordine'];
|
||||
$abilita_serial = $rs[0]['abilita_serial'];
|
||||
|
||||
// Controllo per gestire i serial
|
||||
if (!empty($idarticolo)) {
|
||||
if (!controlla_seriali('id_riga_ordine', $idriga, $old_qta, $qta, $dir)) {
|
||||
$_SESSION['errors'][] = tr('Alcuni serial number sono già stati utilizzati!');
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Calcolo iva
|
||||
$query = 'SELECT * FROM co_iva WHERE id='.prepare($idiva);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
|
@ -257,50 +273,9 @@ switch (post('op')) {
|
|||
$iva_indetraibile = $iva / 100 * $rs[0]['indetraibile'];
|
||||
$desc_iva = $rs[0]['descrizione'];
|
||||
|
||||
// Lettura idarticolo dalla riga documento
|
||||
$rs = $dbo->fetchArray('SELECT idgruppo, idordine, idarticolo, qta, abilita_serial FROM or_righe_ordini WHERE id='.prepare($idriga));
|
||||
$idarticolo = $rs[0]['idarticolo'];
|
||||
$old_qta = $rs[0]['qta'];
|
||||
$idgruppo = $rs[0]['idgruppo'];
|
||||
$idordine = $rs[0]['idordine'];
|
||||
$abilita_serial = $rs[0]['abilita_serial'];
|
||||
|
||||
// Modifica riga generica sul documento
|
||||
$query = 'UPDATE or_righe_ordini SET idiva='.prepare($idiva).', desc_iva='.prepare($rs[0]['descrizione']).', 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).' WHERE idgruppo='.prepare($idgruppo).' AND idordine='.prepare($idordine);
|
||||
$query = 'UPDATE or_righe_ordini SET idiva='.prepare($idiva).', desc_iva='.prepare($rs[0]['descrizione']).', 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).', qta='.prepare($qta).' WHERE id='.prepare($idriga);
|
||||
if ($dbo->query($query)) {
|
||||
// Modifica della quantità
|
||||
$dbo->query('UPDATE or_righe_ordini SET qta='.prepare($qta).' WHERE idgruppo='.prepare($idgruppo));
|
||||
|
||||
// Modifica per gestire i serial
|
||||
if (!empty($idarticolo)) {
|
||||
$new_qta = $qta - $old_qta;
|
||||
$new_qta = ($old_qta < $qta) ? $new_qta : -$new_qta;
|
||||
|
||||
if (!empty($abilita_serial)) {
|
||||
if ($old_qta < $qta) {
|
||||
for ($i = 0; $i < $new_qta; ++$i) {
|
||||
$dbo->query('INSERT INTO or_righe_ordini(idordine, idarticolo, idconto, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idgruppo, `order`) SELECT idordine, idarticolo, idconto, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idgruppo, `order` FROM or_righe_ordini WHERE id='.prepare($idriga));
|
||||
}
|
||||
} else {
|
||||
if ($dir == 'uscita') {
|
||||
if ($new_qta > $dbo->fetchArray("SELECT COUNT(*) AS rimovibili FROM or_righe_ordini WHERE serial NOT IN (SELECT serial FROM vw_serials WHERE dir = 'entrata') AND idgruppo=".prepare($idgruppo).' AND idordine='.prepare($idordine))[0]['rimovibili']) {
|
||||
$_SESSION['errors'][] = tr('Alcuni serial number sono già stati utilizzati!');
|
||||
|
||||
return;
|
||||
} else {
|
||||
$deletes = $dbo->fetchArray('SELECT id FROM or_righe_ordini AS t WHERE idgruppo = '.prepare($idgruppo).' AND idordine='.prepare($idordine)." AND serial NOT IN (SELECT serial FROM vw_serials WHERE dir = 'entrata') ORDER BY serial ASC LIMIT ".$new_qta);
|
||||
}
|
||||
} else {
|
||||
$deletes = $dbo->fetchArray('SELECT id FROM or_righe_ordini AS t WHERE idgruppo = '.prepare($idgruppo).' AND idordine='.prepare($idordine).' ORDER BY serial ASC LIMIT '.$new_qta);
|
||||
}
|
||||
|
||||
foreach ((array) $deletes as $delete) {
|
||||
$dbo->query('DELETE FROM or_righe_ordini WHERE id = '.prepare($delete['id']));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$_SESSION['infos'][] = tr('Riga modificata!');
|
||||
|
||||
// Ricalcolo inps, ritenuta e bollo
|
||||
|
@ -315,9 +290,13 @@ switch (post('op')) {
|
|||
|
||||
// eliminazione ordine
|
||||
case 'delete':
|
||||
if ($dir == 'uscita') {
|
||||
$non_rimovibili = $dbo->fetchArray("SELECT COUNT(*) AS non_rimovibili FROM or_righe_ordini WHERE serial IN (SELECT serial FROM vw_serials WHERE dir = 'entrata') AND idordine=".prepare($id_record))[0]['non_rimovibili'];
|
||||
if ($non_rimovibili != 0) {
|
||||
// Se ci sono degli articoli collegati (ma non collegati a preventivi o interventi) li rimetto nel magazzino
|
||||
$query = 'SELECT id, idarticolo FROM or_righe_ordini WHERE idordine='.prepare($id_record).' AND NOT idarticolo=0';
|
||||
$rs = $dbo->fetchArray($query);
|
||||
|
||||
foreach ($rs as $value) {
|
||||
$non_rimovibili = seriali_non_rimuovibili('id_riga_documenti', $value['id'], $dir);
|
||||
if (!empty($non_rimovibili)) {
|
||||
$_SESSION['errors'][] = tr('Alcuni serial number sono già stati utilizzati!');
|
||||
|
||||
return;
|
||||
|
@ -331,16 +310,18 @@ switch (post('op')) {
|
|||
break;
|
||||
|
||||
case 'add_serial':
|
||||
$idgruppo = $post['idgruppo'];
|
||||
$serial = $post['serial'];
|
||||
$idriga = $post['idriga'];
|
||||
$idarticolo = $post['idarticolo'];
|
||||
|
||||
$q = 'SELECT * FROM or_righe_ordini WHERE idordine='.prepare($id_record).' AND idgruppo='.prepare($idgruppo).' ORDER BY id';
|
||||
$rs = $dbo->fetchArray($q);
|
||||
|
||||
foreach ($rs as $i => $r) {
|
||||
$dbo->query('UPDATE or_righe_ordini SET serial='.prepare($serial[$i]).' WHERE id='.prepare($r['id']));
|
||||
$serials = (array) $post['serial'];
|
||||
foreach ($serials as $key => $value) {
|
||||
if (empty($value)) {
|
||||
unset($serials[$key]);
|
||||
}
|
||||
}
|
||||
|
||||
$dbo->sync('mg_prodotti', ['id_riga_ordine' => $idriga, 'dir' => $dir, 'id_articolo' => $idarticolo], ['serial' => $serials]);
|
||||
|
||||
break;
|
||||
|
||||
case 'update_position':
|
||||
|
|
|
@ -1,108 +0,0 @@
|
|||
<?php
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
$module = Modules::getModule($id_module);
|
||||
|
||||
if ($module['name'] == 'Ordini cliente') {
|
||||
$dir = 'entrata';
|
||||
} else {
|
||||
$dir = 'uscita';
|
||||
}
|
||||
|
||||
$idarticolo = get('idarticolo');
|
||||
$idgruppo = get('idgruppo');
|
||||
|
||||
$q2 = 'SELECT * FROM or_righe_ordini INNER JOIN mg_articoli ON or_righe_ordini.idarticolo=mg_articoli.id WHERE or_righe_ordini.idordine='.prepare($id_record).' AND or_righe_ordini.idgruppo='.prepare($idgruppo);
|
||||
$rs2 = $dbo->fetchArray($q2);
|
||||
|
||||
echo '
|
||||
<p>'.tr('Articolo').': '.$rs2[0]['codice'].' - '.$rs2[0]['descrizione'].'</p>
|
||||
|
||||
<form action="'.$rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'" method="post">
|
||||
<input type="hidden" name="op" value="add_serial">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
<input type="hidden" name="idgruppo" value="'.$rs2[0]['idgruppo'].'">
|
||||
<input type="hidden" name="dir" value="'.$dir.'">';
|
||||
|
||||
$serials = [];
|
||||
$array = array_column($rs2, 'serial');
|
||||
foreach ($array as $value) {
|
||||
if (!empty($value)) {
|
||||
$serials[] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
if ($dir == 'entrata') {
|
||||
echo '
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "select", "label": "'.tr('Serial').'", "name": "serial[]", "multiple": 1, "value": "'.implode(',', $serials).'", "values": "query=SELECT serial AS id, serial AS descrizione FROM vw_serials WHERE dir=\'uscita\' AND serial NOT IN (SELECT serial FROM vw_serials WHERE dir=\'entrata\' AND record != \'fat-'.$id_record.'\')", "extra": "data-maximum=\"'.count($rs2).'\"" ]}
|
||||
</div>
|
||||
</div>';
|
||||
} else {
|
||||
echo '
|
||||
<p>'.tr('Inserisci i numeri seriali degli articoli aggiunti:').'</p>';
|
||||
|
||||
foreach ($array as $key => $serial) {
|
||||
if ($key % 3 == 0) {
|
||||
echo '
|
||||
<div class="row">';
|
||||
}
|
||||
|
||||
$res = $dbo->fetchArray("SELECT record FROM vw_serials WHERE dir='entrata' AND serial = ".prepare($serial));
|
||||
|
||||
echo '
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "name": "serial[]", "value": "'.$serial.'"'.(!empty($res) ? ', "readonly": 1' : '').' ]}';
|
||||
|
||||
if (!empty($res)) {
|
||||
$pieces = explode('-', $res[0]['record']);
|
||||
switch ($pieces[0]) {
|
||||
case 'int':
|
||||
$modulo = 'Interventi';
|
||||
break;
|
||||
|
||||
case 'ddt':
|
||||
$modulo = 'Ddt di vendita';
|
||||
break;
|
||||
|
||||
case 'fat':
|
||||
$modulo = 'Fatture di vendita';
|
||||
break;
|
||||
|
||||
case 'ord':
|
||||
$modulo = 'Ordini cliente';
|
||||
break;
|
||||
}
|
||||
|
||||
echo '
|
||||
'.Modules::link($modulo, $pieces[1], tr('Visualizza vendita').' <i class="fa fa-external-link"></i>', null);
|
||||
}
|
||||
echo '
|
||||
</div>';
|
||||
|
||||
if (($key + 1) % 3 == 0) {
|
||||
echo '
|
||||
</div>
|
||||
<br>';
|
||||
}
|
||||
}
|
||||
if (($key + 1) % 3 != 0) {
|
||||
echo '
|
||||
</div>';
|
||||
}
|
||||
}
|
||||
|
||||
echo '
|
||||
|
||||
<!-- PULSANTI -->
|
||||
<div class="row">
|
||||
<div class="col-md-12 text-right">
|
||||
<button type="submit" class="btn btn-primary pull-right"><i class="fa fa-barcode"></i> '.tr('Aggiorna').'</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>';
|
||||
|
||||
echo '
|
||||
<script src="'.$rootdir.'/lib/init.js"></script>';
|
|
@ -1,252 +0,0 @@
|
|||
<?php
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
$module = Modules::getModule($id_module);
|
||||
|
||||
if ($module['name'] == 'Ordini cliente') {
|
||||
$dir = 'entrata';
|
||||
$module_name = 'Ddt di vendita';
|
||||
} else {
|
||||
$dir = 'uscita';
|
||||
$module_name = 'Ddt di acquisto';
|
||||
}
|
||||
|
||||
// Info documento
|
||||
$rs = $dbo->fetchArray("SELECT * FROM or_ordini WHERE id=".prepare($id_record));
|
||||
$numero = (!empty($rs[0]['numero_esterno'])) ? $rs[0]['numero_esterno'] : $rs[0]['numero'];
|
||||
$idanagrafica = $rs[0]['idanagrafica'];
|
||||
$idpagamento = $rs[0]['idpagamento'];
|
||||
$idconto = $rs[0]['idconto'];
|
||||
|
||||
/*
|
||||
Form di inserimento riga documento
|
||||
*/
|
||||
|
||||
echo "<p>Ordine numero $numero</p>";
|
||||
echo "Seleziona le righe che vuoi inserire nel ddt e la quantità:<br><br>";
|
||||
|
||||
echo '<form id="link_form" action="'.$rootdir.'/editor.php?id_module='.Modules::getModule($module_name)['id'].'&id_record='.$id_record."\" method=\"post\">";
|
||||
|
||||
// Altri id utili
|
||||
echo " <input type='hidden' name='idordine' value='".$id_record."' />";
|
||||
echo " <input type='hidden' name='idanagrafica' value='".$idanagrafica."' />";
|
||||
echo " <input type='hidden' name='idconto' value='".$idconto."' />";
|
||||
echo " <input type='hidden' name='idpagamento' value='".$idpagamento."' />";
|
||||
|
||||
echo " <input type='hidden' name='op' value='ddt_da_ordine'>";
|
||||
echo " <input type='hidden' name='backto' value='record-edit'>";
|
||||
echo " <input type='hidden' name='dir' value='".$dir."'>";
|
||||
|
||||
// Selezione articoli dell'ordine da portare nel ddt
|
||||
$query = "SELECT * FROM or_ordini INNER JOIN or_righe_ordini ON or_ordini.id=or_righe_ordini.idordine WHERE or_ordini.id='".$id_record."' GROUP BY idgruppo HAVING qta_rimanente > 0";
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$n = sizeof($rs);
|
||||
|
||||
if ($n > 0) {
|
||||
$show_btn = true;
|
||||
|
||||
echo " <div class='form'>";
|
||||
echo " <div class='col-md-4'>";
|
||||
echo " <label>Data ddt</label>";
|
||||
echo " <input type='text' class='form-control text-center datepicker ' name='data' id='data2' value='".date('d/m/Y')."'>";
|
||||
echo " </div>"; ?>
|
||||
|
||||
<div class="clearfix"></div>
|
||||
<br>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<table class="table table-striped table-hover table-condensed">
|
||||
|
||||
<tr>
|
||||
<th>Descrizione</th>
|
||||
<th width="10%">Q.tà</th>
|
||||
<th width="15%">Q.tà da evadere</th>
|
||||
<th width="20%">Subtot.</th>
|
||||
<th width="10%">Da evadere</th>
|
||||
</tr>
|
||||
|
||||
<?php
|
||||
$totale = 0.00;
|
||||
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
// Descrizione
|
||||
echo "<tr>";
|
||||
echo "<td class='text-left' >";
|
||||
|
||||
echo "<input type='hidden' name='idrigaordine[]' value=\"".$rs[$i]['id']."\" />";
|
||||
echo "<input type='hidden' id='idarticolo_".$i."' name='idarticolo[]' value=\"".$rs[$i]['idarticolo']."\" />";
|
||||
echo "<input type='hidden' id='descrizione_".$i."' name='descrizione[]' value=\"".$rs[$i]['descrizione']."\" />";
|
||||
|
||||
echo nl2br($rs[$i]['descrizione']).'<small>';
|
||||
if ($rs[$i]['lotto'] != '') {
|
||||
echo '<br>Lotto: '.$rs[$i]['lotto'];
|
||||
}
|
||||
if ($rs[$i]['serial'] != '') {
|
||||
echo '<br>SN: '.$rs[$i]['serial'];
|
||||
}
|
||||
if ($rs[$i]['altro'] != '') {
|
||||
echo '<br>'.$rs[$i]['altro'];
|
||||
}
|
||||
echo "</small>";
|
||||
echo "</td>";
|
||||
|
||||
// Q.tà rimanente
|
||||
echo "<td class='text-left' id='rimanente_".$i."'>";
|
||||
echo "<input type='hidden' id='qtamax_".$i."' value='".($rs[$i]['qta'] - $rs[$i]['qta_evasa'])."' />";
|
||||
echo "<input type='hidden' id='um_".$i."' name='um[]' value='".$rs[$i]['um']."' />";
|
||||
echo($rs[$i]['qta'] - $rs[$i]['qta_evasa'])."";
|
||||
echo "</td>";
|
||||
|
||||
// Q.tà da evadere
|
||||
echo "<td class='text-left' >";
|
||||
echo "<input class='form-control inputmask-decimal' type='text' id='qta_".$i."' name='qta_da_evadere[]' value='".($rs[$i]['qta'] - $rs[$i]['qta_evasa'])."' onkeyup=\"ricalcola_subtotale_riga(".$i.");\" />";
|
||||
echo "</td>";
|
||||
|
||||
// Subtotale
|
||||
$subtotale = $rs[$i]['subtotale'] / $rs[$i]['qta'] * ($rs[$i]['qta'] - $rs[$i]['qta_evasa']);
|
||||
$sconto = $rs[$i]['sconto'] / $rs[$i]['qta'] * ($rs[$i]['qta'] - $rs[$i]['qta_evasa']);
|
||||
$iva = $rs[$i]['iva'] / $rs[$i]['qta'] * ($rs[$i]['qta'] - $rs[$i]['qta_evasa']);
|
||||
echo "<td class='text-right'>";
|
||||
echo " <input type='hidden' id='subtot_".$i."' name='subtot[]' value=\"".Translator::numberToLocale($rs[$i]['subtotale'] / $rs[$i]['qta'])."\" />";
|
||||
echo " <input type='hidden' id='sconto_".$i."' name='sconto[]' value=\"".Translator::numberToLocale($rs[$i]['sconto'] / $rs[$i]['qta'])."\" />";
|
||||
echo " <input type='hidden' id='idiva_".$i."' name='idiva[]' value=\"".$rs[$i]['idiva']."\" />";
|
||||
echo " <input type='hidden' id='iva_".$i."' name='iva[]' value=\"".Translator::numberToLocale($rs[$i]['iva'] / $rs[$i]['qta'])."\" />";
|
||||
echo " <big id='subtotale_".$i."'>".Translator::numberToLocale($subtotale - $sconto + $iva)." €</big><br><small class='help-block' id='subtotaledettagli_".$i."'>".Translator::numberToLocale($subtotale - $sconto).' + '.Translator::numberToLocale($iva)."</small>";
|
||||
echo "</td>";
|
||||
|
||||
// Checkbox - da evadere?
|
||||
echo "<td class='text-left'>";
|
||||
echo " <input type='checkbox' checked='checked' id='checked_".$i."' name='evadere[]' value='on' onclick=\"ricalcola_subtotale_riga(".$i.");\" />";
|
||||
echo "</td></tr>";
|
||||
|
||||
$totale += $subtotale - $sconto + $iva;
|
||||
}
|
||||
|
||||
// Totale
|
||||
echo "<tr><td colspan='3' align='right' class='text-right'>";
|
||||
echo " <b>Totale:</b>";
|
||||
echo "</td>";
|
||||
|
||||
echo "<td class='text-right'>";
|
||||
echo " <big id='totale'>".Translator::numberToLocale($totale)." €</big>";
|
||||
echo "</td><td></td></tr>";
|
||||
echo "</table>";
|
||||
echo "</div>";
|
||||
} else {
|
||||
$show_btn = false;
|
||||
echo ' <b>'.tr('Non ci sono articoli da evadere in questo ordine')."...</b><br>";
|
||||
}
|
||||
|
||||
echo " <div class=\"clearfix\"></div>";
|
||||
echo " </div>";
|
||||
echo '
|
||||
<!-- PULSANTI -->
|
||||
<div class="row">
|
||||
<div class="col-md-12 text-right">';
|
||||
|
||||
if ($show_btn) {
|
||||
if ($dir == 'entrata') {
|
||||
echo '
|
||||
<a onclick="creaddt_vendita();" class="btn btn-primary"><i class="fa fa-plus"></i> '.tr('Crea ddt di vendita').'</a>';
|
||||
} else {
|
||||
echo '
|
||||
<a onclick="creaddt_acquisto();" class="btn btn-primary"><i class="fa fa-plus"></i> '.tr('Crea ddt di acquisto').'</a>';
|
||||
}
|
||||
}
|
||||
echo '
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
echo "</form>";
|
||||
?>
|
||||
|
||||
|
||||
<script type="text/javascript">
|
||||
$(document).ready( function(){
|
||||
start_superselect();
|
||||
start_inputmask();
|
||||
$('.datepicker').datepicker();
|
||||
|
||||
});
|
||||
|
||||
function creaddt_vendita(){
|
||||
$("#link_form").submit();
|
||||
}
|
||||
|
||||
function creaddt_acquisto(){
|
||||
$("#link_form").submit();
|
||||
}
|
||||
|
||||
function ricalcola_subtotale_riga( r ){
|
||||
subtot = $("#subtot_"+r).val().toEnglish();
|
||||
|
||||
sconto = $("#sconto_"+r).val().toEnglish();
|
||||
subtot = subtot-sconto;
|
||||
|
||||
qta = $("#qta_"+r).val().toEnglish();
|
||||
|
||||
if( isNaN(qta) ){
|
||||
qta = 0;
|
||||
}
|
||||
|
||||
qtamax = $("#qtamax_"+r).val().toEnglish();
|
||||
|
||||
if( isNaN(qtamax) ){
|
||||
qtamax = 0;
|
||||
}
|
||||
|
||||
iva = $("#iva_"+r).val().toEnglish();
|
||||
|
||||
|
||||
// Se inserisco una quantità da evadere maggiore di quella rimanente, la imposto al massimo possibile
|
||||
if( qta>qtamax ){
|
||||
qta = qtamax.toFixedLocale(2);
|
||||
$('#qta_'+r).val( qta );
|
||||
}
|
||||
|
||||
// Se tolgo la spunta della casella dell'evasione devo azzerare i conteggi
|
||||
if( !$('#checked_'+r).is(':checked') ){
|
||||
qta = 0;
|
||||
}
|
||||
|
||||
subtotale = (subtot*qta+iva*qta).toFixedLocale(2);
|
||||
|
||||
$("#subtotale_"+r).html(subtotale+" €");
|
||||
$("#subtotaledettagli_"+r).html( (subtot*qta).toFixed(2)+" + " + (iva*qta).toFixed(2) );
|
||||
|
||||
ricalcola_totale();
|
||||
}
|
||||
|
||||
|
||||
function ricalcola_totale(){
|
||||
r = 0;
|
||||
totale = 0.00;
|
||||
$('input[id*=qta_]').each( function(){
|
||||
qta = $(this).val().toEnglish();
|
||||
|
||||
if( !$('#checked_'+r).is(':checked') || isNaN(qta) ){
|
||||
qta = 0;
|
||||
}
|
||||
|
||||
subtot = $("#subtot_"+r).val().toEnglish();
|
||||
|
||||
sconto = $("#sconto_"+r).val().toEnglish();
|
||||
subtot = subtot-sconto;
|
||||
|
||||
iva = $("#iva_"+r).val().toEnglish();
|
||||
|
||||
totale += subtot*qta+iva*qta;
|
||||
|
||||
r++;
|
||||
});
|
||||
|
||||
$('#totale').html( (totale.toFixedLocale()) + " €" );
|
||||
|
||||
if( totale==0 )
|
||||
$('#submit_btn').hide();
|
||||
else
|
||||
$('#submit_btn').show();
|
||||
}
|
||||
</script>
|
|
@ -1,245 +0,0 @@
|
|||
<?php
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
$module = Modules::getModule($id_module);
|
||||
|
||||
if ($module['name'] == 'Ordini cliente') {
|
||||
$dir = 'entrata';
|
||||
$module_name = 'Fatture di vendita';
|
||||
} else {
|
||||
$dir = 'uscita';
|
||||
$module_name = 'Fatture di acquisto';
|
||||
}
|
||||
|
||||
// Info documento
|
||||
$rs = $dbo->fetchArray('SELECT * FROM or_ordini WHERE id='.prepare($id_record));
|
||||
(!empty($rs[0]['numero_esterno'])) ? $numero = $rs[0]['numero_esterno'] : $numero = $rs[0]['numero'];
|
||||
$idanagrafica = $rs[0]['idanagrafica'];
|
||||
$idpagamento = $rs[0]['idpagamento'];
|
||||
$idconto = $rs[0]['idconto'];
|
||||
|
||||
/*
|
||||
Form di inserimento riga documento
|
||||
*/
|
||||
|
||||
echo "<h4>Ordine numero $numero</h4>\n";
|
||||
echo "Seleziona le righe che vuoi inserire nella fattura e la quantità:<br><br>\n";
|
||||
|
||||
echo '<form id="link_form" action="'.$rootdir.'/editor.php?id_module='.Modules::getModule($module_name)['id'].'&id_record='.$id_record."\" method=\"post\">\n";
|
||||
|
||||
// Altri id utili
|
||||
echo " <input type='hidden' name='idordine' value='".$id_record."' />\n";
|
||||
echo " <input type='hidden' name='idanagrafica' value='".$idanagrafica."' />\n";
|
||||
echo " <input type='hidden' name='idconto' value='".$idconto."' />\n";
|
||||
echo " <input type='hidden' name='idpagamento' value='".$idpagamento."' />\n";
|
||||
|
||||
echo " <input type='hidden' name='op' value='fattura_da_ordine'>\n";
|
||||
echo " <input type='hidden' name='backto' value='record-edit'>\n";
|
||||
echo " <input type='hidden' name='dir' value='".$dir."'>\n";
|
||||
|
||||
// Selezione articoli dell'ordine da portare nella fattura
|
||||
$query = "SELECT * FROM or_ordini INNER JOIN or_righe_ordini ON or_ordini.id=or_righe_ordini.idordine WHERE or_ordini.id='".$id_record."' GROUP BY idgruppo HAVING qta_rimanente > 0";
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$n = sizeof($rs);
|
||||
|
||||
if ($n > 0) {
|
||||
$show_btn = true;
|
||||
|
||||
echo " <div class='form'>\n";
|
||||
echo " <div class='col-md-4'>\n";
|
||||
echo " <label>Data fattura</label>\n";
|
||||
echo " <input type='text' class='form-control text-center datepicker ' name='data' id='data2' value='".date('d/m/Y')."' />\n";
|
||||
echo " </div>\n"; ?>
|
||||
|
||||
<div class="clearfix"></div>
|
||||
<br>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<table class="table table-striped table-hover table-condensed">
|
||||
|
||||
<tr>
|
||||
<th>Descrizione</th>
|
||||
<th width="10%">Q.tà</th>
|
||||
<th width="15%">Q.tà da evadere</th>
|
||||
<th width="20%">Subtot.</th>
|
||||
<th width="10%">Da evadere</th>
|
||||
</tr>
|
||||
|
||||
<?php
|
||||
$totale = 0.00;
|
||||
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
// Descrizione
|
||||
echo " <tr>\n";
|
||||
echo " <td class='text-left' >\n";
|
||||
|
||||
echo " <input type='hidden' name='idrigaordine[]' value=\"".$rs[$i]['id']."\" />\n";
|
||||
echo " <input type='hidden' id='idarticolo_".$i."' name='idarticolo[]' value=\"".$rs[$i]['idarticolo']."\" />\n";
|
||||
echo " <input type='hidden' id='descrizione_".$i."' name='descrizione[]' value=\"".$rs[$i]['descrizione']."\" />\n";
|
||||
|
||||
echo nl2br($rs[$i]['descrizione']).'<small>';
|
||||
if ($rs[$i]['lotto'] != '') {
|
||||
echo '<br>Lotto: '.$rs[$i]['lotto'];
|
||||
}
|
||||
if ($rs[$i]['serial'] != '') {
|
||||
echo '<br>SN: '.$rs[$i]['serial'];
|
||||
}
|
||||
if ($rs[$i]['altro'] != '') {
|
||||
echo '<br>'.$rs[$i]['altro'];
|
||||
}
|
||||
echo " </small>\n";
|
||||
echo " </td>\n";
|
||||
|
||||
// Q.tà rimanente
|
||||
echo " <td class='text-left' id='rimanente_".$i."'>\n";
|
||||
echo " <input type='hidden' id='qtamax_".$i."' value='".($rs[$i]['qta'] - $rs[$i]['qta_evasa'])."' />\n";
|
||||
echo " <input type='hidden' id='um_".$i."' name='um[]' value='".$rs[$i]['um']."' />\n";
|
||||
echo($rs[$i]['qta'] - $rs[$i]['qta_evasa'])."\n";
|
||||
echo " </td>\n";
|
||||
|
||||
// Q.tà da evadere
|
||||
echo " <td class='text-left' >\n";
|
||||
echo " <input class='form-control inputmask-decimal' type='text' id='qta_".$i."' name='qta_da_evadere[]' value='".($rs[$i]['qta'] - $rs[$i]['qta_evasa'])."' onkeyup=\"ricalcola_subtotale_riga(".$i.");\" />\n";
|
||||
echo " </td>\n";
|
||||
|
||||
// Subtotale
|
||||
$subtotale = $rs[$i]['subtotale'] / $rs[$i]['qta'] * ($rs[$i]['qta'] - $rs[$i]['qta_evasa']);
|
||||
$sconto = $rs[$i]['sconto'] / $rs[$i]['qta'] * ($rs[$i]['qta'] - $rs[$i]['qta_evasa']);
|
||||
$iva = $rs[$i]['iva'] / $rs[$i]['qta'] * ($rs[$i]['qta'] - $rs[$i]['qta_evasa']);
|
||||
echo " <td class='text-right'>\n";
|
||||
echo " <input type='hidden' id='subtot_".$i."' name='subtot[]' value=\"".Translator::numberToLocale($rs[$i]['subtotale'] / $rs[$i]['qta'])."\" />\n";
|
||||
echo " <input type='hidden' id='sconto_".$i."' name='sconto[]' value=\"".Translator::numberToLocale($rs[$i]['sconto'] / $rs[$i]['qta'])."\" />\n";
|
||||
echo " <input type='hidden' id='idiva_".$i."' name='idiva[]' value=\"".$rs[$i]['idiva']."\" />\n";
|
||||
echo " <input type='hidden' id='iva_".$i."' name='iva[]' value=\"".Translator::numberToLocale($rs[$i]['iva'] / $rs[$i]['qta'])."\" />\n";
|
||||
echo " <big id='subtotale_".$i."'>".Translator::numberToLocale($subtotale - $sconto + $iva)." €</big><br><small class='help-block' id='subtotaledettagli_".$i."'>".Translator::numberToLocale($subtotale - $sconto).' + '.Translator::numberToLocale($iva)."</small>\n";
|
||||
echo " </td>\n";
|
||||
|
||||
// Checkbox - da evadere?
|
||||
echo " <td class='text-left'>\n";
|
||||
echo " <input type='checkbox' checked='checked' id='checked_".$i."' name='evadere[]' value='on' onclick=\"ricalcola_subtotale_riga(".$i.");\" />\n";
|
||||
echo " </td></tr>\n";
|
||||
|
||||
$totale += $subtotale - $sconto + $iva;
|
||||
}
|
||||
|
||||
// Totale
|
||||
echo " <tr><td colspan='3' align='right' class='text-right'>\n";
|
||||
echo " <b>Totale:</b>\n";
|
||||
echo " </td>\n";
|
||||
|
||||
echo " <td class='text-right'>\n";
|
||||
echo " <big id='totale'>".Translator::numberToLocale($totale)." €</big>\n";
|
||||
echo " </td><td></td></tr>\n";
|
||||
echo " </table>\n";
|
||||
echo " </div>\n";
|
||||
echo "</div>\n";
|
||||
} else {
|
||||
$show_btn = false;
|
||||
echo '<b>'.tr('Non ci sono articoli da evadere in questo ordine')."...</b><br>\n";
|
||||
}
|
||||
?>
|
||||
|
||||
|
||||
|
||||
<?php
|
||||
if ($show_btn) {
|
||||
if ($dir == 'entrata') {
|
||||
echo "<a onmouseover=\"this.style.cursor='pointer';\" id='submit_btn' onclick=\"creafattura_vendita();\" class=\"btn btn-primary pull-right\" ><i class=\"fa fa-plus\"></i> Crea fattura di vendita</a>\n";
|
||||
} else {
|
||||
echo "<a onmouseover=\"this.style.cursor='pointer';\" id='submit_btn' onclick=\"creafattura_acquisto();\" class=\"btn btn-primary pull-right\" ><i class=\"fa fa-plus\"></i> Crea fattura di acquisto</a>\n";
|
||||
}
|
||||
}
|
||||
|
||||
echo "</form>\n";
|
||||
?>
|
||||
<div class="clearfix"></div>
|
||||
|
||||
<script type="text/javascript">
|
||||
$(document).ready( function(){
|
||||
start_superselect();
|
||||
start_inputmask();
|
||||
$('.datepicker').datepicker();
|
||||
|
||||
});
|
||||
|
||||
function creafattura_vendita(){
|
||||
$("#link_form").submit();
|
||||
}
|
||||
|
||||
function creafattura_acquisto(){
|
||||
$("#link_form").submit();
|
||||
}
|
||||
|
||||
function ricalcola_subtotale_riga( r ){
|
||||
subtot = $("#subtot_"+r).val().toEnglish();
|
||||
|
||||
sconto = $("#sconto_"+r).val().toEnglish();
|
||||
subtot = subtot-sconto;
|
||||
|
||||
qta = $("#qta_"+r).val().toEnglish();
|
||||
|
||||
if( isNaN(qta) ){
|
||||
qta = 0;
|
||||
}
|
||||
|
||||
qtamax = $("#qtamax_"+r).val().toEnglish();
|
||||
|
||||
if( isNaN(qtamax) ){
|
||||
qtamax = 0;
|
||||
}
|
||||
|
||||
iva = $("#iva_"+r).val().toEnglish();
|
||||
|
||||
|
||||
// Se inserisco una quantità da evadere maggiore di quella rimanente, la imposto al massimo possibile
|
||||
if( qta>qtamax ){
|
||||
qta = qtamax.toFixedLocale(2);
|
||||
$('#qta_'+r).val( qta );
|
||||
}
|
||||
|
||||
// Se tolgo la spunta della casella dell'evasione devo azzerare i conteggi
|
||||
if( !$('#checked_'+r).is(':checked') ){
|
||||
qta = 0;
|
||||
}
|
||||
|
||||
subtotale = (subtot*qta+iva*qta).toFixedLocale();
|
||||
|
||||
$("#subtotale_"+r).html(subtotale+" €");
|
||||
$("#subtotaledettagli_"+r).html( (subtot*qta).toFixed(2)+" + " + (iva*qta).toFixed(2) );
|
||||
|
||||
ricalcola_totale();
|
||||
}
|
||||
|
||||
|
||||
function ricalcola_totale(){
|
||||
r = 0;
|
||||
totale = 0.00;
|
||||
$('input[id*=qta_]').each( function(){
|
||||
qta = $(this).val().toEnglish();
|
||||
|
||||
if( !$('#checked_'+r).is(':checked') || isNaN(qta) ){
|
||||
qta = 0;
|
||||
}
|
||||
|
||||
subtot = $("#subtot_"+r).val().toEnglish();
|
||||
|
||||
sconto = $("#sconto_"+r).val().toEnglish();
|
||||
subtot = subtot-sconto;
|
||||
|
||||
iva = $("#iva_"+r).val().toEnglish();
|
||||
|
||||
totale += subtot*qta+iva*qta;
|
||||
|
||||
r++;
|
||||
});
|
||||
|
||||
$('#totale').html( (totale.toFixedLocale()) + " €" );
|
||||
|
||||
if( totale==0 )
|
||||
$('#submit_btn').hide();
|
||||
else
|
||||
$('#submit_btn').show();
|
||||
}
|
||||
</script>
|
|
@ -100,8 +100,8 @@ if ($module['name'] == 'Ordini cliente') {
|
|||
<div class="pull-right">
|
||||
<!-- Stampe -->
|
||||
<?php if( $records[0]['stato'] != 'Evaso' ){ ?>
|
||||
<a class="btn btn-sm btn-info" data-href="<?php echo $rootdir ?>/modules/ordini/creaddt.php?id_module=<?php echo $id_module ?>&&id_record=<?php echo $id_record ?>" data-toggle="modal" data-title="Crea ddt" data-target="#bs-popup" ><i class="fa fa-magic"></i> Crea ddt da ordine...</i></a>
|
||||
<a class="btn btn-sm btn-info" data-href="<?php echo $rootdir ?>/modules/ordini/creafattura.php?id_module=<?php echo $id_module ?>&&id_record=<?php echo $id_record ?>" data-toggle="modal" data-title="Crea fattura" data-target="#bs-popup" ><i class="fa fa-magic"></i> Crea fattura da ordine...</i></a>
|
||||
<a class="btn btn-sm btn-info" data-href="<?php echo $rootdir ?>/modules/fatture/crea_documento.php?id_module=<?php echo $id_module ?>&&id_record=<?php echo $id_record ?>&documento=ddt" data-toggle="modal" data-title="Crea ddt" data-target="#bs-popup" ><i class="fa fa-magic"></i> Crea ddt da ordine...</i></a>
|
||||
<a class="btn btn-sm btn-info" data-href="<?php echo $rootdir ?>/modules/fatture/crea_documento.php?id_module=<?php echo $id_module ?>&id_record=<?php echo $id_record ?>&documento=fattura" data-toggle="modal" data-title="Crea fattura" data-target="#bs-popup" ><i class="fa fa-magic"></i> Crea fattura da ordine...</i></a>
|
||||
<?php } ?>
|
||||
|
||||
<a class="btn btn-sm btn-info" target="_blank" href="<?php echo $rootdir ?>/pdfgen.php?ptype=ordini&idordine=<?php echo $id_record ?>" data-title="Stampa ordine"><i class="fa fa-print"></i> Stampa ordine</a>
|
||||
|
|
|
@ -124,7 +124,7 @@ function get_ivaindetraibile_ordine($idordine)
|
|||
* $qta float quantità dell'articolo nell'ordine
|
||||
* $prezzo float prezzo totale degli articoli (prezzounitario*qtà).
|
||||
*/
|
||||
function add_articolo_inordine($idordine, $idarticolo, $descrizione, $idiva, $qta, $prezzo, $sconto = 0, $sconto_unitario = 0, $tipo_sconto = 'UNT', $lotto = '', $serial = '', $altro = '', $idgruppo = 0)
|
||||
function add_articolo_inordine($idordine, $idarticolo, $descrizione, $idiva, $qta, $prezzo, $sconto = 0, $sconto_unitario = 0, $tipo_sconto = 'UNT')
|
||||
{
|
||||
global $dbo;
|
||||
global $dir;
|
||||
|
@ -145,20 +145,7 @@ function add_articolo_inordine($idordine, $idarticolo, $descrizione, $idiva, $qt
|
|||
|
||||
if ($qta > 0) {
|
||||
$rsart = $dbo->fetchArray('SELECT abilita_serial FROM mg_articoli WHERE id='.prepare($idarticolo));
|
||||
$qta_in = !empty($rsart[0]['abilita_serial']) ? $qta : 1;
|
||||
|
||||
for ($i = 0; $i < $qta_in; ++$i) {
|
||||
/*
|
||||
$iva = $iva / $qta_in;
|
||||
$qta = $qta / $qta_in;
|
||||
$ubtotale = $subtotale / $qta_in;
|
||||
$sconto = $sconto / $qta_in;
|
||||
|
||||
$iva_indetraibile = $iva / 100 * $rs2[0]['indetraibile'];
|
||||
*/
|
||||
|
||||
$dbo->query('INSERT INTO or_righe_ordini(idordine, idarticolo, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, abilita_serial, idgruppo, `order`) VALUES ('.prepare($idordine).', '.prepare($idarticolo).', '.prepare($idiva).', '.prepare($rs2[0]['descrizione']).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($prezzo).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', '.prepare($um).', '.prepare($qta).', '.prepare($rsart[0]['abilita_serial']).', '.prepare($idgruppo).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM or_righe_ordini AS t WHERE idordine='.prepare($idordine).'))');
|
||||
}
|
||||
$dbo->query('INSERT INTO or_righe_ordini(idordine, idarticolo, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, abilita_serial, `order`) VALUES ('.prepare($idordine).', '.prepare($idarticolo).', '.prepare($idiva).', '.prepare($rs2[0]['descrizione']).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($prezzo).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', '.prepare($um).', '.prepare($qta).', '.prepare($rsart[0]['abilita_serial']).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM or_righe_ordini AS t WHERE idordine='.prepare($idordine).'))');
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -173,16 +160,9 @@ function rimuovi_articolo_daordine($idarticolo, $idordine, $idrigaordine)
|
|||
global $dbo;
|
||||
global $dir;
|
||||
|
||||
// Leggo la quantità di questo articolo in fattura
|
||||
$query = 'SELECT idgruppo FROM or_righe_ordini WHERE id='.prepare($idrigaordine);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$idgruppo = $rs[0]['idgruppo'];
|
||||
|
||||
if ($dir == 'uscita') {
|
||||
$non_rimovibili = $dbo->fetchArray("SELECT COUNT(*) AS non_rimovibili FROM or_righe_ordini WHERE serial IN (SELECT serial FROM vw_serials WHERE dir = 'entrata') AND idgruppo=".prepare($idgruppo).' AND idordine='.prepare($idordine))[0]['non_rimovibili'];
|
||||
if ($non_rimovibili != 0) {
|
||||
return false;
|
||||
}
|
||||
$non_rimovibili = seriali_non_rimuovibili('id_riga_ordine', $idrigaordine, $dir);
|
||||
if (!empty($non_rimovibili)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Elimino la riga dall'ordine
|
||||
|
|
|
@ -17,33 +17,22 @@ echo '
|
|||
|
||||
<tbody class="sortable">';
|
||||
|
||||
$q = 'SELECT *, (SELECT codice FROM mg_articoli WHERE mg_articoli.id=`or_righe_ordini`.`idarticolo`) AS codice FROM `or_righe_ordini` WHERE idordine='.prepare($id_record).' GROUP BY idgruppo ORDER BY `order`';
|
||||
$q = 'SELECT *, (SELECT codice FROM mg_articoli WHERE mg_articoli.id=`or_righe_ordini`.`idarticolo`) AS codice FROM `or_righe_ordini` WHERE idordine='.prepare($id_record).' ORDER BY `order`';
|
||||
$rs = $dbo->fetchArray($q);
|
||||
|
||||
if (!empty($rs)) {
|
||||
foreach ($rs as $r) {
|
||||
$delete = !empty($r['idarticolo']) ? 'unlink_articolo' : 'unlink_riga';
|
||||
|
||||
if (!empty($r['idarticolo'])) {
|
||||
$qserial = 'SELECT * FROM or_righe_ordini WHERE idordine='.prepare($id_record).' AND idarticolo='.prepare($r['idarticolo']).' AND idgruppo='.prepare($r['idgruppo']);
|
||||
$rsserial = $dbo->fetchArray($qserial);
|
||||
|
||||
$mancanti = 0;
|
||||
$serials = [];
|
||||
|
||||
if (!empty($r['abilita_serial'])) {
|
||||
foreach ($rsserial as $seriali) {
|
||||
$seriali['serial'] = trim($seriali['serial']);
|
||||
if (!empty($seriali['serial'])) {
|
||||
$serials[] = $seriali['serial'];
|
||||
} else {
|
||||
++$mancanti;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Individuazione dei seriali
|
||||
if (!empty($r['idarticolo']) && !empty($r['abilita_serial'])) {
|
||||
$serials = array_column($dbo->fetchArray('SELECT serial FROM mg_prodotti WHERE serial IS NOT NULL AND id_riga_ordine='.prepare($r['id'])), 'serial');
|
||||
$mancanti = $r['qta'] - count($serials);
|
||||
|
||||
if ($mancanti > 0) {
|
||||
$extra = 'class="warning"';
|
||||
} else {
|
||||
$mancanti = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -150,7 +139,7 @@ if (!empty($rs)) {
|
|||
|
||||
if (!empty($r['idarticolo']) && $r['abilita_serial']) {
|
||||
echo "
|
||||
<a class='btn btn-primary btn-xs'data-toggle='tooltip' title='Aggiorna SN...' onclick=\"launch_modal( 'Aggiorna SN', '".$rootdir.'/modules/ordini/add_serial.php?id_module='.$id_module.'&id_record='.$id_record.'&idgruppo='.$r['idgruppo'].'&idarticolo='.$r['idarticolo']."', 1 );\"><i class='fa fa-barcode' aria-hidden='true'></i></a>";
|
||||
<a class='btn btn-primary btn-xs'data-toggle='tooltip' title='Aggiorna SN...' onclick=\"launch_modal( 'Aggiorna SN', '".$rootdir.'/modules/fatture/add_serial.php?id_module='.$id_module.'&id_record='.$id_record.'&idriga='.$r['id'].'&idarticolo='.$r['idarticolo']."', 1 );\"><i class='fa fa-barcode' aria-hidden='true'></i></a>";
|
||||
}
|
||||
|
||||
echo "
|
||||
|
|
|
@ -132,7 +132,7 @@ switch (post('op')) {
|
|||
], [
|
||||
'parent' => 'id',
|
||||
'row' => 'idpreventivo',
|
||||
], $id_record, ['idgruppo' => false]);
|
||||
], $id_record);
|
||||
|
||||
// update_budget_preventivo( $id_record );
|
||||
$_SESSION['infos'][] = tr('Preventivo modificato correttamente!');
|
||||
|
@ -285,5 +285,5 @@ if (post('op') !== null && post('op') != 'update') {
|
|||
], [
|
||||
'parent' => 'id',
|
||||
'row' => 'idpreventivo',
|
||||
], $id_record, ['idgruppo' => false]);
|
||||
], $id_record);
|
||||
}
|
||||
|
|
|
@ -60,6 +60,7 @@ if (!empty($info['script'])) {
|
|||
// Scelta del redirect dopo un submit
|
||||
if (!empty($backto)) {
|
||||
$hash = filter('hash');
|
||||
$hash = !starts_with($hash, '#') ? '#'.$hash : $hash;
|
||||
if ($backto == 'record-edit') {
|
||||
redirect($rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_parent.$hash);
|
||||
exit();
|
||||
|
|
|
@ -57,7 +57,7 @@ $totale = [];
|
|||
// MATERIALE UTILIZZATO
|
||||
|
||||
// Conteggio articoli utilizzati
|
||||
$rs2 = $dbo->fetchArray('SELECT *, (SELECT codice FROM mg_articoli WHERE id=idarticolo) AS codice_art, SUM(qta) AS sumqta FROM `mg_articoli_interventi` GROUP BY idgruppo HAVING idintervento='.prepare($idintervento)." AND NOT idarticolo='0' ORDER BY idarticolo ASC");
|
||||
$rs2 = $dbo->fetchArray('SELECT *, (SELECT codice FROM mg_articoli WHERE id=idarticolo) AS codice_art, SUM(qta) AS sumqta FROM `mg_articoli_interventi` HAVING idintervento='.prepare($idintervento)." AND NOT idarticolo='0' ORDER BY idarticolo ASC");
|
||||
if (!empty($rs2)) {
|
||||
$body .= '
|
||||
<table class="table_values" cellspacing="0" cellpadding="0" style="font-size:11px; table-layout:fixed; border-color:#aaa;">
|
||||
|
|
|
@ -27,6 +27,7 @@ UPDATE `co_righe_contratti` SET `idintervento` = (SELECT `id` FROM `in_intervent
|
|||
UPDATE `co_righe_documenti` SET `idintervento` = (SELECT `id` FROM `in_interventi` WHERE `in_interventi`.`idintervento` = `co_righe_documenti`.`idintervento`);
|
||||
UPDATE `in_righe_interventi` SET `idintervento` = (SELECT `id` FROM `in_interventi` WHERE `in_interventi`.`idintervento` = `in_righe_interventi`.`idintervento`);
|
||||
UPDATE `mg_movimenti` SET `idintervento` = (SELECT `id` FROM `in_interventi` WHERE `in_interventi`.`idintervento` = `mg_movimenti`.`idintervento`);
|
||||
UPDATE `mg_articoli_interventi` SET `idintervento` = (SELECT `id` FROM `in_interventi` WHERE `in_interventi`.`idintervento` = `mg_articoli_interventi`.`idintervento`);
|
||||
UPDATE `my_impianti_interventi` SET `idintervento` = (SELECT `id` FROM `in_interventi` WHERE `in_interventi`.`idintervento` = `my_impianti_interventi`.`idintervento`);
|
||||
UPDATE `my_impianto_componenti` SET `idintervento` = (SELECT `id` FROM `in_interventi` WHERE `in_interventi`.`idintervento` = `my_impianto_componenti`.`idintervento`);
|
||||
UPDATE `my_componenti_interventi` SET `id_intervento` = (SELECT `id` FROM `in_interventi` WHERE `in_interventi`.`idintervento` = `my_componenti_interventi`.`id_intervento`);
|
||||
|
@ -37,6 +38,7 @@ ALTER TABLE `co_righe_contratti` CHANGE `idintervento` `idintervento` varchar(25
|
|||
ALTER TABLE `co_righe_documenti` CHANGE `idintervento` `idintervento` varchar(25);
|
||||
ALTER TABLE `in_righe_interventi` CHANGE `idintervento` `idintervento` varchar(25);
|
||||
ALTER TABLE `mg_movimenti` CHANGE `idintervento` `idintervento` varchar(25);
|
||||
ALTER TABLE `mg_articoli_interventi` CHANGE `idintervento` `idintervento` varchar(25);
|
||||
ALTER TABLE `my_impianti_interventi` CHANGE `idintervento` `idintervento` varchar(25);
|
||||
ALTER TABLE `my_impianto_componenti` CHANGE `idintervento` `idintervento` varchar(25);
|
||||
ALTER TABLE `my_componenti_interventi` CHANGE `id_intervento` `id_intervento` varchar(25);
|
||||
|
@ -47,6 +49,7 @@ UPDATE `co_righe_contratti` SET `idintervento` = NULL WHERE `idintervento` = 0 O
|
|||
UPDATE `co_righe_documenti` SET `idintervento` = NULL WHERE `idintervento` = 0 OR `idintervento` = '';
|
||||
UPDATE `in_righe_interventi` SET `idintervento` = NULL WHERE `idintervento` = 0 OR `idintervento` = '';
|
||||
UPDATE `mg_movimenti` SET `idintervento` = NULL WHERE `idintervento` = 0 OR `idintervento` = '';
|
||||
UPDATE `mg_articoli_interventi` SET `idintervento` = NULL WHERE `idintervento` = 0 OR `idintervento` = '';
|
||||
UPDATE `my_impianti_interventi` SET `idintervento` = NULL WHERE `idintervento` = 0 OR `idintervento` = '';
|
||||
UPDATE `my_impianto_componenti` SET `idintervento` = NULL WHERE `idintervento` = 0 OR `idintervento` = '';
|
||||
UPDATE `my_componenti_interventi` SET `id_intervento` = NULL WHERE `id_intervento` = 0 OR `id_intervento` = '';
|
||||
|
@ -57,6 +60,7 @@ ALTER TABLE `co_righe_contratti` CHANGE `idintervento` `idintervento` int(11), A
|
|||
ALTER TABLE `co_righe_documenti` CHANGE `idintervento` `idintervento` int(11), ADD FOREIGN KEY (`idintervento`) REFERENCES `in_interventi`(`id`) ON DELETE CASCADE;
|
||||
ALTER TABLE `in_righe_interventi` CHANGE `idintervento` `idintervento` int(11), ADD FOREIGN KEY (`idintervento`) REFERENCES `in_interventi`(`id`) ON DELETE CASCADE;
|
||||
ALTER TABLE `mg_movimenti` CHANGE `idintervento` `idintervento` int(11), ADD FOREIGN KEY (`idintervento`) REFERENCES `in_interventi`(`id`) ON DELETE CASCADE;
|
||||
ALTER TABLE `mg_articoli_interventi` CHANGE `idintervento` `idintervento` int(11), ADD FOREIGN KEY (`idintervento`) REFERENCES `in_interventi`(`id`) ON DELETE CASCADE;
|
||||
ALTER TABLE `my_impianti_interventi` CHANGE `idintervento` `idintervento` int(11), ADD FOREIGN KEY (`idintervento`) REFERENCES `in_interventi`(`id`) ON DELETE CASCADE;
|
||||
ALTER TABLE `my_impianto_componenti` CHANGE `idintervento` `idintervento` int(11), ADD FOREIGN KEY (`idintervento`) REFERENCES `in_interventi`(`id`) ON DELETE CASCADE;
|
||||
ALTER TABLE `my_componenti_interventi` CHANGE `id_intervento` `id_intervento` int(11), ADD FOREIGN KEY (`id_intervento`) REFERENCES `in_interventi`(`id`) ON DELETE CASCADE;
|
||||
|
@ -78,17 +82,6 @@ DROP TABLE `dt_automezzi_tagliandi`;
|
|||
DROP TABLE `co_contratti_interventi`;
|
||||
|
||||
-- RELEASE 2.2.1 [NON UFFICIALE] --
|
||||
-- Aggiunta del campo idgruppo per differenziare le righe in fatture, ddt e interventi (contenenti gruppi di seriali)
|
||||
ALTER TABLE `co_righe_documenti` ADD `idgruppo` int(11) NOT NULL AFTER `qta`;
|
||||
ALTER TABLE `mg_articoli_interventi` ADD `idgruppo` int(11) NOT NULL AFTER `qta`;
|
||||
ALTER TABLE `dt_righe_ddt` ADD `idgruppo` int(11) NOT NULL AFTER `qta_evasa`;
|
||||
ALTER TABLE `or_righe_ordini` ADD `idgruppo` int(11) NOT NULL AFTER `qta_evasa`;
|
||||
|
||||
UPDATE `co_righe_documenti` SET `idgruppo`=`id`;
|
||||
UPDATE `dt_righe_ddt` SET `idgruppo`=`id`;
|
||||
UPDATE `or_righe_ordini` SET `idgruppo`=`id`;
|
||||
UPDATE `mg_articoli_interventi` SET `idgruppo`=`id`;
|
||||
|
||||
-- Aggiunta del campo desc_iva anche per Preventivi, DDT e Ordini
|
||||
ALTER TABLE `dt_righe_ddt` ADD `desc_iva` varchar(255) NOT NULL AFTER `idiva`;
|
||||
ALTER TABLE `co_righe_preventivi` ADD `desc_iva` varchar(255) NOT NULL AFTER `idiva`;
|
||||
|
@ -746,25 +739,13 @@ ALTER TABLE `dt_righe_ddt` ADD `abilita_serial` boolean NOT NULL DEFAULT '0' AFT
|
|||
ALTER TABLE `mg_articoli_interventi` ADD `abilita_serial` boolean NOT NULL DEFAULT '0' AFTER `um`;
|
||||
ALTER TABLE `or_righe_ordini` ADD `abilita_serial` boolean NOT NULL DEFAULT '0' AFTER `um`;
|
||||
|
||||
-- Creazione della vista per la gestione dei seriali (la prima del progetto)
|
||||
CREATE VIEW vw_serials (id_articolo, record, serial, dir) AS
|
||||
(SELECT idarticolo, CONCAT('ord-', or_ordini.id), serial, or_tipiordine.dir FROM or_righe_ordini LEFT JOIN or_ordini ON or_ordini.id = or_righe_ordini.idordine LEFT JOIN or_tipiordine ON or_tipiordine.id = or_ordini.idtipoordine WHERE or_tipiordine.dir = 'entrata' AND serial != '')
|
||||
|
||||
UNION (SELECT idarticolo, CONCAT('fat-', co_documenti.id), serial, co_tipidocumento.dir FROM co_righe_documenti LEFT JOIN co_documenti ON co_documenti.id = co_righe_documenti.iddocumento LEFT JOIN co_tipidocumento ON co_tipidocumento.id = co_documenti.idtipodocumento WHERE serial != '')
|
||||
|
||||
UNION (SELECT idarticolo, CONCAT('ddt-', dt_ddt.id), serial, dt_tipiddt.dir FROM dt_righe_ddt LEFT JOIN dt_ddt ON dt_ddt.id = dt_righe_ddt.idddt LEFT JOIN dt_tipiddt ON dt_tipiddt.id = dt_ddt.idtipoddt WHERE serial != '')
|
||||
|
||||
UNION (SELECT idarticolo, CONCAT('int-', mg_articoli_interventi.idintervento), serial, 'entrata' FROM mg_articoli_interventi WHERE serial != '')
|
||||
|
||||
UNION (SELECT idarticolo, CONCAT('art-', idarticolo), serial, 'uscita' FROM mg_prodotti WHERE serial != '');
|
||||
|
||||
-- Aggiunto modulo per visualizzare i movimenti di magazzino
|
||||
INSERT INTO `zz_modules` (`id`, `name`, `directory`, `options`, `options2`, `icon`, `version`, `compatibility`, `order`, `parent`, `default`, `enabled`) VALUES (NULL, 'Movimenti', '', 'SELECT |select| FROM `mg_movimenti` JOIN `mg_articoli` ON `mg_articoli`.id = `mg_movimenti`.`idarticolo` WHERE 1=1 HAVING 2=2', '', 'fa fa-angle-right', '2.3', '2.3', '1', 1, '1', '1');
|
||||
|
||||
UPDATE `zz_modules` `t1` INNER JOIN `zz_modules` `t2` ON (`t1`.`name` = 'Movimenti' AND `t2`.`name` = 'Magazzino') SET `t1`.`parent` = `t2`.`id`;
|
||||
|
||||
INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `slow`, `enabled`, `default`) VALUES
|
||||
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Movimenti'), 'Articolo', 'IF(mg_articoli.descrizione != \'\', CONCAT(mg_articoli.codice, \'-\', mg_articoli.descrizione), mg_articoli.codice)', 2, 1, 0, 1, 1),
|
||||
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Movimenti'), 'Articolo', 'IF(mg_articoli.descrizione != \'\', CONCAT(mg_articoli.codice, \' - \', mg_articoli.descrizione), mg_articoli.codice)', 2, 1, 0, 1, 1),
|
||||
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Movimenti'), 'Data', 'mg_movimenti.created_at', 5, 1, 0, 1, 1),
|
||||
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Movimenti'), 'Quantità', 'mg_movimenti.qta', 4, 1, 0, 1, 1),
|
||||
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Movimenti'), 'Descrizione', 'movimento', 3, 1, 0, 1, 1),
|
||||
|
@ -962,3 +943,23 @@ UPDATE `zz_widgets` SET `query` = 'SELECT CONCAT_WS(" ", REPLACE(REPLACE(REPLACE
|
|||
|
||||
-- Fix per le sessioni di lavoro dei tecnici precedenti
|
||||
UPDATE `in_interventi_tecnici` SET `idtipointervento` = (SELECT `idtipointervento` FROM `in_interventi` WHERE `idintervento` = `in_interventi`.`id`) WHERE `idtipointervento` = '';
|
||||
|
||||
-- Fix per i serial number
|
||||
ALTER TABLE `mg_prodotti` ADD `id_riga_documento` int(11), ADD FOREIGN KEY (`id_riga_documento`) REFERENCES `co_righe_documenti`(`id`) ON DELETE CASCADE, ADD `id_riga_ordine` int(11), ADD FOREIGN KEY (`id_riga_ordine`) REFERENCES `or_righe_ordini`(`id`) ON DELETE CASCADE, ADD `id_riga_ddt` int(11), ADD FOREIGN KEY (`id_riga_ddt`) REFERENCES `dt_righe_ddt`(`id`) ON DELETE CASCADE, ADD `id_riga_intervento` int(11), ADD FOREIGN KEY (`id_riga_intervento`) REFERENCES `mg_articoli_interventi`(`id`) ON DELETE CASCADE, ADD `dir` enum('entrata', 'uscita') DEFAULT 'uscita', CHANGE `idarticolo` `id_articolo` int(11), ADD FOREIGN KEY (`id_articolo`) REFERENCES `mg_articoli`(`id`) ON DELETE CASCADE, CHANGE `serial` `serial` varchar(50), CHANGE `lotto` `lotto` varchar(50), CHANGE `altro` `altro` varchar(50);
|
||||
|
||||
INSERT INTO `mg_prodotti` (`id_riga_documento`, `dir`, `id_articolo`, `serial`, `lotto`, `altro`) SELECT `id`, (SELECT `dir` FROM `co_tipidocumento` JOIN `co_documenti` ON `co_tipidocumento`.`id` = `co_documenti`.`idtipodocumento` WHERE `co_documenti`.`id` = `co_righe_documenti`.`iddocumento`), `idarticolo`, `serial`, `lotto`, `altro` FROM `co_righe_documenti`;
|
||||
|
||||
INSERT INTO `mg_prodotti` (`id_riga_ordine`, `dir`, `id_articolo`, `serial`, `lotto`, `altro`) SELECT `id`, (SELECT `dir` FROM `or_tipiordine` JOIN `or_ordini` ON `or_tipiordine`.`id` = `or_ordini`.`idtipoordine` WHERE `or_ordini`.`id` = `or_righe_ordini`.`idordine`), `idarticolo`, `serial`, `lotto`, `altro` FROM `or_righe_ordini`;
|
||||
|
||||
INSERT INTO `mg_prodotti` (`id_riga_ddt`, `dir`, `id_articolo`, `serial`, `lotto`, `altro`) SELECT `id`, (SELECT `dir` FROM `dt_tipiddt` JOIN `dt_ddt` ON `dt_tipiddt`.`id` = `dt_ddt`.`idtipoddt` WHERE `dt_ddt`.`id` = `dt_righe_ddt`.`idddt`), `idarticolo`, `serial`, `lotto`, `altro` FROM `dt_righe_ddt`;
|
||||
|
||||
INSERT INTO `mg_prodotti` (`id_riga_intervento`, `dir`, `id_articolo`, `serial`, `lotto`, `altro`) SELECT `id`, 'entrata', `idarticolo`, `serial`, `lotto`, `altro` FROM `mg_articoli_interventi`;
|
||||
|
||||
UPDATE `mg_prodotti` SET `serial` = NULL WHERE `serial` = '';
|
||||
UPDATE `mg_prodotti` SET `lotto` = NULL WHERE `lotto` = '';
|
||||
UPDATE `mg_prodotti` SET `altro` = NULL WHERE `altro` = '';
|
||||
|
||||
ALTER TABLE `co_righe_documenti` DROP `serial`, DROP `altro`, DROP `lotto`;
|
||||
ALTER TABLE `mg_articoli_interventi` DROP `serial`, DROP `altro`, DROP `lotto`;
|
||||
ALTER TABLE `dt_righe_ddt` DROP `serial`, DROP `altro`, DROP `lotto`;
|
||||
ALTER TABLE `or_righe_ordini` DROP `serial`, DROP `altro`, DROP `lotto`;
|
||||
|
|
Loading…
Reference in New Issue