mirror of
https://github.com/devcode-it/openstamanager.git
synced 2024-12-27 08:12:47 +01:00
Merge branch 'master' of https://github.com/devcode-it/openstamanager
This commit is contained in:
commit
7a0d1c4801
@ -364,6 +364,47 @@ switch (post('op')) {
|
||||
|
||||
flash()->info(tr('Articolo eliminato!'));
|
||||
break;
|
||||
|
||||
case 'add-movimento':
|
||||
|
||||
$articolo = Articolo::find(post('idarticolo'));
|
||||
$tipo_movimento = post('tipo_movimento');
|
||||
$descrizione = post('movimento');
|
||||
$data = post('data');
|
||||
$qta = post('qta');
|
||||
|
||||
$idsede_partenza = post('idsede_partenza');
|
||||
$idsede_destinazione = post('idsede_destinazione');
|
||||
|
||||
if ($tipo_movimento == 'carico' || $tipo_movimento == 'scarico') {
|
||||
if ($tipo_movimento == 'carico') {
|
||||
$id_sede_azienda = $idsede_destinazione;
|
||||
$id_sede_controparte = 0;
|
||||
} elseif ($tipo_movimento == 'scarico') {
|
||||
$id_sede_azienda = $idsede_partenza;
|
||||
$id_sede_controparte = 0;
|
||||
|
||||
$qta = -$qta;
|
||||
}
|
||||
|
||||
// Registrazione del movimento con variazione della quantità
|
||||
$articolo->movimenta($qta, $descrizione, $data, 1, [
|
||||
'idsede' => $id_sede_azienda,
|
||||
]);
|
||||
|
||||
} elseif ($tipo_movimento == 'spostamento') {
|
||||
// Registrazione del movimento verso la sede di destinazione
|
||||
$articolo->registra($qta, $descrizione, $data, 1, [
|
||||
'idsede' => $idsede_destinazione,
|
||||
]);
|
||||
|
||||
// Registrazione del movimento dalla sede di origine
|
||||
$articolo->registra(-$qta, $descrizione, $data, 1, [
|
||||
'idsede' => $idsede_partenza,
|
||||
]);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
// Operazioni aggiuntive per l'immagine
|
||||
|
225
modules/articoli/modals/add_movimento.php
Executable file
225
modules/articoli/modals/add_movimento.php
Executable file
@ -0,0 +1,225 @@
|
||||
<?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';
|
||||
|
||||
// Imposto come azienda l'azienda predefinita per selezionare le sedi a cui ho accesso
|
||||
// select-options
|
||||
|
||||
?>
|
||||
<form action="" method="post" id="add-form">
|
||||
<input type="hidden" name="op" value="add-movimento">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
{["type": "select", "label": "<?php echo tr('Articolo'); ?>", "name": "idarticolo", "ajax-source": "articoli", "value": "<?php echo get('id_articolo');?>", "required": 1, "readonly": 1, "select-options": {"permetti_movimento_a_zero": 1, "idanagrafica": <?php echo setting('Azienda predefinita'); ?>, "idsede_partenza": 0, "idsede_destinazione": 0 } ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-2">
|
||||
{["type": "number", "label": "<?php echo tr('Quantità'); ?>", "name": "qta", "decimals": "qta", "value": "1", "required": 1 ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-2">
|
||||
{["type": "date", "label": "<?php echo tr('Data'); ?>", "name": "data", "value": "-now-", "required": 1 ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{["type": "select", "label": "<?php echo tr('Causale'); ?>", "name": "causale", "values": "query=SELECT id, nome as text, descrizione, tipo_movimento FROM mg_causali_movimenti", "value": 1, "required": 1 ]}
|
||||
<input type="hidden" name="tipo_movimento" id="tipo_movimento" value="carico">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{["type": "textarea", "label": "<?php echo tr('Descrizione movimento'); ?>", "name": "movimento", "required": 1, "value": "Carico manuale" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "<?php echo tr('Partenza merce'); ?>", "name": "idsede_partenza", "ajax-source": "sedi_azienda", "value": "0", "required": 1, "disabled": "1" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "<?php echo tr('Destinazione merce'); ?>", "name": "idsede_destinazione", "ajax-source": "sedi_azienda", "value": "0", "required": 1 ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PULSANTI -->
|
||||
<div class="row" id="buttons">
|
||||
<div class="col-md-12 text-right">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
<i class="fa fa-exchange"></i> <?php echo tr('Movimenta'); ?>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<?php
|
||||
|
||||
echo '
|
||||
<hr>
|
||||
|
||||
<div id="messages"></div>
|
||||
|
||||
<div class="alert alert-info hidden" id="articolo-missing">
|
||||
<i class="fa fa-exclamation-circle"></i> '.tr('Nessuna corrispondenza trovata!').'
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
function abilitaSede(id){
|
||||
$(id).removeClass("disabled")
|
||||
.attr("disabled", false)
|
||||
.attr("required", true);
|
||||
}
|
||||
|
||||
function disabilitaSede(id){
|
||||
$(id).addClass("disabled")
|
||||
.attr("disabled", true)
|
||||
.attr("required", false);
|
||||
}
|
||||
|
||||
$(document).ready(function () {
|
||||
init();
|
||||
|
||||
$("#causale").on("change", function () {
|
||||
let data = $(this).selectData();
|
||||
if (data) {
|
||||
$("#movimento").val(data.descrizione);
|
||||
$("#tipo_movimento").val(data.tipo_movimento);
|
||||
|
||||
if (data.tipo_movimento === "carico") {
|
||||
disabilitaSede("#idsede_partenza");
|
||||
abilitaSede("#idsede_destinazione");
|
||||
} else if (data.tipo_movimento === "scarico") {
|
||||
abilitaSede("#idsede_partenza");
|
||||
disabilitaSede("#idsede_destinazione");
|
||||
} else {
|
||||
abilitaSede("#idsede_partenza");
|
||||
abilitaSede("#idsede_destinazione");
|
||||
}
|
||||
} else {
|
||||
disabilitaSede("#idsede_partenza");
|
||||
disabilitaSede("#idsede_destinazione");
|
||||
}
|
||||
});
|
||||
|
||||
// Reload pagina appena chiudo il modal
|
||||
$("#modals > div").on("hidden.bs.modal", function () {
|
||||
location.reload();
|
||||
});
|
||||
});
|
||||
|
||||
async function salva(button) {
|
||||
$("#messages").html("");
|
||||
let qta_input = input("qta");
|
||||
let tipo_movimento = $("#tipo_movimento").val();
|
||||
|
||||
let valid = await salvaForm(button, "#add-form");
|
||||
|
||||
if (valid) {
|
||||
let articolo = $("#idarticolo").selectData();
|
||||
|
||||
let prezzo_acquisto = parseFloat(articolo.prezzo_acquisto);
|
||||
let prezzo_vendita = parseFloat(articolo.prezzo_vendita);
|
||||
|
||||
let qta_movimento = qta_input.get();
|
||||
|
||||
let alert_type, icon, text, qta_rimanente;
|
||||
if (tipo_movimento === "carico") {
|
||||
alert_type = "alert-success";
|
||||
icon = "fa-arrow-up";
|
||||
text = "Carico";
|
||||
qta_rimanente = parseFloat(articolo.qta) + parseFloat(qta_movimento);
|
||||
} else if (tipo_movimento === "scarico") {
|
||||
alert_type = "alert-danger";
|
||||
icon = "fa-arrow-down";
|
||||
text = "Scarico";
|
||||
qta_rimanente = parseFloat(articolo.qta) - parseFloat(qta_movimento);
|
||||
} else if (tipo_movimento === "spostamento") {
|
||||
alert_type = "alert-info";
|
||||
icon = "fa-arrow-down";
|
||||
text = "Spostamento";
|
||||
qta_rimanente = parseFloat(articolo.qta);
|
||||
}
|
||||
|
||||
if (articolo.descrizione) {
|
||||
let testo = $("#info-articolo").html();
|
||||
|
||||
testo = testo.replace("|alert-type|", alert_type)
|
||||
.replace("|icon|", icon)
|
||||
.replace("|descrizione|", articolo.descrizione)
|
||||
.replace("|codice|", articolo.codice)
|
||||
.replace("|misura|", articolo.um)
|
||||
.replace("|misura|", articolo.um)
|
||||
.replace("|descrizione-movimento|", text)
|
||||
.replace("|movimento|", qta_movimento.toLocale())
|
||||
.replace("|rimanente|", qta_rimanente.toLocale())
|
||||
.replace("|prezzo_acquisto|", prezzo_acquisto.toLocale())
|
||||
.replace("|prezzo_vendita|", prezzo_vendita.toLocale());
|
||||
|
||||
$("#messages").html(testo);
|
||||
}
|
||||
|
||||
qta_input.set(1);
|
||||
$("#causale").trigger("change");
|
||||
|
||||
}
|
||||
}
|
||||
</script>';
|
||||
|
||||
if (setting('Attiva scorciatoie da tastiera')) {
|
||||
echo '
|
||||
<script>
|
||||
hotkeys("f8", "carico", function() {
|
||||
$("#modals > div #direzione").val(1).change();
|
||||
});
|
||||
hotkeys.setScope("carico");
|
||||
|
||||
hotkeys("f9", "scarico", function() {
|
||||
$("#modals > div #direzione").val(2).change();
|
||||
});
|
||||
hotkeys.setScope("scarico");
|
||||
</script>';
|
||||
}
|
||||
|
||||
echo '
|
||||
<div class="hidden" id="info-articolo">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="alert alert-info text-center">
|
||||
<h3>
|
||||
|codice|
|
||||
</h3>
|
||||
<p><b>'.tr('Descrizione').':</b> |descrizione|</p>
|
||||
<p><b>'.tr('Prezzo acquisto').':</b> |prezzo_acquisto| '.currency().'</p>
|
||||
<p><b>'.tr('Prezzo vendita').':</b> |prezzo_vendita| '.currency().'</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="alert |alert-type| text-center">
|
||||
<h3>
|
||||
<i class="fa |icon|"></i> |descrizione-movimento| |movimento| |misura|
|
||||
<i class="fa fa-arrow-circle-right"></i> |rimanente| |misura| rimanenti
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>';
|
@ -19,12 +19,38 @@
|
||||
|
||||
include_once __DIR__.'/../../../core.php';
|
||||
|
||||
echo '
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">'.tr('Articolo').'</h3>
|
||||
</div>
|
||||
|
||||
<div class="panel-body">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<span><b>'.tr("Codice: ").'</b>'.$articolo->codice.'</span>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<span><b>'.tr("Descrizione: ").'</b>'.$articolo->descrizione.'</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
// Movimentazione degli articoli
|
||||
echo '
|
||||
<div class="box">
|
||||
<div class="box-header with-border">
|
||||
<h3 class="box-title">'.tr('Movimenti').'</h3>
|
||||
<div class="pull-right">';
|
||||
|
||||
echo '
|
||||
<a class="btn btn-warning btn-xs" onclick="openModal(\''.tr('Movimenta articolo').'\', \''.base_path().'/modules/articoli/modals/add_movimento.php?id_module='.Modules::get('Movimenti')['id'].'&id_articolo='.$id_record.'\');">
|
||||
<i class="fa fa-truck"></i>
|
||||
'.tr('Movimenta articolo').'
|
||||
</a>';
|
||||
|
||||
if (empty($_GET['movimentazione_completa'])) {
|
||||
echo '
|
||||
<a class="btn btn-info btn-xs" href="'.base_path().'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'&movimentazione_completa=1#tab_'.$id_plugin.'">
|
||||
|
Loading…
Reference in New Issue
Block a user