Completamento #905

This commit is contained in:
Dasc3er 2020-11-13 17:54:58 +01:00
parent 2fc5a7e092
commit bfd7e27556
5 changed files with 105 additions and 58 deletions

View File

@ -68,65 +68,27 @@ include_once __DIR__.'/../../core.php';
</div>
<div class="row">
<div class="col-md-4">
<div class="col-md-6">
{[ "type": "checkbox", "label": "<?php echo tr('Abilita serial number'); ?>", "name": "abilita_serial", "value": "$abilita_serial$", "help": "<?php echo tr('Abilita serial number in fase di aggiunta articolo in fattura o ddt'); ?>", "placeholder": "<?php echo tr('Serial number'); ?>", "extra": "<?php echo ($record['serial'] > 0) ? 'readonly' : ''; ?>" ]}
</div>
<div class="col-md-4">
<div class="col-md-6">
{[ "type": "checkbox", "label": "<?php echo tr('Attivo'); ?>", "name": "attivo", "help": "<?php echo tr('Seleziona per rendere attivo l\'articolo'); ?>", "value": "$attivo$", "placeholder": "<?php echo tr('Articolo attivo'); ?>" ]}
</div>
<div class="col-md-4">
</div>
<div class="row">
<div class="col-md-8">
{[ "type": "text", "label": "<?php echo tr('Ubicazione'); ?>", "name": "ubicazione", "value": "$ubicazione$" ]}
</div>
</div>
<div class="row">
<div class="col-md-4">
{[ "type": "number", "label": "<?php echo tr('Quantità'); ?>", "name": "qta", "required": 1, "value": "$qta$", "readonly": 1, "decimals": "qta", "min-value": "undefined" ]}
<input type="hidden" id="old_qta" value="<?php echo $record['qta']; ?>">
</div>
<div class="col-md-4">
{[ "type": "checkbox", "label": "<?php echo tr('Modifica quantità'); ?>", "name": "qta_manuale", "value": 0, "help": "<?php echo tr('Seleziona per modificare manualmente la quantità'); ?>", "placeholder": "<?php echo tr('Quantità manuale'); ?>", "extra": "<?php echo ($record['servizio']) ? 'disabled' : ''; ?>" ]}
<script type="text/javascript">
$(document).ready(function() {
$('#servizio').click(function() {
$("#qta_manuale").attr("disabled", $('#servizio').is(":checked"));
});
$('#qta_manuale').click(function() {
$("#qta").attr("readonly", !$('#qta_manuale').is(":checked"));
if($('#qta_manuale').is(":checked")){
$("#div_modifica_manuale").show();
$("#div_modifica_manuale").show();
$("#descrizione_movimento").attr('required', true);
$("#data_movimento").attr('required', true);
}else{
$("#div_modifica_manuale").hide();
$('#qta').val($('#old_qta').val());
$("#descrizione_movimento").attr('required', false);
$("#data_movimento").attr('required', false);
}
});
});
</script>
</div>
<div class="col-md-4">
{[ "type": "select", "label": "<?php echo tr('Unità di misura'); ?>", "name": "um", "value": "$um$", "ajax-source": "misure", "icon-after": "add|<?php echo Modules::get('Unità di misura')['id']; ?>" ]}
<div class="col-md-4">
{[ "type": "select", "label": "<?php echo tr('Unità di misura'); ?>", "name": "um", "value": "$um$", "ajax-source": "misure", "icon-after": "add|<?php echo Modules::get('Unità di misura')['id']; ?>" ]}
</div>
</div>
<div class='row' id="div_modifica_manuale" style="display:none;">
<div class='col-md-8'>
{[ "type": "text", "label": "<?php echo tr('Descrizione movimento'); ?>", "name": "descrizione_movimento" ]}
</div>
<div class='col-md-4'>
{[ "type": "date", "label": "<?php echo tr('Data movimento'); ?>", "name": "data_movimento", "value": "-now-" ]}
</div>
</div>
<div class="row">
<div class="row">
<div class="col-md-12">
{[ "type": "textarea", "label": "<?php echo tr('Note'); ?>", "name": "note", "value": "$note$" ]}
</div>
@ -134,6 +96,64 @@ include_once __DIR__.'/../../core.php';
</div>
</div>
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">
<?php echo tr('Giacenza totale'); ?>
</h3>
</div>
<div class="panel-body">
<div class="row">
<div class="col-md-6">
{[ "type": "number", "label": "<?php echo tr('Quantità'); ?>", "name": "qta", "required": 1, "value": "$qta$", "readonly": 1, "decimals": "qta", "min-value": "undefined" ]}
<input type="hidden" id="old_qta" value="<?php echo $record['qta']; ?>">
</div>
<div class="col-md-6">
{[ "type": "checkbox", "label": "<?php echo tr('Modifica quantità'); ?>", "name": "qta_manuale", "value": 0, "help": "<?php echo tr('Seleziona per modificare manualmente la quantità'); ?>", "placeholder": "<?php echo tr('Quantità manuale'); ?>", "extra": "<?php echo ($record['servizio']) ? 'disabled' : ''; ?>" ]}
</div>
</div>
<div class='row' id="div_modifica_manuale" style="display:none;">
<div class='col-md-8'>
{[ "type": "text", "label": "<?php echo tr('Descrizione movimento'); ?>", "name": "descrizione_movimento" ]}
</div>
<div class='col-md-4'>
{[ "type": "date", "label": "<?php echo tr('Data movimento'); ?>", "name": "data_movimento", "value": "-now-" ]}
</div>
</div>
<div class="alert alert-info">
<p><?php echo tr('Le modifiche alle quantità in questa schermata prevedono la generazione di un movimento relativo per la Sede legale'); ?>. <?php echo tr('Per effettuare movimenti in altre Sedi, utilizzare il modulo Movimenti relativo'); ?>.</p>
</div>
<script type="text/javascript">
$(document).ready(function() {
$('#servizio').click(function() {
$("#qta_manuale").attr("disabled", $('#servizio').is(":checked"));
});
$('#qta_manuale').click(function() {
$("#qta").attr("readonly", !$('#qta_manuale').is(":checked"));
if($('#qta_manuale').is(":checked")){
$("#div_modifica_manuale").show();
$("#div_modifica_manuale").show();
$("#descrizione_movimento").attr('required', true);
$("#data_movimento").attr('required', true);
}else{
$("#div_modifica_manuale").hide();
$('#qta').val($('#old_qta').val());
$("#descrizione_movimento").attr('required', false);
$("#data_movimento").attr('required', false);
}
});
});
</script>
</div>
</div>
<!-- informazioni Acquisto/Vendita -->
<div class="row">
<div class="col-md-6">

