This commit is contained in:
Beppe 2022-11-25 11:54:43 +01:00
commit a416db60b9
12 changed files with 162 additions and 43 deletions

View File

@ -53,7 +53,7 @@ $id_anagrafica = !empty(get('idanagrafica')) ? get('idanagrafica') : '';
</div>
<div class="col-md-4">
{[ "type": "select", "label": "<?php echo $label; ?>", "name": "idanagrafica", "id": "idanagrafica_add", "required": 1, "value": "<?php echo $id_anagrafica; ?>", "ajax-source": "clienti_fornitori", "icon-after": "add|<?php echo Modules::get('Anagrafiche')['id']; ?>|tipoanagrafica=<?php echo $tipo_anagrafica; ?>&readonly_tipo=1" ]}
{[ "type": "select", "label": "<?php echo $label; ?>", "name": "idanagrafica", "id": "idanagrafica_add", "required": 1, "value": "<?php echo $id_anagrafica; ?>", "ajax-source": "clienti_fornitori", "icon-after": "add|<?php echo Modules::get('Anagrafiche')['id']; ?>|tipoanagrafica=<?php echo $tipo_anagrafica; ?>" ]}
</div>
<!-- il campo idtipoddt può essere anche rimosso -->

View File

@ -69,7 +69,7 @@ switch (filter('op')) {
// Inizializzazione del lettore CSV
$csv = new $import_manager($record->filepath);
foreach ($fields as $key => $value) {
$csv->setColumnAssociation($key, $value - 1);
$csv->setColumnAssociation($key, (int)$value - 1);
}
// Generazione offset sulla base della pagina

View File

@ -21,18 +21,34 @@ include_once __DIR__.'/../../core.php';
?><form action="" method="post" id="add-form">
<input type="hidden" name="op" value="add">
<input type="hidden" name="backto" value="record-edit">
<input type="hidden" name="backto" value="record-list">
<div class="row">
<div class="col-md-12">
{[ "type": "text", "label": "<?php echo tr('Nome'); ?>", "name": "nome", "required": 1 ]}
{[ "type": "text", "label": "<?php echo tr('Nome gruppo'); ?>", "name": "nome", "required": 1, "validation": "gruppo", "help": "<?php echo tr("Compilando questo campo verrà creato un nuovo gruppo di utenti."); ?>" ]}
</div>
</div>
<!-- PULSANTI -->
<div class="row">
<div class="col-md-12 text-right">
<button type="submit" class="btn btn-primary"><i class="fa fa-plus"></i> <?php echo tr('Aggiungi'); ?></button>
<button type="button" onclick="submitCheck()" class="btn btn-primary"><i class="fa fa-plus"></i> <?php echo tr('Aggiungi'); ?></button>
</div>
</div>
</form>
<script>
function submitCheck() {
var nome = parseInt($("#nome").attr("valid"));
if(nome) {
$("#add-form").submit();
}else{
$("input[name=nome]").focus();
swal("<?php echo tr('Impossibile procedere'); ?>", "<?php echo tr('Nome gruppo già in uso'); ?>", "error");
}
}
</script>

View File

@ -26,7 +26,7 @@ if (!empty(filter('idanagrafica'))) {
echo '
<div class="row">
<div class="col-md-12">
{[ "type": "text", "label": "'.tr('Username').'", "name": "username", "required": 1, "value": "'.$utente['username'].'", "validation": "username||'.($utente['id'] ?: 0).'" ]}
{[ "type": "text", "label": "'.tr('Username').'", "name": "username", "required": 1, "value": "'.$utente['username'].'", "validation": "username|'.$id_module.'|'.($utente['id'] ?: 0).'" ]}
</div>
</div>';

View File

@ -24,7 +24,7 @@ $utenti = $dbo->fetchArray('SELECT *, (SELECT ragione_sociale FROM an_anagrafich
echo '
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">'.tr('Utenti _GROUP_', [
<h3 class="panel-title">'.tr('Utenti del gruppo: _GROUP_', [
'_GROUP_' => $record['nome'],
]).'</h3>
</div>
@ -32,7 +32,7 @@ echo '
<div class="panel-body">
<div class="row">
<div class="col-md-3 pull-right">
{["type":"select", "label":"", "name":"id_module_start", "ajax-source":"moduli_gruppo", "select-options": '.json_encode(['idgruppo' => $record['id']]).', "placeholder":"'.tr('Modulo iniziale').'", "value":"'.$record['id_module_start'].'" ]}
{["type":"select", "label":"'.tr('Modulo iniziale').'", "name":"id_module_start", "ajax-source":"moduli_gruppo", "select-options": '.json_encode(['idgruppo' => $record['id']]).', "placeholder":"'.tr('Modulo iniziale').'", "value":"'.$record['id_module_start'].'" ]}
</div>
</div>
<br>';
@ -167,10 +167,9 @@ echo '
echo '
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">'.tr('Permessi _GROUP_', [
<h3 class="panel-title">'.tr('Permessi del gruppo: _GROUP_', [
'_GROUP_' => $record['nome'],
]).((empty($record['editable'])) ? '<a class=\'clickable btn-xs pull-right ask\' data-msg="'.tr('Verranno reimpostati i permessi di default per il gruppo \''.$record['nome'].'\' ').'." data-class="btn btn-lg btn-warning" data-button="'.tr('Reimposta permessi').'" data-op="restore_permission" >'.tr('Reimposta permessi').'</a>' : '').'</h3>
]).((empty($record['editable']) && ($record['nome'] != 'Amministratori')) ? '<a class=\'clickable btn-xs pull-right ask\' data-msg="'.tr('Verranno reimpostati i permessi di default per il gruppo \''.$record['nome'].'\' ').'." data-class="btn btn-lg btn-warning" data-button="'.tr('Reimposta permessi').'" data-op="restore_permission" >'.tr('Reimposta permessi').'</a>' : '').'</h3>
</div>
<div class="panel-body">';
@ -209,17 +208,16 @@ echo '
</div>';
// Eliminazione gruppo (se non è tra quelli di default)
if ($record['editable'] == 1) {
echo '
<!-- PULSANTI -->
<div class="row">
<div class="col-md-12 text-right">
<a class="btn btn-danger ask" data-backto="record-list" data-msg="'.tr('Eliminando questo gruppo verranno eliminati anche i permessi e gli utenti collegati').'" data-op="deletegroup">
<i class="fa fa-trash"></i> '.tr('Elimina').'
</a>
</div>
</div>';
}
echo '
<!-- PULSANTI -->
<div class="row">
<div class="col-md-12 text-right">
<a class="btn btn-danger ask '.(!$record['editable'] ? 'disabled' : '').'" '.(!$record['editable'] ? 'disabled' : '').' data-backto="record-list" data-msg="'.tr('Eliminando questo gruppo verranno eliminati anche i permessi e gli utenti collegati').'" data-op="deletegroup">
<i class="fa fa-trash"></i> '.tr('Elimina').'
</a>
</div>
</div>';
echo '
<script>
@ -227,16 +225,44 @@ $(document).ready(function() {
$("#save-buttons").hide();
$("#email-button").remove();
setTimeout(function() { colorize_select2(); }, 500);
});
function colorize_select2(){
$( ".select2-selection__rendered" ).each(function() {
if ($( this ).attr("title") == "Lettura e scrittura"){
$( this ).addClass( "text-green" );
}
else if ($( this ).attr("title") == "Sola lettura"){
$( this ).addClass( "text-orange" );
}
else if ($( this ).attr("title") == "Nessun permesso"){
$( this ).addClass( "text-red" );
}else{
}
});
}
$("li.active.header button.btn-primary").attr("data-href", $("a.pull-right").attr("data-href") );
function update_permissions(id, value){
function update_permissions(id, value, color){
$.get(
globals.rootdir + "/actions.php?id_module='.$id_module.'&id_record='.$id_record.'&op=update_permission&idmodulo=" + id + "&permesso=" + value,
function(data){
if(data == "ok") {
toastr["success"]("'.tr('Permessi aggiornati!').'");
content_was_modified = false;
$("#select2-permesso_"+id+"-container").removeClass("text-red");
$("#select2-permesso_"+id+"-container").removeClass("text-orange");
$("#select2-permesso_"+id+"-container").removeClass("text-green");
$("#select2-permesso_"+id+"-container").addClass(color);
if( id==$("#id_module_start").val() && value=="-" ){
$("#id_module_start").selectReset();
update_user($("#id_module_start").val());
@ -257,7 +283,8 @@ function update_user(value){
globals.rootdir + "/actions.php?id_module='.$id_module.'&id_record='.$id_record.'&op=update&id_module_start=" + value,
function(data){
if(data == "ok") {
toastr["success"]("'.tr('Prima pagina aggiornata!').'");
toastr["success"]("'.tr('Informazioni aggiornate!').'");
content_was_modified = false;
} else {
swal("'.tr('Errore').'", "'.tr("Errore durante l'aggiornamento delle informazioni!").'", "error");
}

View File

@ -24,20 +24,37 @@ function menuSelection($element, $group_id, $depth, $permessi_disponibili)
$dbo = database();
++$depth;
$result = '
<tr>
<td>'.str_repeat('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;', $depth).$element['title'].'</td>
<td>
<select name="permesso_'.$element['id'].'" id="permesso_'.$element['id'].'" class="form-control superselect openstamanager-input select-input" onchange="update_permissions('.$element['id'].', $(this).find(\'option:selected\').val())">';
// Permessi impostati per il gruppo
$permesso_salvato = $dbo->fetchOne('SELECT permessi FROM zz_permissions WHERE idgruppo = '.prepare($group_id).' AND idmodule = '.prepare($element['id']));
$permessi = $permesso_salvato ? $permesso_salvato['permessi'] : '-';
$result = '
<tr>
<td>'.str_repeat('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;', $depth).'<span>'.$element['title'].'</span></td>
<td>
<select name="permesso_'.$element['id'].'" id="permesso_'.$element['id'].'" class="form-control superselect openstamanager-input select-input" onchange="update_permissions('.$element['id'].', $(this).find(\'option:selected\').val(), $(this).find(\'option:selected\').data(\'color\'))">';
foreach ($permessi_disponibili as $id => $nome) {
switch ($id) {
case 'rw':
$bgcolor = 'green';
break;
case 'r':
$bgcolor = 'orange';
break;
case '-':
$bgcolor = 'red';
break;
default:
break;
}
$attr = ($id == $permessi) ? ' selected="selected"' : '';
$result .= '
<option value="'.$id.'" '.$attr.'>'.$nome.'</option>';
<option data-color="text-'.$bgcolor.'" _bgcolor_="'.$bgcolor.'" value="'.$id.'" '.$attr.'>'.$nome.'</option>';
}
$result .= '

View File

@ -112,6 +112,10 @@ function submitCheck() {
if(username) {
$("#user_update").submit();
}else{
$("input[name=username]").focus();
swal("'.tr('Impossibile procedere').'", "'.tr('Nome utente già in uso').'", "error");
}
}
</script>

View File

@ -19,6 +19,7 @@
include_once __DIR__.'/../../core.php';
use Models\Group;
use Models\User;
$name = filter('name');
@ -31,7 +32,7 @@ switch ($name) {
['id', '<>', $id_record],
])->count() == 0;
$message = $disponibile ? tr("L'username è disponbile") : tr("L'username è già in uso");
$message = $disponibile ? tr("L'username è disponbile") : tr("L'username aa ".$id_record." è già in uso");
$result = $disponibile;
// Lunghezza minima del nome utente (username)
@ -47,4 +48,22 @@ switch ($name) {
];
break;
case 'gruppo':
$disponibile = Group::where([
['nome', $value],
//['id', '<>', $id_record],
])->count() == 0;
$message = $disponibile ? tr("Il nome del gruppo è disponbile") : tr("Il nome per questo gruppo è già in uso");
$result = $disponibile;
$response = [
'result' => $result,
'message' => $message,
];
break;
}

View File

@ -146,7 +146,7 @@ echo '
<h4>
'.$ragione_sociale.'
'.(empty($anagrafica) ? '<span class="badge badge-success">'.tr('Nuova anagrafica').'</span>' : '<small>'.Modules::link('Anagrafiche', $anagrafica->id, '', null, '')).'</small><br>
'.(empty($anagrafica) ? '<span class="badge bg-orange">'.tr('Nuova anagrafica').'</span>' : '<small>'.Modules::link('Anagrafiche', $anagrafica->id, '', null, '').'</small>').'<br>
<small>
'.(!empty($codice_fiscale) ? (tr('Codice Fiscale').': '.$codice_fiscale.'<br>') : '').'

View File

@ -213,13 +213,44 @@ class FatturaElettronica
if (!empty($info['partita_iva']) && !empty($info['codice_fiscale'])) {
$anagrafica->where('piva', $info['partita_iva'])
->orWhere('codice_fiscale', $info['codice_fiscale']);
->orWhere('codice_fiscale', $info['codice_fiscale'])
->orWhere('piva', 'like', '__'.$info['partita_iva'])
->orwhere('codice_fiscale', 'like', '__'.$info['codice_fiscale']);
} elseif (!empty($info['codice_fiscale'])) {
$anagrafica->where('codice_fiscale', $info['codice_fiscale']);
$anagrafica->where('codice_fiscale', $info['codice_fiscale'])
->orWhere('codice_fiscale', 'like', '__'.$info['codice_fiscale']);
} elseif (!empty($info['partita_iva'])) {
$anagrafica->where('piva', $info['partita_iva']);
$anagrafica->where('piva', $info['partita_iva'])
->orWhere('piva', 'like', '__'.$info['partita_iva']);
}
//Se non trovo l'anagrafica tra i fornitori, provo a ricercarla anche tra i clienti
if (empty($anagrafica->first())){
$type = 'Cliente';
$tipologia = TipoAnagrafica::where('descrizione', $type)->first();
$anagrafica = Anagrafica::whereHas('tipi', function ($query) use ($tipologia) {
$query->where('an_tipianagrafiche.idtipoanagrafica', '=', $tipologia->id);
});
if (!empty($info['partita_iva']) && !empty($info['codice_fiscale'])) {
$anagrafica->where('piva', $info['partita_iva'])
->orWhere('codice_fiscale', $info['codice_fiscale'])
->orWhere('piva', 'like', '__'.$info['partita_iva'])
->orwhere('codice_fiscale', 'like', '__'.$info['codice_fiscale']);
} elseif (!empty($info['codice_fiscale'])) {
$anagrafica->where('codice_fiscale', $info['codice_fiscale'])
->orWhere('codice_fiscale', 'like', '__'.$info['codice_fiscale']);
} elseif (!empty($info['partita_iva'])) {
$anagrafica->where('piva', $info['partita_iva'])
->orWhere('piva', 'like', '__'.$info['partita_iva']);
}
}
return $anagrafica->first();
}

View File

@ -130,9 +130,7 @@ class HTMLWrapper implements WrapperInterface
var icon = container.find("i");
var id_record = "'.$id_record.'";
if ($(".modal-content").is(":visible")) {
var id_record = "";
}
var id_module = "'.$id_module.'";
icon.attr("class", "fa fa-spinner fa-spin");
@ -140,7 +138,7 @@ class HTMLWrapper implements WrapperInterface
url: globals.rootdir + "/actions.php",
type: "post",
data: {
id_module: "'.$id_module.'",
id_module: id_module,
id_record: id_record,
name: "'.$name.'",
value: value,

View File

@ -55,10 +55,17 @@ ORDER BY
TRIM(`ragione_sociale`)" WHERE `name` = 'Anagrafiche';
-- Creazione modelli prima nota per liquidazione salari e stipendi
SELECT @numero := MAX(CAST(numero AS UNSIGNED))+10 FROM co_pianodeiconti3 WHERE idpianodeiconti2 = '8';
INSERT INTO `co_pianodeiconti3` (`id`, `numero`, `descrizione`, `idpianodeiconti2`, `dir`, `percentuale_deducibile`) VALUES
(NULL, '000080', 'Personale c/Retribuzioni', '8', '', '100.00'),
(NULL, '000090', 'INPS c/Competenza', '8', '', '100.00'),
(NULL, '000090', 'Erario c/Ritenute dipendenti', '5', '', '100.00');
(NULL, LPAD(@numero, 6, '0'), 'Personale c/Retribuzioni', '8', '', '100.00');
SELECT @numero := MAX(CAST(numero AS UNSIGNED))+10 FROM co_pianodeiconti3 WHERE idpianodeiconti2 = '8';
INSERT INTO `co_pianodeiconti3` (`id`, `numero`, `descrizione`, `idpianodeiconti2`, `dir`, `percentuale_deducibile`) VALUES
(NULL, LPAD(@numero, 6, '0'), 'INPS c/Competenza', '8', '', '100.00');
SELECT @numero := MAX(CAST(numero AS UNSIGNED))+10 FROM co_pianodeiconti3 WHERE idpianodeiconti2 = '5';
INSERT INTO `co_pianodeiconti3` (`id`, `numero`, `descrizione`, `idpianodeiconti2`, `dir`, `percentuale_deducibile`) VALUES
(NULL, LPAD(@numero, 6, '0'), 'Erario c/Ritenute dipendenti', '5', '', '100.00');
SELECT @idmastrino := MAX(idmastrino)+1 FROM co_movimenti_modelli;
INSERT INTO `co_movimenti_modelli` (`id`, `idmastrino`, `nome`, `descrizione`, `idconto`, `totale`) VALUES