1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2025-06-05 22:09:38 +02:00

Generalizzazione dei form per le righe (Contratti)

Generalizzazione della gestione dei form di righe, articoli e descrizioni come discusso in #156.
Separazione di righe e articoli da #101.
This commit is contained in:
Thomas Zilio
2018-02-19 10:52:42 +01:00
parent 6bb310675d
commit 999d0a8439
12 changed files with 340 additions and 187 deletions

View File

@@ -0,0 +1,78 @@
<?php
include_once __DIR__.'/../../core.php';
// Articolo
echo '
<div class="row">
<div class="col-md-12">
{[ "type": "select", "label": "'.tr('Articolo').'", "name": "idarticolo", "required": 1, "value": "'.$result['idarticolo'].'", "ajax-source": "articoli" ]}
</div>
</div>';
echo App::internalLoad('riga.php', $result, $options);
// Informazioni aggiuntive
if ($module['name'] != 'Contratti' && $module['name'] != 'Preventivi') {
echo '
<div class="row" id="prezzi_articolo">
<div class="col-md-4 text-center">
<button type="button" class="btn btn-sm btn-info btn-block disabled" onclick="$(\'#prezzi\').toggleClass(\'hide\'); $(\'#prezzi\').load(\''.ROOTDIR."/ajax_complete.php?module=Articoli&op=getprezzi&idarticolo=' + $('#idarticolo option:selected').val() + '&idanagrafica=".$options['idanagrafica'].'\');" disabled>
<i class="fa fa-search"></i> '.tr('Visualizza ultimi prezzi (cliente)').'
</button>
<div id="prezzi" class="hide"></div>
</div>
<div class="col-md-4 text-center">
<button type="button" class="btn btn-sm btn-info btn-block disabled" onclick="$(\'#prezziacquisto\').toggleClass(\'hide\'); $(\'#prezziacquisto\').load(\''.ROOTDIR."/ajax_complete.php?module=Articoli&op=getprezziacquisto&idarticolo=' + $('#idarticolo option:selected').val() + '&idanagrafica=".$options['idanagrafica'].'\');" disabled>
<i class="fa fa-search"></i> '.tr('Visualizza ultimi prezzi (acquisto)').'
</button>
<div id="prezziacquisto" class="hide"></div>
</div>
<div class="col-md-4 text-center">
<button type="button" class="btn btn-sm btn-info btn-block disabled" onclick="$(\'#prezzivendita\').toggleClass(\'hide\'); $(\'#prezzivendita\').load(\''.ROOTDIR."/ajax_complete.php?module=Articoli&op=getprezzivendita&idarticolo=' + $('#idarticolo option:selected').val() + '&idanagrafica=".$options['idanagrafica'].'\');" disabled>
<i class="fa fa-search"></i> '.tr('Visualizza ultimi prezzi (vendita)').'
</button>
<div id="prezzivendita" class="hide"></div>
</div>
</div>
<br>';
}
echo '
<script>
$(document).ready(function () {
$("#idarticolo").on("change", function(){
// Autoimpostazione dei valori relativi
if ($(this).val()) {
session_set("superselect,idarticolo", $(this).val(), 0);
$data = $(this).selectData();
$("#prezzo").val($data.prezzo_'.($options['dir'] == 'entrata' ? 'vendita' : 'acquisto').');
$("#descrizione_riga").val($data.descrizione);
$("#idiva").selectSet($data.idiva_vendita, $data.iva_vendita);
$("#um").selectSetNew($data.um, $data.um);
}';
if ($module['name'] != 'Contratti' && $module['name'] != 'Preventivi') {
echo '
// Operazioni sui prezzi in fondo alla pagina
$("#prezzi_articolo button").attr("disabled", !$(this).val());
if ($(this).val()) {
$("#prezzi_articolo button").removeClass("disabled");
} else {
$("#prezzi_articolo button").addClass("disabled");
}
$("#prezzi").html("");
$("#prezzivendita").html("");
$("#prezziacquisto").html("");';
}
echo '
});
});
</script>';

