Aggiunto coefficiente di vendita in articoli e azione di gruppo

This commit is contained in:
MatteoPistorello 2022-03-07 09:35:58 +01:00
parent 5ed9bc9efa
commit e4d36a99fe
6 changed files with 231 additions and 63 deletions

View File

@ -58,8 +58,12 @@ switch (post('op')) {
$articolo->barcode = post('barcode');
$articolo->threshold_qta = post('threshold_qta');
$articolo->coefficiente = post('coefficiente');
$articolo->idiva_vendita = post('idiva_vendita');
$articolo->prezzo_acquisto = post('prezzo_acquisto');
$articolo->setPrezzoVendita(post('prezzo_vendita'), post('idiva_vendita'));
if (empty(post('coefficiente'))) {
$articolo->setPrezzoVendita(post('prezzo_vendita'), post('idiva_vendita'));
}
$articolo->idconto_vendita = post('idconto_vendita');
$articolo->idconto_acquisto = post('idconto_acquisto');
$articolo->save();
@ -116,6 +120,8 @@ switch (post('op')) {
$articolo->abilita_serial = post('abilita_serial');
$articolo->ubicazione = post('ubicazione');
$articolo->threshold_qta = post('threshold_qta');
$articolo->coefficiente = post('coefficiente');
$articolo->idiva_vendita = post('idiva_vendita');
$articolo->prezzo_acquisto = post('prezzo_acquisto');
$articolo->idconto_vendita = post('idconto_vendita');
$articolo->idconto_acquisto = post('idconto_acquisto');
@ -129,7 +135,9 @@ switch (post('op')) {
$articolo->fattore_um_secondaria = post('fattore_um_secondaria');
$articolo->qta_multipla = post('qta_multipla');
$articolo->setPrezzoVendita(post('prezzo_vendita'), post('idiva_vendita'));
if (empty(post('coefficiente'))) {
$articolo->setPrezzoVendita(post('prezzo_vendita'), post('idiva_vendita'));
}
$componente = post('componente_filename');
$articolo->componente_filename = $componente;

View File

@ -19,6 +19,12 @@
include_once __DIR__.'/../../core.php';
use Modules\Iva\Aliquota;
$prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
$iva_predefinita = setting('Iva predefinita');
$aliquota_predefinita = floatval(Aliquota::find($iva_predefinita)->percentuale);
?><form action="" method="post" id="add-form">
<input type="hidden" name="op" value="add">
<input type="hidden" name="backto" value="record-edit">
@ -63,16 +69,10 @@ include_once __DIR__.'/../../core.php';
</div>
<div class="col-md-4">
{[ "type": "number", "label": "<?php echo tr('Quantità iniziale'); ?>", "name": "qta", "decimals": "qta" ]}
{[ "type": "number", "label": "<?php echo tr('Coefficiente di vendita'); ?>", "name": "coefficiente", "help": "<?php echo tr('Imposta un coefficiente per calcolare automaticamente il prezzo di vendita quando cambia il prezzo di acquisto'); ?>." ]}
</div>
<div class="col-md-4">
{[ "type": "number", "label": "<?php echo tr('Soglia minima quantità'); ?>", "name": "threshold_qta", "decimals": "qta", "min-value": "undefined" ]}
</div>
</div>
<div class="row">
<div class="col-md-6">
<?php
if (!setting('Utilizza prezzi di vendita comprensivi di IVA')) {
echo '
@ -82,9 +82,22 @@ include_once __DIR__.'/../../core.php';
{[ "type": "number", "label": "<?php echo tr('Prezzo di vendita'); ?>", "name": "prezzo_vendita", "icon-after": "<?php echo currency(); ?>", "help": "<?php echo setting('Utilizza prezzi di vendita comprensivi di IVA') ? tr('Importo IVA inclusa') : ''; ?>" ]}
</div>
</div>
<div class="col-md-6">
<div class="row">
<div class="col-md-4">
{[ "type": "number", "label": "<?php echo tr('Quantità iniziale'); ?>", "name": "qta", "decimals": "qta" ]}
</div>
<div class="col-md-4">
{[ "type": "number", "label": "<?php echo tr('Soglia minima quantità'); ?>", "name": "threshold_qta", "decimals": "qta", "min-value": "undefined" ]}
</div>
<div class="col-md-4">
{[ "type": "select", "label": "<?php echo tr('Iva di vendita'); ?>", "name": "idiva_vendita", "ajax-source": "iva", "valore_predefinito": "Iva predefinita", "help": "<?php echo tr('Se non specificata, verrà utilizzata l\'iva di default delle impostazioni'); ?>" ]}
<input type="hidden" name="prezzi_ivati" value="<?php echo $prezzi_ivati; ?>">
<input type="hidden" name="aliquota_predefinita" value="<?php echo $aliquota_predefinita; ?>">
</div>
</div>
@ -109,6 +122,9 @@ include_once __DIR__.'/../../core.php';
</form>
<script>
iva_vendita = $("#add-form").find("#idiva_vendita");
percentuale = 0;
$(document).ready(function () {
var sub = $('#add-form').find('#subcategoria_add');
var original = sub.parent().find(".input-group-addon button").attr("onclick");
@ -128,24 +144,65 @@ $(document).ready(function () {
}
});
input("coefficiente").on('keyup', function(){
if (iva_vendita.val()) {
percentuale = parseFloat(iva_vendita.selectData().percentuale);
}
if (!percentuale) {
percentuale = parseFloat(input("aliquota_predefinita").get());
}
if (input("coefficiente").get()) {
let prezzo_vendita = input('prezzo_acquisto').get() * input("coefficiente").get();
if (parseFloat(input("prezzi_ivati").get())) {
prezzo_vendita = prezzo_vendita + (prezzo_vendita * percentuale / 100);
}
input("prezzo_vendita").set(prezzo_vendita);
input("prezzo_vendita").disable();
$("#scorpora_iva_add").addClass("disabled");
} else {
input("prezzo_vendita").enable();
$("#scorpora_iva_add").removeClass("disabled");
}
});
input("prezzo_acquisto").on('keyup change', function(){
if (iva_vendita.val()) {
percentuale = parseFloat(iva_vendita.selectData().percentuale);
}
if (!percentuale) {
percentuale = parseFloat(input("aliquota_predefinita").get());
}
if (input("coefficiente").get()) {
let prezzo_vendita = input('prezzo_acquisto').get() * input("coefficiente").get();
if (parseFloat(input("prezzi_ivati").get())) {
prezzo_vendita = prezzo_vendita + (prezzo_vendita * percentuale / 100);
}
input("prezzo_vendita").set(prezzo_vendita);
input("prezzo_vendita").disable();
$("#scorpora_iva_add").addClass("disabled");
} else {
input("prezzo_vendita").enable();
$("#scorpora_iva_add").removeClass("disabled");
}
});
$("#scorpora_iva_add").click( function() {
scorpora_iva_add();
});
});
function scorpora_iva_add() {
if ($("#add-form").find("#idiva_vendita").val() != '') {
var percentuale = parseFloat($("#add-form").find("#idiva_vendita").selectData().percentuale);
if(!percentuale) return;
var input = $("#add-form").find("#prezzo_vendita");
var prezzo = input.val().toEnglish();
var scorporato = prezzo * 100 / (100 + percentuale);
input.val(scorporato);
}else{
swal("<?php echo tr('Attenzione'); ?>", "<?php echo tr('Seleziona Iva di vendita.'); ?>", "warning");
if (iva_vendita.val()) {
percentuale = parseFloat(iva_vendita.selectData().percentuale);
}
if (!percentuale) {
percentuale = parseFloat(input("aliquota_predefinita").get());
}
if(!percentuale) return;
let input = $("#prezzo_vendita");
let prezzo = input.val().toEnglish();
let scorporato = prezzo * 100 / (100 + percentuale);
input.val(scorporato);
}
</script>

View File

@ -55,36 +55,59 @@ switch (post('op')) {
$tipologia = post('tipologia');
$arrotondamento = post('arrotondamento');
$prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
$articoli_coeff = 0;
foreach ($id_records as $id) {
$articolo = Articolo::find($id);
$prezzo_partenza = post('prezzo_partenza') == 'vendita' ? $articolo->prezzo_vendita : $articolo->prezzo_acquisto;
$aliquota_iva = floatval(Aliquota::find($articolo->idiva_vendita)->percentuale);
$new_prezzo_vendita = $prezzo_partenza + ($prezzo_partenza * $percentuale / 100);
if (empty((int)$articolo->coefficiente)) {
$prezzo_partenza = post('prezzo_partenza') == 'vendita' ? $articolo->prezzo_vendita : $articolo->prezzo_acquisto;
$aliquota_iva = floatval(Aliquota::find($articolo->idiva_vendita)->percentuale);
// Arrotondamento
if (!empty($tipologia) && !empty($arrotondamento)) {
if ($tipologia == 'ivato') {
$new_prezzo_vendita = $prezzo_partenza + ($prezzo_partenza * $percentuale / 100);
// Arrotondamento
if (!empty($tipologia) && !empty($arrotondamento)) {
if ($tipologia == 'ivato') {
$new_prezzo_vendita = $new_prezzo_vendita + ($new_prezzo_vendita * $aliquota_iva / 100);
}
$new_prezzo_vendita = ceil($new_prezzo_vendita / $arrotondamento) * $arrotondamento;
}
if (in_array($tipologia, ['ivato', '']) && !$prezzi_ivati) {
$new_prezzo_vendita = $new_prezzo_vendita * 100 / (100 + $aliquota_iva);
}
if (in_array($tipologia, ['imponibile', '']) && $prezzi_ivati) {
$new_prezzo_vendita = $new_prezzo_vendita + ($new_prezzo_vendita * $aliquota_iva / 100);
}
$new_prezzo_vendita = ceil($new_prezzo_vendita / $arrotondamento) * $arrotondamento;
$articolo->setPrezzoVendita($new_prezzo_vendita, $articolo->idiva_vendita);
$articolo->save();
} else {
$articoli_coeff++;
}
if (in_array($tipologia, ['ivato', '']) && !$prezzi_ivati) {
$new_prezzo_vendita = $new_prezzo_vendita * 100 / (100 + $aliquota_iva);
}
if (in_array($tipologia, ['imponibile', '']) && $prezzi_ivati) {
$new_prezzo_vendita = $new_prezzo_vendita + ($new_prezzo_vendita * $aliquota_iva / 100);
}
$articolo->setPrezzoVendita($new_prezzo_vendita, $articolo->idiva_vendita);
$articolo->save();
}
flash()->info(tr('Prezzi di vendita aggiornati!'));
flash()->warning(tr('_NUM_ prezzi di vendita non aggiornati per coefficiente impostato!', [
'_NUM_' => $articoli_coeff,
]));
break;
case 'change-coefficiente':
foreach ($id_records as $id) {
$articolo = Articolo::find($id);
$coefficiente = post('coefficiente');
$articolo->coefficiente = $coefficiente;
$articolo->prezzo_acquisto = $articolo->prezzo_acquisto;
$articolo->save();
}
flash()->info(tr('Coefficienti di vendita aggiornati!'));
break;
@ -356,7 +379,7 @@ $operations['change-acquisto'] = [
'text' => '<span><i class="fa fa-refresh"></i> '.tr('Aggiorna prezzo di acquisto').'</span>',
'data' => [
'title' => tr('Aggiornare il prezzo di acquisto per gli articoli selezionati?'),
'msg' => 'Per indicare uno sconto inserire la percentuale con il segno meno, al contrario per un rincaro inserire la percentuale senza segno.<br><br>{[ "type": "number", "label": "'.tr('Percentuale sconto/magg.').'", "name": "percentuale", "required": 1, "icon-after": "%" ]}',
'msg' => tr('Per indicare uno sconto inserire la percentuale con il segno meno, al contrario per un rincaro inserire la percentuale senza segno.').'<br><br>{[ "type": "number", "label": "'.tr('Percentuale sconto/magg.').'", "name": "percentuale", "required": 1, "icon-after": "%" ]}',
'button' => tr('Procedi'),
'class' => 'btn btn-lg btn-warning',
'blank' => false,
@ -367,7 +390,7 @@ $operations['change-vendita'] = [
'text' => '<span><i class="fa fa-refresh"></i> '.tr('Aggiorna prezzo di vendita').'</span>',
'data' => [
'title' => tr('Aggiornare il prezzo di vendita per gli articoli selezionati?'),
'msg' => 'Per indicare uno sconto inserire la percentuale con il segno meno, al contrario per un rincaro inserire la percentuale senza segno.<br><br>
'msg' => tr('Per indicare uno sconto inserire la percentuale con il segno meno, al contrario per un rincaro inserire la percentuale senza segno.').'<br><br>
{[ "type": "select", "label": "'.tr('Partendo da:').'", "name": "prezzo_partenza", "required": 1, "values": "list=\"acquisto\":\"Prezzo di acquisto\",\"vendita\":\"Prezzo di vendita\"" ]}<br>
{[ "type": "number", "label": "'.tr('Percentuale sconto/magg.').'", "name": "percentuale", "required": 1, "icon-after": "%" ]}<br>
{[ "type": "select", "label": "'.tr('Arrotonda prezzo:').'", "name": "tipologia", "values": "list=\"0\":\"Non arrotondare\",\"imponibile\":\"Imponibile\",\"ivato\":\"Ivato\"", "value": 0 ]}<br>
@ -378,6 +401,17 @@ $operations['change-vendita'] = [
],
];
$operations['change-coefficiente'] = [
'text' => '<span><i class="fa fa-refresh"></i> '.tr('Aggiorna coefficiente di vendita').'</span>',
'data' => [
'title' => tr('Aggiornare il coefficiente di vendita per gli articoli selezionati?'),
'msg' => tr('Per ciascun articolo selezionato, verrà modificato il coefficiente e il relativo prezzo di vendita').'<br><br>{[ "type": "number", "label": "'.tr('Coefficiente di vendita').'", "name": "coefficiente", "required": 1 ]}',
'button' => tr('Procedi'),
'class' => 'btn btn-lg btn-warning',
'blank' => false,
],
];
$operations['stampa-etichette'] = [
'text' => '<span><i class="fa fa-barcode"></i> '.tr('Stampa etichette').'</span>',
'data' => [

View File

@ -19,6 +19,8 @@
include_once __DIR__.'/../../core.php';
use Modules\Iva\Aliquota;
?><form action="" method="post" id="edit-form" enctype="multipart/form-data">
<input type="hidden" name="backto" value="record-edit">
<input type="hidden" name="op" value="update">
@ -162,11 +164,15 @@ include_once __DIR__.'/../../core.php';
<div class="panel-body">
<div class="row">
<div class="col-md-6">
<div class="col-md-4">
{[ "type": "number", "label": "<?php echo tr('Prezzo di acquisto'); ?>", "name": "prezzo_acquisto", "value": "$prezzo_acquisto$", "icon-after": "<?php echo currency(); ?>", "help": "<?php echo tr('Prezzo di acquisto previsto per i fornitori i cui dati non sono stati inseriti nel plugin Fornitori'); ?>." ]}
</div>
<div class="col-md-6">
<div class="col-md-4">
{[ "type": "number", "label": "<?php echo tr('Coefficiente di vendita'); ?>", "name": "coefficiente", "value": "$coefficiente$", "help": "<?php echo tr('Imposta un coefficiente per calcolare automaticamente il prezzo di vendita quando cambia il prezzo di acquisto'); ?>." ]}
</div>
<div class="col-md-4">
{[ "type": "number", "label": "<?php echo tr('Soglia minima quantità'); ?>", "name": "threshold_qta", "value": "$threshold_qta$", "decimals": "qta", "min-value": "undefined" ]}
</div>
</div>
@ -215,21 +221,25 @@ include_once __DIR__.'/../../core.php';
<div class="col-md-6">
<?php
$prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
$iva_predefinita = setting('Iva predefinita');
$aliquota_predefinita = floatval(Aliquota::find($iva_predefinita)->percentuale);
if (empty($prezzi_ivati)) {
echo '
<button type="button" class="btn btn-info btn-xs pull-right tip pull-right" title="'.tr('Scorpora l\'IVA dal prezzo di vendita.').'" id="scorporaIva">
<button type="button" class="btn btn-info btn-xs pull-right tip pull-right '.(!empty((int)$articolo->coefficiente) ? 'disabled' : '').'" title="'.tr('Scorpora l\'IVA dal prezzo di vendita.').'" id="scorporaIva">
<i class="fa fa-calculator"></i>
</button>';
}
echo '
{[ "type": "number", "label": "'.tr('Prezzo di vendita').'", "name": "prezzo_vendita", "value": "'.($prezzi_ivati ? $articolo->prezzo_vendita_ivato : $articolo->prezzo_vendita).'", "icon-after": "'.currency().'", "help": "'.($prezzi_ivati ? tr('Importo IVA inclusa') : '').'" ]}
{[ "type": "number", "label": "'.tr('Prezzo di vendita').'", "name": "prezzo_vendita", "value": "'.($prezzi_ivati ? $articolo->prezzo_vendita_ivato : $articolo->prezzo_vendita).'", "icon-after": "'.currency().'", "help": "'.($prezzi_ivati ? tr('Importo IVA inclusa') : '').'", "disabled": "'.(!empty((int)$articolo->coefficiente) ? 1 : 0).'" ]}
</div>';
?>
<div class="col-md-6">
{[ "type": "select", "label": "<?php echo tr('Iva di vendita'); ?>", "name": "idiva_vendita", "ajax-source": "iva", "value": "$idiva_vendita$", "help": "<?php echo tr('Se non specificata, verrà utilizzata l\'iva di default delle impostazioni'); ?>" ]}
<input type="hidden" name="prezzi_ivati" value="<?php echo $prezzi_ivati; ?>">
<input type="hidden" name="aliquota_predefinita" value="<?php echo $aliquota_predefinita; ?>">
</div>
</div>
@ -306,6 +316,48 @@ echo '
{( "name": "filelist_and_upload", "id_module": "$id_module$", "id_record": "$id_record$" )}
<script>
let iva_vendita = $("#idiva_vendita");
let percentuale = 0;
$(document).ready(function() {
if (iva_vendita.val()) {
percentuale = parseFloat(iva_vendita.selectData().percentuale);
}
if (!percentuale) {
percentuale = parseFloat(input("aliquota_predefinita").get());
}
input("coefficiente").on('keyup', function(){
if (input("coefficiente").get()) {
let prezzo_vendita = input('prezzo_acquisto').get() * input("coefficiente").get();
if (parseFloat(input("prezzi_ivati").get())) {
prezzo_vendita = prezzo_vendita + (prezzo_vendita * percentuale / 100);
}
input("prezzo_vendita").set(prezzo_vendita);
input("prezzo_vendita").disable();
$("#scorporaIva").addClass("disabled");
} else {
input("prezzo_vendita").enable();
$("#scorporaIva").removeClass("disabled");
}
});
input("prezzo_acquisto").on('keyup change', function(){
if (input("coefficiente").get()) {
let prezzo_vendita = input('prezzo_acquisto').get() * input("coefficiente").get();
if (parseFloat(input("prezzi_ivati").get())) {
prezzo_vendita = prezzo_vendita + (prezzo_vendita * percentuale / 100);
}
input("prezzo_vendita").set(prezzo_vendita);
input("prezzo_vendita").disable();
$("#scorporaIva").addClass("disabled");
} else {
input("prezzo_vendita").enable();
$("#scorporaIva").removeClass("disabled");
}
});
});
$("#categoria").change(function() {
updateSelectOption("id_categoria", $(this).val());
@ -313,27 +365,17 @@ $("#categoria").change(function() {
});
function scorporaIva() {
let iva_vendita = $("#idiva_vendita");
if (iva_vendita.val()) {
let percentuale = parseFloat(iva_vendita.selectData().percentuale);
if(!percentuale) return;
let input = $("#prezzo_vendita");
let prezzo = input.val().toEnglish();
let scorporato = prezzo * 100 / (100 + percentuale);
input.val(scorporato);
}else{
swal("<?php echo tr('Attenzione'); ?>", "<?php echo tr('Seleziona Iva di vendita.'); ?>", "warning");
}
if(!percentuale) return;
let input = $("#prezzo_vendita");
let prezzo = input.val().toEnglish();
let scorporato = prezzo * 100 / (100 + percentuale);
input.val(scorporato);
}
$("#scorporaIva").click( function() {
scorporaIva();
});
</script>

View File

@ -142,6 +142,30 @@ class Articolo extends Model
}
}
/**
* Imposta il prezzo di acquisto e aggiorna il prezzo di vendita in base al coefficiente.
*
* @param $value
*/
public function setPrezzoAcquistoAttribute($value)
{
$this->attributes['prezzo_acquisto'] = $value;
if (!empty($this->coefficiente)) {
$prezzo_vendita = $value * $this->coefficiente;
$prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
$id_iva = $this->idiva_vendita ?: setting('Iva predefinita');
$percentuale_aliquota = floatval(Aliquota::find($id_iva)->percentuale);
if ($prezzi_ivati) {
$prezzo_vendita = $prezzo_vendita * (1 + $percentuale_aliquota / 100);
}
$this->setPrezzoVendita($prezzo_vendita, $this->idiva_vendita);
}
}
/**
* Verifica se l'articolo corrente è una variante per una Combinazione.
*

View File

@ -80,4 +80,7 @@ INSERT INTO `zz_views` (`id`, `id_module`, `name`, `query`, `order`, `visible`,
UPDATE `zz_views` SET `summable` = '1' WHERE (`zz_views`.`name` = 'Q.tà ordinata' OR `zz_views`.`name` = 'Q.tà' OR `zz_views`.`name` = 'Q.tà disponibile' OR `zz_views`.`name` = 'Q.tà impegnata') AND `zz_views`.`id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Articoli');
-- Stampe definitive registri iva
CREATE TABLE `co_stampecontabili` ( `id` INT NOT NULL AUTO_INCREMENT , `id_print` INT NOT NULL , `date_start` DATE NOT NULL , `date_end` DATE NOT NULL , `first_page` INT NOT NULL , `last_page` INT NOT NULL , `dir` VARCHAR(255) NOT NULL , PRIMARY KEY (`id`));
CREATE TABLE `co_stampecontabili` ( `id` INT NOT NULL AUTO_INCREMENT , `id_print` INT NOT NULL , `date_start` DATE NOT NULL , `date_end` DATE NOT NULL , `first_page` INT NOT NULL , `last_page` INT NOT NULL , `dir` VARCHAR(255) NOT NULL , PRIMARY KEY (`id`));
-- Coefficiente di vendita
ALTER TABLE `mg_articoli` ADD `coefficiente` DECIMAL(12,6) NOT NULL AFTER `prezzo_acquisto`;