Miglioramenti vari

This commit is contained in:
Thomas Zilio 2019-10-01 18:01:00 +02:00
parent 171948612c
commit 262c16db8b
13 changed files with 127 additions and 139 deletions

View File

@ -28,9 +28,6 @@ $namespaces = require_once __DIR__.'/config/namespaces.php';
foreach ($namespaces as $path => $namespace) {
$loader->addPsr4($namespace.'\\', __DIR__.'/'.$path.'/custom/src');
$loader->addPsr4($namespace.'\\', __DIR__.'/'.$path.'/src');
// Namespace aggiuntivo per le personalizzazioni
$loader->addPsr4($namespace.'\\Original\\', __DIR__.'/'.$path.'/src');
}
// Individuazione dei percorsi di base

View File

@ -6,7 +6,7 @@ trait MorphTrait
{
public function hasOriginal()
{
return !empty($this->original_type) && !empty($this->original);
return !empty($this->original_type) && !empty($this->getOriginal());
}
public function original()

View File

@ -39,7 +39,6 @@ switch (post('op')) {
// Modifica articolo
case 'update':
$componente = post('componente_filename');
$qta = post('qta');
// Inserisco l'articolo e avviso se esiste un altro articolo con stesso codice.
@ -50,27 +49,29 @@ switch (post('op')) {
]));
}
$dbo->update('mg_articoli', [
'codice' => post('codice'),
'descrizione' => post('descrizione'),
'um' => post('um'),
'id_categoria' => post('categoria'),
'id_sottocategoria' => post('subcategoria'),
'abilita_serial' => post('abilita_serial'),
'threshold_qta' => post('threshold_qta'),
'prezzo_vendita' => post('prezzo_vendita'),
'prezzo_acquisto' => post('prezzo_acquisto'),
'idconto_vendita' => post('idconto_vendita'),
'idconto_acquisto' => post('idconto_acquisto'),
'idiva_vendita' => post('idiva_vendita'),
'gg_garanzia' => post('gg_garanzia'),
'servizio' => post('servizio'),
'volume' => post('volume'),
'peso_lordo' => post('peso_lordo'),
'componente_filename' => $componente,
'attivo' => post('attivo'),
'note' => post('note'),
], ['id' => $id_record]);
$articolo->codice = post('codice');
$articolo->descrizione = post('descrizione');
$articolo->um = post('um');
$articolo->id_categoria = post('categoria');
$articolo->id_sottocategoria = post('subcategoria');
$articolo->abilita_serial = post('abilita_serial');
$articolo->threshold_qta = post('threshold_qta');
$articolo->prezzo_vendita = post('prezzo_vendita');
$articolo->prezzo_acquisto = post('prezzo_acquisto');
$articolo->idconto_vendita = post('idconto_vendita');
$articolo->idconto_acquisto = post('idconto_acquisto');
$articolo->idiva_vendita = post('idiva_vendita');
$articolo->gg_garanzia = post('gg_garanzia');
$articolo->servizio = post('servizio');
$articolo->volume = post('volume');
$articolo->peso_lordo = post('peso_lordo');
$componente = post('componente_filename');
$articolo->componente_filename = $componente;
$articolo->attivo = post('attivo');
$articolo->note = post('note');
$articolo->save();
// Leggo la quantità attuale per capire se l'ho modificata
$old_qta = $record['qta'];
@ -80,12 +81,12 @@ switch (post('op')) {
$descrizione_movimento = post('descrizione_movimento');
$data_movimento = post('data_movimento');
add_movimento_magazzino($id_record, $movimento, [], $descrizione_movimento, $data_movimento);
$articolo->movimenta($movimento, $descrizione_movimento, $data_movimento);
}
// Salvataggio info componente (campo `contenuto`)
if (!empty($componente)) {
$contenuto = \Util\Ini::write(file_get_contents($docroot.'/files/my_impianti/'.$componente), $post);
$contenuto = \Util\Ini::write(file_get_contents(DOCROOT.'/files/my_impianti/'.$componente), $post);
$dbo->query('UPDATE mg_articoli SET contenuto='.prepare($contenuto).' WHERE id='.prepare($id_record));
}
@ -107,9 +108,7 @@ switch (post('op')) {
'id' => $id_record,
]);
} else {
flash()->warning(tr('Errore durante il caricamento del file in _DIR_!', [
'_DIR_' => $upload_dir,
]));
flash()->warning(tr("Errore durante il caricamento dell'immagine!"));
}
}
@ -174,10 +173,10 @@ switch (post('op')) {
// Movimento il magazzino se l'ho specificato nelle impostazioni
if (setting("Movimenta il magazzino durante l'inserimento o eliminazione dei lotti/serial number")) {
add_movimento_magazzino($id_record, $count, [], tr('Carico magazzino con serial da _INIZIO_ a _FINE_', [
$articolo->movimenta($count, tr('Carico magazzino con serial da _INIZIO_ a _FINE_', [
'_INIZIO_' => $serial_start,
'_FINE_' => $serial_end,
]));
]), date());
}
flash()->info(tr('Aggiunti _NUM_ seriali!', [
@ -200,9 +199,9 @@ switch (post('op')) {
if ($dbo->query($query)) {
// Movimento il magazzino se l'ho specificato nelle impostazioni
if (setting("Movimenta il magazzino durante l'inserimento o eliminazione dei lotti/serial number")) {
add_movimento_magazzino($id_record, -1, [], tr('Eliminazione dal magazzino del prodotto con serial _SERIAL_', [
$articolo->movimenta(-1, tr('Eliminazione dal magazzino del prodotto con serial _SERIAL_', [
'_SERIAL_' => $rs[0]['serial'],
]));
]), date());
}
flash()->info(tr('Prodotto rimosso!'));

View File

@ -5,7 +5,7 @@ include_once __DIR__.'/../../core.php';
use Modules\Articoli\Articolo;
if (isset($id_record)) {
$record = $dbo->fetchOne('SELECT *, (SELECT COUNT(id) FROM mg_prodotti WHERE id_articolo = mg_articoli.id) AS serial FROM mg_articoli WHERE id='.prepare($id_record));
$articolo = Articolo::find($id_record);
$record = $dbo->fetchOne('SELECT *, (SELECT COUNT(id) FROM mg_prodotti WHERE id_articolo = mg_articoli.id) AS serial FROM mg_articoli WHERE id='.prepare($id_record));
}

View File

@ -2,8 +2,12 @@
include_once __DIR__.'/../../core.php';
use Modules\Articoli\Articolo;
/**
* Funzione per inserire i movimenti di magazzino.
*
* @deprecated
*/
function add_movimento_magazzino($id_articolo, $qta, $array = [], $descrizone = '', $data = '')
{
@ -18,7 +22,6 @@ function add_movimento_magazzino($id_articolo, $qta, $array = [], $descrizone =
$numero = null;
// Informazioni articolo
$articolo = $dbo->fetchOne('SELECT * FROM mg_articoli WHERE id='.prepare($id_articolo));
$manuale = 0;
// Ddt
@ -78,23 +81,14 @@ function add_movimento_magazzino($id_articolo, $qta, $array = [], $descrizone =
$movimento .= $descrizone;
$movimento = str_replace(['_NAME_', '_TYPE_', '_NUM_'], [$nome, $tipo, $numero], $movimento);
$new = ($qta > 0 ? '+' : '').$qta;
// Movimento il magazzino solo se l'articolo non è un servizio
if ($articolo['servizio'] == 0) {
$articolo = Articolo::find($id_articolo);
// Movimentazione effettiva
if (empty($array['idintervento'])) {
$dbo->query('UPDATE mg_articoli SET qta = qta + '.$new.' WHERE id = '.prepare($id_articolo));
}
// Registrazione della movimentazione
$dbo->insert('mg_movimenti', array_merge($array, [
'idarticolo' => $id_articolo,
'qta' => $qta,
'movimento' => $movimento,
'data' => $data,
'manuale' => $manuale,
]));
return $articolo->movimenta($qta, $movimento, $data, $manuale, $array);
} else {
return $articolo->registra($qta, $movimento, $data, $manuale, $array);
}
return true;

View File

@ -33,6 +33,8 @@ class Articolo extends Model
$this->qta += $qta;
$this->save();
$this->movimentaRicorsivo($qta, $descrizone, $data, $manuale, $array);
}
return true;
@ -116,4 +118,45 @@ class Articolo extends Model
{
return $this->belongsTo(Categoria::class, 'id_sottocategoria');
}
/**
* @version distinta_base
*
* @return mixed
*/
public function componenti()
{
return $this->belongsToMany(Articolo::class, 'mg_articoli_distinte', 'id_articolo', 'id_figlio')->withPivot('qta');
}
public function parti()
{
return $this->belongsToMany(Articolo::class, 'mg_articoli_distinte', 'id_figlio', 'id_articolo')->withPivot('qta');
}
/**
* Funzione per inserire i movimenti di magazzino.
*
* @version distinta_base
*
* @param $qta
* @param null $descrizone
* @param null $data
* @param bool $manuale
* @param array $array
*
* @return bool
*/
protected function movimentaRicorsivo($qta, $descrizone = null, $data = null, $manuale = false, $array = [])
{
$componenti = $this->componenti;
$suffix = ' (di.ba.)';
$descrizone = strpos($descrizone, $suffix) !== false ? $descrizone : $descrizone.$suffix;
foreach ($componenti as $componente) {
$qta_componente = $qta * $componente->pivot->qta;
$componente->movimenta($qta_componente, $descrizone, $data, $manuale, $array);
}
}
}

View File

@ -92,6 +92,8 @@ function get_ivaindetraibile_ddt($id_ddt)
* Questa funzione rimuove un articolo dal ddt data e lo riporta in magazzino
* $idarticolo integer codice dell'articolo da scollegare dal ddt
* $idddt integer codice del ddt da cui scollegare l'articolo.
*
* @deprecated
*/
function rimuovi_articolo_daddt($idarticolo, $idddt, $idrigaddt)
{
@ -243,6 +245,8 @@ function ricalcola_costiagg_ddt($idddt, $idrivalsainps = '', $idritenutaacconto
* $idiva integer id del codice iva associato all'articolo
* $qta float quantità dell'articolo nell'ordine
* $prezzo float prezzo totale degli articoli (prezzounitario*qtà).
*
* @deprecated
*/
function add_articolo_inddt($idddt, $idarticolo, $descrizione, $idiva, $qta, $idum, $prezzo, $sconto = 0, $sconto_unitario = 0, $tipo_sconto = 'UNT')
{

View File

@ -622,7 +622,9 @@ if ($dir == 'entrata') {
<div class="row">
<div class="col-md-12">
<?php
include $docroot.'/modules/fatture/row-list.php';
include $structure->filepath('row-list.php');
?>
</div>
</div>

View File

@ -357,6 +357,8 @@ function ricalcola_costiagg_fattura($iddocumento)
* $qta float quantità dell'articolo in fattura
* $prezzo float prezzo totale dell'articolo (prezzounitario*qtà)
* $idintervento integer id dell'intervento da cui arriva l'articolo (per non creare casini quando si rimuoverà un articolo dalla fattura).
*
* @deprecated
*/
function add_articolo_infattura($iddocumento, $idarticolo, $descrizione, $idiva, $qta, $prezzo, $sconto = 0, $sconto_unitario = 0, $tipo_sconto = 'UNT', $idintervento = 0, $idconto = 0, $idum = 0, $idrivalsainps = '', $idritenutaacconto = '', $calcolo_ritenuta_acconto = '')
{

View File

@ -183,6 +183,7 @@ switch (post('op')) {
flash()->clearMessage('info');
flash()->clearMessage('warning');
}
aggiorna_sedi_movimenti('interventi', $id_record);
break;
@ -194,32 +195,8 @@ switch (post('op')) {
'id_record' => $id_record,
]);
$codice = $dbo->fetchArray('SELECT codice FROM in_interventi WHERE id='.prepare($id_record))[0]['codice'];
/*
Riporto in magazzino gli articoli presenti nell'intervento in cancellazine
*/
// Leggo la quantità attuale nell'intervento
$q = 'SELECT qta, idarticolo FROM mg_articoli_interventi WHERE idintervento='.prepare($id_record);
$rs = $dbo->fetchArray($q);
for ($i = 0; $i < count($rs); ++$i) {
$qta = $rs[$i]['qta'];
$idarticolo = $rs[$i]['idarticolo'];
add_movimento_magazzino($idarticolo, $qta, ['idintervento' => $id_record]);
}
// Eliminazione associazioni tra interventi e contratti
$query = 'UPDATE co_promemoria SET idintervento = NULL WHERE idintervento='.prepare($id_record);
$dbo->query($query);
// Eliminazione dell'intervento
$query = 'DELETE FROM in_interventi WHERE id='.prepare($id_record);
$dbo->query($query);
// Elimino i collegamenti degli articoli a questo intervento
$dbo->query('DELETE FROM mg_articoli_interventi WHERE idintervento='.prepare($id_record));
$dbo->query('UPDATE co_promemoria SET idintervento = NULL WHERE idintervento='.prepare($id_record));
// Elimino il collegamento al componente
$dbo->query('DELETE FROM my_impianto_componenti WHERE idintervento='.prepare($id_record));
@ -228,23 +205,15 @@ switch (post('op')) {
$query = 'DELETE FROM in_interventi_tecnici WHERE idintervento='.prepare($id_record);
$dbo->query($query);
// Eliminazione righe aggiuntive dell'intervento
$query = 'DELETE FROM in_righe_interventi WHERE idintervento='.prepare($id_record);
$dbo->query($query);
// Eliminazione associazione interventi e articoli
$query = 'DELETE FROM mg_articoli_interventi WHERE idintervento='.prepare($id_record);
$dbo->query($query);
// Eliminazione associazione interventi e my_impianti
$query = 'DELETE FROM my_impianti_interventi WHERE idintervento='.prepare($id_record);
$dbo->query($query);
// Eliminazione movimenti riguardanti l'intervento cancellato
$dbo->query('DELETE FROM mg_movimenti WHERE idintervento='.prepare($id_record));
// Eliminazione dell'intervento
$intervento->delete();
flash()->info(tr('Intervento _NUM_ eliminato!', [
'_NUM_' => "'".$codice."'",
'_NUM_' => "'".$intervento->codice."'",
]));
break;
@ -321,9 +290,22 @@ switch (post('op')) {
aggiorna_sedi_movimenti('interventi', $id_record);
break;
case 'delriga':
$idriga = post('idriga');
$dbo->query('DELETE FROM in_righe_interventi WHERE id='.prepare($idriga));
case 'unlink_riga':
$id_riga = post('idriga');
if (!empty($id_riga)) {
$riga = $intervento->getRighe()->find($id_riga);
try {
$riga->delete();
flash()->info(tr('Riga rimossa!'));
} catch (InvalidArgumentException $e) {
flash()->error(tr('Alcuni serial number sono già stati utilizzati!'));
}
}
aggiorna_sedi_movimenti('interventi', $id_record);
break;
@ -412,33 +394,6 @@ switch (post('op')) {
break;
case 'unlink_articolo':
$idriga = post('idriga');
$idarticolo = post('idarticolo');
// Riporto la merce nel magazzino
if (!empty($idriga) && !empty($id_record)) {
// Leggo la quantità attuale nell'intervento
$q = 'SELECT qta, idarticolo, idimpianto FROM mg_articoli_interventi WHERE id='.prepare($idriga);
$rs = $dbo->fetchArray($q);
$qta = $rs[0]['qta'];
$idarticolo = $rs[0]['idarticolo'];
$idimpianto = $rs[0]['idimpianto'];
add_movimento_magazzino($idarticolo, $qta, ['idintervento' => $id_record]);
// Elimino questo articolo dall'intervento
$dbo->query('DELETE FROM mg_articoli_interventi WHERE id='.prepare($idriga).' AND idintervento='.prepare($id_record));
// Elimino il collegamento al componente
$dbo->query('DELETE FROM my_impianto_componenti WHERE idimpianto='.prepare($idimpianto).' AND idintervento='.prepare($id_record));
// Elimino i seriali utilizzati dalla riga
$dbo->query('DELETE FROM `mg_prodotti` WHERE id_articolo = '.prepare($idarticolo).' AND id_riga_intervento = '.prepare($id_record));
}
aggiorna_sedi_movimenti('interventi', $id_record);
break;
case 'add_serial':
$idriga = post('idriga');
$idarticolo = post('idarticolo');

View File

@ -10,7 +10,7 @@ if (file_exists(__DIR__.'/../../../core.php')) {
$show_prezzi = Auth::user()['gruppo'] != 'Tecnici' || (Auth::user()['gruppo'] == 'Tecnici' && setting('Mostra i prezzi al tecnico'));
$intervento = Intervento::find($id_record);
$intervento = $intervento ?: Intervento::find($id_record);
$righe = $intervento->getRighe();
if (!$righe->isEmpty()) {
@ -136,7 +136,7 @@ if (!$righe->isEmpty()) {
<i class="fa fa-edit"></i>
</button>
<button type="button" class="btn btn-danger btn-xs" data-toggle="tooltip" onclick="if(confirm(\''.tr('Eliminare questa riga?').'\')){ '.($riga->isArticolo() ? 'ritorna_al_magazzino' : 'elimina_riga').'( \''.$r['id'].'\' ); }">
<button type="button" class="btn btn-danger btn-xs" data-toggle="tooltip" onclick="if(confirm(\''.tr('Eliminare questa riga?').'\')){ elimina_riga( \''.$r['id'].'\' ); }">
<i class="fa fa-trash"></i>
</button>
</td>';
@ -157,7 +157,12 @@ if (!$righe->isEmpty()) {
<script type="text/javascript">
function elimina_riga( id ){
$.post(globals.rootdir + '/modules/interventi/actions.php', { op: 'delriga', idriga: id }, function(data, result){
$.post(globals.rootdir + '/actions.php', {
op: 'unlink_riga',
id_module: globals.id_module,
id_record: globals.id_record,
idriga: id
}, function(data, result){
if( result=='success' ){
//ricarico l'elenco delle righe
$('#righe').load( globals.rootdir + '/modules/interventi/ajax_righe.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>');
@ -166,15 +171,4 @@ if (!$righe->isEmpty()) {
}
});
}
function ritorna_al_magazzino( id ){
$.post(globals.rootdir + '/modules/interventi/actions.php', {op: 'unlink_articolo', idriga: id, id_record: '<?php echo $id_record; ?>', id_module: '<?php echo $id_module; ?>' }, function(data, result){
if( result == 'success' ){
// ricarico l'elenco degli articoli
$('#righe').load( globals.rootdir + '/modules/interventi/ajax_righe.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>');
$('#costi').load(globals.rootdir + '/modules/interventi/ajax_costi.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>');
}
});
}
</script>

View File

@ -38,8 +38,6 @@ class Articolo extends Article
{
$articolo = $this->articolo;
$dbo = database();
$intervento = $this->intervento;
$numero = $intervento->codice;
@ -49,7 +47,7 @@ class Articolo extends Article
$data = $data ?: $intervento->data_richiesta;
$descrizione = ($qta < 0) ? tr('Ripristino articolo da intervento _NUM_', [
$descrizione = ($qta < 0) ? tr('Ripristino articolo da Attività numero _NUM_', [
'_NUM_' => $numero,
]) : tr('Scarico magazzino per intervento _NUM_', [
'_NUM_' => $numero,