mirror of
https://github.com/devcode-it/openstamanager.git
synced 2025-01-30 23:45:07 +01:00
Merge branch 'master' of https://github.com/devcode-it/openstamanager
This commit is contained in:
commit
47891b2854
@ -34,15 +34,21 @@ $final_module = Modules::get($name);
|
|||||||
// IVA predefinita
|
// IVA predefinita
|
||||||
$id_iva = $id_iva ?: setting('Iva predefinita');
|
$id_iva = $id_iva ?: setting('Iva predefinita');
|
||||||
|
|
||||||
|
$righe_totali = $documento->getRighe();
|
||||||
if ($final_module['name'] == 'Interventi') {
|
if ($final_module['name'] == 'Interventi') {
|
||||||
$righe = $documento->getRighe()->where('qta_rimanente', '>', 0)->where('is_descrizione', '=', 0);
|
$righe = $righe_totali->where('is_descrizione', '=', 0)
|
||||||
|
->where('qta_rimanente', '>', 0);
|
||||||
|
$righe_evase = $righe_totali->where('is_descrizione', '=', 0)
|
||||||
|
->where('qta_rimanente', '=', 0);
|
||||||
} elseif ($final_module['name'] == 'Ordini fornitore') {
|
} elseif ($final_module['name'] == 'Ordini fornitore') {
|
||||||
$righe = $documento->getRighe();
|
$righe = $righe_totali;
|
||||||
|
$righe_evase = collect();
|
||||||
} else {
|
} else {
|
||||||
$righe = $documento->getRighe()->where('qta_rimanente', '>', 0);
|
$righe = $righe_totali->where('qta_rimanente', '>', 0);
|
||||||
|
$righe_evase = $righe_totali->where('qta_rimanente', '=', 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (empty($righe)) {
|
if ($righe->isEmpty()) {
|
||||||
echo '
|
echo '
|
||||||
<p>'.tr('Non ci sono elementi da evadere').'...</p>';
|
<p>'.tr('Non ci sono elementi da evadere').'...</p>';
|
||||||
|
|
||||||
@ -355,6 +361,41 @@ echo '
|
|||||||
</table>
|
</table>
|
||||||
</div>';
|
</div>';
|
||||||
|
|
||||||
|
// Elenco righe evase completametne
|
||||||
|
if (!$righe_evase->isEmpty()) {
|
||||||
|
echo '
|
||||||
|
<div class="box box-info collapsable collapsed-box">
|
||||||
|
<div class="box-header with-border">
|
||||||
|
<h3 class="box-title">'.tr('Righe evase completamente').'</h3>
|
||||||
|
<div class="box-tools pull-right">
|
||||||
|
<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-plus"></i></button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<table class="box-body table table-striped table-hover table-condensed">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>'.tr('Descrizione').'</th>
|
||||||
|
<th width="10%" class="text-center">'.tr('Q.tà').'</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>';
|
||||||
|
|
||||||
|
foreach ($righe_evase as $riga) {
|
||||||
|
echo '
|
||||||
|
<tr>
|
||||||
|
<td>'.$riga->descrizione.'</td>
|
||||||
|
<td class="text-center">'.numberFormat($riga->qta, 'qta').' '.$riga->um.'</td>
|
||||||
|
</tr>';
|
||||||
|
}
|
||||||
|
|
||||||
|
echo '
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Gestione articolo sottoscorta
|
||||||
echo '
|
echo '
|
||||||
<div class="alert alert-warning hidden" id="articoli_sottoscorta">
|
<div class="alert alert-warning hidden" id="articoli_sottoscorta">
|
||||||
<table class="table table-condensed">
|
<table class="table table-condensed">
|
||||||
@ -386,10 +427,7 @@ echo '
|
|||||||
echo '
|
echo '
|
||||||
<script>$(document).ready(init)</script>';
|
<script>$(document).ready(init)</script>';
|
||||||
|
|
||||||
echo '
|
// Individuazione scorte
|
||||||
<script type="text/javascript">
|
|
||||||
';
|
|
||||||
|
|
||||||
$articoli = $documento->articoli->groupBy('idarticolo');
|
$articoli = $documento->articoli->groupBy('idarticolo');
|
||||||
$scorte = [];
|
$scorte = [];
|
||||||
foreach ($articoli as $elenco) {
|
foreach ($articoli as $elenco) {
|
||||||
@ -407,7 +445,9 @@ foreach ($articoli as $elenco) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
echo '
|
echo '
|
||||||
|
<script type="text/javascript">
|
||||||
var scorte = '.json_encode($scorte).';
|
var scorte = '.json_encode($scorte).';
|
||||||
|
var permetti_documento_vuoto = '.intval(!empty($options['allow-empty'])).';
|
||||||
var abilita_scorte = '.intval(!$documento::$movimenta_magazzino && !empty($options['tipo_documento_finale']) && $options['tipo_documento_finale']::$movimenta_magazzino).';
|
var abilita_scorte = '.intval(!$documento::$movimenta_magazzino && !empty($options['tipo_documento_finale']) && $options['tipo_documento_finale']::$movimenta_magazzino).';
|
||||||
|
|
||||||
function controllaMagazzino() {
|
function controllaMagazzino() {
|
||||||
@ -526,18 +566,16 @@ function ricalcolaTotale() {
|
|||||||
totale_qta += qta;
|
totale_qta += qta;
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#totale").html((totale.toLocale()) + " " + globals.currency);';
|
$("#totale").html((totale.toLocale()) + " " + globals.currency);
|
||||||
|
|
||||||
if (empty($options['allow-empty'])) {
|
if (!permetti_documento_vuoto) {
|
||||||
echo '
|
|
||||||
if (totale_qta > 0) {
|
if (totale_qta > 0) {
|
||||||
$("#submit_btn").show();
|
$("#submit_btn").show();
|
||||||
} else {
|
} else {
|
||||||
$("#submit_btn").hide();
|
$("#submit_btn").hide();
|
||||||
}';
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
echo '
|
|
||||||
controllaMagazzino();
|
controllaMagazzino();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -554,7 +592,6 @@ ricalcolaTotale();
|
|||||||
$("#id_ritenuta_acconto").on("change", function(){
|
$("#id_ritenuta_acconto").on("change", function(){
|
||||||
if(input("id_ritenuta_acconto").get()) {
|
if(input("id_ritenuta_acconto").get()) {
|
||||||
$("#calcolo_ritenuta_acconto").prop("required", true);
|
$("#calcolo_ritenuta_acconto").prop("required", true);
|
||||||
|
|
||||||
} else{
|
} else{
|
||||||
$("#calcolo_ritenuta_acconto").prop("required", false);
|
$("#calcolo_ritenuta_acconto").prop("required", false);
|
||||||
input("calcolo_ritenuta_acconto").set("");
|
input("calcolo_ritenuta_acconto").set("");
|
||||||
|
@ -19,8 +19,6 @@
|
|||||||
|
|
||||||
include_once __DIR__.'/../../core.php';
|
include_once __DIR__.'/../../core.php';
|
||||||
|
|
||||||
use Modules\Articoli\Articolo;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Funzione per aggiornare le sedi nei movimenti di magazzino.
|
* Funzione per aggiornare le sedi nei movimenti di magazzino.
|
||||||
*/
|
*/
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
include_once __DIR__.'/../../core.php';
|
include_once __DIR__.'/../../core.php';
|
||||||
|
|
||||||
|
use Models\Module;
|
||||||
use Modules\Anagrafiche\Anagrafica;
|
use Modules\Anagrafiche\Anagrafica;
|
||||||
use Modules\Articoli\Articolo as ArticoloOriginale;
|
use Modules\Articoli\Articolo as ArticoloOriginale;
|
||||||
use Modules\DDT\Components\Articolo;
|
use Modules\DDT\Components\Articolo;
|
||||||
@ -26,6 +27,7 @@ use Modules\DDT\Components\Descrizione;
|
|||||||
use Modules\DDT\Components\Riga;
|
use Modules\DDT\Components\Riga;
|
||||||
use Modules\DDT\Components\Sconto;
|
use Modules\DDT\Components\Sconto;
|
||||||
use Modules\DDT\DDT;
|
use Modules\DDT\DDT;
|
||||||
|
use Modules\DDT\Stato;
|
||||||
use Modules\DDT\Tipo;
|
use Modules\DDT\Tipo;
|
||||||
|
|
||||||
$module = Modules::get($id_module);
|
$module = Modules::get($id_module);
|
||||||
@ -36,7 +38,7 @@ if ($module['name'] == 'Ddt di vendita') {
|
|||||||
$dir = 'uscita';
|
$dir = 'uscita';
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (post('op')) {
|
switch (filter('op')) {
|
||||||
case 'add':
|
case 'add':
|
||||||
$idanagrafica = post('idanagrafica');
|
$idanagrafica = post('idanagrafica');
|
||||||
$data = post('data');
|
$data = post('data');
|
||||||
@ -428,6 +430,50 @@ switch (post('op')) {
|
|||||||
$dbo->query('UPDATE `dt_righe_ddt` SET `order` = '.prepare($i + 1).' WHERE id='.prepare($id_riga));
|
$dbo->query('UPDATE `dt_righe_ddt` SET `order` = '.prepare($i + 1).' WHERE id='.prepare($id_riga));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Gestione della generazione di DDT in direzione opposta a quella corrente, per completare il riferimento di trasporto interno tra sedi distinte dell'anagrafica Azienda.
|
||||||
|
*/
|
||||||
|
case 'completa_trasporto':
|
||||||
|
$tipo = Tipo::where('dir', '!=', $ddt->direzione)->first();
|
||||||
|
$stato = Stato::where('descrizione', '=', 'Evaso')->first();
|
||||||
|
|
||||||
|
// Duplicazione DDT
|
||||||
|
$copia = $ddt->replicate();
|
||||||
|
$copia->tipo()->associate($tipo);
|
||||||
|
$copia->stato()->associate($stato);
|
||||||
|
$copia->id_ddt_trasporto_interno = $ddt->id;
|
||||||
|
|
||||||
|
// Inversione sedi
|
||||||
|
$copia->idsede_partenza = $ddt->idsede_destinazione;
|
||||||
|
$copia->idsede_destinazione = $ddt->idsede_partenza;
|
||||||
|
|
||||||
|
$copia->save();
|
||||||
|
|
||||||
|
// Copia righe
|
||||||
|
$righe = $ddt->getRighe();
|
||||||
|
foreach ($righe as $riga) {
|
||||||
|
$copia_riga = $riga->replicate();
|
||||||
|
|
||||||
|
// Aggiornamento riferimenti
|
||||||
|
$copia_riga->idddt = $copia->id;
|
||||||
|
$copia_riga->original_id = null;
|
||||||
|
$copia_riga->original_type = null;
|
||||||
|
|
||||||
|
$copia_riga->save();
|
||||||
|
|
||||||
|
// Movimentazione forzata in direzione del documento
|
||||||
|
$copia_riga->movimenta($riga->qta);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Salvataggio riferimento
|
||||||
|
$ddt->id_ddt_trasporto_interno = $copia->id;
|
||||||
|
$ddt->save();
|
||||||
|
|
||||||
|
$id_record = $copia->id;
|
||||||
|
$id_module = $ddt->direzione == 'entrata' ? Module::pool('Ddt di acquisto')->id : Module::pool('Ddt di vendita')->id;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,14 +17,54 @@
|
|||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
use Models\Module;
|
||||||
|
|
||||||
include_once __DIR__.'/../../core.php';
|
include_once __DIR__.'/../../core.php';
|
||||||
|
|
||||||
$stati = $dbo->fetchArray('SELECT descrizione FROM `dt_statiddt` WHERE `is_fatturabile` = 1');
|
// Informazioni sui movimenti interni
|
||||||
|
if (!empty($ddt->id_ddt_trasporto_interno)) {
|
||||||
|
$id_module_collegamento = $ddt->direzione == 'entrata' ? Module::pool('Ddt di acquisto')->id : Module::pool('Ddt di vendita')->id;
|
||||||
|
|
||||||
|
echo '
|
||||||
|
<div class="tip" data-toggle="tooltip" title="'.tr("Questo ddt è impostato sull'anagrafica Azienda, e pertanto rappresenta un trasporto interno di merce: il movimento tra sedi distinte è necessario completato tramite un DDT in direzione opposta").'.">
|
||||||
|
<a class="btn btn-info" href="'.base_url().'/editor.php?id_module='.$id_module_collegamento.'&id_record='.$ddt->id_ddt_trasporto_interno.'">
|
||||||
|
<i class="fa fa-truck"></i> '.tr('DDT di completamento trasporto').'
|
||||||
|
</a>
|
||||||
|
</div>';
|
||||||
|
} elseif ($azienda->id == $ddt->anagrafica->id) {
|
||||||
|
echo '
|
||||||
|
<div class="tip" data-toggle="tooltip" title="'.tr("Questo ddt è impostato sull'anagrafica Azienda, e pertanto rappresenta un trasporto interno di merce: per completare il movimento tra sedi distinte, è necessario generare un DDT in direzione opposta tramite questo pulsante").'.">
|
||||||
|
<button class="btn btn-warning '.($ddt->isImportabile() ? '' : 'disabled').'" onclick="completaTrasporto()">
|
||||||
|
<i class="fa fa-truck"></i> '.tr('Completa trasporto ').'
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
function completaTrasporto() {
|
||||||
|
swal({
|
||||||
|
title: "'.tr('Completare il trasporto?').'",
|
||||||
|
text: "'.tr('Sei sicuro di voler completare il trasporto interno tramite un DDT in direzione opposta?').'",
|
||||||
|
type: "warning",
|
||||||
|
showCancelButton: true,
|
||||||
|
confirmButtonClass: "btn btn-lg btn-success",
|
||||||
|
confirmButtonText: "'.tr('Completa').'",
|
||||||
|
}).then(
|
||||||
|
function() {
|
||||||
|
location.href = globals.rootdir + "/editor.php?id_module='.$id_module.'&id_record='.$id_record.'&op=completa_trasporto&backto=record-edit";
|
||||||
|
},
|
||||||
|
function() {}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
</script>';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Informazioni sull'importabilità del DDT
|
||||||
|
$stati = $database->fetchArray('SELECT descrizione FROM `dt_statiddt` WHERE `is_fatturabile` = 1');
|
||||||
foreach ($stati as $stato) {
|
foreach ($stati as $stato) {
|
||||||
$stati_importabili[] = $stato['descrizione'];
|
$stati_importabili[] = $stato['descrizione'];
|
||||||
}
|
}
|
||||||
|
|
||||||
$causali = $dbo->fetchArray('SELECT descrizione FROM `dt_causalet` WHERE `is_importabile` = 1');
|
$causali = $database->fetchArray('SELECT descrizione FROM `dt_causalet` WHERE `is_importabile` = 1');
|
||||||
foreach ($causali as $causale) {
|
foreach ($causali as $causale) {
|
||||||
$causali_importabili[] = $causale['descrizione'];
|
$causali_importabili[] = $causale['descrizione'];
|
||||||
}
|
}
|
||||||
|
@ -19,8 +19,11 @@
|
|||||||
|
|
||||||
include_once __DIR__.'/../../core.php';
|
include_once __DIR__.'/../../core.php';
|
||||||
|
|
||||||
|
use Modules\Anagrafiche\Anagrafica;
|
||||||
use Modules\DDT\DDT;
|
use Modules\DDT\DDT;
|
||||||
|
|
||||||
|
$azienda = Anagrafica::find(setting('Azienda predefinita'));
|
||||||
|
|
||||||
if ($module['name'] == 'Ddt di vendita') {
|
if ($module['name'] == 'Ddt di vendita') {
|
||||||
$dir = 'entrata';
|
$dir = 'entrata';
|
||||||
} else {
|
} else {
|
||||||
|
@ -164,7 +164,6 @@ if( !empty($newsletters)){
|
|||||||
echo '
|
echo '
|
||||||
</ul>
|
</ul>
|
||||||
</div>';
|
</div>';
|
||||||
|
|
||||||
} elseif (!$record['predefined']) {
|
} elseif (!$record['predefined']) {
|
||||||
?>
|
?>
|
||||||
<a class="btn btn-danger ask" data-backto="record-list">
|
<a class="btn btn-danger ask" data-backto="record-list">
|
||||||
|
@ -17,8 +17,8 @@
|
|||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
use Modules\Newsletter\Newsletter;
|
|
||||||
use Modules\Emails\Template;
|
use Modules\Emails\Template;
|
||||||
|
use Modules\Newsletter\Newsletter;
|
||||||
|
|
||||||
include_once __DIR__.'/../../core.php';
|
include_once __DIR__.'/../../core.php';
|
||||||
|
|
||||||
|
@ -135,3 +135,6 @@ INSERT INTO `zz_api_resources` (`id`, `version`, `type`, `resource`, `class`, `e
|
|||||||
(NULL, 'app-v1', 'retrieve', 'controllo-clienti', 'API\\App\\v1\\ControlloClienti', '1'),
|
(NULL, 'app-v1', 'retrieve', 'controllo-clienti', 'API\\App\\v1\\ControlloClienti', '1'),
|
||||||
(NULL, 'app-v1', 'retrieve', 'segnalazione-bug', 'API\\App\\v1\\SegnalazioneBug', '1'),
|
(NULL, 'app-v1', 'retrieve', 'segnalazione-bug', 'API\\App\\v1\\SegnalazioneBug', '1'),
|
||||||
(NULL, 'app-v1', 'create', 'segnalazione-bug', 'API\\App\\v1\\SegnalazioneBug', '1');
|
(NULL, 'app-v1', 'create', 'segnalazione-bug', 'API\\App\\v1\\SegnalazioneBug', '1');
|
||||||
|
|
||||||
|
-- Aggiunto collegamento tra DDT in direzioni opposte per gestione movimentazioni interne tra sedi
|
||||||
|
ALTER TABLE `dt_ddt` ADD `id_ddt_trasporto_interno` INT(11) NULL, ADD FOREIGN KEY (`id_ddt_trasporto_interno`) REFERENCES `dt_ddt`(`id`) ON DELETE CASCADE;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user