This commit is contained in:
MatteoPistorello 2024-06-25 11:51:26 +02:00
commit 7be9848408
35 changed files with 89 additions and 57 deletions

View File

@ -498,8 +498,8 @@ if ($structure->permission == 'rw') {
if (post('op') != 'delete') {
$values = [];
foreach ($customs as $custom) {
if (post($custom['name']) !== null) {
$values[$custom['id']] = post($custom['name']);
if (post($custom['title']) !== null) {
$values[$custom['id']] = post($custom['title']);
} else {
$values[$custom['id']] = '';
}

View File

@ -62,10 +62,6 @@ $(document).ready(function(){
last = form.find(".box").last();
}
if (!last.length) {
last = form.find(".card").last();
}
if (!last.length) {
last = form.find(".row").eq(-2);
}

View File

@ -282,7 +282,7 @@ if (empty($record) || !$has_access) {
}
if (!last.length) {
last = form.find(".row").eq(-2);
last = form.find(".row").last();
}
// Campi a inizio form

View File

@ -103,7 +103,7 @@ if (!empty($options['create_document'])) {
if (in_array($final_module->id, [$id_module_fatt_vendita, $id_module_fatt_acquisto])) {
$stato_predefinito = StatoFattura::where('name', 'Bozza')->first()->id;
$fatt_differita_acquisto = Tipofattura::where('name', 'Fattura differita di acquisto')->first()->id;
$fatt_differita_vendita = Tipofattura::where('name', 'Fattura differita di vendita')->first()->id;;
$fatt_differita_vendita = Tipofattura::where('name', 'Fattura differita di vendita')->first()->id;
if (!empty($options['reversed'])) {
$idtipodocumento = database()->fetchOne('SELECT `co_tipidocumento`.`id` FROM `co_tipidocumento` LEFT JOIN `co_tipidocumento_lang` ON (`co_tipidocumento_lang`.`id_record` = `co_tipidocumento`.`id` AND `co_tipidocumento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `title` = "Nota di credito" AND `dir` = \''.$dir.'\'')['id'];

View File

@ -326,7 +326,7 @@ $dirs_to_check = [
$directories = [];
foreach ($dirs_to_check as $name => $description) {
$status = is_writable(base_dir().DIRECTORY_SEPARATOR.$name);
$directories[] = [
'name' => $name,
'description' => $description,

View File

@ -167,7 +167,6 @@ if (file_exists($extraction_dir.'/VERSION')) {
]));
flash()->error(tr('Installazione completata!'));
} else {
flash()->error(tr('Aggiornamento completato!'));
}
} else {
@ -194,7 +193,6 @@ if (file_exists($extraction_dir.'/VERSION')) {
]));
flash()->error(tr('Installazione completata!'));
} else {
flash()->error(tr('Aggiornamento completato!'));
}
}

View File

@ -228,7 +228,7 @@ if (in_array($id_azienda, $tipi_anagrafica)) {
</div>
<div class="col-md-4">
{[ "type": "select", "label": "<?php echo tr('Zona'); ?>", "name": "idzona", "values": "query=SELECT id, CONCAT_WS( ' - ', nome, descrizione) AS descrizione FROM an_zone ORDER BY descrizione ASC", "value": "$idzona$", "placeholder": "<?php echo tr('Nessuna zona'); ?>", "icon-after": "add|<?php echo Module::where('name', 'Zone')->first()->id ?>" ]}
{[ "type": "select", "label": "<?php echo tr('Zona'); ?>", "name": "idzona", "values": "query=SELECT id, CONCAT_WS( ' - ', nome, descrizione) AS descrizione FROM an_zone ORDER BY descrizione ASC", "value": "$idzona$", "placeholder": "<?php echo tr('Nessuna zona'); ?>", "icon-after": "add|<?php echo Module::where('name', 'Zone')->first()->id; ?>" ]}
</div>
<div class="col-md-4">

View File

@ -358,8 +358,8 @@ class CSV extends CSVImporter
$anagrafica->fill($record);
//Aggiorno le tipologie solo se sono state passate nel file
if( !empty($tipologie) ){
// Aggiorno le tipologie solo se sono state passate nel file
if (!empty($tipologie)) {
$anagrafica->tipologie = $tipologie;
}
$anagrafica->id_settore = $id_settore;

View File

@ -611,7 +611,7 @@ if (!empty($elementi)) {
]);
echo '
<li>'.Modules::link(($elemento['modulo'] == 'Interventi' ? 'Attività' : $elemento['modulo']), $elemento['id'], $descrizione).'</li>';
<li>'.Modules::link($elemento['modulo'] == 'Interventi' ? 'Attività' : $elemento['modulo'], $elemento['id'], $descrizione).'</li>';
}
echo '

View File

@ -145,4 +145,4 @@ echo '
</div>
</div>
</div>
</div>';
</div>';

View File

@ -22,7 +22,7 @@ use Models\Module;
$modulo_interventi = Module::where('name', 'Interventi')->first();
$modulo_preventivi = Module::where('name', 'Preventivi')->first();
$modulo_eventi =Module::where('name', 'Eventi')->first();
$modulo_eventi = Module::where('name', 'Eventi')->first();
if (!isset($user['idanagrafica'])) {
$user['idanagrafica'] = '';

View File

@ -301,7 +301,7 @@ switch ($op) {
}
$totale_documento = abs($totale_documento);
$totale_documento = $dati_generali['ImportoTotaleDocumento'] ?: $totale_documento;
$totale_documento = abs($dati_generali['ImportoTotaleDocumento']) ?: $totale_documento;
} catch (Exception) {
}

View File

@ -492,7 +492,7 @@ if ($fattura->stato->id != $id_stato_bozza && $fattura->stato->id != $id_stato_a
'.Modules::link('Scadenzario', $scadenze[0]['id'], tr('<i class="fa fa-edit tip" title="'.tr('Modifica scadenze').'"></i>'), '', 'class="btn btn-xs btn-primary"');
// Ricalcola scadenze disponibile solo per fatture di acquisto
if ($fattura->isFE() && $ricalcola && $module->getTranslation('title', \Models\Locale()->getPredefined()->id) == 'Fatture di acquisto') {
if ($fattura->isFE() && $ricalcola && !empty($module->where('name', 'Fatture di acquisto')->first()->id)) {
echo '
<button type="button" class="btn btn-info btn-xs pull-right tip" title="'.tr('Ricalcola le scadenze').'. '.tr('Per ricalcolare correttamente le scadenze, imposta la fattura di acquisto nello stato \'\'Bozza\'\' e correggi il documento come desiderato, poi re-imposta lo stato \'\'Emessa\'\' e utilizza questa funzione').'." id="ricalcola_scadenze">
<i class="fa fa-calculator" aria-hidden="true"></i>

View File

@ -535,7 +535,7 @@ class Fattura extends Document
{
$file = $this->getFatturaElettronica();
return !empty($this->progressivo_invio) && $file->filepath && file_exists($file->filepath);
return !empty($this->progressivo_invio) && $file->directory && file_exists('files/'.$file->directory);
}
/**

View File

@ -252,9 +252,8 @@ switch (post('op')) {
// Collegamenti intervento/impianti
$impianti = post('idimpianti');
if (!empty($impianti)) {
$impianti = array_unique([$impianti]);
foreach ($impianti as $impianto) {
foreach ($impianti as $impianto) {
if (!empty($impianto)) {
$dbo->insert('my_impianti_interventi', [
'idintervento' => $id_record,
'idimpianto' => $impianto,
@ -274,10 +273,12 @@ switch (post('op')) {
$check->save();
}
}
}
// Collegamenti intervento/componenti
$componenti = (array) post('componenti');
foreach ($componenti as $componente) {
// Collegamenti intervento/componenti
$componenti = (array) post('componenti');
foreach ($componenti as $componente) {
if ($componente) {
$dbo->insert('my_componenti_interventi', [
'id_intervento' => $id_record,
'id_componente' => $componente,

View File

@ -42,11 +42,11 @@ switch ($resource) {
`an_anagrafiche`
INNER JOIN `an_tipianagrafiche_anagrafiche` ON `an_anagrafiche`.`idanagrafica` = `an_tipianagrafiche_anagrafiche`.`idanagrafica`
INNER JOIN `an_tipianagrafiche` ON `an_tipianagrafiche_anagrafiche`.`idtipoanagrafica` = `an_tipianagrafiche`.`id`
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).")
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).')
WHERE
`an_anagrafiche`.`deleted_at` IS NULL AND `an_anagrafiche`.`enable_newsletter` = 1 AND 1=1
ORDER BY
`optgroup` ASC, `ragione_sociale` ASC";
`optgroup` ASC, `ragione_sociale` ASC';
$query = str_replace('1=1', !empty($where) ? replace($where, [
'|nome|' => 'ragione_sociale',

View File

@ -27,7 +27,7 @@ use Modules\Ordini\Ordine;
$documento = Ordine::find($id_record);
$module = Module::where('name', $documento->module)->first();
$module = Module::where('name', $documento->module)->first();
if (get('documento') == 'fattura') {
$final_module = $module->getTranslation('title', Models\Locale::getPredefined()->id) == 'Ordini cliente' ? 'Fatture di vendita' : 'Fatture di acquisto';

View File

@ -166,4 +166,4 @@ echo '
</div>
</div>
</div>
</div>';
</div>';

View File

@ -167,15 +167,16 @@ echo '
'label' => tr('Condizioni generali di fornitura'),
'name' => 'condizioni_fornitura',
'value' => $record['condizioni_fornitura'],
]); echo'
]);
echo '
</div>';
if ($user->gruppo != 'Clienti') {
echo '
if ($user->gruppo != 'Clienti') {
echo '
<div class="col-md-6">
{[ "type": "textarea", "label": "'.tr('Note interne').'", "name": "informazioniaggiuntive", "class": "autosize", "value": "$informazioniaggiuntive$", "extra": "rows=\'5\'" ]}
</div>';
}
}
?>
</div>
</div>

View File

@ -167,4 +167,3 @@ echo '
</div>
</div>
</div>';

View File

@ -131,12 +131,11 @@ class Mastrino extends Model
$database = database();
if ($documenti) {
foreach ($documenti as $id_documento) {
if (empty($id_documento)) {
continue;
} else {}
foreach ($documenti as $id_documento) {
if (empty($id_documento)) {
continue;
} else {
}
// Verifico se la fattura è stata pagata tutta, così imposto lo stato a "Pagato"
$totali = $database->fetchOne('SELECT SUM(pagato) AS tot_pagato, SUM(da_pagare) AS tot_da_pagare FROM co_scadenziario WHERE iddocumento='.prepare($id_documento));

View File

@ -21,11 +21,11 @@ namespace Modules\Scadenzario;
use Models\Module;
use Models\OperationLog;
use Models\PrintTemplate;
use Models\User;
use Modules\Emails\Mail;
use Modules\Emails\Template;
use Tasks\Manager;
use Models\PrintTemplate;
/**
* Task dedicato alla gestione del backup giornaliero automatico, se abilitato da Impostazioni.

View File

@ -17,6 +17,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
use Models\Module;
use Modules\Statistiche\Stats;
include_once __DIR__.'/../../core.php';
@ -27,7 +28,41 @@ $end = filter('end');
switch (filter('op')) {
case 'fatturato':
$results = $dbo->fetchArray('SELECT ROUND(SUM(IF(`reversed`=1, -(`co_righe_documenti`.`subtotale` - `co_righe_documenti`.`sconto`), (`co_righe_documenti`.`subtotale` - `co_righe_documenti`.`sconto`))), 2) AS result, YEAR(`co_documenti`.`data`) AS year, MONTH(`co_documenti`.`data`) AS month FROM `co_documenti` INNER JOIN `co_tipidocumento` ON `co_documenti`.`idtipodocumento`=`co_tipidocumento`.`id` LEFT JOIN `co_tipidocumento_lang` ON (`co_tipidocumento`.`id` = `co_tipidocumento_lang`.`id_record` AND `co_tipidocumento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') INNER JOIN `co_righe_documenti` ON `co_righe_documenti`.`iddocumento`=`co_documenti`.`id` INNER JOIN `zz_segments` ON `co_documenti`.`id_segment`=`zz_segments`.`id` WHERE `co_tipidocumento`.`dir`=\'entrata\' AND `co_tipidocumento_lang`.`title`!=\'Bozza\' AND `co_documenti`.`data` BETWEEN '.prepare($start).' AND '.prepare($end).' AND `is_fiscale`=1 AND `zz_segments`.`autofatture`=0 GROUP BY YEAR(`co_documenti`.`data`), MONTH(`co_documenti`.`data`) ORDER BY YEAR(`co_documenti`.`data`) ASC, MONTH(`co_documenti`.`data`) ASC');
if (empty(Module::where('name', 'Vendita al banco')->first()->id)) {
$results = $dbo->fetchArray('SELECT ROUND(SUM(IF(`reversed`=1, -(`co_righe_documenti`.`subtotale` - `co_righe_documenti`.`sconto`), (`co_righe_documenti`.`subtotale` - `co_righe_documenti`.`sconto`))), 2) AS result, YEAR(`co_documenti`.`data`) AS year, MONTH(`co_documenti`.`data`) AS month FROM `co_documenti` INNER JOIN `co_tipidocumento` ON `co_documenti`.`idtipodocumento`=`co_tipidocumento`.`id` LEFT JOIN `co_tipidocumento_lang` ON (`co_tipidocumento`.`id` = `co_tipidocumento_lang`.`id_record` AND `co_tipidocumento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') INNER JOIN `co_righe_documenti` ON `co_righe_documenti`.`iddocumento`=`co_documenti`.`id` INNER JOIN `zz_segments` ON `co_documenti`.`id_segment`=`zz_segments`.`id` WHERE `co_tipidocumento`.`dir`=\'entrata\' AND `co_tipidocumento`.`name`!=\'Bozza\' AND `co_documenti`.`data` BETWEEN '.prepare($start).' AND '.prepare($end).' AND `is_fiscale`=1 AND `zz_segments`.`autofatture`=0 GROUP BY YEAR(`co_documenti`.`data`), MONTH(`co_documenti`.`data`) ORDER BY YEAR(`co_documenti`.`data`) ASC, MONTH(`co_documenti`.`data`) ASC');
} else {
$results = $dbo->fetchArray('
SELECT
ROUND(SUM(IF(`reversed`=1, -(`co_righe_documenti`.`subtotale` - `co_righe_documenti`.`sconto`), (`co_righe_documenti`.`subtotale` - `co_righe_documenti`.`sconto`))), 2) AS result,
YEAR(`co_documenti`.`data`) AS year,
MONTH(`co_documenti`.`data`) AS month
FROM
`co_documenti`
INNER JOIN `co_tipidocumento` ON `co_documenti`.`idtipodocumento`=`co_tipidocumento`.`id`
LEFT JOIN `co_tipidocumento_lang` ON (`co_tipidocumento`.`id` = `co_tipidocumento_lang`.`id_record` AND `co_tipidocumento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).')
INNER JOIN `co_righe_documenti` ON `co_righe_documenti`.`iddocumento`=`co_documenti`.`id`
INNER JOIN `zz_segments` ON `co_documenti`.`id_segment`=`zz_segments`.`id`
WHERE
`co_tipidocumento`.`dir`=\'entrata\'
AND `co_tipidocumento`.`name`!=\'Bozza\'
AND `co_documenti`.`data` BETWEEN '.prepare($start).' AND '.prepare($end).'
AND `is_fiscale`=1
AND `zz_segments`.`autofatture`=0
GROUP BY
YEAR(`co_documenti`.`data`), MONTH(`co_documenti`.`data`)
UNION
SELECT
ROUND(SUM(`vb_righe_venditabanco`.`subtotale` - `vb_righe_venditabanco`.`sconto`), 2) AS result,
YEAR(`vb_venditabanco`.`data`) AS year,
MONTH(`vb_venditabanco`.`data`) AS month
FROM
`vb_venditabanco`
INNER JOIN `vb_righe_venditabanco` ON `vb_righe_venditabanco`.`idvendita`=`vb_venditabanco`.`id`
GROUP BY
YEAR(`vb_venditabanco`.`data`), MONTH(`vb_venditabanco`.`data`)');
}
$results = Stats::monthly($results, $start, $end);

View File

@ -367,7 +367,7 @@ switch (filter('op')) {
break;
case 'informazioni-fe':
$info = s;
$info = Cache::where('name', 'Informazioni su spazio FE')->first();
if (!$info->isValid()) {
$response = Services::request('POST', 'informazioni_fe');

View File

@ -63,7 +63,7 @@ echo '
</div>
<div class="col-md-6">
{[ "type": "textarea", "label": "'.tr('Query personalizzata').'", "name": "options2", "value": '.json_encode(str_replace(']}', '] }', ($record->options2 ?: ''))).', "class": "autosize", "help": "'.tr('La query in sostituzione a quella di default: custom, menu oppure SQL').'" ]}
{[ "type": "textarea", "label": "'.tr('Query personalizzata').'", "name": "options2", "value": '.json_encode(str_replace(']}', '] }', $record->options2 ?: '')).', "class": "autosize", "help": "'.tr('La query in sostituzione a quella di default: custom, menu oppure SQL').'" ]}
</div>
</div>';

View File

@ -452,9 +452,9 @@ class FatturaOrdinaria extends FatturaElettronica
$riep_imp += $riepilogo['Imposta'];
}
$diff_iva = round($riep_imp - $fattura->iva, 2);
$diff_iva = round(abs($riep_imp) - abs($fattura->iva), 2);
$diff = round(abs($fattura->totale_imponibile) - abs($totale_righe + $tot_arr), 2);
$diff_tot = round($fattura->totale_imponibile + $fattura->rivalsa_inps - $totale_imp + $tot_arr, 2);
$diff_tot = round($fattura->totale_imponibile + $fattura->rivalsa_inps - abs($totale_imp) + $tot_arr, 2);
$iva_arrotondamento = database()->fetchOne('SELECT * FROM `co_iva` WHERE `percentuale`= 0 AND `deleted_at` IS NULL LIMIT 1');

View File

@ -19,8 +19,8 @@
use Modules\Anagrafiche\Anagrafica;
use Modules\Articoli\Articolo;
use Plugins\ListinoFornitori\DettaglioFornitore;
use Plugins\ListinoClienti\DettaglioPrezzo;
use Plugins\ListinoFornitori\DettaglioFornitore;
include_once __DIR__.'/../../core.php';
@ -64,7 +64,7 @@ switch (filter('op')) {
->where('dir', 'uscita')
->get();
foreach($prezzi_fornitori as $prezzo) {
foreach ($prezzi_fornitori as $prezzo) {
$prezzo->delete();
}

View File

@ -469,7 +469,7 @@ class Gestore
// Salvataggio del file
file_put_contents(base_dir().'/'.$file, $content);
} catch (\Exception $e) {
} catch (\Exception) {
}
// File per il pagamento delle vendite Bonifico

View File

@ -62,7 +62,7 @@ echo '
</form>';
if (!empty($id_contratto_precedente)) {
echo '
echo '
<table class="table table-hover table-condensed table-bordered table-striped">
<thead>
<tr>

View File

@ -20,11 +20,11 @@
namespace API\App\v1\Flash;
use API\App\v1\AllegatiInterventi;
use API\App\v1\CampiPersonalizzatiValori;
use API\App\v1\Clienti;
use API\App\v1\Interventi;
use API\App\v1\RigheInterventi;
use API\App\v1\SessioniInterventi;
use API\App\v1\CampiPersonalizzatiValori;
use API\Interfaces\UpdateInterface;
use API\Resource;
use Carbon\Carbon;

View File

@ -49,7 +49,7 @@ class ButtonManager implements ManagerInterface
protected function getInfo($options)
{
if ($options['type'] == 'print') {
$print = PrintTemplate::where('name',$options['id'])->first();
$print = PrintTemplate::where('name', $options['id'])->first();
if (empty($print)) {
$print = PrintTemplate::find($options['id']);

View File

@ -99,7 +99,7 @@ class FieldManager implements ManagerInterface
}
$result .= '
<div class="col-xs-4">
<div class="col-md-4">
'.$field['content'].'
</div>';

View File

@ -234,7 +234,7 @@ class Query
}
} else {
$search_filters[] = ($search_query.' = '.prepare($value));
}
}
} elseif ($notequal) {
$value = trim(str_replace(['!='], '', $value));
$search_filters[] = ($search_query.' != '.prepare($value).' AND '.$search_query.' NOT LIKE '.prepare('% '.$value).' AND '.$search_query.' NOT LIKE '.prepare($value.' %').' AND '.$search_query.' NOT LIKE '.prepare('% '.$value.' %'));

View File

@ -8,4 +8,4 @@ $has_name = database()->columnExists('zz_groups', 'name');
if ($has_name && $has_nome) {
$database->query('ALTER TABLE `zz_groups` DROP `name`');
}
}

View File

@ -66,3 +66,6 @@ INSERT INTO `zz_settings_lang` (`id`, `id_lang`, `id_record`, `title`, `help`, `
INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `created_at`, `order`) VALUES (NULL, 'Indirizzo email mancato pagamento dopo i solleciti', '', 'string', '1', 'Scadenzario', NULL, '4');
INSERT INTO `zz_settings_lang` (`id`, `id_lang`, `id_record`, `title`, `help`, `created_at`) VALUES (NULL, (SELECT `valore` FROM `zz_settings` WHERE `nome` = 'Lingua'), (SELECT `id` FROM `zz_settings` WHERE `nome`='Indirizzo email mancato pagamento dopo i solleciti'), 'Indirizzo email mancato pagamento dopo i solleciti', '', NULL);
-- Ripristino impostazione per limitare la visualizzazione degli impianti a quelli gestiti dal tecnico
INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`, `help`) VALUES (NULL, 'Limita la visualizzazione degli impianti a quelli gestiti dal tecnico', '0', 'boolean', '1', 'Applicazione', '9', '');