Completamento #905
This commit is contained in:
parent
2fc5a7e092
commit
bfd7e27556
|
@ -68,65 +68,27 @@ include_once __DIR__.'/../../core.php';
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row">
|
<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' : ''; ?>" ]}
|
{[ "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>
|
||||||
|
|
||||||
<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'); ?>" ]}
|
{[ "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>
|
||||||
|
|
||||||
<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$" ]}
|
{[ "type": "text", "label": "<?php echo tr('Ubicazione'); ?>", "name": "ubicazione", "value": "$ubicazione$" ]}
|
||||||
</div>
|
</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">
|
<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' : ''; ?>" ]}
|
{[ "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']; ?>" ]}
|
||||||
<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>
|
</div>
|
||||||
</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">
|
<div class="col-md-12">
|
||||||
{[ "type": "textarea", "label": "<?php echo tr('Note'); ?>", "name": "note", "value": "$note$" ]}
|
{[ "type": "textarea", "label": "<?php echo tr('Note'); ?>", "name": "note", "value": "$note$" ]}
|
||||||
</div>
|
</div>
|
||||||
|
@ -134,6 +96,64 @@ include_once __DIR__.'/../../core.php';
|
||||||
</div>
|
</div>
|
||||||
</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 -->
|
<!-- informazioni Acquisto/Vendita -->
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
|
|
|
@ -218,7 +218,8 @@ echo '
|
||||||
</div>
|
</div>
|
||||||
</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 '
|
echo '
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
@ -240,13 +241,10 @@ echo '
|
||||||
<tbody>';
|
<tbody>';
|
||||||
|
|
||||||
foreach ($sedi as $sede) {
|
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 '
|
echo '
|
||||||
<tr>
|
<tr>
|
||||||
<td>'.$sede['nomesede'].'</td>
|
<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>';
|
</tr>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -195,6 +195,26 @@ class Articolo extends Model
|
||||||
return $this->hasMany(Movimento::class, 'idarticolo');
|
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.
|
* Restituisce i movimenti di magazzino dell'articolo raggruppati per documento relativo.
|
||||||
*
|
*
|
||||||
|
|
|
@ -21,6 +21,7 @@ namespace Modules\Articoli\Import;
|
||||||
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Importer\CSVImporter;
|
use Importer\CSVImporter;
|
||||||
|
use Modules\Anagrafiche\Sede;
|
||||||
use Modules\Articoli\Articolo;
|
use Modules\Articoli\Articolo;
|
||||||
use Modules\Articoli\Categoria;
|
use Modules\Articoli\Categoria;
|
||||||
use Modules\Iva\Aliquota;
|
use Modules\Iva\Aliquota;
|
||||||
|
@ -141,6 +142,7 @@ class CSV extends CSVImporter
|
||||||
{
|
{
|
||||||
$database = database();
|
$database = database();
|
||||||
$primary_key = $this->getPrimaryKey();
|
$primary_key = $this->getPrimaryKey();
|
||||||
|
$anagrafica_azienda = Anagrafica::find(setting('Azienda predefinita'));
|
||||||
|
|
||||||
// Fix per campi con contenuti derivati da query implicite
|
// Fix per campi con contenuti derivati da query implicite
|
||||||
if (!empty($record['id_fornitore'])) {
|
if (!empty($record['id_fornitore'])) {
|
||||||
|
@ -203,13 +205,20 @@ class CSV extends CSVImporter
|
||||||
$articolo->save();
|
$articolo->save();
|
||||||
|
|
||||||
// Movimentazione della quantità registrata
|
// 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, [
|
$articolo->movimenta($qta_movimento, tr('Movimento da importazione'), new Carbon(), false, [
|
||||||
/*
|
'idsede_azienda' => $id_sede,
|
||||||
'idsede_azienda' => $partenza,
|
'idsede_controparte' => 0,
|
||||||
'idsede_controparte' => $arrivo,
|
|
||||||
*/
|
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,8 +37,8 @@ switch (post('op')) {
|
||||||
$id_sede_azienda = $idsede_destinazione;
|
$id_sede_azienda = $idsede_destinazione;
|
||||||
$id_sede_controparte = 0;
|
$id_sede_controparte = 0;
|
||||||
} elseif ($tipo_movimento == 'scarico') {
|
} elseif ($tipo_movimento == 'scarico') {
|
||||||
$id_sede_controparte = 0;
|
|
||||||
$id_sede_azienda = $idsede_partenza;
|
$id_sede_azienda = $idsede_partenza;
|
||||||
|
$id_sede_controparte = 0;
|
||||||
|
|
||||||
$qta = -$qta;
|
$qta = -$qta;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue