Miglioramento grafico su gestione prezzi specifici

This commit is contained in:
MatteoPistorello 2020-12-04 14:30:29 +01:00
parent 9e03d4c031
commit 1703e4ceb0
5 changed files with 113 additions and 65 deletions

View File

@ -256,4 +256,21 @@ switch ($resource) {
}
break;
case 'fornitori-articolo':
$query = 'SELECT an_anagrafiche.idanagrafica AS id, an_anagrafiche.ragione_sociale AS descrizione, (mg_prezzi_articoli.prezzo_unitario-(mg_prezzi_articoli.prezzo_unitario*mg_prezzi_articoli.sconto_percentuale)/100) AS prezzo_unitario FROM mg_prezzi_articoli LEFT JOIN an_anagrafiche ON mg_prezzi_articoli.id_anagrafica=an_anagrafiche.idanagrafica |where| ORDER BY an_anagrafiche.ragione_sociale';
foreach ($elements as $element) {
$filter[] = 'an_anagrafiche.idanagrafica='.prepare($element);
}
$where[] = 'dir="uscita"';
$where[] = 'minimo IS NULL';
$where[] = 'massimo IS NULL';
$where[] = 'id_articolo='.prepare($superselect['id_articolo']);
if (!empty($search)) {
$search_fields[] = 'an_anagrafiche.ragione_sociale LIKE '.prepare('%'.$search.'%');
}
break;
}

View File

