Compare commits

...

12 Commits

Author SHA1 Message Date
Luca 974d1d0651 Aggiunto controllo esistenza template per invio notifica al tecnico 2024-07-30 17:40:52 +02:00
Luca 833c75b3f3 Messaggio di avviso aggiunta notifica tecnico alla coda di invio 2024-07-30 17:37:23 +02:00
Luca c8079132e8 Update base.php 2024-07-30 17:20:15 +02:00
Luca 66e722e30d Update articoli.movimenti.php 2024-07-30 17:06:08 +02:00
Luca fd73cbf367 Rimozione refuso plugin movimenti 2024-07-30 17:03:49 +02:00
valentina cff58f2ebc Miglioria grafica stampa intervento 2024-07-30 16:32:44 +02:00
valentina 7d507f2b3d Fix minore 2024-07-30 16:32:20 +02:00
Luca c106358135 migliorie grafiche minori 2024-07-30 16:23:04 +02:00
valentina 4b08bd0589 Fix modifica utenti 2024-07-30 16:11:52 +02:00
MatteoPistorello ba7851d5ee Merge branch 'master' of https://github.com/devcode-it/openstamanager 2024-07-30 15:43:16 +02:00
MatteoPistorello a9f1f09c07 update changelog 2024-07-30 15:43:12 +02:00
valentina 397d476a83 Fix minore 2024-07-30 13:09:02 +02:00
13 changed files with 114 additions and 78 deletions

View File

@ -79,7 +79,6 @@ Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://k
- Aggiunta la gestione dell'invio automatico dei promemoria delle scadenze
- Aggiunto avviso nel caso di scadenza durante il mese di chiusura aziendale
- Aggiunta gestione caratteri speciali in fattura elettronica
- Aggiunta impostazione per utilizzare codice come barcode
### Modificato (Changed)
- Rimozione agenti secondari in **Anagrafiche**

View File

@ -103,6 +103,7 @@ if (!empty($movimenti)) {
echo '
<table class="table table-striped table-condensed table-bordered">
<tr>
<th class="text-center" width="40">#</th>
<th class="text-center" width="120">'.tr('Q.').'</th>
<th class="text-center">'.tr('Q. progressiva').'</th>
<th>'.tr('Operazione').'</th>
@ -119,9 +120,9 @@ if (!empty($movimenti)) {
} else {
$movimento['progressivo_finale'] = $movimenti[$i - 1]['progressivo_iniziale'];
}
$movimento['progressivo_iniziale'] = $movimento['progressivo_finale'] - $movimento->qta;
$movimento['progressivo_iniziale'] = $movimento['progressivo_finale'] - $movimento->qta;
$movimenti[$i]['progressivo_iniziale'] = $movimento['progressivo_iniziale'];
$movimenti[$i]['progressivo_finale'] = $movimento['progressivo_finale'];
@ -129,6 +130,9 @@ if (!empty($movimenti)) {
echo '
<tr>
<td class="text-center">
'.count($movimenti)-($i). '
</td>
<td class="text-center" style="color: ' . ($movimento->qta < 0 ? 'red' : 'green') . ';">
'.numberFormat($movimento->qta, 'qta').' '.$record['um'].'
</td>

View File

@ -32,7 +32,7 @@ echo '
<div class="row">
<div class="col-md-6 offset-md-3">
<div class="input-group">
<input type="text" class="form-control input-lg text-center" id="ricerca_impostazioni" placeholder="'.tr('Cerca').'...">
<input type="text" class="form-control form-control-lg text-center" id="ricerca_impostazioni" placeholder="'.tr('Cerca').'...">
<div class="input-group-append">
<button class="btn btn-primary" type="button" id="search">
<span class="fa fa-search"></span>

View File

@ -120,6 +120,7 @@ switch (post('op')) {
$mail = Mail::build(auth()->getUser(), $template, $intervento->id);
$mail->addReceiver($tecnico['email']);
$mail->save();
flash()->info(tr('Notifica al tecnico aggiunta correttamente.'));
}
}
}
@ -143,6 +144,7 @@ switch (post('op')) {
$mail = Mail::build(auth()->getUser(), $template, $intervento->id);
$mail->addReceiver($tecnico['email']);
$mail->save();
flash()->info(tr('Notifica al tecnico aggiunta correttamente.'));
}
}
}
@ -331,6 +333,7 @@ switch (post('op')) {
$mail = Mail::build(auth()->getUser(), $template, $intervento->id);
$mail->addReceiver($tecnico['email']);
$mail->save();
flash()->info(tr('Notifica al tecnico aggiunta correttamente.'));
}
}
}
@ -782,11 +785,18 @@ switch (post('op')) {
foreach ($tecnici as $tecnico) {
$mail_tecnico = $dbo->selectOne('an_anagrafiche', '*', ['idanagrafica' => $tecnico]);
if (!empty($mail_tecnico['email'])) {
$mail = Mail::build(auth()->getUser(), $template, $id_record);
$mail->addReceiver($mail_tecnico['email']);
$mail->save();
if (!empty($template)) {
$mail = Mail::build(auth()->getUser(), $template, $id_record);
$mail->addReceiver($mail_tecnico['email']);
$mail->save();
flash()->info(tr('Notifica al tecnico aggiunta correttamente.'));
}
}
}
}
}
} else {
@ -960,6 +970,7 @@ switch (post('op')) {
$mail = Mail::build(auth()->getUser(), $template, $id_record);
$mail->addReceiver($tecnico['email']);
$mail->save();
flash()->info(tr('Notifica al tecnico aggiunta correttamente.'));
}
}
}

