openstamanager/modules/listini/bulk.php

145 lines
6.1 KiB
PHP
Raw Normal View History

<?php
/*
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
* Copyright (C) DevCode s.r.l.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
include_once __DIR__.'/../../core.php';
use Modules\Anagrafiche\Anagrafica;
use Modules\Articoli\Articolo;
use Plugins\ListinoClienti\DettaglioPrezzo;
switch (post('op')) {
case 'copy_listino':
2023-08-04 14:54:28 +02:00
$id_anagrafiche = explode(',', post('idanagrafica', true)[0]);
// Lettura righe selezionate
foreach ($id_records as $id) {
// Informazioni di base
$listino = $dbo->selectOne('mg_prezzi_articoli', '*', ['id' => $id]);
$prezzo_unitario = $listino['prezzo_unitario'];
$sconto = $listino['sconto_percentuale'];
$id_articolo = $listino['id_articolo'];
$direzione = $listino['dir'];
$minimo = $listino['minimo'];
$massimo = $listino['massimo'];
$articolo = Articolo::find($id_articolo);
foreach ($id_anagrafiche as $id_anagrafica) {
$anagrafica = Anagrafica::find($id_anagrafica);
if ($listino['id_anagrafica'] != $id_anagrafica) {
2023-08-04 14:54:28 +02:00
if ($minimo == null && $massimo == null) {
// Salvataggio del prezzo predefinito
$prezzo_unitario = $listino['prezzo_unitario'];
$sconto = $listino['sconto_percentuale'];
$dettaglio_predefinito = DettaglioPrezzo::dettaglioPredefinito($id_articolo, $id_anagrafica, $direzione)
->first();
if (empty($dettaglio_predefinito)) {
$dettaglio_predefinito = DettaglioPrezzo::build($articolo, $anagrafica, $direzione);
}
if ($dettaglio_predefinito->sconto_percentuale != $sconto || $dettaglio_predefinito->prezzo_unitario != $prezzo_unitario) {
$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();
}
2023-08-04 14:54:28 +02:00
++$numero_totale;
}
} else {
$dettaglio = DettaglioPrezzo::build($articolo, $anagrafica, $direzione);
$dettaglio->minimo = $minimo;
$dettaglio->massimo = $massimo;
$dettaglio->sconto_percentuale = $sconto;
$dettaglio->setPrezzoUnitario($prezzo_unitario);
$dettaglio->save();
2023-08-04 14:54:28 +02:00
++$numero_totale;
}
}
}
}
if ($numero_totale > 0) {
flash()->info(tr('_NUM_ listini creati!', [
'_NUM_' => $numero_totale,
]));
} else {
flash()->warning(tr('Nessun listino creato!'));
}
break;
case 'change_prezzo':
foreach ($id_records as $id) {
2023-06-28 15:07:08 +02:00
$listino = DettaglioPrezzo::find($id);
2023-06-28 15:07:08 +02:00
$prezzo_unitario_new = $listino->prezzo_unitario + ($listino->prezzo_unitario * post('percentuale') / 100);
2023-06-28 15:07:08 +02:00
$listino->setPrezzoUnitario($prezzo_unitario_new);
$listino->save();
}
flash()->info(tr('Listini aggiornati!'));
break;
}
2024-03-11 10:40:42 +01:00
$segment = $dbo->selectOne('zz_segments_lang', 'name', ['id_record' => $_SESSION['module_'.$id_module]['id_segment']])['name'];
2023-08-04 14:54:28 +02:00
if ($segment != 'Tutti') {
$operations['copy_listino'] = [
2024-04-18 17:44:05 +02:00
'text' => '<span><i class="fa fa-file-code-o"></i> '.tr('Copia _TYPE_', ['_TYPE_' => strtolower($module->getTranslation('title'))]),
'data' => [
'title' => tr('Copiare i listini selezionati?'),
'msg' => '{[ "type": "select", "multiple":"1", "label": "<small>'.tr('Selezionare le anagrafiche in cui copiare i listini selezionati:').'</small>", "ajax-source":"'.strtolower($segment).'", "name": "idanagrafica[]" ]}',
'button' => tr('Procedi'),
'class' => 'btn btn-lg btn-warning',
'blank' => false,
],
];
} else {
$operations['copy_listino'] = [
2024-04-18 17:44:05 +02:00
'text' => '<span><i class="fa fa-file-code-o"></i> '.tr('Copia _TYPE_', ['_TYPE_' => strtolower($module->getTranslation('title'))]),
'data' => [
'title' => tr('Selezionare prima un segmento tra "Clienti" e "Fornitori"'),
'msg' => '',
2022-02-06 11:22:53 +01:00
'button' => '',
'class' => 'hide',
],
];
}
$operations['change_prezzo'] = [
'text' => '<span><i class="fa fa-refresh"></i> '.tr('Aggiorna prezzo unitario').'</span>',
'data' => [
'title' => tr('Aggiornare il prezzo unitario per i listini selezionati?'),
'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,
],
];
return $operations;