1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2025-02-17 03:51:06 +01:00
This commit is contained in:
loviuz 2020-01-13 13:00:51 +01:00
commit ddede4dc30
14 changed files with 80 additions and 62 deletions

View File

@ -13,12 +13,9 @@ abstract class Document extends Model
*/
public function getRighe()
{
$descrizioni = $this->descrizioni;
$righe = $this->righe;
$articoli = $this->articoli;
$sconti = $this->sconti;
$results = $this->mergeCollections($this->descrizioni, $this->righe, $this->articoli, $this->sconti);
return $descrizioni->merge($righe)->merge($articoli)->merge($sconti)->sortBy('order');
return $results->sortBy('order');
}
/**
@ -174,6 +171,20 @@ abstract class Document extends Model
$this->setRelations([]);
}
/**
* Costruisce una nuova collezione Laravel a partire da quelle indicate.
*
* @param array<\Illuminate\Support\Collection> ...$args
*
* @return \Illuminate\Support\Collection
*/
protected function mergeCollections(...$args)
{
$collection = collect($args);
return $collection->collapse();
}
/**
* Calcola la somma degli attributi indicati come parametri.
* Il metodo **non** deve essere adattato per ulteriori funzionalità: deve esclusivamente calcolare la somma richiesta in modo esplicito dagli argomenti.

View File

@ -1,6 +1,6 @@
<?php
if (in_array($id_cliente, $tipi_anagrafica) or in_array($id_fornitore, $tipi_anagrafica) ) {
if (in_array($id_cliente, $tipi_anagrafica) or in_array($id_fornitore, $tipi_anagrafica)) {
echo '
<div class="btn-group">
<button type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-magic"></i>
@ -9,8 +9,8 @@ if (in_array($id_cliente, $tipi_anagrafica) or in_array($id_fornitore, $tipi_an
</button>
<ul class="dropdown-menu dropdown-menu-right">';
if (in_array($id_cliente, $tipi_anagrafica)){
echo '
if (in_array($id_cliente, $tipi_anagrafica)) {
echo '
<li><a data-toggle="modal" data-title="'.tr('Aggiungi intervento').'" data-href="add.php?id_module='.Modules::get('Interventi')['id'].'&idanagrafica='.$record['idanagrafica'].'"><i class="fa fa-wrench"></i>'.tr('Nuovo intervento').'
</a></li>
@ -28,11 +28,10 @@ echo '
<li><a data-toggle="modal" data-title="'.tr('Aggiungi fattura di vendita').'" data-href="add.php?id_module='.Modules::get('Fatture di vendita')['id'].'&idanagrafica='.$record['idanagrafica'].'"><i class="fa fa-file"></i>'.tr('Nuova fattura di vendita').'
</a></li>';
}
}
if (in_array($id_fornitore, $tipi_anagrafica)){
echo '<li><a data-toggle="modal" data-title="'.tr('Aggiungi ordine fornitore').'" data-href="add.php?id_module='.Modules::get('Ordini fornitore')['id'].'&idanagrafica='.$record['idanagrafica'].'"><i class="fa fa-file-o fa-flip-horizontal"></i>'.tr('Nuovo ordine fornitore').'
if (in_array($id_fornitore, $tipi_anagrafica)) {
echo '<li><a data-toggle="modal" data-title="'.tr('Aggiungi ordine fornitore').'" data-href="add.php?id_module='.Modules::get('Ordini fornitore')['id'].'&idanagrafica='.$record['idanagrafica'].'"><i class="fa fa-file-o fa-flip-horizontal"></i>'.tr('Nuovo ordine fornitore').'
</a></li>
<li><a data-toggle="modal" data-title="'.tr('Aggiungi ddt entrata').'" data-href="add.php?id_module='.Modules::get('Ddt di acquisto')['id'].'&idanagrafica='.$record['idanagrafica'].'"><i class="fa fa-truck fa-flip-horizontal"></i>'.tr('Nuovo ddt in entrata').'
@ -40,11 +39,9 @@ if (in_array($id_fornitore, $tipi_anagrafica)){
<li><a data-toggle="modal" data-title="'.tr('Aggiungi fattura di acquisto').'" data-href="add.php?id_module='.Modules::get('Fatture di acquisto')['id'].'&idanagrafica='.$record['idanagrafica'].'"><i class="fa fa-file fa-flip-horizontal"></i>'.tr('Nuova fattura di acquisto').'
</a></li>';
}
}
echo '
echo '
</ul>
</div>';
}

View File

@ -10,7 +10,7 @@ switch (post('op')) {
$module = filter('module');
$list = [
['Codice', 'Ragione sociale', 'Partita IVA', 'Codice destinatario' ,'Nazione', 'Indirizzo', 'CAP', 'Città', 'Provincia', 'Telefono', 'Fax', 'Cellulare', 'Email', 'PEC', 'IBAN', 'Note', 'Tipologia'],
['Codice', 'Ragione sociale', 'Partita IVA', 'Codice destinatario', 'Nazione', 'Indirizzo', 'CAP', 'Città', 'Provincia', 'Telefono', 'Fax', 'Cellulare', 'Email', 'PEC', 'IBAN', 'Note', 'Tipologia'],
['00001', 'Mia anagrafica', '12345678910', '1234567', 'ITALIA', 'Via Giuseppe Mazzini, 123', '12345', 'Este', 'PD', '+39 0429 60 25 12', '+39 0429 456 781', '+39 321 12 34 567', 'email@anagrafica.it', 'pec@anagrafica.it', 'IT60 X054 2811 1010 0000 0123 456', 'Note dell\'anagrafica di esempio', 'Cliente,Fornitore'],
];
@ -75,12 +75,11 @@ switch (post('op')) {
if (empty($anagrafica)) {
$anagrafica = Anagrafica::build($dati_anagrafica['ragione_sociale']);
}
// Impedisco di aggiornare la mia anagrafica azienda
if ($dati_anagrafica[$primary_key] != $id_azienda) {
//se non imposto nessun codice evito di resettare quello calcolato automaticamente o già presente
if (empty($dati_anagrafica['codice'])){
if (empty($dati_anagrafica['codice'])) {
unset($dati_anagrafica['codice']);
}
@ -106,7 +105,7 @@ return [
'names' => [
'Codice interno',
'Numero',
]
],
],
[
'field' => 'ragione_sociale',
@ -114,7 +113,7 @@ return [
'names' => [
'Nome',
'Denominazione',
]
],
],
[
'field' => 'codice_destinatario',
@ -125,7 +124,7 @@ return [
'Codice univoco',
'Codice univoco ufficio',
'SDI',
]
],
],
[
'field' => 'provincia',
@ -137,7 +136,7 @@ return [
'names' => [
'Citt_',
'Citt&agrave;',
]
],
],
[
'field' => 'telefono',
@ -170,7 +169,7 @@ return [
'E-mail',
'Indirizzo email',
'Mail',
]
],
],
[
'field' => 'pec',
@ -179,7 +178,7 @@ return [
'E-mail PEC',
'Email certificata',
'Indirizzo email certificata',
]
],
],
[
'field' => 'codice_fiscale',
@ -204,7 +203,7 @@ return [
'P.IVA',
'P.IVA/TAX ID',
'TAX ID',
]
],
],
[
'field' => 'codiceiban',
@ -215,7 +214,7 @@ return [
'label' => 'Note',
'names' => [
'Note Extra',
]
],
],
[
'field' => 'id_nazione',

View File

@ -61,9 +61,8 @@ if (!empty($record['is_fiscale'])) {
//Aggiunta insoluto
if (!empty($record['riba']) && ($record['stato'] == 'Emessa' || $record['stato'] == 'Parzialmente pagato' || $record['stato'] == 'Pagato') && $dir == 'entrata') {
$disabled1 = 0;
}
?>
<a class="btn btn-primary <?php echo ( empty($disabled1) ) ? '' : 'disabled'; ?>" data-href="<?php echo $rootdir; ?>/add.php?id_module=<?php echo Modules::get('Prima nota')['id']; ?>&id_documenti=<?php echo $id_record; ?>&single=1&is_insoluto=1" data-title="<?php echo tr('Registra insoluto'); ?>" ><i class="fa fa-ban fa-inverse"></i> <?php echo tr('Registra insoluto'); ?></a>
} ?>
<a class="btn btn-primary <?php echo (empty($disabled1)) ? '' : 'disabled'; ?>" data-href="<?php echo $rootdir; ?>/add.php?id_module=<?php echo Modules::get('Prima nota')['id']; ?>&id_documenti=<?php echo $id_record; ?>&single=1&is_insoluto=1" data-title="<?php echo tr('Registra insoluto'); ?>" ><i class="fa fa-ban fa-inverse"></i> <?php echo tr('Registra insoluto'); ?></a>
<?php
// Aggiunta prima nota solo se non c'è già, se non si è in bozza o se il pagamento non è completo
@ -75,14 +74,12 @@ if (!empty($record['is_fiscale'])) {
$disabled2 = 1;
if (($n2 <= 0 && $record['stato'] == 'Emessa') || $differenza != 0) {
$disabled2 = 0;
}
?>
} ?>
<a class="btn btn-primary <?php echo (!empty(Modules::get('Prima nota')) and empty($disabled2) ) ? '' : 'disabled'; ?>" data-href="<?php echo $rootdir; ?>/add.php?id_module=<?php echo Modules::get('Prima nota')['id']; ?>&id_documenti=<?php echo $id_record; ?>&single=1" data-title="<?php echo tr('Registra contabile'); ?>" > <i class="fa fa-euro"></i> <?php echo tr('Registra contabile'); ?></a>
<a class="btn btn-primary <?php echo (!empty(Modules::get('Prima nota')) and empty($disabled2)) ? '' : 'disabled'; ?>" data-href="<?php echo $rootdir; ?>/add.php?id_module=<?php echo Modules::get('Prima nota')['id']; ?>&id_documenti=<?php echo $id_record; ?>&single=1" data-title="<?php echo tr('Registra contabile'); ?>" > <i class="fa fa-euro"></i> <?php echo tr('Registra contabile'); ?></a>
<?php
if ($record['stato'] == 'Pagato') {
echo '
<button type="button" class="btn btn-primary ask tip" data-msg="'.tr('Se riapri questa fattura verrà azzerato lo scadenzario e la prima nota. Continuare?').'" data-method="post" data-op="reopen" data-backto="record-edit" data-title="'.tr('Riaprire la fattura?').'" title="'.tr('Riporta la fattura in stato bozza e ne elimina i movimenti contabili').'">

View File

@ -127,7 +127,7 @@ if ($dir == 'entrata' && !empty($fattura->dichiarazione) && $fattura->stato->des
{[ "type": "hidden", "label": "Segmento", "name": "id_segment", "class": "text-center", "value": "$id_segment$" ]}
<div class="col-md-2">
{[ "type": "text", "label": "<?php echo $label; ?>", "name": "numero_esterno", "class": "text-center", "value": "$numero_esterno$", "help": "<?php echo (!empty($record['numero_esterno']) and $dir=='entrata' ) ? '' : tr('Il numero della fattura sarà generato automaticamente in fase di emissione.'); ?>" ]}
{[ "type": "text", "label": "<?php echo $label; ?>", "name": "numero_esterno", "class": "text-center", "value": "$numero_esterno$", "help": "<?php echo (!empty($record['numero_esterno']) and $dir == 'entrata') ? '' : tr('Il numero della fattura sarà generato automaticamente in fase di emissione.'); ?>" ]}
</div>
<div class="col-md-2">

View File

@ -35,7 +35,7 @@ echo '
<div class="col-md-4">
{[ "type": "select", "label": "'.tr('Tipo attività').'", "name": "idtipointerventot", "value": "'.$sessione['idtipointervento'].'", "required": 1, "values": "query=SELECT in_tipiintervento.idtipointervento AS id, descrizione, in_tariffe.costo_ore AS prezzo_ore_unitario, in_tariffe.costo_km AS prezzo_km_unitario, in_tariffe.costo_dirittochiamata AS prezzo_dirittochiamata FROM in_tipiintervento JOIN in_tariffe ON in_tipiintervento.idtipointervento = in_tariffe.idtipointervento WHERE in_tariffe.idtecnico = '.prepare($sessione['idtecnico']).' ORDER BY descrizione" ]}
</div>
<div class="col-md-4">
{[ "type": "timestamp", "label": "'.tr('Inizio attività').'", "name": "orario_inizio", "required": 1, "value": "'.$sessione['orario_inizio'].'" ]}
</div>
@ -54,35 +54,33 @@ echo '
{[ "type": "number", "label": "'.tr('Km').'", "name": "km", "value": "'.$sessione['km'].'"]}
</div>';
$hide = '';
if ($show_costi) {
$hide = 'hide';
}
$class = $show_costi ? '' : 'hide';
// Sconto ore
echo '
<div class="col-md-4 '.$hide.'" >
<div class="col-md-4 '.$class.'" >
{[ "type": "number", "label": "'.tr('Sconto ore').'", "name": "sconto", "value": "'.$sessione['sconto_unitario'].'", "icon-after": "choice|untprc|'.$sessione['tipo_sconto'].'"]}
</div>';
// Sconto km
echo '
<div class="col-md-4 '.$hide.'">
<div class="col-md-4 '.$class.'">
{[ "type": "number", "label": "'.tr('Sconto km').'", "name": "sconto_km", "value": "'.$sessione['scontokm_unitario'].'", "icon-after": "choice|untprc|'.$sessione['tipo_sconto_km'].'"]}
</div>';
echo'
</div>
<div class="row">
<div class="col-md-4 '.$hide.'">
<div class="col-md-4 '.$class.'">
{[ "type": "number", "label": "'.tr('Addebito orario').'", "name": "prezzo_ore_unitario", "value": "'.$sessione['prezzo_ore_unitario'].'" ]}
</div>
<div class="col-md-4 '.$hide.'">
<div class="col-md-4 '.$class.'">
{[ "type": "number", "label": "'.tr('Addebito km').'", "name": "prezzo_km_unitario", "value": "'.$sessione['prezzo_km_unitario'].'" ]}
</div>
<div class="col-md-4 '.$hide.'">
<div class="col-md-4 '.$class.'">
{[ "type": "number", "label": "'.tr('Addebito diritto ch.').'", "name": "prezzo_dirittochiamata", "value": "'.$sessione['prezzo_dirittochiamata'].'" ]}
</div>';
@ -113,7 +111,7 @@ $(document).ready(function () {
$("#idtipointerventot").change(function() {
data = $(this).selectData();
$("#prezzo_ore_unitario").val(data.prezzo_ore_unitario);
$("#prezzo_km_unitario").val(data.prezzo_km_unitario);
$("#prezzo_dirittochiamata").val(data.prezzo_dirittochiamata);

View File

@ -94,7 +94,7 @@ class Intervento extends Document
{
$results = parent::getRigheContabili();
return $results->merge($this->sessioni);
return $this->mergeCollections($results, $this->sessioni);
}
// Relazioni Eloquent

View File

@ -2,7 +2,7 @@
include_once __DIR__.'/../../../core.php';
$rs = $dbo->fetchArray('SELECT * FROM in_interventi WHERE in_interventi.idstatointervento = (SELECT in_statiintervento.idstatointervento FROm in_statiintervento WHERE in_statiintervento.codice=\'WIP\') ORDER BY data_richiesta ASC');
$rs = $dbo->fetchArray('SELECT * FROM in_interventi WHERE in_interventi.idstatointervento = (SELECT in_statiintervento.idstatointervento FROM in_statiintervento WHERE in_statiintervento.codice=\'WIP\') ORDER BY data_richiesta ASC');
if (!empty($rs)) {
echo '

View File

@ -2,7 +2,7 @@
include_once __DIR__.'/../../../core.php';
$rs = $dbo->fetchArray('SELECT * FROM in_interventi WHERE in_interventi.idstatointervento = (SELECT in_statiintervento.idstatointervento FROm in_statiintervento WHERE in_statiintervento.codice=\'TODO\') ORDER BY data_richiesta ASC');
$rs = $dbo->fetchArray('SELECT * FROM in_interventi WHERE in_interventi.idstatointervento = (SELECT in_statiintervento.idstatointervento FROM in_statiintervento WHERE in_statiintervento.codice=\'TODO\') ORDER BY data_richiesta ASC');
if (!empty($rs)) {
echo '

View File

@ -29,36 +29,48 @@ class Pagamento extends Model
$results = [];
$count = 0;
foreach ($rate as $key => $rata) {
$date = new DateTime($data);
// X giorni esatti
if ($rata['giorno'] == 0) {
$scadenza = date('Y-m-d', strtotime($data.' +'.$rata['num_giorni'].' day'));
// Offset della rata
$date->modify('+'.($rata['num_giorni']).' day');
}
// Ultimo del mese
elseif ($rata['giorno'] < 0) {
$date = new DateTime($data);
// Offset della rata in mesi
$add = floor($rata['num_giorni'] / 30);
for ($c = 0; $c < $add; ++$c) {
$date->modify('last day of next month');
}
// Ultimo del mese più X giorni
// Opzione ultimo del mese più X giorni
$giorni = -$rata['giorno'] - 1;
if ($giorni > 0) {
$date->modify('+'.($giorni).' day');
} else {
$date->modify('last day of this month');
}
$scadenza = $date->format('Y-m-d');
}
// Giorno preciso del mese
else {
$scadenza = date('Y-m-'.$rata['giorno'], strtotime($data.' +'.$rata['num_giorni'].' day'));
// Offset della rata
$date->modify('+'.($rata['num_giorni']).' day');
// Individuazione giorno effettivo (se il giorno indicato è eccessivamente grande, viene preso il massimo possibile)
$date->modify('last day of this month');
$last_day = $date->format('d');
$day = $rata['giorno'] > $last_day ? $last_day : $rata['giorno'];
// Correzione data
$date->setDate($date->format('Y'), $date->format('m'), $day);
}
// Comversione della data in stringa standard
$scadenza = $date->format('Y-m-d');
// All'ultimo ciclo imposto come cifra da pagare il totale della fattura meno gli importi già inseriti in scadenziario per evitare di inserire cifre arrotondate "male"
if ($count + 1 == $number) {
$da_pagare = sum($importo, -$totale, 2);

View File

@ -188,7 +188,7 @@ class Query
$value = trim(str_replace(['&lt;', '=', '&gt;'], '', $value));
if ($more || $minus){
if ($more || $minus) {
$search_filters[] = 'CAST('.$search_query.' AS UNSIGNED) '.$sign.' '.prepare($value);
} else {
$search_filters[] = $search_query.' = '.prepare($value);

View File

@ -66,7 +66,7 @@ foreach ($righe as $riga) {
// Aggiunta dei riferimenti ai documenti
if (setting('Riferimento dei documenti nelle stampe')) {
$ref = doc_references($r, $record['dir'], ['iddocumento']);
$ref = doc_references($r, $record['dir'], ['idddt']);
if (!empty($ref)) {
echo '

View File

@ -13,5 +13,6 @@ $id_cliente = $documento['idanagrafica'];
$id_sede = $documento['idsede'];
//Se utente tencico e ho deciso di non mostrare i prezzi al tencico mi assicuro che non li possa vedere dalla stampa
if (Auth::user()['gruppo'] == 'Tecnici' and $options['pricing'] == true and setting('Mostra i prezzi al tecnico') == 0)
$options['pricing'] = false;
if (Auth::user()['gruppo'] == 'Tecnici' and $options['pricing'] == true and setting('Mostra i prezzi al tecnico') == 0) {
$options['pricing'] = false;
}

View File

@ -12,6 +12,9 @@ $database->query('UPDATE `zz_operations` SET `id_email` = NULL');
foreach ($logs as $log) {
$user = User::find($log['id_utente']);
$template = Template::find($log['id_email']);
if (empty($template)) {
continue;
}
$mail = Mail::build($user, $template, $log['id_record']);
$mail->resetPrints();