View File

@ -113,6 +113,7 @@ if (!function_exists('add_tecnico')) {
$mail = Mail::build(auth()->getUser(), $template, $id_intervento);
$mail->addReceiver($anagrafica['email']);
$mail->save();
flash()->info(tr('Notifica al tecnico aggiunta correttamente.'));
}
}
}

View File

@ -33,7 +33,7 @@ if ($bilancio_gia_aperto) {
echo '
<div class="row">
<div class="offset-md-4 col-md-3">
<input type="text" class="form-control input-lg text-center" id="input-cerca" placeholder="'.tr('Cerca').'...">
<input type="text" class="form-control form-control-lg text-center" id="input-cerca" placeholder="'.tr('Cerca').'...">
</div>
<div class="col-md-1">

View File

@ -60,7 +60,7 @@ echo '
<div class="row">
<div class="col-md-12">
{[ "type": "select", "label": "'.tr('Sede').'", "name": "idsede[]", "ajax-source": "sedi_azienda", "multiple": "1", "value":"'.($sedi ?: '').'", "help": "'.tr('Sede Azienda abilitata per la movimentazione degli articoli.').'" ]}
{[ "type": "select", "label": "'.tr('Sede').'", "name": "idsede[]", "ajax-source": "sedi_azienda", "multiple": "1", "value":"'.($sedi ?: '').'", "help": "'.tr('Sede Azienda abilitata per la movimentazione degli articoli. L\'impostazione non viene considerata per gli utenti del gruppo \'Amministratori\'.').'" ]}
</div>
</div>';

View File

@ -19,7 +19,21 @@
include_once __DIR__.'/../../core.php';
$utenti = $dbo->fetchArray('SELECT *, (SELECT `ragione_sociale` FROM `an_anagrafiche` WHERE `an_anagrafiche`.`idanagrafica`=`zz_users`.`idanagrafica` ) AS `ragione_sociale`, (SELECT GROUP_CONCAT(`title` SEPARATOR ", ") FROM `an_tipianagrafiche` LEFT JOIN `an_tipianagrafiche_lang` ON (`an_tipianagrafiche_lang`.`id_record` = `an_tipianagrafiche`.`id` AND `an_tipianagrafiche_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') INNER JOIN `an_tipianagrafiche_anagrafiche` ON `an_tipianagrafiche`.`id`=`an_tipianagrafiche_anagrafiche`.`idtipoanagrafica` WHERE `idanagrafica`=`zz_users`.`idanagrafica` GROUP BY `idanagrafica`) AS tipo FROM `zz_users` WHERE `idgruppo`='.prepare($record['id']));
$utenti = $dbo->fetchArray('
SELECT
`zz_users`.*,
`an_anagrafiche`.`ragione_sociale`,
GROUP_CONCAT(`an_tipianagrafiche_lang`.`title` SEPARATOR ", ") AS tipo
FROM
`zz_users`
JOIN `an_anagrafiche` ON `an_anagrafiche`.`idanagrafica` = `zz_users`.`idanagrafica`
JOIN `an_tipianagrafiche_anagrafiche` ON `an_tipianagrafiche_anagrafiche`.`idanagrafica` = `zz_users`.`idanagrafica`
JOIN `an_tipianagrafiche` ON `an_tipianagrafiche`.`id` = `an_tipianagrafiche_anagrafiche`.`idtipoanagrafica`
JOIN `an_tipianagrafiche_lang` ON (`an_tipianagrafiche_lang`.`id_record` = `an_tipianagrafiche`.`id` AND `an_tipianagrafiche_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).')
WHERE
`zz_users`.`idgruppo` = '.prepare($record['id']).'
GROUP BY
`zz_users`.`idanagrafica`');
echo '
<div class="card card-primary">
@ -32,7 +46,7 @@ echo '
<div class="card-body">
<div class="row">
<div class="col-md-3 pull-right">
{["type":"select", "label":"'.tr('Modulo iniziale').'", "name":"id_module_start", "ajax-source":"moduli_gruppo", "select-options": '.json_encode(['idgruppo' => $group->id]).', "placeholder":"'.tr('Modulo iniziale').'", "value":"'.$group->id_module_start.'" ]}
{["type":"select", "label":"'.tr('Modulo iniziale').'", "name":"id_module_start", "ajax-source":"moduli_gruppo", "select-options": '.json_encode(['idgruppo' => $group->id]).', "placeholder":"'.tr('Modulo iniziale').'", "value":"'.($group->id_module_start ?:0).'" ]}
</div>
<div class="col-md-3 pull-right">
{["type":"select", "label":"'.tr('Tema').'", "name":"theme", "values":"list=\"\": \"'.tr('Predefinito').'\",\"black-light\": \"'.tr('Bianco').'\",\"black\": \"'.tr('Nero').'\",\"red-light\": \"'.tr('Rosso chiaro').'\",\"red\": \"'.tr('Rosso').'\",\"blue-light\": \"'.tr('Blu chiaro').'\",\"blue\": \"'.tr('Blu').'\",\"info-light\": \"'.tr('Azzurro chiaro').'\",\"info\": \"'.tr('Azzurro').'\",\"green-light\": \"'.tr('Verde chiaro').'\",\"green\": \"'.tr('Verde').'\",\"yellow-light\": \"'.tr('Giallo chiaro').'\",\"yellow\": \"'.tr('Giallo').'\",\"purple-light\": \"'.tr('Viola chiaro').'\",\"purple\": \"'.tr('Viola').'\" ", "value":"'.$group->theme.'" ]}
@ -106,7 +120,7 @@ if (!empty($utenti)) {
// Cambio password e nome utente
echo '
<a href="" data-href="'.$structure->fileurl('user.php').'?id_module='.$id_module.'&id_record='.$id_record.'&id_utente='.$utente['id'].'" class="btn btn-xs btn-warning tip" data-card-widget="modal" title="'.tr('Aggiorna dati utente').'" data-msg="" data-backto="record-edit" data-title="'.tr('Aggiorna dati utente').'"><i class="fa fa-unlock-alt"></i></a>';
<a title="'.tr('Aggiorna dati utente').'" class="btn btn-xs btn-warning tip" data-msg=""data-backto="record-edit" data-title="'.tr('Aggiorna dati utente').'" data-href="'.$structure->fileurl('user.php').'?id_module='.$id_module.'&id_record='.$id_record.'&id_utente='.$utente['id'].'" data-card-widget="modal"><i class="fa fa-unlock-alt"></i></a>';
// Disabilitazione token API, se diverso da id_utente #1 (admin)
$token = $dbo->fetchOne('SELECT `enabled` FROM `zz_tokens` WHERE `id_utente` = '.prepare($utente['id']).'')['enabled'];
@ -171,8 +185,11 @@ echo '
<div class="card card-primary">
<div class="card-header">
<h3 class="card-title">'.tr('Permessi del gruppo: _GROUP_', [
'_GROUP_' => $record['nome'],
]).((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>
'_GROUP_' => $record['nome'],
]).'</h3>'.((empty($record['editable']) && ($record['nome'] != 'Amministratori')) ? '
<div class="card-tools">
<btn type="button" class="btn clickable btn-xs btn-warning float-right ask" data-msg="<small>'.tr('Verranno reimpostati i permessi di default per il gruppo '.$record['nome']).'.</small>" data-class="btn btn-warning" data-button="'.tr('Reimposta permessi').'" data-op="restore_permission">'.tr('Reimposta permessi').'</btn>
</div>' : '').'
</div>
<div class="card-body">';

View File

@ -21,7 +21,7 @@ include_once __DIR__.'/../../core.php';
use Models\Group;
if (!empty($id_record)) {
$record = $dbo->fetchOne('SELECT * FROM `zz_groups` LEFT JOIN `zz_groups_lang` ON (`zz_groups`.`id` = `zz_groups_lang`.`id_record` AND `zz_groups_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `zz_groups`.`id`='.prepare($id_record));
$group = Group::find($id_record);
$record = $group->toArray();
}

View File

@ -30,7 +30,7 @@ $utente = $user ? $user->toArray() : [];
// Gruppo della selezione
if (!empty($id_record)) {
$gruppo_utente = Group::find($id_record)->descrizione;
$gruppo_utente = $user ? $user->group->getTranslation('title') : 0;
$gruppi = [
'Clienti' => 'Cliente',

View File

@ -47,7 +47,7 @@ $sedi = $dbo->fetchArray('SELECT id, nomesede, citta FROM an_sedi WHERE idanagra
echo '
<div class="row">
<div class="offset-md-4 col-md-4">
<input type="text" class="form-control input-lg text-center unblockable" id="input-cerca" placeholder="'.tr('Cerca').'...">
<input type="text" class="form-control form-control-lg text-center unblockable" id="input-cerca" placeholder="'.tr('Cerca').'...">
</div>
<div class="col-md-1">

View File

@ -64,26 +64,27 @@ $percentuale_non_previsti = $n_impianti ? round(($impianti_non_previsti * 100) /
echo '
<div class="row">
<div class="offset-md-4 col-md-4 text-center">
<h4>'.strtoupper(tr('Impianti')).': '.$n_impianti.'</h4>
<div class="progress">
<h4>'.strtoupper(tr('Impianti')).': '.$n_impianti. '</h4>
<div class="progress" style="height:2rem;">
<div class="progress-bar progress-bar-striped progress-bar-success" role="progressbar" style="width:'.$percentuale_completati.'%"><i class="fa fa-check"></i> <b>'.$impianti_completati.'</b></div>
<div class="progress-bar progress-bar-striped progress-bar-danger" role="progressbar" style="width:'.$percentuale_non_completati.'%"><i class="fa fa-clock-o"></i> <b>'.$impianti_non_completati.'</b></div>
<div class="progress-bar progress-bar-striped progress-bar-warning" role="progressbar" style="width:'.$percentuale_non_previsti.'%"><i class="fa fa-times"></i> <b>'.$impianti_non_previsti.'</b></div>
<div class="progress-bar progress-bar-striped progress-bar-warning" role="progressbar" style="width:'.$percentuale_non_previsti.'%"><i class="fa fa-times"></i> <b>'.$impianti_non_previsti. '</b></div>
</div>
</div>
<div class="col-md-4 text-left">
<br><br>
<button type="button" class="btn btn-sm btn-default" onclick="caricaImpianti()">
<i class="fa fa-refresh"></i> '.tr('Aggiorna').'
<div class="col-md-1">
<button type="button" class="btn btn-default" onclick="caricaImpianti()" style="margin-top: 25px;">
<i class="fa fa-refresh"></i> '.tr('Aggiorna'). '
</button>
</div>
</div>
<table class="table table-hover table-condensed table-striped">
<hr>
<div class="row">
<div class="col-md-12">
<div class="card ">
<table class="table table-hover table-condensed table-striped">
<tr>
<th class="text-center" width="1%"></th>
<th class="text-center" width="10%">'.tr('Matricola').'</th>
@ -145,8 +146,10 @@ foreach ($impianti_collegati as $impianto) {
</tr>';
}
echo '
</table>
</table>
</div>
</div>
</div>
<script>
$(document).ready(init);

View File

@ -31,52 +31,53 @@ $d_totali = (int) setting('Cifre decimali per totali in stampa');
Dati intervento
*/
echo '
<br>
<table class="table border-bottom">
<tr>
<th colspan="4" class="text-center" style="font-size:11pt;">'.tr('Rapporto attività', [], ['upper' => true]).'</th>
<th colspan="4" class="text-center">'.tr('Rapporto attività', [], ['upper' => true]).'</th>
</tr>
<tr>
<td>
<p class="small-bold text-muted">'.tr('Cliente', [], ['upper' => true]).'</p>
<p class="small-bold text-muted">'.tr('Cliente', [], ['upper' => true]).':</p>
</td>
<td class="text-right">
'.$c_ragionesociale.'
<td>
<b>'.$c_ragionesociale.'</b>
</td>';
// Indirizzo
if (!empty($s_indirizzo) or !empty($s_cap) or !empty($s_citta) or !empty($s_provincia)) {
echo '
<td>
<p class="small-bold text-muted">'.tr('Indirizzo', [], ['upper' => true]).'</p>
<p class="small-bold text-muted">'.tr('Indirizzo', [], ['upper' => true]).':</p>
</td>
<td class="text-right">
'.$s_indirizzo.' '.$s_cap.' - '.$s_citta.' ('.strtoupper((string) $s_provincia).')
<td>
<b>'.$s_indirizzo.' '.$s_cap.' - '.$s_citta.' ('.strtoupper((string) $s_provincia).'</b>)
</td>';
} elseif (!empty($c_indirizzo) or !empty($c_cap) or !empty($c_citta) or !empty($c_provincia)) {
echo '
<td>
<p class="small-bold text-muted">'.tr('Indirizzo', [], ['upper' => true]).'</p>
<p class="small-bold text-muted">'.tr('Indirizzo', [], ['upper' => true]).':</p>
</td>
<td class="text-right">
'.$c_indirizzo.' '.$c_cap.' - '.$c_citta.' ('.strtoupper((string) $c_provincia).')
<td>
<b>'.$c_indirizzo.' '.$c_cap.' - '.$c_citta.' ('.strtoupper((string) $c_provincia).')</b>
</td>';
}
echo '
</tr>
<tr>
<td>
<p class="small-bold text-muted">'.tr('Attività n.', [], ['upper' => true]).'</p>
</td>
<td class="text-right">
'.$documento['codice'].'
<p class="small-bold text-muted">'.tr('Attività n.', [], ['upper' => true]).':</p>
</td>
<td>
<p class="small-bold text-muted">'.tr('Data richiesta', [], ['upper' => true]).'</p>
<b>'.$documento['codice'].'</b>
</td>
<td class="text-right">
'.Translator::dateToLocale($documento['data_richiesta']).'
<td>
<p class="small-bold text-muted">'.tr('Data richiesta', [], ['upper' => true]).':</p>
</td>
<td>
<b>'.Translator::dateToLocale($documento['data_richiesta']).'</b>
</td>
</tr>';
@ -86,16 +87,16 @@ if (!empty($preventivo) or !empty($contratto)) {
echo '
<tr>
<td>
<p class="small-bold text-muted">'.tr('Preventivo n.', [], ['upper' => true]).'</p>
</td>
<td class="text-right">
'.(!empty($preventivo) ? $preventivo['numero'].' del '.Translator::dateToLocale($preventivo['data_bozza']) : 'Nessuno').'
<p class="small-bold text-muted">'.tr('Preventivo n.', [], ['upper' => true]).':</p>
</td>
<td>
<p class="small-bold text-muted">'.tr('Contratto n.', [], ['upper' => true]).'</p>
<b>'.(!empty($preventivo) ? $preventivo['numero'].' del '.Translator::dateToLocale($preventivo['data_bozza']) : 'Nessuno').'</b>
</td>
<td class="text-right">
'.(!empty($contratto) ? $contratto['numero'].' del '.Translator::dateToLocale($contratto['data_bozza']) : 'Nessuno').'
<td>
<p class="small-bold text-muted">'.tr('Contratto n.', [], ['upper' => true]).':</p>
</td>
<td>
<b>'.(!empty($contratto) ? $contratto['numero'].' del '.Translator::dateToLocale($contratto['data_bozza']) : 'Nessuno').'</b>
</td>
</tr>';
}
@ -103,31 +104,31 @@ if (!empty($preventivo) or !empty($contratto)) {
echo '
<tr>
<td>
<p class="small-bold text-muted">'.tr('P.Iva', [], ['upper' => true]).'</p>
<p class="small-bold text-muted">'.tr('P.Iva', [], ['upper' => true]).':</p>
</td>
<td class="text-right">
'.strtoupper((string) $c_piva).'
<td >
<b>'.strtoupper((string) $c_piva).'</b>
</td>
<td>
<p class="small-bold text-muted">'.tr('C.F.', [], ['upper' => true]).'</p>
<p class="small-bold text-muted">'.tr('C.F.', [], ['upper' => true]).':</p>
</td>
<td class="text-right">
'.strtoupper((string) $c_codicefiscale).'
<td >
<b>'.strtoupper((string) $c_codicefiscale).'</b>
</td>
</tr>
<tr>
<td>
<p class="small-bold text-muted">'.tr('Telefono', [], ['upper' => true]).'</p>
</td>
<td class="text-right">
'.$c_telefono.'
<p class="small-bold text-muted">'.tr('Telefono', [], ['upper' => true]).':</p>
</td>
<td>
<p class="small-bold text-muted">'.tr('Cellulare', [], ['upper' => true]).'</p>
<b>'.$c_telefono.'</b>
</td>
<td class="text-right">
'.$c_cellulare.'
<td>
<p class="small-bold text-muted">'.tr('Cellulare', [], ['upper' => true]).':</p>
</td>
<td>
<b>'.$c_cellulare.'</b>
</td>
</tr>';
@ -141,16 +142,16 @@ for ($j = 0; $j < count($rs2); ++$j) {
echo '
<tr>
<td>
<p class="small-bold text-muted">'.tr('Impianti', [], ['upper' => true]).'</p>
</td>
<td class="text-right">
'.implode(', ', $impianti).'
<p class="small-bold text-muted">'.tr('Impianti', [], ['upper' => true]).':</p>
</td>
<td>
<p class="small-bold text-muted">'.tr('Tipo intervento', [], ['upper' => true]).'</p>
<b>'.implode(', ', $impianti).'</b>
</td>
<td class="text-right">
'.$documento->tipo->getTranslation('title').'
<td>
<p class="small-bold text-muted">'.tr('Tipo intervento', [], ['upper' => true]).':</p>
</td>
<td>
<b>'.$documento->tipo->getTranslation('title').'</b>
</td>
</tr>';
@ -159,9 +160,9 @@ echo '
echo '
<tr>
<td colspan="2">
<p class="small-bold text-muted">'.tr('Richiesta', [], ['upper' => true]).'</p>
<p class="small-bold">'.tr('Richiesta', [], ['upper' => true]).':</p>
</td>
<td style="width:350px" colspan="2" class="text-right">
<td style="width:350px" colspan="2">
<p>'.$documento['richiesta'].'</p>
</td>
</tr>';
@ -171,9 +172,9 @@ echo '
echo '
<tr>
<td colspan="2">
<p class="small-bold text-muted">'.tr('Descrizione', [], ['upper' => true]).'</p>
<p class="small-bold">'.tr('Descrizione', [], ['upper' => true]).':</p>
</td>
<td style="width:350px" colspan="2" class="text-right">
<td style="width:350px" colspan="2">
<p>'.$documento['descrizione'].'</p>
</td>
</tr>