View File

@@ -0,0 +1,11 @@
<?php
include_once __DIR__.'/../../core.php';
echo '
<div class="row">
<div class="col-md-12">
{[ "type": "textarea", "label": "'.tr('Descrizione').'", "name": "descrizione", "id": "descrizione_riga", "value": '.json_encode($result['descrizione']).', "required": 1 ]}
</div>
</div>';

29
include/common/form.php Normal file
View File

@@ -0,0 +1,29 @@
<?php
include_once __DIR__.'/../../core.php';
/*
Form di inserimento riga documento
*/
echo '
<form action="'.ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'" method="post">
<input type="hidden" name="op" value="'.$options['op'].'">
<input type="hidden" name="backto" value="record-edit">
<input type="hidden" name="idriga" value="'.$result['id'].'">
<input type="hidden" name="dir" value="'.$options['dir'].'">';
echo '
|response|';
echo '
<!-- PULSANTI -->
<div class="row">
<div class="col-md-12 text-right">
<button type="submit" class="btn btn-primary pull-right"><i class="fa fa-plus"></i> '.$options['button'].'</button>
</div>
</div>
</form>';
echo '
<script src="'.ROOTDIR.'/lib/init.js"></script>';

74
include/common/riga.php Normal file
View File

@@ -0,0 +1,74 @@
<?php
include_once __DIR__.'/../../core.php';
// Descrizione
echo App::internalLoad('descrizione.php', $result, $options);
// Informazioni aggiuntive per Fatture
if ($module['name'] == 'Fatture di acquisto' || $module['name'] == 'Fatture di vendita') {
// Percentuale rivalsa INPS e Percentuale ritenuta d'acconto
if (get_var('Percentuale rivalsa INPS') != '' || get_var("Percentuale ritenuta d'acconto") != '' || $options['dir'] == 'uscita') {
echo '
<div class="row">';
// Rivalsa INPS
if (get_var('Percentuale rivalsa INPS') != '' || $options['dir'] == 'uscita') {
echo '
<div class="col-md-6">
{[ "type": "select", "label": "'.tr('Rivalsa INPS').'", "name": "idrivalsainps", "value": "'.$result['idrivalsainps'].'", "values": "query=SELECT * FROM co_rivalsainps", "required": '.intval($options['dir'] != 'uscita').' ]}
</div>';
}
// Ritenuta d'acconto
if (get_var("Percentuale ritenuta d'acconto") != '' || $options['dir'] == 'uscita') {
echo '
<div class="col-md-6">
{[ "type": "select", "label": "'.tr("Ritenuta d'acconto").'", "name": "idritenutaacconto", "value": "'.$result['idritenutaacconto'].'", "values": "query=SELECT * FROM co_ritenutaacconto", "required": '.intval($options['dir'] != 'uscita').' ]}
</div>';
}
echo '
</div>';
}
// Conto
echo '
<div class="row">
<div class="col-md-12">
{[ "type": "select", "label": "'.tr('Conto').'", "name": "idconto", "required": 1, "value": "'.$result['idconto'].'", "ajax-source": "'.$options['conti'].'" ]}
</div>
</div>';
}
// Iva
echo '
<div class="row">
<div class="col-md-4">
{[ "type": "select", "label": "'.tr('Iva').'", "name": "idiva", "required": 1, "value": "'.$result['idiva'].'", "values": "query=SELECT * FROM co_iva ORDER BY descrizione ASC" ]}
</div>';
// Quantità
echo '
<div class="col-md-4">
{[ "type": "number", "label": "'.tr('Q.tà').'", "name": "qta", "required": 1, "value": "'.$result['qta'].'", "decimals": "qta" ]}
</div>';
// Unità di misura
echo '
<div class="col-md-4">
{[ "type": "select", "label": "'.tr('Unità di misura').'", "icon-after": "add|'.Modules::get('Unità di misura')['id'].'", "name": "um", "value": "'.$result['um'].'", "ajax-source": "misure" ]}
</div>';
// Costo unitario
echo '
<div class="col-md-6">
{[ "type": "number", "label": "'.tr('Costo unitario').'", "name": "prezzo", "value": "'.$result['prezzo'].'", "required": 1, "icon-after": "&euro;" ]}
</div>';
// Sconto unitario
echo '
<div class="col-md-6">
{[ "type": "number", "label": "'.tr('Sconto unitario').'", "name": "sconto", "value": "'.$result['sconto_unitario'].'", "icon-after": "choice|untprc|'.$result['tipo_sconto'].'" ]}
</div>
</div>';

View File

@@ -160,21 +160,17 @@ switch (post('op')) {
$iva_indetraibile = $iva / 100 * $rs2[0]['indetraibile'];
$desc_iva = $rs2[0]['descrizione'];
$dbo->query('INSERT INTO co_righe2_contratti(idcontratto, idarticolo, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, um, qta, sconto, sconto_unitario, tipo_sconto, `order`) VALUES ('.prepare($id_record).', '.prepare($idarticolo).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($subtot).', '.prepare($um).', '.prepare($qta).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe2_contratti AS t WHERE idcontratto='.prepare($id_record).'))');
$dbo->query('INSERT INTO co_righe2_contratti(idcontratto, idarticolo, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, um, qta, sconto, sconto_unitario, tipo_sconto, is_descrizione, `order`) VALUES ('.prepare($id_record).', '.prepare($idarticolo).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($subtot).', '.prepare($um).', '.prepare($qta).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', '.prepare(empty($qta)).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe2_contratti AS t WHERE idcontratto='.prepare($id_record).'))');
$_SESSION['infos'][] = tr('Articolo aggiunto!');
break;
case 'adddescrizione':
if (!empty($id_record)) {
$descrizione = post('descrizione');
$query = 'INSERT INTO co_righe2_contratti(idcontratto, descrizione, is_descrizione) VALUES('.prepare($id_record).', '.prepare($descrizione).', 1)';
if ($dbo->query($query)) {
$_SESSION['infos'][] = tr('Riga descrittiva aggiunta!');
}
// Messaggi informativi
if (!empty($idarticolo)) {
$_SESSION['infos'][] = tr('Articolo aggiunto!');
} elseif (!empty($qta)) {
$_SESSION['infos'][] = tr('Riga descrittiva aggiunta!');
} else {
$_SESSION['infos'][] = tr('Riga aggiunta!');
}
break;
case 'editriga':

View File

@@ -1,41 +0,0 @@
<?php
include_once __DIR__.'/../../core.php';
$module = Modules::get($id_module);
$record = $dbo->fetchArray('SELECT * FROM co_contratti WHERE id='.prepare($id_record));
$numero = $record[0]['numero'];
$idanagrafica = $record[0]['idanagrafica'];
/*
Form di inserimento riga documento
*/
echo '
<p>'.tr('Contratto numero _NUM_', [
'_NUM_' => $numero,
]).'</p>
<form action="'.$rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'" method="post">
<input type="hidden" name="op" value="adddescrizione">
<input type="hidden" name="backto" value="record-edit">
<input type="hidden" name="dir" value="'.$dir.'">';
// Descrizione
echo '
<div class="row">
<div class="col-md-12">
{[ "type": "textarea", "label": "'.tr('Descrizione').'", "name": "descrizione", "required": 1 ]}
</div>
</div>';
echo '
<!-- PULSANTI -->
<div class="row">
<div class="col-md-12 text-right">
<button type="submit" class="btn btn-primary pull-right"><i class="fa fa-plus"></i> '.tr('Aggiungi').'</button>
</div>
</div>
</form>';

View File

@@ -1,130 +0,0 @@
<?php
include_once __DIR__.'/../../core.php';
$idriga = $get['idriga'];
// Info contratto
$rs = $dbo->fetchArray('SELECT * FROM co_contratti WHERE id='.prepare($id_record));
$numero = $rs[0]['numero'];
$idanagrafica = $rs[0]['idanagrafica'];
if (empty($idriga)) {
$op = 'addriga';
$button = tr('Aggiungi');
// valori default
$descrizione = '';
$qta = 1;
$um = '';
$prezzo = 0;
$sconto = 0;
$tipo_sconto = '';
// Leggo l'iva predefinita per l'anagrafica e se non c'è leggo quella predefinita generica
$iva = $dbo->fetchArray('SELECT idiva_vendite AS idiva FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica));
$idiva = $iva[0]['idiva'] ?: get_var('Iva predefinita');
// Sconto unitario
$rss = $dbo->fetchArray('SELECT prc_guadagno FROM mg_listini WHERE id=(SELECT idlistino_vendite FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica).')');
if (!empty($rss)) {
$sconto = $rss[0]['prc_guadagno'];
$tipo_sconto = 'PRC';
}
} else {
$op = 'editriga';
$button = tr('Modifica');
$rsr = $dbo->fetchArray('SELECT * FROM co_righe2_contratti WHERE idcontratto='.prepare($id_record).' AND id='.prepare($idriga));
$idarticolo = $rsr[0]['idarticolo'];
$descrizione = $rsr[0]['descrizione'];
$qta = $rsr[0]['qta'];
$um = $rsr[0]['um'];
$idiva = $rsr[0]['idiva'];
$prezzo = $rsr[0]['subtotale'] / $rsr[0]['qta'];
$sconto = $rsr[0]['sconto_unitario'];
$tipo_sconto = $rsr[0]['tipo_sconto'];
}
echo '
<form action="'.$rootdir.'/editor.php?id_module='.Modules::get('Contratti')['id'].'&id_record='.$id_record.'" method="post">
<input type="hidden" name="op" value="'.$op.'">
<input type="hidden" name="idriga" value="'.$idriga.'">
<input type="hidden" name="backto" value="record-edit">';
// Elenco articoli raggruppati per gruppi e sottogruppi
if (empty($rsr[0]['is_descrizione'])) {
echo '
<div class="col-md-12">
{[ "type": "select", "label": "'.tr('Articolo').'", "name": "idarticolo", "value": "'.$idarticolo.'", "ajax-source": "articoli" ]}
</div>';
}
// Descrizione
echo '
<div class="col-md-12">
{[ "type": "textarea", "label": "'.tr('Descrizione').'", "name": "descrizione", "id": "descrizione_riga", "value": '.json_encode($descrizione).', "required": 1 ]}
</div>';
if (empty($rsr[0]['is_descrizione'])) {
// Iva
echo '
<div class="col-md-4">
{[ "type": "select", "label": "'.tr('Iva').'", "name": "idiva", "required": 1, "values": "query=SELECT id, descrizione FROM co_iva ORDER BY descrizione ASC", "value": "'.$idiva.'" ]}
</div>';
// Quantità
echo '
<div class="col-md-4">
{[ "type": "number", "label": "'.tr('Q.tà').'", "name": "qta", "value": "'.$qta.'", "required": 1, "decimals": "qta" ]}
</div>';
// Unità di misura
echo '
<div class="col-md-4">
{[ "type": "select", "label": "'.tr('Unità di misura').'", "icon-after": "add|'.Modules::get('Unità di misura')['id'].'", "name": "um", "value": "'.$um.'", "ajax-source": "misure" ]}
</div>';
// Costo unitario
echo '
<div class="col-md-6">
{[ "type": "number", "label": "'.tr('Costo unitario').'", "name": "prezzo", "required": 1, "value": "'.$prezzo.'", "icon-after": "&euro;" ]}
</div>';
// Sconto unitario
echo '
<div class="col-md-6">
{[ "type": "number", "label": "'.tr('Sconto unitario').'", "name": "sconto", "value": "'.$sconto.'", "icon-after": "choice|untprc|'.$tipo_sconto.'" ]}
</div>';
}
echo '
<script>
$(document).ready(function () {
$("#idarticolo").on("change", function(){
if($(this).val()){
session_set("superselect,idarticolo", $(this).val(), 0);
$data = $(this).selectData();
$("#prezzo").val($data.prezzo_vendita);
$("#descrizione_riga").val($data.descrizione);
$("#idiva").selectSet($data.idiva_vendita, $data.iva_vendita);
$("#um").selectSetNew($data.um, $data.um);
}
});
});
</script>';
echo '
<!-- PULSANTI -->
<div class="row">
<div class="col-md-12 text-right">
<button type="submit" class="btn btn-primary pull-right"><i class="fa fa-plus"></i> '.$button.'</button>
</div>
</div>
</form>';
echo '
<script src="'.$rootdir.'/lib/init.js"></script>';

View File

@@ -280,8 +280,11 @@ if (sizeof($rs) > 0) {
<?php
if ($records[0]['stato'] != 'Pagato') {
?>
<a class="btn btn-primary" data-href="<?php echo $rootdir; ?>/modules/contratti/add_riga.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>" data-toggle="modal" data-title="Aggiungi riga" data-target="#bs-popup"><i class="fa fa-plus"></i> <?php echo tr('Riga'); ?></a>
<a class="btn btn-primary" data-href="<?php echo $rootdir; ?>/modules/contratti/add_descrizione.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>" data-toggle="modal" data-title="Aggiungi descrizione" data-target="#bs-popup"><i class="fa fa-plus"></i> <?php echo tr('Descrizione'); ?></a>
<a class="btn btn-primary" data-href="<?php echo $rootdir; ?>/modules/contratti/row-add.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&is_articolo" data-toggle="modal" data-title="Aggiungi articolo" data-target="#bs-popup"><i class="fa fa-plus"></i> <?php echo tr('Articolo'); ?></a>
<a class="btn btn-primary" data-href="<?php echo $rootdir; ?>/modules/contratti/row-add.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&is_riga" data-toggle="modal" data-title="Aggiungi riga" data-target="#bs-popup"><i class="fa fa-plus"></i> <?php echo tr('Riga'); ?></a>
<a class="btn btn-primary" data-href="<?php echo $rootdir; ?>/modules/contratti/row-add.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&is_descrizione" data-toggle="modal" data-title="Aggiungi descrizione" data-target="#bs-popup"><i class="fa fa-plus"></i> <?php echo tr('Descrizione'); ?></a>
<?php
}
?>

View File

@@ -0,0 +1,47 @@
<?php
include_once __DIR__.'/../../core.php';
// Info contratto
$rs = $dbo->fetchArray('SELECT * FROM co_contratti WHERE id='.prepare($id_record));
$idanagrafica = $rs[0]['idanagrafica'];
// Impostazioni per la gestione
$options = [
'op' => 'addriga',
'button' => tr('Aggiungi'),
'dir' => 'entrata',
'idanagrafica' => $idanagrafica,
];
// Dati di default
$result = [
'descrizione' => '',
'qta' => 1,
'um' => '',
'prezzo' => 0,
'sconto_unitario' => 0,
'tipo_sconto' => '',
'idiva' => '',
];
// Leggo l'iva predefinita per l'anagrafica e se non c'è leggo quella predefinita generica
$iva = $dbo->fetchArray('SELECT idiva_vendite AS idiva FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica));
$result['idiva'] = $iva[0]['idiva'] ?: get_var('Iva predefinita');
// Sconto unitario
$rss = $dbo->fetchArray('SELECT prc_guadagno FROM mg_listini WHERE id=(SELECT idlistino_vendite FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica).')');
if (!empty($rss)) {
$result['sconto_unitario'] = $rss[0]['prc_guadagno'];
$result['tipo_sconto'] = 'PRC';
}
// Importazione della gestione dedicata
$file = 'riga';
if (isset($get['is_descrizione'])) {
$file = 'descrizione';
} elseif (isset($get['is_articolo'])) {
$file = 'articolo';
}
echo App::load($file.'.php', $result, $options);

View File

@@ -0,0 +1,31 @@
<?php
include_once __DIR__.'/../../core.php';
// Info contratto
$rs = $dbo->fetchArray('SELECT * FROM co_contratti WHERE id='.prepare($id_record));
$idanagrafica = $rs[0]['idanagrafica'];
// Impostazioni per la gestione
$options = [
'op' => 'editriga',
'button' => tr('Modifica'),
'dir' => 'entrata',
'idanagrafica' => $idanagrafica,
];
// Dati della riga
$rsr = $dbo->fetchArray('SELECT * FROM co_righe2_contratti WHERE idcontratto='.prepare($id_record).' AND id='.prepare($get['idriga']));
$result = $rsr[0];
$result['prezzo'] = $rsr[0]['subtotale'] / $rsr[0]['qta'];
// Importazione della gestione dedicata
$file = 'riga';
if (!empty($result['is_descrizione'])) {
$file = 'descrizione';
} elseif (!empty($result['idarticolo'])) {
$file = 'articolo';
}
echo App::load($file.'.php', $result, $options);

View File

@@ -119,8 +119,10 @@ if (!empty($rs_art)) {
<input type="hidden" name="idarticolo" value="'.$r['idarticolo'].'">
<div class="btn-group">';
echo "
<a class='btn btn-xs btn-warning' onclick=\"launch_modal('Modifica riga', '".$rootdir.'/modules/contratti/add_riga.php?id_record='.$id_record.'&idriga='.$r['id']."', 1 );\"><i class='fa fa-edit'></i></a>
<a class='btn btn-xs btn-warning' onclick=\"launch_modal('Modifica riga', '".$rootdir.'/modules/contratti/row-edit.php?id_module='.$id_module.'&id_record='.$id_record.'&idriga='.$r['id']."', 1 );\"><i class='fa fa-edit'></i></a>
<a href='javascript:;' class='btn btn-xs btn-danger' title='Rimuovi questa riga' onclick=\"if( confirm('Rimuovere questa riga dal contratto?') ){ $('#delete-form-".$r['id']."').submit(); }\"><i class='fa fa-trash'></i></a>";
echo '
</div>

View File

@@ -333,4 +333,57 @@ class App
return $query;
}
public static function load($file, $result, $options, $directory = null)
{
$module = self::getCurrentModule();
$id_module = filter('id_module');
$id_record = filter('id_record');
$directory = empty($directory) ? 'include|custom|/common/' : $directory;
$directory = str_contains($directory, DOCROOT) ? $directory : DOCROOT.'/'.$directory;
ob_start();
$original_file = str_replace('|custom|', '', $directory).'form.php';
$custom_file = str_replace('|custom|', '/custom', $directory).'form.php';
if (file_exists($custom_file)) {
require $custom_file;
} elseif (file_exists($original_file)) {
require $original_file;
}
$form = ob_get_clean();
$response = self::internalLoad($file, $result, $options, $directory);
$form = str_replace('|response|', $response, $form);
return $form;
}
protected static function internalLoad($file, $result, $options, $directory = null)
{
$module = self::getCurrentModule();
$id_module = filter('id_module');
$id_record = filter('id_record');
$directory = empty($directory) ? 'include|custom|/common/' : $directory;
$directory = str_contains($directory, DOCROOT) ? $directory : DOCROOT.'/'.$directory;
ob_start();
$original_file = str_replace('|custom|', '', $directory).$file;
$custom_file = str_replace('|custom|', '/custom', $directory).$file;
if (file_exists($custom_file)) {
require $custom_file;
} elseif (file_exists($original_file)) {
require $original_file;
}
$response = ob_get_clean();
return $response;
}
}