mirror of
https://github.com/devcode-it/openstamanager.git
synced 2025-02-02 17:07:01 +01:00
Gestione interna dei prezzi variabili
This commit is contained in:
parent
1d44f64cb6
commit
5dccc95800
@ -86,7 +86,15 @@ Input.prototype.getData = function () {
|
||||
}
|
||||
|
||||
Input.prototype.get = function () {
|
||||
return this.element.val();
|
||||
let value = this.element.val();
|
||||
|
||||
// Conversione del valore per le checkbox
|
||||
let group = this.element.closest(".form-group");
|
||||
if (group.find("input[type=checkbox]").length){
|
||||
value = parseInt(value);
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
Input.prototype.set = function (value) {
|
||||
|
@ -3,6 +3,7 @@
|
||||
use Modules\Anagrafiche\Anagrafica;
|
||||
use Modules\Articoli\Articolo;
|
||||
use Plugins\DettagliArticolo\DettaglioFornitore;
|
||||
use Plugins\DettagliArticolo\DettaglioPrezzo;
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
@ -36,6 +37,61 @@ switch (filter('op')) {
|
||||
flash()->info(tr('Informazioni salvate correttamente!'));
|
||||
break;
|
||||
|
||||
case 'update_prezzi':
|
||||
// Informazioni di base
|
||||
$id_articolo = filter('id_articolo');
|
||||
$id_anagrafica = filter('id_anagrafica');
|
||||
$direzione = filter('direzione') == 'uscita' ? 'uscita' : 'entrata';
|
||||
|
||||
$articolo = Articolo::find($id_articolo);
|
||||
$anagrafica = Anagrafica::find($id_anagrafica);
|
||||
|
||||
$modifica_prezzi = filter('modifica_prezzi');
|
||||
if (empty($modifica_prezzi)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Salvataggio del prezzo predefinito
|
||||
$prezzo_unitario = filter('prezzo_unitario_fisso');
|
||||
$dettaglio_predefinito = DettaglioPrezzo::dettaglioPredefinito($id_articolo, $id_anagrafica, $direzione)
|
||||
->first();
|
||||
if (empty($dettaglio_predefinito)) {
|
||||
$dettaglio_predefinito = DettaglioPrezzo::build($articolo, $anagrafica, $direzione);
|
||||
}
|
||||
$dettaglio_predefinito->setPrezzoUnitario($prezzo_unitario);
|
||||
$dettaglio_predefinito->save();
|
||||
|
||||
// Salvataggio dei prezzi variabili
|
||||
$prezzo_fisso = filter('prezzo_fisso');
|
||||
$dettagli = DettaglioPrezzo::dettagli($id_articolo, $id_anagrafica, $direzione);
|
||||
if (empty($prezzo_fisso)) {
|
||||
$prezzi_unitari = (array) filter('prezzo_unitario');
|
||||
$minimi = filter('minimo');
|
||||
$massimi = filter('massimo');
|
||||
|
||||
// Rimozione dei prezzi cancellati
|
||||
$registrati = filter('dettaglio');
|
||||
$dettagli = $dettagli->whereNotIn('id', $registrati)->delete();
|
||||
|
||||
// Aggiornamento e creazione dei prezzi registrati
|
||||
foreach ($prezzi_unitari as $key => $prezzo_unitario) {
|
||||
if (isset($registrati[$key])) {
|
||||
$dettaglio = DettaglioPrezzo::find($registrati[$key]);
|
||||
} else {
|
||||
$dettaglio = DettaglioPrezzo::build($articolo, $anagrafica, $direzione);
|
||||
}
|
||||
|
||||
$dettaglio->minimo = $minimi[$key];
|
||||
$dettaglio->massimo = $massimi[$key];
|
||||
$dettaglio->setPrezzoUnitario($prezzo_unitario);
|
||||
$dettaglio->save();
|
||||
}
|
||||
} else {
|
||||
$dettagli->delete();
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 'delete_fornitore':
|
||||
$id_riga = post('id_riga');
|
||||
|
||||
|
0
plugins/dettagli_articolo/edit_fornitore.php → plugins/dettagli_articolo/dettaglio_fornitore.php
Executable file → Normal file
0
plugins/dettagli_articolo/edit_fornitore.php → plugins/dettagli_articolo/dettaglio_fornitore.php
Executable file → Normal file
221
plugins/dettagli_articolo/dettaglio_prezzi.php
Normal file
221
plugins/dettagli_articolo/dettaglio_prezzi.php
Normal file
@ -0,0 +1,221 @@
|
||||
<?php
|
||||
|
||||
use Modules\Anagrafiche\Anagrafica;
|
||||
use Modules\Articoli\Articolo;
|
||||
use Plugins\DettagliArticolo\DettaglioPrezzo;
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
$prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
|
||||
|
||||
// Informazioni di base
|
||||
$id_articolo = get('id_articolo');
|
||||
$id_anagrafica = get('id_anagrafica');
|
||||
$direzione = get('direzione') == 'uscita' ? 'uscita' : 'entrata';
|
||||
|
||||
// Modelli di interesse
|
||||
$articolo = Articolo::find($id_articolo);
|
||||
$anagrafica = Anagrafica::find($id_anagrafica);
|
||||
|
||||
$prezzo_predefinito = $prezzi_ivati ? $articolo->prezzo_vendita_ivato : $articolo->prezzo_vendita;
|
||||
|
||||
// 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;
|
||||
}
|
||||
|
||||
echo '
|
||||
<p>'.tr('Informazioni relative al fornitore _NAME_', [
|
||||
'_NAME_' => $anagrafica->ragione_sociale,
|
||||
]).'.</p>
|
||||
|
||||
<form action="" method="post">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
<input type="hidden" name="op" value="update_prezzi">
|
||||
<input type="hidden" name="id_plugin" value="'.$id_plugin.'">
|
||||
|
||||
<input type="hidden" name="dir" value="'.$direzione.'">
|
||||
<input type="hidden" name="id_anagrafica" value="'.$id_anagrafica.'">
|
||||
<input type="hidden" name="id_articolo" value="'.$id_articolo.'">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<p>'.tr('Prezzo unitario predefinito: _TOT_', [
|
||||
'_TOT_' => moneyFormat($prezzo_predefinito),
|
||||
]).'</p>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "checkbox", "label": "'.tr("Modifica prezzo per l'anagrafica").'", "name": "modifica_prezzi", "value": "'.intval(!$dettagli->isEmpty() || !empty($dettaglio_predefinito)).'" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
{[ "type": "number", "label": "'.tr('Prezzo unitario').'", "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-6">
|
||||
{[ "type": "checkbox", "label": "'.tr('Imposta un prezzo unitario fisso').'", "name": "prezzo_fisso", "value": "'.intval($dettagli->count() == 0).'" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="box" id="prezzi">
|
||||
<div class="box-header">
|
||||
<h3 class="box-title">
|
||||
'.tr('Prezzi per quantità').'
|
||||
</h3>
|
||||
|
||||
<button type="button" class="btn btn-xs btn-info pull-right" onclick="aggiungiPrezzo(this)">
|
||||
<i class="fa fa-plus"></i> '.tr('Aggiungi range').'
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="box-body">
|
||||
<p>'.tr("Inserire i prezzi da associare all'articolo e all'anagrafica in relazione alla quantità di acquisto").'.</p>
|
||||
<p>'.tr('Per impostare un prezzo generale per quantità non incluse in questi limiti, utilizzare il campo sopra indicato').'.</p>
|
||||
|
||||
<table class="table table-condensed">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="text-center">'.tr('Quantità minima').'</th>
|
||||
<th class="text-center">'.tr('Quantità massima').'</th>
|
||||
<th class="text-center tip" title="'.($prezzi_ivati ? tr('Importo IVA inclusa') : '').'">
|
||||
'.tr('Prezzo unitario').' <i class="fa fa-question-circle-o"></i>
|
||||
</th>
|
||||
<th>#</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>';
|
||||
|
||||
foreach ($dettagli as $key => $dettaglio) {
|
||||
echo '
|
||||
<tr>
|
||||
<td>
|
||||
<input type="hidden" name="dettaglio['.$key.']" value="'.$dettaglio->id.'">
|
||||
{[ "type": "number", "name": "minimo['.$key.']", "min-value": 0, "value": "'.$dettaglio->minimo.'" ]}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{[ "type": "number", "name": "massimo['.$key.']", "min-value": 0, "value": "'.$dettaglio->massimo.'" ]}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{[ "type": "number", "name": "prezzo_unitario['.$key.']", "icon-after": "'.currency().'", "value": "'.($prezzi_ivati ? $dettaglio->prezzo_unitario_ivato : $dettaglio->prezzo_unitario).'" ]}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<button type="button" class="btn btn-xs btn-danger" onclick="rimuoviPrezzo(this)">
|
||||
<i class="fa fa-trash"></i>
|
||||
</button>
|
||||
</td>
|
||||
</tr>';
|
||||
}
|
||||
|
||||
echo '
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="clearfix"></div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<button class="btn btn-primary pull-right">
|
||||
<i class="fa fa-edit"></i> '.tr('Salva').'
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<table class="hide">
|
||||
<tbody id="prezzi-template">
|
||||
<tr>
|
||||
<td>
|
||||
{[ "type": "number", "name": "minimo[-id-]", "min-value": 0 ]}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{[ "type": "number", "name": "massimo[-id-]", "min-value": 0 ]}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{[ "type": "number", "name": "prezzo_unitario[-id-]", "icon-after": "'.currency().'" ]}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<button type="button" class="btn btn-xs btn-danger" onclick="rimuoviPrezzo(this)">
|
||||
<i class="fa fa-trash"></i>
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<script>$(document).ready(init);</script>
|
||||
|
||||
<script>
|
||||
var key = '.$dettagli->count().';
|
||||
function aggiungiPrezzo(button) {
|
||||
cleanup_inputs();
|
||||
|
||||
let text = replaceAll($("#prezzi-template").html(), "-id-", "" + key);
|
||||
key++;
|
||||
|
||||
let body = $(button).closest(".box").find("table > tbody");
|
||||
let lastRow = body.find("tr").last();
|
||||
if (lastRow.length) {
|
||||
lastRow.after(text);
|
||||
} else {
|
||||
body.html(text);
|
||||
}
|
||||
|
||||
restart_inputs();
|
||||
}
|
||||
|
||||
function rimuoviPrezzo(button) {
|
||||
$(button).closest("tr").remove();
|
||||
}
|
||||
|
||||
function cambioImpostazioni() {
|
||||
let modifica_prezzi = input("modifica_prezzi");
|
||||
let prezzo_fisso = input("prezzo_fisso");
|
||||
let prezzo_fisso_input = input("prezzo_unitario_fisso");
|
||||
|
||||
let prezzi_variabili = $("#prezzi");
|
||||
|
||||
if (!modifica_prezzi.get()){
|
||||
prezzo_fisso.disable();
|
||||
prezzo_fisso_input.disable();
|
||||
} else {
|
||||
modifica_prezzi.disable();
|
||||
|
||||
prezzo_fisso.enable();
|
||||
prezzo_fisso_input.enable();
|
||||
}
|
||||
|
||||
if (!prezzo_fisso.get()) {
|
||||
prezzi_variabili.removeClass("hidden");
|
||||
} else {
|
||||
prezzi_variabili.addClass("hidden");
|
||||
}
|
||||
}
|
||||
|
||||
input("modifica_prezzi").change(function (){
|
||||
cambioImpostazioni();
|
||||
})
|
||||
|
||||
input("prezzo_fisso").change(function (){
|
||||
cambioImpostazioni();
|
||||
})
|
||||
|
||||
$(document).ready(cambioImpostazioni);
|
||||
</script>';
|
@ -5,112 +5,188 @@ use Plugins\DettagliArticolo\DettaglioFornitore;
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
echo '
|
||||
<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>
|
||||
<p>'.tr("Ogni fornitore, tra cui si evidenzia quello predefinito per l'articolo, può essere descritto una sola volta con le informazioni aggiuntive").'.</p>
|
||||
<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="box">
|
||||
<div class="box-header">
|
||||
<h3 class="box-title">'.tr('Nuovo fornitore').'</h3>
|
||||
</div>
|
||||
<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>
|
||||
|
||||
<div class="box-body">
|
||||
<div class="row">
|
||||
<div class="col-md-9">
|
||||
{[ "type": "select", "label": "'.tr('Fornitore').'", "name": "id_fornitore_informazioni", "required": 1, "ajax-source": "fornitori", "value": "" ]}
|
||||
</div>
|
||||
<li><a href="#tab_'.$id_plugin.'" onclick="apriTab(this)" data-tab="fornitori">'.tr('Fornitori').'</a></li>
|
||||
</ul>
|
||||
|
||||
<div class="col-md-3">
|
||||
<button type="button" class="btn btn-primary btn-block" style="margin-top:25px;" onclick="add_fornitore()">
|
||||
<i class="fa fa-plus"></i> '.tr('Aggiungi').'
|
||||
</button>
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane active" id="clienti">
|
||||
<div class="box">
|
||||
<div class="box-header">
|
||||
<h3 class="box-title">'.tr('Aggiungi informazioni per cliente').'</h3>
|
||||
</div>
|
||||
|
||||
<div class="box-body">
|
||||
<div class="row">
|
||||
<div class="col-md-9">
|
||||
{[ "type": "select", "label": "'.tr('Cliente').'", "name": "id_cliente_informazioni", "ajax-source": "clienti" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
<button type="button" class="btn btn-primary btn-block" style="margin-top:25px;" onclick="aggiungiPrezzi(this)">
|
||||
<i class="fa fa-money"></i> '.tr('Prezzi').'
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</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>
|
||||
<p>'.tr("Ogni fornitore, tra cui si evidenzia quello predefinito per l'articolo, può essere descritto una sola volta con le informazioni aggiuntive").'.</p>
|
||||
|
||||
<div class="box">
|
||||
<div class="box-header">
|
||||
<h3 class="box-title">'.tr('Aggiungi informazioni per fornitore').'</h3>
|
||||
</div>
|
||||
|
||||
<div class="box-body">
|
||||
<div class="row">
|
||||
<div class="col-md-9">
|
||||
{[ "type": "select", "label": "'.tr('Fornitore').'", "name": "id_fornitore_informazioni", "ajax-source": "fornitori" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
<button type="button" class="btn btn-primary btn-block" style="margin-top:25px;" onclick="aggiungiPrezzi(this)">
|
||||
<i class="fa fa-money"></i> '.tr('Prezzi').'
|
||||
</button>
|
||||
|
||||
<button type="button" class="btn btn-primary btn-block" style="margin-top:25px;" onclick="aggiungiFornitore()">
|
||||
<i class="fa fa-inbox"></i> '.tr('Dettagli').'
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
$fornitori = DettaglioFornitore::where('id_articolo', $id_record)->get();
|
||||
if (!$fornitori->isEmpty()) {
|
||||
echo '
|
||||
<h4>'.tr('Elenco fornitori').'</h4>
|
||||
<table class="table table-striped table-condensed table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>'.tr('Fornitore').'</th>
|
||||
<th width="150">'.tr('Codice').'</th>
|
||||
<th>'.tr('Descrizione').'</th>
|
||||
<th class="text-center" width="210">'.tr('Q.tà minima ordinabile').'</th>
|
||||
<th class="text-center" width="150">'.tr('Tempi di consegna').'</th>
|
||||
<th class="text-center" width="150">'.tr('Prezzo acquisto').'</th>
|
||||
<th class="text-center" width="70"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<h4>'.tr('Elenco fornitori').'</h4>
|
||||
<table class="table table-striped table-condensed table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>'.tr('Fornitore').'</th>
|
||||
<th width="150">'.tr('Codice').'</th>
|
||||
<th>'.tr('Descrizione').'</th>
|
||||
<th class="text-center" width="210">'.tr('Q.tà minima ordinabile').'</th>
|
||||
<th class="text-center" width="150">'.tr('Tempi di consegna').'</th>
|
||||
<th class="text-center" width="150">'.tr('Prezzo acquisto').'</th>
|
||||
<th class="text-center" width="70"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>';
|
||||
<tbody>';
|
||||
|
||||
foreach ($fornitori as $fornitore) {
|
||||
$anagrafica = $fornitore->anagrafica;
|
||||
|
||||
echo '
|
||||
<tr '.(($anagrafica->id == $articolo->id_fornitore) ? 'class="success"' : '').'>
|
||||
<td>
|
||||
'.Modules::link('Anagrafiche', $anagrafica->id, $anagrafica->ragione_sociale).'
|
||||
</td>
|
||||
<tr '.(($anagrafica->id == $articolo->id_fornitore) ? 'class="success"' : '').'>
|
||||
<td>
|
||||
'.Modules::link('Anagrafiche', $anagrafica->id, $anagrafica->ragione_sociale).'
|
||||
</td>
|
||||
|
||||
<td class="text-center">
|
||||
'.$fornitore['codice_fornitore'].'
|
||||
</td>
|
||||
<td class="text-center">
|
||||
'.$fornitore['codice_fornitore'].'
|
||||
</td>
|
||||
|
||||
<td>
|
||||
'.$fornitore['descrizione'].'
|
||||
</td>
|
||||
<td>
|
||||
'.$fornitore['descrizione'].'
|
||||
</td>
|
||||
|
||||
<td class="text-right">
|
||||
'.numberFormat($fornitore['qta_minima']).' '.$fornitore->articolo->um.'
|
||||
</td>
|
||||
<td class="text-right">
|
||||
'.numberFormat($fornitore['qta_minima']).' '.$fornitore->articolo->um.'
|
||||
</td>
|
||||
|
||||
<td class="text-right">
|
||||
'.tr('_NUM_ gg', [
|
||||
'_NUM_' => numberFormat($fornitore['giorni_consegna'], 0),
|
||||
]).'
|
||||
</td>
|
||||
<td class="text-right">
|
||||
'.tr('_NUM_ gg', [
|
||||
'_NUM_' => numberFormat($fornitore['giorni_consegna'], 0),
|
||||
]).'
|
||||
</td>
|
||||
|
||||
<td class="text-right">
|
||||
<span>'.moneyFormat($fornitore['prezzo_acquisto']).'</span>
|
||||
</td>
|
||||
<td class="text-right">
|
||||
<span>'.moneyFormat($fornitore['prezzo_acquisto']).'</span>
|
||||
</td>
|
||||
|
||||
<td class="text-center">
|
||||
<a class="btn btn-secondary btn-xs btn-warning" onclick="edit_fornitore('.$fornitore['id'].', '.$anagrafica->id.')">
|
||||
<i class="fa fa-edit"></i>
|
||||
</a>
|
||||
<td class="text-center">
|
||||
<a class="btn btn-secondary btn-xs btn-warning" onclick="modificaFornitore('.$fornitore['id'].', '.$anagrafica->id.')">
|
||||
<i class="fa fa-edit"></i>
|
||||
</a>
|
||||
|
||||
<a class="btn btn-secondary btn-xs btn-danger ask" data-op="delete_fornitore" data-id_riga="'.$fornitore['id'].'" data-id_plugin="'.$id_plugin.'" data-backto="record-edit">
|
||||
<i class="fa fa-trash-o"></i>
|
||||
</a>
|
||||
</td>
|
||||
</tr>';
|
||||
<a class="btn btn-secondary btn-xs btn-danger ask" data-op="delete_fornitore" data-id_riga="'.$fornitore['id'].'" data-id_plugin="'.$id_plugin.'" data-backto="record-edit">
|
||||
<i class="fa fa-trash-o"></i>
|
||||
</a>
|
||||
</td>
|
||||
</tr>';
|
||||
}
|
||||
|
||||
echo '
|
||||
</tbody>
|
||||
</table>';
|
||||
</tbody>
|
||||
</table>';
|
||||
} else {
|
||||
echo '
|
||||
<div class="alert alert-info">
|
||||
<i class="fa fa-info-circle"></i> '.tr('Nessuna informazione disponibile').'...
|
||||
</div>';
|
||||
<div class="alert alert-info">
|
||||
<i class="fa fa-info-circle"></i> '.tr('Nessuna informazione disponibile').'...
|
||||
</div>';
|
||||
}
|
||||
|
||||
echo '
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function edit_fornitore(id_riga, id_anagrafica) {
|
||||
openModal("Modifica dati fornitore", "'.$structure->fileurl('edit_fornitore.php').'?id_plugin='.$id_plugin.'&id_module='.$id_module.'&id_parent='.$id_record.'&id_articolo='.$id_record.'&id_riga=" + id_riga + "&id_anagrafica=" + id_anagrafica);
|
||||
$(document).ready(function (){
|
||||
apriTab($("#clienti-tab")[0]);
|
||||
});
|
||||
|
||||
function apriTab(link) {
|
||||
let element = $(link).closest("li");
|
||||
let parent = element.closest(".nav-tabs-custom");
|
||||
|
||||
parent.find("ul > li").removeClass("active");
|
||||
element.addClass("active");
|
||||
|
||||
let tab = $(link).data("tab");
|
||||
parent.find(".tab-pane").removeClass("active");
|
||||
parent.find(".tab-pane#" + tab).addClass("active");
|
||||
}
|
||||
|
||||
function add_fornitore() {
|
||||
var id_fornitore = $("#id_fornitore_informazioni").val();
|
||||
if (id_fornitore){
|
||||
edit_fornitore("", id_fornitore);
|
||||
function modificaPrezzi(id_anagrafica, direzione) {
|
||||
openModal("Modifica dettagli prezzi", "'.$structure->fileurl('dettaglio_prezzi.php').'?id_plugin='.$id_plugin.'&id_module='.$id_module.'&id_parent='.$id_record.'&id_articolo='.$id_record.'&id_anagrafica=" + id_anagrafica + "&direzione=" + direzione);
|
||||
}
|
||||
|
||||
function aggiungiPrezzi(button) {
|
||||
let panel = $(button).closest(".box");
|
||||
let tab = panel.closest(".tab-pane");
|
||||
|
||||
let direzione = tab.attr("id") === "fornitori" ? "uscita" : "entrata";
|
||||
let id_anagrafica = panel.find("select").val();
|
||||
|
||||
if (id_anagrafica) {
|
||||
modificaPrezzi(id_anagrafica, direzione);
|
||||
} else {
|
||||
swal("'.tr('Errore').'", "'.tr('Nessuna anagrafica selezionato').'", "error");
|
||||
}
|
||||
}
|
||||
|
||||
function modificaFornitore(id_riga, id_anagrafica) {
|
||||
openModal("Modifica dati fornitore", "'.$structure->fileurl('dettaglio_fornitore.php').'?id_plugin='.$id_plugin.'&id_module='.$id_module.'&id_parent='.$id_record.'&id_articolo='.$id_record.'&id_riga=" + id_riga + "&id_anagrafica=" + id_anagrafica);
|
||||
}
|
||||
|
||||
function aggiungiFornitore() {
|
||||
let id_fornitore = $("#id_fornitore_informazioni").val();
|
||||
if (id_fornitore) {
|
||||
modificaFornitore("", id_fornitore);
|
||||
} else {
|
||||
swal("'.tr('Errore').'", "'.tr('Nessun fornitore selezionato').'", "error");
|
||||
}
|
||||
|
@ -3,9 +3,9 @@
|
||||
namespace Plugins\DettagliArticolo;
|
||||
|
||||
use Common\Model;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
use Modules\Anagrafiche\Anagrafica;
|
||||
use Modules\Articoli\Articolo;
|
||||
use Modules\Iva\Aliquota;
|
||||
|
||||
/**
|
||||
* Classe per la gestione delle relazioni articolo-prezzo sulla base di un range di quantità e di una specifica anagrafica.
|
||||
@ -14,36 +14,74 @@ use Modules\Articoli\Articolo;
|
||||
*/
|
||||
class DettaglioPrezzo extends Model
|
||||
{
|
||||
use SoftDeletes;
|
||||
|
||||
protected $table = 'mg_prezzi_articoli';
|
||||
|
||||
/**
|
||||
* Crea una nuova relazione tra Articolo e Fornitore.
|
||||
* Crea una nuova relazione tra Articolo e Anagrafica per la gestione dei prezzi.
|
||||
*
|
||||
* @return self
|
||||
*/
|
||||
public static function build(Anagrafica $fornitore, Articolo $articolo)
|
||||
public static function build(Articolo $articolo, Anagrafica $anagrafica, $direzione = 'uscita')
|
||||
{
|
||||
$model = parent::build();
|
||||
|
||||
$model->anagrafica()->associate($fornitore);
|
||||
$model->anagrafica()->associate($anagrafica);
|
||||
$model->articolo()->associate($articolo);
|
||||
$model->dir = $direzione == 'uscita' ? 'uscita' : 'entrata';
|
||||
|
||||
$model->save();
|
||||
|
||||
return $model;
|
||||
}
|
||||
|
||||
/**
|
||||
* Imposta il prezzo di vendita sulla base dell'impstazione per l'utilizzo dei prezzi comprensivi di IVA.
|
||||
*
|
||||
* @param $prezzo_unitario
|
||||
*/
|
||||
public function setPrezzoUnitario($prezzo_unitario)
|
||||
{
|
||||
$id_iva = $this->articolo->idiva_vendita;
|
||||
|
||||
// Calcolo prezzo di vendita ivato e non ivato
|
||||
$prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
|
||||
$percentuale_aliquota = floatval(Aliquota::find($id_iva)->percentuale);
|
||||
if ($prezzi_ivati) {
|
||||
$this->prezzo_unitario_ivato = $prezzo_unitario;
|
||||
$this->prezzo_unitario = $prezzo_unitario / (1 + $percentuale_aliquota / 100);
|
||||
} else {
|
||||
$this->prezzo_unitario = $prezzo_unitario;
|
||||
$this->prezzo_unitario_ivato = $prezzo_unitario * (1 + $percentuale_aliquota / 100);
|
||||
}
|
||||
}
|
||||
|
||||
// Relazioni Eloquent
|
||||
|
||||
public function anagrafica()
|
||||
{
|
||||
return $this->belongsTo(Anagrafica::class, 'id_fornitore');
|
||||
return $this->belongsTo(Anagrafica::class, 'id_anagrafica');
|
||||
}
|
||||
|
||||
public function articolo()
|
||||
{
|
||||
return $this->belongsTo(Articolo::class, 'id_articolo');
|
||||
}
|
||||
|
||||
public static function dettaglioPredefinito($id_articolo, $id_anagrafica, $direzione)
|
||||
{
|
||||
return self::where('id_articolo', $id_articolo)
|
||||
->where('id_anagrafica', $id_anagrafica)
|
||||
->where('dir', $direzione)
|
||||
->whereNull('minimo')
|
||||
->whereNull('massimo');
|
||||
}
|
||||
|
||||
public static function dettagli($id_articolo, $id_anagrafica, $direzione)
|
||||
{
|
||||
return self::where('id_articolo', $id_articolo)
|
||||
->where('id_anagrafica', $id_anagrafica)
|
||||
->where('dir', $direzione)
|
||||
->whereNotNull('minimo')
|
||||
->whereNotNull('massimo');
|
||||
}
|
||||
}
|
||||
|
@ -56,7 +56,7 @@ class ChoicesHandler implements HandlerInterface
|
||||
$result = '
|
||||
<div class="form-group">
|
||||
<input type="hidden" name="|name|" value="|value|">
|
||||
<input type="checkbox" id="|id|" value="|value|" autocomplete="off" class="hidden" |attr| onchange="$(this).parent().find(\'[type = hidden]\').val(+this.checked)"/>
|
||||
<input type="checkbox" id="|id|" value="|value|" autocomplete="off" class="hidden" |attr| onchange="$(this).parent().find(\'[type = hidden]\').val(+this.checked).trigger(\'change\')"/>
|
||||
<div class="btn-group checkbox-buttons">
|
||||
<label for="|id|" class="btn btn-default'.$class.'">
|
||||
<span class="fa fa-check text-success"></span>
|
||||
|
@ -31,7 +31,7 @@ CREATE TABLE IF NOT EXISTS `mg_prezzi_articoli` (
|
||||
`massimo` DECIMAL(15,6),
|
||||
`prezzo_unitario` DECIMAL(15,6) NOT NULL,
|
||||
`prezzo_unitario_ivato` DECIMAL(15,6) NOT NULL,
|
||||
`direzione` VARCHAR(255) NOT NULL,
|
||||
`dir` VARCHAR(255) NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
FOREIGN KEY (`id_articolo`) REFERENCES `mg_articoli`(`id`),
|
||||
FOREIGN KEY (`id_anagrafica`) REFERENCES `an_anagrafiche`(`idanagrafica`)
|
||||
|
@ -81,6 +81,7 @@ return [
|
||||
'mg_categorie',
|
||||
'mg_causali_movimenti',
|
||||
'mg_listini',
|
||||
'mg_prezzi_articoli',
|
||||
'mg_movimenti',
|
||||
'mg_prodotti',
|
||||
'mg_unitamisura',
|
||||
|
Loading…
x
Reference in New Issue
Block a user