@ -175,7 +175,7 @@ include_once __DIR__.'/../../core.php';
<div class="row">
<div class="col-md-12">
{[ "type": "select", "label": "<?php echo tr('Fornitore predefinito'); ?>", "name": "id_fornitore", "value": "$id_fornitore$", "ajax-source": "fornitori", "icon-after": "add|<?php echo Modules::get('Anagrafiche')['id']; ?>|tipoanagrafica=Fornitore&readonly_tipo=1", "help": "<?php echo tr('Fornitore predefinito, utilizzato dal gestionale per funzioni più avanzate della gestione magazzino'); ?>." ]}
{[ "type": "select", "label": "<?php echo tr('Fornitore predefinito'); ?>", "name": "id_fornitore", "ajax-source": "fornitori-articolo", "select-options": <?php echo json_encode(['id_articolo' => $id_record]); ?>, "value":"$id_fornitore$", "help": "<?php echo tr('Fornitore predefinito, utilizzato dal gestionale per funzioni più avanzate della gestione magazzino'); ?>." ]}
</div>
</div>
@ -457,3 +457,21 @@ if (!empty($elementi)) {
<a class="btn btn-danger ask" data-backto="record-list">
<i class="fa fa-trash"></i> <?php echo tr('Elimina'); ?>
</a>
<script>
input('id_fornitore').change(function(){
let prezzo_unitario = $(this).selectData() ? $(this).selectData().prezzo_unitario : "";
if(input('id_fornitore').get()){
input('prezzo_acquisto').set(prezzo_unitario);
input('prezzo_acquisto').disable();
} else {
input('prezzo_acquisto').enable();
input('prezzo_acquisto').set('0');
}
});
$(document).ready(function(){
if(input('id_fornitore').get()){
input('prezzo_acquisto').disable();
}
});
</script>

View File

@ -64,26 +64,30 @@ switch (filter('op')) {
$modifica_prezzi = filter('modifica_prezzi');
if (empty($modifica_prezzi)) {
$dbo->query('DELETE FROM mg_prezzi_articoli WHERE id_articolo='.$id_articolo.' AND id_anagrafica='.$id_anagrafica);
return;
$dbo->query('DELETE FROM mg_prezzi_articoli WHERE id_articolo='.prepare($id_articolo).' AND id_anagrafica='.prepare($id_anagrafica).' AND minimo IS NULL AND massimo IS NULL');
} else {
// Salvataggio del prezzo predefinito
$prezzo_unitario = filter('prezzo_unitario_fisso');
$sconto = filter('sconto_fisso');
$dettaglio_predefinito = DettaglioPrezzo::dettaglioPredefinito($id_articolo, $id_anagrafica, $direzione)
->first();
if (empty($dettaglio_predefinito)) {
$dettaglio_predefinito = DettaglioPrezzo::build($articolo, $anagrafica, $direzione);
}
$dettaglio_predefinito->sconto_percentuale = $sconto;
$dettaglio_predefinito->setPrezzoUnitario($prezzo_unitario);
$dettaglio_predefinito->save();
if($articolo->id_fornitore==$anagrafica->idanagrafica && $direzione=='uscita'){
$prezzo_unitario = $prezzo_unitario-($prezzo_unitario*$sconto/100);
$articolo->prezzo_acquisto=$prezzo_unitario;
$articolo->save();
}
}
// Salvataggio del prezzo predefinito
$prezzo_unitario = filter('prezzo_unitario_fisso');
$sconto = filter('sconto_fisso');
$dettaglio_predefinito = DettaglioPrezzo::dettaglioPredefinito($id_articolo, $id_anagrafica, $direzione)
->first();
if (empty($dettaglio_predefinito)) {
$dettaglio_predefinito = DettaglioPrezzo::build($articolo, $anagrafica, $direzione);
}
$dettaglio_predefinito->sconto_percentuale = $sconto;
$dettaglio_predefinito->setPrezzoUnitario($prezzo_unitario);
$dettaglio_predefinito->save();
// Salvataggio dei prezzi variabili
$prezzo_fisso = filter('prezzo_fisso');
$prezzo_qta = filter('prezzo_qta');
$dettagli = DettaglioPrezzo::dettagli($id_articolo, $id_anagrafica, $direzione);
if (!empty($prezzo_fisso)) {
if (!empty($prezzo_qta)) {
$prezzi_unitari = (array) filter('prezzo_unitario');
$minimi = filter('minimo');
$massimi = filter('massimo');

View File

@ -34,24 +34,49 @@ $direzione = get('direzione') == 'uscita' ? 'uscita' : 'entrata';
$articolo = Articolo::find($id_articolo);
$anagrafica = Anagrafica::find($id_anagrafica);
$prezzo_predefinito = $prezzi_ivati ? $articolo->prezzo_vendita_ivato : $articolo->prezzo_vendita;
if($direzione=='entrata'){
$prezzo_predefinito = $prezzi_ivati ? $articolo->prezzo_vendita_ivato : $articolo->prezzo_vendita;
} else{
$prezzo_predefinito = $articolo->prezzo_acquisto;
}
// Individuazione dei prezzi registrati
$dettagli = DettaglioPrezzo::dettagli($id_articolo, $id_anagrafica, $direzione)
->get();
$dettaglio_predefinito = DettaglioPrezzo::dettaglioPredefinito($id_articolo, $id_anagrafica, $direzione)
->first();
$prezzo_dettaglio_predefinito = $prezzo_predefinito;
if (!empty($dettaglio_predefinito)) {
$prezzo_dettaglio_predefinito = $prezzi_ivati ? $dettaglio_predefinito->prezzo_unitario_ivato : $dettaglio_predefinito->prezzo_unitario;
if($articolo->id_fornitore==$anagrafica->idanagrafica){
$color='success';
$icon='check';
$text= tr('Sì');
} else {
$color='danger';
$icon='times';
$text= tr('No');
}
echo '
<p>'.tr('Informazioni relative al _TIPO_', [
'_TIPO_' => $direzione=='entrata' ? 'cliente:' : 'fornitore:' ,
]).'
<br><b><big>'.$anagrafica->ragione_sociale.'</big></b></p>
<table class="table table-striped table-condensed table-bordered">
<tr>
<th class="text-center col-md-4">'.($direzione=='entrata' ? tr('Cliente') : tr('Fornitore')).'</th>
<th class="text-center col-md-4">'.tr('Prezzo predefinito').'</th>';
if($direzione=='uscita'){
echo '<th class="text-center col-md-4">'.tr('Fornitore predefinito').'</th>';
} else{
echo '<th class="text-center col-md-4"></th>';
}
echo '
</tr>
<tr>
<td class="text-center">'.$anagrafica->ragione_sociale.'</td>
<td class="text-center">'.moneyFormat($prezzo_predefinito).'</td>';
if($direzione=='uscita'){
echo '<td class="text-center"><i class="fa fa-'.$icon.' text-'.$color.'"></i> '.$text.'</td>';
} else{
echo '<td></td>';
}
echo '
</tr>
</table>
<form action="" method="post">
<input type="hidden" name="backto" value="record-edit">
@ -64,23 +89,25 @@ echo '
<div class="row">
<div class="col-md-4">
{[ "type": "checkbox", "label": "'.tr("Imposta prezzo per questa anagrafica").'", "name": "modifica_prezzi", "value": "'.intval(!$dettagli->isEmpty() || !empty($dettaglio_predefinito)).'" ]}
</div>
<div id="imposta_prezzo_qta" class="col-md-4">
{[ "type": "checkbox", "label": "'.tr('Imposta un prezzo in base alla quantità').'", "name": "prezzo_fisso", "value": "'.intval($dettagli->count() != 0).'" ]}
{[ "type": "checkbox", "label": "'.tr("Imposta prezzo per questa anagrafica").'", "name": "modifica_prezzi", "value": "'.intval(!empty($dettaglio_predefinito)).'" ]}
</div>
</div>
<div id="info_prezzi" class="row">
<div class="col-md-4">
{[ "type": "number", "label": "'.tr('Prezzo predefinito').'", "name": "prezzo_predefinito", "value": "'.$prezzo_predefinito.'", "disabled":"1"]}
</div>
<div class="col-md-4">
{[ "type": "number", "label": "'.tr('Prezzo specifico').'", "name": "prezzo_unitario_fisso", "value": "'.($prezzi_ivati ? $dettaglio_predefinito->prezzo_unitario_ivato : $dettaglio_predefinito->prezzo_unitario).'", "icon-after": "'.currency().'", "help": "'.($prezzi_ivati ? tr('Importo IVA inclusa') : '').'" ]}
</div>
<div class="row">
<div class="info_prezzi">
<div class="col-md-4">
{[ "type": "number", "label": "'.tr('Prezzo specifico').'", "name": "prezzo_unitario_fisso", "value": "'.($prezzi_ivati ? $dettaglio_predefinito->prezzo_unitario_ivato : $dettaglio_predefinito->prezzo_unitario).'", "icon-after": "'.currency().'", "help": "'.($prezzi_ivati ? tr('Importo IVA inclusa') : '').'" ]}
</div>
<div class="col-md-4">
{[ "type": "number", "label": "'.tr('Sconto specifico').'", "name": "sconto_fisso", "value": "'.$dettaglio_predefinito->sconto_percentuale.'", "icon-after": "%"]}
<div class="col-md-4">
{[ "type": "number", "label": "'.tr('Sconto specifico').'", "name": "sconto_fisso", "value": "'.$dettaglio_predefinito->sconto_percentuale.'", "icon-after": "%"]}
</div>
</div>
</div>
<div class="row">
<div id="imposta_prezzo_qta" class="col-md-4">
{[ "type": "checkbox", "label": "'.tr('Imposta un prezzo in base alla quantità').'", "name": "prezzo_qta", "value": "'.intval($dettagli->count() != 0).'" ]}
</div>
</div>
@ -211,21 +238,19 @@ function rimuoviPrezzo(button) {
function cambioImpostazioni() {
let modifica_prezzi = input("modifica_prezzi");
let prezzo_fisso = input("prezzo_fisso");
let prezzo_qta = input("prezzo_qta");
let prezzo_unitario_fisso = input("prezzo_unitario_fisso");
let sconto_fisso = input("sconto_fisso");
let prezzi_variabili = $("#prezzi");
if (!modifica_prezzi.get()){
$("#imposta_prezzo_qta").hide();
$("#info_prezzi").hide();
if (!modifica_prezzi.get()){
$(".info_prezzi").hide();
} else {
$("#imposta_prezzo_qta").show();
$("#info_prezzi").show();
$(".info_prezzi").show();
}
if (prezzo_fisso.get() && modifica_prezzi.get()) {
if (prezzo_qta.get()) {
prezzi_variabili.removeClass("hidden");
} else {
prezzi_variabili.addClass("hidden");
@ -236,7 +261,7 @@ input("modifica_prezzi").change(function () {
cambioImpostazioni();
})
input("prezzo_fisso").change(function () {
input("prezzo_qta").change(function () {
cambioImpostazioni();
})

View File

@ -23,12 +23,7 @@ use Plugins\DettagliArticolo\DettaglioPrezzo;
include_once __DIR__.'/../../core.php';
$id_articolo = $id_record;
echo '
<p>'.tr("In questa sezione è possibile definire dei dettagli aggiuntivi per l'articolo in relazione ad una specifica anagrafica del gestionale").'.</p>
<p>'.tr("Per i Clienti è possibile definire un prezzo personalizzato per la vendita dell'articolo, fisso oppure in relazione a una specifica quantità").'. '.tr("Per i Fornitori sono disponibili maggiori informazioni relative a codice, descrizione e quantità minime richieste per l'acquisto").'.</p>
<p>'.tr("Queste informazioni sono integrate con il resto del gestionale per garantire una maggiore flessibilità all'utente finale").'.</p>
<div class="nav-tabs-custom">
<ul class="nav-tabs-li nav nav-tabs nav-justified">
<li class="active"><a href="#tab_'.$id_plugin.'" onclick="apriTab(this)" data-tab="clienti" id="clienti-tab">'.tr('Clienti').'</a></li>
@ -95,16 +90,7 @@ if (!$clienti->isEmpty()) {
</button>
</td>
</tr>';
/*
$dettaglio_predefinito = $prezzi->whereStrict('minimo', null)
->whereStrict('massimo', null)
->first();
$prezzi = $prezzi->reject(function ($item, $key) use ($dettaglio_predefinito) {
return $item->id == $dettaglio_predefinito->id;
});
*/
foreach ($prezzi as $key => $dettaglio) {
echo '
<tr>
@ -153,8 +139,6 @@ echo '
</div>
<div class="tab-pane" id="fornitori">
<p>'.tr("In questa sezione è possibile definire le caratteristiche di base dell'articolo in relazione fornitore di origine, come codice e prezzo di acquisto predefinito").'. '.tr("Queste informazioni saranno utilizzate in automatico per la compilazione dell'articolo al momento dell'inserimento in un documento di acquisto relativo al fornitore indicato, sovrascrivendo le impostazioni predefinite della sezione Acquisto per l'articolo").'.</p>
<div class="box">
<div class="box-header">
<h3 class="box-title">'.tr('Informazioni specifiche per fornitore').'</h3>