1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2025-02-02 00:46:44 +01:00

Gestione seriali contratti

This commit is contained in:
MatteoPistorello 2023-11-13 15:38:27 +01:00
parent 6b9776e0a9
commit c762f8fa55
8 changed files with 121 additions and 12 deletions

View File

@ -276,10 +276,28 @@ if (empty(get('modal'))) {
$id = $data[0]['idintervento']; $id = $data[0]['idintervento'];
$data[0]['tipo_documento'] = tr('Intervento').' '.$data[0]['codice']; $data[0]['tipo_documento'] = tr('Intervento').' '.$data[0]['codice'];
}
$extra = tr('(q.tà _QTA_)', [ // Inserito su contratto
'_QTA_' => $data[0]['qta'], elseif (!empty($vendita['id_riga_contratto'])) {
]); $module_id = Modules::get('Contratti')['id'];
// Ricerca vendite su contratti
$query = 'SELECT *, "Contratto" AS tipo_documento, ( SELECT data_bozza FROM co_contratti WHERE id=idcontratto ) AS data, ( SELECT numero FROM co_contratti WHERE id=idcontratto ) AS numero FROM co_righe_contratti WHERE co_righe_contratti.id='.prepare($vendita['id_riga_contratto']);
$data = $dbo->fetchArray($query);
$id = $data[0]['idcontratto'];
}
// Inserito su vendita banco
elseif (!empty($vendita['id_riga_venditabanco'])) {
$module_id = Modules::get('Vendita al banco')['id'];
// Ricerca vendite su contratti
$query = 'SELECT *, "Vendita al banco" AS tipo_documento, ( SELECT data FROM vb_venditabanco WHERE id=idvendita ) AS data, ( SELECT numero FROM vb_venditabanco WHERE id=idvendita ) AS numero FROM vb_righe_venditabanco WHERE vb_righe_venditabanco.id='.prepare($vendita['id_riga_venditabanco']);
$data = $dbo->fetchArray($query);
$id = $data[0]['idvendita'];
} }
$totali[] = [($data[0]['prezzo_unitario'] - $data[0]['sconto_unitario']), $data[0]['iva_unitaria']]; $totali[] = [($data[0]['prezzo_unitario'] - $data[0]['sconto_unitario']), $data[0]['iva_unitaria']];
@ -287,10 +305,10 @@ if (empty(get('modal'))) {
$numero = !empty($data[0]['numero_esterno']) ? $data[0]['numero_esterno'] : $data[0]['numero']; $numero = !empty($data[0]['numero_esterno']) ? $data[0]['numero_esterno'] : $data[0]['numero'];
$text = tr('_DOC_ num. _NUM_ del _DATE_', [ $text = tr('_DOC_ num. _NUM_ del _DATE_', [
'_DOC_' => $data[0]['tipo_documento'], '_DOC_' => $data[0]['tipo_documento'],
'_NUM_' => $numero, '_NUM_' => $numero,
'_DATE_' => Translator::dateToLocale($data[0]['data']), '_DATE_' => Translator::dateToLocale($data[0]['data']),
]).(!empty($extra) ? ' '.$extra : ''); ]);
echo Modules::link($module_id, $id, $text).'<br>'; echo Modules::link($module_id, $id, $text).'<br>';
} }

View File

@ -521,6 +521,13 @@ switch (post('op')) {
$copia = $riga->copiaIn($contratto, $qta); $copia = $riga->copiaIn($contratto, $qta);
// Aggiornamento seriali dalla riga dell'ordine
if ($copia->isArticolo()) {
$serials = is_array(post('serial')[$riga->id]) ? post('serial')[$riga->id] : [];
$copia->serials = $serials;
}
$copia->save(); $copia->save();
} }
} }
@ -760,5 +767,13 @@ switch (post('op')) {
flash()->warning(tr('Nessun prezzo modificato!')); flash()->warning(tr('Nessun prezzo modificato!'));
} }
break;
case 'add_serial':
$articolo = Articolo::find(post('idriga'));
$serials = (array) post('serial');
$articolo->serials = $serials;
break; break;
} }