View File

@ -218,7 +218,8 @@ echo '
</div>
</div>';
$sedi = $dbo->fetchArray('(SELECT "0" AS id, CONCAT_WS (" - ", "Sede legale", citta) AS nomesede FROM an_anagrafiche WHERE idanagrafica = '.prepare(setting('Azienda predefinita')).') UNION (SELECT id, CONCAT_WS(" - ", nomesede, citta ) AS nomesede FROM an_sedi WHERE idanagrafica='.prepare(setting('Azienda predefinita')).')');
$sedi = $dbo->fetchArray('(SELECT "0" AS id, CONCAT_WS (" - ", "Sede legale", citta) AS nomesede FROM an_anagrafiche WHERE idanagrafica = '.prepare(setting('Azienda predefinita')).') UNION (SELECT id, CONCAT_WS(" - ", nomesede, citta ) AS nomesede FROM an_sedi WHERE idanagrafica='.prepare(setting('Azienda predefinita')).')');
$giacenze = $articolo->getGiacenze();
echo '
<div class="row">
@ -240,13 +241,10 @@ echo '
<tbody>';
foreach ($sedi as $sede) {
// Lettura movimenti delle mie sedi
$qta_azienda = $dbo->fetchOne("SELECT SUM(mg_movimenti.qta) AS qta, IF(mg_movimenti.idsede_azienda= 0,'Sede legale',(CONCAT_WS(' - ',an_sedi.nomesede,an_sedi.citta))) as sede FROM mg_movimenti LEFT JOIN an_sedi ON an_sedi.id = mg_movimenti.idsede_azienda WHERE mg_movimenti.idarticolo=".prepare($id_record).' AND idsede_azienda='.prepare($sede['id']).' GROUP BY idsede_azienda');
echo '
<tr>
<td>'.$sede['nomesede'].'</td>
<td class="text-right">'.Translator::numberToLocale($qta_azienda['qta']).' '.$articolo->um.'</td>
<td class="text-right">'.numberFormat($giacenze[$sede['id']]).' '.$articolo->um.'</td>
</tr>';
}

View File

@ -195,6 +195,26 @@ class Articolo extends Model
return $this->hasMany(Movimento::class, 'idarticolo');
}
/**
* Restituisce le giacenze per sede dell'articolo.
*
* @return array
*/
public function getGiacenze()
{
return $this->movimenti()
->select(
'idsede_azienda',
database()->raw('SUM(qta) AS qta')
)->groupBy(['idsede_azienda'])
->get()
->mapToGroups(function ($item, $key) {
return [$item->idsede_azienda => (float) $item->attributes['qta']];
})
->flatten()
->toArray();
}
/**
* Restituisce i movimenti di magazzino dell'articolo raggruppati per documento relativo.
*

View File

@ -21,6 +21,7 @@ namespace Modules\Articoli\Import;
use Carbon\Carbon;
use Importer\CSVImporter;
use Modules\Anagrafiche\Sede;
use Modules\Articoli\Articolo;
use Modules\Articoli\Categoria;
use Modules\Iva\Aliquota;
@ -141,6 +142,7 @@ class CSV extends CSVImporter
{
$database = database();
$primary_key = $this->getPrimaryKey();
$anagrafica_azienda = Anagrafica::find(setting('Azienda predefinita'));
// Fix per campi con contenuti derivati da query implicite
if (!empty($record['id_fornitore'])) {
@ -203,13 +205,20 @@ class CSV extends CSVImporter
$articolo->save();
// Movimentazione della quantità registrata
$qta_movimento = $qta_registrata - (float) ($articolo->qta);
$giacenze = $articolo->getGiacenze();
$id_sede = 0;
if (!empty($nome_sede)) {
$sede = Sede::where('nomesede', $nome_sede)
->where('idanagrafica', $anagrafica_azienda->id)
->first();
$id_sede = $sede->id;
}
$qta_movimento = $qta_registrata - $giacenze[$id_sede];
$articolo->movimenta($qta_movimento, tr('Movimento da importazione'), new Carbon(), false, [
/*
'idsede_azienda' => $partenza,
'idsede_controparte' => $arrivo,
*/
'idsede_azienda' => $id_sede,
'idsede_controparte' => 0,
]);
}

View File

@ -37,8 +37,8 @@ switch (post('op')) {
$id_sede_azienda = $idsede_destinazione;
$id_sede_controparte = 0;
} elseif ($tipo_movimento == 'scarico') {
$id_sede_controparte = 0;
$id_sede_azienda = $idsede_partenza;
$id_sede_controparte = 0;
$qta = -$qta;
}