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'];
$data[0]['tipo_documento'] = tr('Intervento').' '.$data[0]['codice'];
}
$extra = tr('(q.tà _QTA_)', [
'_QTA_' => $data[0]['qta'],
]);
// Inserito su contratto
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']];
@ -287,10 +305,10 @@ if (empty(get('modal'))) {
$numero = !empty($data[0]['numero_esterno']) ? $data[0]['numero_esterno'] : $data[0]['numero'];
$text = tr('_DOC_ num. _NUM_ del _DATE_', [
'_DOC_' => $data[0]['tipo_documento'],
'_NUM_' => $numero,
'_DATE_' => Translator::dateToLocale($data[0]['data']),
]).(!empty($extra) ? ' '.$extra : '');
'_DOC_' => $data[0]['tipo_documento'],
'_NUM_' => $numero,
'_DATE_' => Translator::dateToLocale($data[0]['data']),
]);
echo Modules::link($module_id, $id, $text).'<br>';
}

View File

@ -521,6 +521,13 @@ switch (post('op')) {
$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();
}
}
@ -760,5 +767,13 @@ switch (post('op')) {
flash()->warning(tr('Nessun prezzo modificato!'));
}
break;
case 'add_serial':
$articolo = Articolo::find(post('idriga'));
$serials = (array) post('serial');
$articolo->serials = $serials;
break;
}

View File

@ -28,6 +28,7 @@ $tipo_documento_finale = Fattura::class;
$options = [
'op' => 'add_documento',
'type' => 'contratto',
'serials' => true,
'module' => 'Fatture di vendita',
'button' => tr('Aggiungi'),
'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="140">'.tr('Sconto unitario').'</th>
<th class="text-center" width="130">'.tr('Importo').'</th>
<th width="80"></th>
<th width="100"></th>
</tr>
</thead>
@ -54,8 +54,22 @@ $num = 0;
foreach ($righe as $riga) {
++$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 '
<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">';
if (!$block_edit) {
echo '
@ -85,6 +99,19 @@ foreach ($righe as $riga) {
echo '
'.$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)) {
echo '
<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'])) {
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)">
<i class="fa fa-edit"></i>
</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();
</script>';

View File

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

View File

@ -55,6 +55,14 @@ $data = [
'table' => 'in_righe_interventi',
'id' => 'idintervento',
],
'veb' => [
'table' => 'vb_righe_venditabanco',
'id' => 'idvendita',
],
'con' => [
'table' => 'co_righe_contratti',
'id' => 'idcontratto',
],
];
// 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'];
} elseif (in_array($module['name'], ['Ordini cliente', 'Ordini fornitore'])) {
$modulo = 'ord';
} else {
} elseif ($module['name'] == 'Interventi') {
$modulo = 'int';
} elseif ($module['name'] == 'Contratti') {
$modulo = 'con';
} else {
$modulo = 'veb';
}
$table = $data[$modulo]['table'];
@ -149,6 +161,12 @@ if ($dir == 'entrata') {
} elseif (!empty($res[0]['id_riga_ordine'])) {
$modulo = 'Ordini cliente';
$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'])]]);

View File

@ -146,6 +146,16 @@ foreach ($righe as $riga) {
<br><small>'.$text.'</small>';
$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 '

View File

@ -26,3 +26,7 @@ HAVING
2=2
ORDER BY
`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;