View File

@ -28,6 +28,7 @@ $tipo_documento_finale = Fattura::class;
$options = [ $options = [
'op' => 'add_documento', 'op' => 'add_documento',
'type' => 'contratto', 'type' => 'contratto',
'serials' => true,
'module' => 'Fatture di vendita', 'module' => 'Fatture di vendita',
'button' => tr('Aggiungi'), 'button' => tr('Aggiungi'),
'create_document' => true, 'create_document' => true,

View File

@ -43,7 +43,7 @@ echo '
<th class="text-center" width="180">'.tr('Prezzo unitario').'</th> <th class="text-center" width="180">'.tr('Prezzo unitario').'</th>
<th class="text-center" width="140">'.tr('Sconto unitario').'</th> <th class="text-center" width="140">'.tr('Sconto unitario').'</th>
<th class="text-center" width="130">'.tr('Importo').'</th> <th class="text-center" width="130">'.tr('Importo').'</th>
<th width="80"></th> <th width="100"></th>
</tr> </tr>
</thead> </thead>
@ -54,8 +54,22 @@ $num = 0;
foreach ($righe as $riga) { foreach ($righe as $riga) {
++$num; ++$num;
// Individuazione dei seriali
$extra = '';
$mancanti = 0;
if ($riga->isArticolo() && !empty($riga->abilita_serial)) {
$serials = $riga->serials;
$mancanti = abs($riga->qta) - count($serials);
if ($mancanti > 0) {
$extra = 'class="warning"';
} else {
$mancanti = 0;
}
}
echo ' echo '
<tr data-id="'.$riga->id.'" data-type="'.get_class($riga).'"> <tr data-id="'.$riga->id.'" data-type="'.get_class($riga).'" '.$extra.'>
<td class="text-center">'; <td class="text-center">';
if (!$block_edit) { if (!$block_edit) {
echo ' echo '
@ -85,6 +99,19 @@ foreach ($righe as $riga) {
echo ' echo '
'.$descrizione; '.$descrizione;
if ($riga->isArticolo() && !empty($riga->abilita_serial)) {
if (!empty($mancanti)) {
echo '
<br><b><small class="text-danger">'.tr('_NUM_ serial mancanti', [
'_NUM_' => $mancanti,
]).'</small></b>';
}
if (!empty($serials)) {
echo '
<br>'.tr('SN').': '.implode(', ', $serials);
}
}
if ($riga->isArticolo() && !empty($riga->articolo->barcode)) { if ($riga->isArticolo() && !empty($riga->articolo->barcode)) {
echo ' echo '
<br><small><i class="fa fa-barcode"></i> '.$riga->articolo->barcode.'</small>'; <br><small><i class="fa fa-barcode"></i> '.$riga->articolo->barcode.'</small>';
@ -173,7 +200,14 @@ foreach ($righe as $riga) {
if (empty($record['is_completato'])) { if (empty($record['is_completato'])) {
echo ' echo '
<div class="btn-group"> <div class="btn-group">';
if ($riga->isArticolo() && !empty($riga->abilita_serial)) {
echo '
<a class="btn btn-primary btn-xs" title="'.tr('Modifica seriali della riga').'" onclick="modificaSeriali(this)">
<i class="fa fa-barcode"></i>
</a>';
}
echo '
<a class="btn btn-xs btn-warning" title="'.tr('Modifica riga').'" onclick="modificaRiga(this)"> <a class="btn btn-xs btn-warning" title="'.tr('Modifica riga').'" onclick="modificaRiga(this)">
<i class="fa fa-edit"></i> <i class="fa fa-edit"></i>
</a> </a>
@ -559,5 +593,13 @@ function aggiornaInline(id) {
} }
}); });
} }
function modificaSeriali(button) {
let riga = $(button).closest("tr");
let id = riga.data("id");
let type = riga.data("type");
openModal("'.tr('Aggiorna SN').'", globals.rootdir + "/modules/fatture/add_serial.php?id_module=" + globals.id_module + "&id_record=" + globals.id_record + "&riga_id=" + id + "&riga_type=" + type);
}
init(); init();
</script>'; </script>';

View File

@ -26,4 +26,5 @@ class Articolo extends Article
use RelationTrait; use RelationTrait;
protected $table = 'co_righe_contratti'; protected $table = 'co_righe_contratti';
protected $serialRowID = 'contratto';
} }

View File

@ -55,6 +55,14 @@ $data = [
'table' => 'in_righe_interventi', 'table' => 'in_righe_interventi',
'id' => 'idintervento', 'id' => 'idintervento',
], ],
'veb' => [
'table' => 'vb_righe_venditabanco',
'id' => 'idvendita',
],
'con' => [
'table' => 'co_righe_contratti',
'id' => 'idcontratto',
],
]; ];
// Individuazione delle tabelle interessate // Individuazione delle tabelle interessate
@ -66,8 +74,12 @@ if (in_array($module['name'], ['Fatture di vendita', 'Fatture di acquisto'])) {
$is_rientrabile = $database->fetchOne('SELECT * FROM `dt_causalet` WHERE `id` = '.prepare($ddt->idcausalet))['is_rientrabile']; $is_rientrabile = $database->fetchOne('SELECT * FROM `dt_causalet` WHERE `id` = '.prepare($ddt->idcausalet))['is_rientrabile'];
} elseif (in_array($module['name'], ['Ordini cliente', 'Ordini fornitore'])) { } elseif (in_array($module['name'], ['Ordini cliente', 'Ordini fornitore'])) {
$modulo = 'ord'; $modulo = 'ord';
} else { } elseif ($module['name'] == 'Interventi') {
$modulo = 'int'; $modulo = 'int';
} elseif ($module['name'] == 'Contratti') {
$modulo = 'con';
} else {
$modulo = 'veb';
} }
$table = $data[$modulo]['table']; $table = $data[$modulo]['table'];
@ -149,6 +161,12 @@ if ($dir == 'entrata') {
} elseif (!empty($res[0]['id_riga_ordine'])) { } elseif (!empty($res[0]['id_riga_ordine'])) {
$modulo = 'Ordini cliente'; $modulo = 'Ordini cliente';
$pos = 'ord'; $pos = 'ord';
} elseif (!empty($res[0]['id_riga_contratto'])) {
$modulo = 'Contratti';
$pos = 'con';
} elseif (!empty($res[0]['id_riga_venditabanco'])) {
$modulo = 'Vendita al banco';
$pos = 'veb';
} }
$r = $dbo->select($data[$pos]['table'], $data[$pos]['id'], [], ['id' => $res[0][str_replace('id', 'id_riga_', $data[$pos]['id'])]]); $r = $dbo->select($data[$pos]['table'], $data[$pos]['id'], [], ['id' => $res[0][str_replace('id', 'id_riga_', $data[$pos]['id'])]]);

View File

@ -146,6 +146,16 @@ foreach ($righe as $riga) {
<br><small>'.$text.'</small>'; <br><small>'.$text.'</small>';
$autofill->count($text, true); $autofill->count($text, true);
// Seriali
$seriali = $riga->serials;
if (!empty($seriali)) {
$text = tr('SN').': '.implode(', ', $seriali);
echo '
<br><small>'.$text.'</small>';
$autofill->count($text, true);
}
} }
echo ' echo '

View File

@ -25,4 +25,8 @@ WHERE
HAVING HAVING
2=2 2=2
ORDER BY ORDER BY
`matricola`" WHERE `name` = 'Impianti'; `matricola`" WHERE `name` = 'Impianti';
-- Serial in Contratti
ALTER TABLE `mg_prodotti` ADD `id_riga_contratto` INT NULL AFTER `id_riga_intervento`;
ALTER TABLE `mg_prodotti` ADD FOREIGN KEY (`id_riga_contratto`) REFERENCES `co_righe_contratti`(`id`) ON DELETE CASCADE;