1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2025-02-18 20:40:36 +01:00

fix: lentezza caricamento righe ordini

This commit is contained in:
valentina 2024-11-26 17:34:06 +01:00
parent 027a6b1677
commit ed1722ffee
4 changed files with 138 additions and 68 deletions

View File

@ -591,7 +591,7 @@ if (!empty($elementi)) {
]); ]);
echo ' echo '
<li>'.Modules::link($elemento['modulo'] == 'Interventi' ? 'Attività' : $elemento['modulo'], $elemento['id'], $descrizione).'</li>'; <li>'.Modules::link($elemento['modulo'], $elemento['id'], $descrizione).'</li>';
} }
echo ' echo '

View File

@ -555,40 +555,6 @@ input("ordinamento").on("change", function(){
// Collegamenti diretti // Collegamenti diretti
// Fatture o ddt collegati a questo ordine // Fatture o ddt collegati a questo ordine
$elementi = $dbo->fetchArray('
SELECT
`co_documenti`.`id`,
`co_documenti`.`data`,
`co_documenti`.`numero`,
`co_documenti`.`numero_esterno`,
`co_tipidocumento_lang`.`title` AS tipo_documento,
`co_tipidocumento`.`dir`
FROM
`co_documenti`
INNER JOIN `co_tipidocumento` ON `co_tipidocumento`.`id` = `co_documenti`.`idtipodocumento`
LEFT JOIN `co_tipidocumento_lang` ON (`co_tipidocumento_lang`.`id_record` = `co_tipidocumento`.`id` AND `co_tipidocumento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).')
INNER JOIN `co_righe_documenti` ON `co_righe_documenti`.`iddocumento` = `co_documenti`.`id`
WHERE
`co_righe_documenti`.`idordine` = '.prepare($id_record).'
UNION
SELECT
`dt_ddt`.`id`,
`dt_ddt`.`data`,
`dt_ddt`.`numero`,
`dt_ddt`.`numero_esterno`,
`dt_tipiddt_lang`.`title` AS tipo_documento,
`dt_tipiddt`.`dir`
FROM
`dt_ddt`
INNER JOIN `dt_tipiddt` ON `dt_tipiddt`.`id` = `dt_ddt`.`idtipoddt`
LEFT JOIN `dt_tipiddt_lang` ON (`dt_tipiddt_lang`.`id_record` = `dt_tipiddt`.`id` AND `dt_tipiddt_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).')
INNER JOIN `dt_righe_ddt` ON `dt_righe_ddt`.`idddt` = `dt_ddt`.`id`
WHERE
`dt_righe_ddt`.`idordine` = '.prepare($id_record).'
ORDER BY
`data`');
if (!empty($elementi)) { if (!empty($elementi)) {
echo ' echo '
<div class="card card-warning collapsable collapsed-card"> <div class="card card-warning collapsable collapsed-card">
@ -603,31 +569,23 @@ if (!empty($elementi)) {
<div class="card-body"> <div class="card-body">
<ul>'; <ul>';
foreach ($elementi as $elemento) { foreach ($elementi as $elemento) {
$descrizione = tr('_DOC_ num. _NUM_ del _DATE_', [ $descrizione = tr('_DOC_ num. _NUM_ del _DATE_', [
'_DOC_' => $elemento['tipo_documento'], '_DOC_' => $elemento['tipo_documento'],
'_NUM_' => !empty($elemento['numero_esterno']) ? $elemento['numero_esterno'] : $elemento['numero'], '_NUM_' => !empty($elemento['numero_esterno']) ? $elemento['numero_esterno'] : $elemento['numero'],
'_DATE_' => Translator::dateToLocale($elemento['data']), '_DATE_' => Translator::dateToLocale($elemento['data']),
]); ]);
if (!in_array($elemento['tipo_documento'], ['Ddt in uscita', 'Ddt in entrata'])) { echo '
$modulo = ($elemento['dir'] == 'entrata') ? 'Fatture di vendita' : 'Fatture di acquisto'; <li>'.Modules::link($elemento['modulo'], $elemento['id'], $descrizione).'</li>';
} else {
$modulo = ($elemento['dir'] == 'entrata') ? 'Ddt in uscita' : 'Ddt in entrata';
} }
$id = $elemento['id'];
echo ' echo '
<li>'.Modules::link($modulo, $id, $descrizione).'</li>'; </ul>
</div>
</div>';
} }
echo '
</ul>
</div>
</div>';
}
if (!empty($elementi)) { if (!empty($elementi)) {
echo ' echo '
<div class="alert alert-error"> <div class="alert alert-error">

View File

@ -44,4 +44,78 @@ if (!empty($id_record)) {
LEFT JOIN `or_tipiordine_lang` ON (`or_tipiordine_lang`.`id_record`=`or_tipiordine`.`id` AND `or_tipiordine_lang`.`id_lang`='.prepare(Models\Locale::getDefault()->id).') LEFT JOIN `or_tipiordine_lang` ON (`or_tipiordine_lang`.`id_record`=`or_tipiordine`.`id` AND `or_tipiordine_lang`.`id_lang`='.prepare(Models\Locale::getDefault()->id).')
WHERE WHERE
`or_ordini`.`id`='.prepare($id_record)); `or_ordini`.`id`='.prepare($id_record));
$elementi = $dbo->fetchArray('
SELECT
`co_documenti`.`id`,
`co_documenti`.`data`,
`co_documenti`.`numero`,
`co_documenti`.`numero_esterno`,
`co_tipidocumento_lang`.`title` AS tipo_documento,
IF(`co_tipidocumento`.`dir` = \'entrata\', \'Fatture di vendita\', \'Fatture di acquisto\') AS modulo,
GROUP_CONCAT(CONCAT(`original_id`, " - ", `qta`) SEPARATOR ", ") AS righe
FROM
`co_documenti`
INNER JOIN `co_tipidocumento` ON `co_tipidocumento`.`id` = `co_documenti`.`idtipodocumento`
LEFT JOIN `co_tipidocumento_lang` ON (`co_tipidocumento_lang`.`id_record` = `co_tipidocumento`.`id` AND `co_tipidocumento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).')
INNER JOIN `co_righe_documenti` ON `co_righe_documenti`.`iddocumento` = `co_documenti`.`id`
WHERE
`co_righe_documenti`.`idordine` = '.prepare($id_record).'
GROUP BY id
UNION
SELECT
`dt_ddt`.`id`,
`dt_ddt`.`data`,
`dt_ddt`.`numero`,
`dt_ddt`.`numero_esterno`,
`dt_tipiddt_lang`.`title` AS tipo_documento,
IF(`dt_tipiddt`.`dir` = \'entrata\', \'Ddt in uscita\', \'Ddt in entrata\') as modulo,
GROUP_CONCAT(CONCAT(`original_id`, " - ", `qta`) SEPARATOR ", ") AS righe
FROM
`dt_ddt`
INNER JOIN `dt_tipiddt` ON `dt_tipiddt`.`id` = `dt_ddt`.`idtipoddt`
LEFT JOIN `dt_tipiddt_lang` ON (`dt_tipiddt_lang`.`id_record` = `dt_tipiddt`.`id` AND `dt_tipiddt_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).')
INNER JOIN `dt_righe_ddt` ON `dt_righe_ddt`.`idddt` = `dt_ddt`.`id`
WHERE
`dt_righe_ddt`.`idordine` = '.prepare($id_record).'
GROUP BY id
UNION
SELECT
`or_ordini`.`id`,
`or_ordini`.`data`,
`or_ordini`.`numero`,
`or_ordini`.`numero_esterno`,
`or_tipiordine_lang`.`title`,
IF(`or_tipiordine`.`dir` = \'entrata\', \'Ordini cliente\', \'Ordini fornitore\') as modulo,
GROUP_CONCAT(CONCAT(`original_id`, " - ", `qta`) SEPARATOR ", ") AS righe
FROM
`or_ordini`
INNER JOIN `or_righe_ordini` ON `or_righe_ordini`.`idordine` = `or_ordini`.`id`
INNER JOIN `or_tipiordine` ON `or_tipiordine`.`id` = `or_ordini`.`idtipoordine`
LEFT JOIN `or_tipiordine_lang` ON (`or_tipiordine_lang`.`id_record` = `or_tipiordine`.`id` AND `or_tipiordine_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).')
WHERE
(`or_righe_ordini`.`original_document_id` = '.prepare($id_record).' AND `or_righe_ordini`.`original_document_type` = \'Modules\\\\Ordini\\\\Ordine\')
GROUP BY
id
UNION
SELECT
`in_interventi`.`id`,
`in_interventi`.`data_richiesta`,
`in_interventi`.`codice`,
NULL,
\'Attività\',
\'Interventi\' as modulo,
GROUP_CONCAT(CONCAT(`original_id`, " - ", `qta`) SEPARATOR ", ") AS righe
FROM `in_interventi`
JOIN `in_righe_interventi` ON `in_righe_interventi`.`idintervento` = `in_interventi`.`id`
WHERE (`in_righe_interventi`.`original_document_id` = '.prepare($id_record).' AND `in_righe_interventi`.`original_document_type` = \'Modules\\\\Ordini\\\\Ordine\') OR `in_interventi`.`id_ordine` = '.prepare($id_record).'
GROUP BY id
ORDER BY
`data`');
} }

View File

@ -29,6 +29,15 @@ $righe = $order_row_desc ? $ordine->getRighe()->sortByDesc('created_at') : $ordi
$dir = $ordine->direzione; $dir = $ordine->direzione;
$colspan = $dir == 'entrata' ? '8' : '7'; $colspan = $dir == 'entrata' ? '8' : '7';
$evasione_bar = [
'Ddt in entrata' => 'info',
'Ddt in uscita' => 'info',
'Fatture di vendita' => 'success',
'Interventi' => 'warning',
'Ordini cliente' => 'primary',
'Ordini fornitore' => 'primary',
];
echo ' echo '
<div class="table-responsive row-list"> <div class="table-responsive row-list">
<table class="table table-striped table-hover table-sm table-bordered"> <table class="table table-striped table-hover table-sm table-bordered">
@ -215,18 +224,24 @@ foreach ($righe as $riga) {
{[ "type": "number", "name": "qta_'.$riga->id.'", "value": "'.$riga->qta.'", "min-value": "0", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-before": "<span class=\'tip\' title=\''.($riga->confermato ? tr('Articolo confermato') : tr('Articolo non confermato')).'\'><i class=\''.($riga->confermato ? 'fa fa-check text-success' : 'fa fa-clock-o text-warning').'\'></i></span>", "icon-after": "<span class=\'tip\' title=\''.tr('Quantità evasa').' / '.tr('totale').': '.tr('_QTA_ / _TOT_', ['_QTA_' => numberFormat($riga->qta_evasa, 'qta'), '_TOT_' => numberFormat($riga->qta, 'qta')]).'\'>'.$riga->um.' <small><i class=\'text-muted fa fa-info-circle\'></i></small></span>", "disabled": "'.($riga->isSconto() ? 1 : 0).'", "disabled": "'.($block_edit || $riga->isSconto()).'", "decimals": "qta" ]} {[ "type": "number", "name": "qta_'.$riga->id.'", "value": "'.$riga->qta.'", "min-value": "0", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-before": "<span class=\'tip\' title=\''.($riga->confermato ? tr('Articolo confermato') : tr('Articolo non confermato')).'\'><i class=\''.($riga->confermato ? 'fa fa-check text-success' : 'fa fa-clock-o text-warning').'\'></i></span>", "icon-after": "<span class=\'tip\' title=\''.tr('Quantità evasa').' / '.tr('totale').': '.tr('_QTA_ / _TOT_', ['_QTA_' => numberFormat($riga->qta_evasa, 'qta'), '_TOT_' => numberFormat($riga->qta, 'qta')]).'\'>'.$riga->um.' <small><i class=\'text-muted fa fa-info-circle\'></i></small></span>", "disabled": "'.($riga->isSconto() ? 1 : 0).'", "disabled": "'.($block_edit || $riga->isSconto()).'", "decimals": "qta" ]}
<div class="progress" style="height:4px;">'; <div class="progress" style="height:4px;">';
// Visualizzazione evasione righe per documento // Visualizzazione evasione righe per documento
$evasione_bar = []; $color = '';
$evasione_bar['dt_righe_ddt'] = 'info'; $valore_evaso = 0;
$evasione_bar['co_righe_documenti'] = 'primary'; foreach ($elementi as $elemento) {
$evasione_bar['in_righe_interventi'] = 'warning'; $righe_evase = explode(', ', $elemento['righe']);
$evasione_bar['or_righe_ordini'] = 'success'; $righe_evase_array = array_reduce($righe_evase, function($carry, $riga_evasa) {
foreach ($evasione_bar as $table => $color) { list($id, $qta) = explode(' - ', $riga_evasa);
$righe_ev = $dbo->table($table)->where('original_id', $riga->id)->where('original_type', $riga::class)->get(); $carry[$id] = $qta;
if ($righe_ev->count() > 0) { return $carry;
$perc_ev = $righe_ev->sum('qta') * 100 / ($riga->qta ?: 1); }, []);
if ($perc_ev > 0) { foreach ($righe_evase_array as $id => $qta) {
echo ' if ($id == $riga->id) {
<div class="progress-bar progress-bar-'.$color.'" style="width:'.$perc_ev.'%"></div>'; $color = $evasione_bar[$elemento['modulo']];
$valore_evaso = $qta;
$perc_ev = $valore_evaso * 100 / ($riga->qta ?: 1);
if ($perc_ev > 0) {
echo '
<div class="progress-bar bg-'.$color.'" style="width:'.$perc_ev.'%"></div>';
}
} }
} }
} }
@ -514,6 +529,29 @@ if (!$block_edit && sizeof($righe) > 0) {
} }
echo ' echo '
</div> </div>
<div class="container">
<div class="row">
<div class="col-md-2">
<h5>'.tr('Quantità evasa in').':</h5>
</div>
<div class="col-md-2">
<span class="pull-left icon" style="background-color:#28a745;"></span>
<span class="text">&nbsp;'.tr('Fattura').'</span>
</div>
<div class="col-md-2">
<span class="pull-left icon" style="background-color:#17a2b8;"></span>
<span class="text">&nbsp;'.tr('DDT').'</span>
</div>
<div class="col-md-2">
<span class="pull-left icon" style="background-color:#ffc107;"></span>
<span class="text">&nbsp;'.tr('Attività').'</span>
</div>
<div class="col-md-2">
<span class="pull-left icon" style="background-color:#007bff;;"></span>
<span class="text">&nbsp;'.tr('Ordine').'</span>
</div>
</div>
</div>
<script> <script>
async function modificaRiga(button) { async function modificaRiga(button) {