Formattazione stile codice

This commit is contained in:
Pek5892 2023-08-04 14:54:28 +02:00
parent 9e63a1bc90
commit 6f3140bba5
318 changed files with 2264 additions and 2685 deletions

1
.php-cs-fixer.cache Normal file

File diff suppressed because one or more lines are too long

26
.php-cs-fixer.php Normal file
View File

@ -0,0 +1,26 @@
<?php
$finder = PhpCsFixer\Finder::create()
->files()
->exclude('.couscous')
->exclude('node_modules')
->exclude('vendor')
->exclude('tests')
->ignoreDotFiles(true)
->ignoreVCS(true)
->in(__DIR__);
$config = new PhpCsFixer\Config();
$config->setRules([
'@Symfony' => true,
'array_syntax' => ['syntax' => 'short'],
'yoda_style' => false,
'echo_tag_syntax' => ['format' => 'long'],
'ordered_imports' => true,
'no_alternative_syntax' => true,
'ordered_class_elements' => true,
'phpdoc_order' => true,
])
->setFinder($finder);
return $config;

33
.php_cs
View File

@ -1,33 +0,0 @@
<?php
$finder = PhpCsFixer\Finder::create()
->files()
->exclude('.couscous')
->exclude('node_modules')
->exclude('vendor')
->exclude('tests')
->ignoreDotFiles(true)
->ignoreVCS(true)
->in(__DIR__);
$config = PhpCsFixer\Config::create()
->setRules([
'@Symfony' => true,
'array_syntax' => ['syntax' => 'short'],
'yoda_style' => false,
'no_short_echo_tag' => true,
'ordered_imports' => true,
'no_alternative_syntax' => true,
'ordered_class_elements' => true,
'phpdoc_order' => true,
//'no_superfluous_phpdoc_tags' => [
// 'allow_mixed' => true,
// 'allow_unused_params' => true,
//],
//'phpdoc_add_missing_param_annotation' => [
// 'only_untyped' => false,
//],
])
->setFinder($finder);
return $config;

View File

@ -54,26 +54,22 @@ if (filter('op') == 'aggiungi-allegato' || filter('op') == 'rimuovi-allegato') {
// Gestione delle operazioni // Gestione delle operazioni
else { else {
//UPLOAD PER CKEDITOR //UPLOAD PER CKEDITOR
if (filter('op') == 'aggiungi-allegato' && !empty($_FILES) && !empty($_FILES['upload']['name'])) { if (filter('op') == 'aggiungi-allegato' && !empty($_FILES) && !empty($_FILES['upload']['name'])) {
$CKEditor = get('CKEditor'); $CKEditor = get('CKEditor');
$funcNum = get('CKEditorFuncNum'); $funcNum = get('CKEditorFuncNum');
$allowed_extension = [
$allowed_extension = array( 'png', 'jpg', 'jpeg',
"png","jpg","jpeg" ];
);
//Maximum file limit (unit: byte) //Maximum file limit (unit: byte)
$max_size='2097152'; //2MB $max_size = '2097152'; //2MB
// Get image file extension // Get image file extension
$file_extension = pathinfo($_FILES["upload"]["name"], PATHINFO_EXTENSION); $file_extension = pathinfo($_FILES['upload']['name'], PATHINFO_EXTENSION);
if(in_array(strtolower($file_extension),$allowed_extension) && $_FILES["upload"]['size']<$max_size){
if (in_array(strtolower($file_extension), $allowed_extension) && $_FILES['upload']['size'] < $max_size) {
$upload = Uploads::upload($_FILES['upload'], [ $upload = Uploads::upload($_FILES['upload'], [
'name' => filter('nome_allegato'), 'name' => filter('nome_allegato'),
'category' => filter('categoria'), 'category' => filter('categoria'),
@ -82,12 +78,12 @@ if (filter('op') == 'aggiungi-allegato' || filter('op') == 'rimuovi-allegato') {
]); ]);
// Upload da form // Upload da form
if (!empty($funcNum) ){ if (!empty($funcNum)) {
echo ' echo '
<link rel="stylesheet" type="text/css" href="'.$baseurl.'/assets/dist/css/app.min.css" /> <link rel="stylesheet" type="text/css" href="'.$baseurl.'/assets/dist/css/app.min.css" />
<script src="'.$baseurl.'/assets/dist/js/app.min.js"></script>'; <script src="'.$baseurl.'/assets/dist/js/app.min.js"></script>';
} }
// Creazione file fisico // Creazione file fisico
if (!empty($upload)) { if (!empty($upload)) {
//flash()->info(tr('File caricato correttamente!')); //flash()->info(tr('File caricato correttamente!'));
@ -98,11 +94,11 @@ if (filter('op') == 'aggiungi-allegato' || filter('op') == 'rimuovi-allegato') {
$response = [ $response = [
'fileName' => basename($upload->filepath), 'fileName' => basename($upload->filepath),
'uploaded' => 1, 'uploaded' => 1,
'url' => $upload->filepath 'url' => $upload->filepath,
]; ];
// Upload da form // Upload da form
if (!empty($funcNum) ){ if (!empty($funcNum)) {
echo ' echo '
<script type="text/javascript"> <script type="text/javascript">
$(document).ready(function() { $(document).ready(function() {
@ -111,26 +107,20 @@ if (filter('op') == 'aggiungi-allegato' || filter('op') == 'rimuovi-allegato') {
}); });
</script>'; </script>';
} }
// Copia-incolla // Copia-incolla
else { else {
echo json_encode($response); echo json_encode($response);
} }
} else { } else {
//flash()->error(tr('Errore durante il caricamento del file!')); //flash()->error(tr('Errore durante il caricamento del file!'));
echo '<script type="text/javascript"> window.parent.toastr.error("'.tr('Errore durante il caricamento del file!').'"); </script>'; echo '<script type="text/javascript"> window.parent.toastr.error("'.tr('Errore durante il caricamento del file!').'"); </script>';
} }
} else {
}else{
//flash()->error(tr('Estensione non permessa!')); //flash()->error(tr('Estensione non permessa!'));
echo '<script type="text/javascript"> window.parent.toastr.error("'.tr('Estensione non permessa').'"); </script>'; echo '<script type="text/javascript"> window.parent.toastr.error("'.tr('Estensione non permessa').'"); </script>';
} }
exit(); exit();
} }
@ -184,7 +174,7 @@ elseif (filter('op') == 'download-allegato') {
// Zip allegati // Zip allegati
elseif (filter('op') == 'download-zip-allegati') { elseif (filter('op') == 'download-zip-allegati') {
$rs = $dbo->fetchArray('SELECT * FROM zz_files WHERE id_module='.prepare($id_module).' AND id IN('.implode(',',json_decode(filter('id'))).')'); $rs = $dbo->fetchArray('SELECT * FROM zz_files WHERE id_module='.prepare($id_module).' AND id IN('.implode(',', json_decode(filter('id'))).')');
$dir = base_dir().'/'.$module->upload_directory; $dir = base_dir().'/'.$module->upload_directory;
directory($dir.'tmp/'); directory($dir.'tmp/');
@ -223,8 +213,8 @@ elseif (filter('op') == 'download-zip-allegati') {
// Modifica dati di un allegato // Modifica dati di un allegato
elseif (filter('op') == 'modifica-allegato') { elseif (filter('op') == 'modifica-allegato') {
$id_allegati = explode(';',filter('id_allegati')); $id_allegati = explode(';', filter('id_allegati'));
if (sizeof($id_allegati) == 1) { if (sizeof($id_allegati) == 1) {
$upload = Upload::find($id_allegati[0]); $upload = Upload::find($id_allegati[0]);
$upload->name = post('nome_allegato'); $upload->name = post('nome_allegato');
@ -477,7 +467,7 @@ HTMLBuilder\HTMLBuilder::setRecord($record);
if ($structure->permission == 'rw') { if ($structure->permission == 'rw') {
// Esecuzione delle operazioni di gruppo // Esecuzione delle operazioni di gruppo
if (!empty(post('id_records'))){ if (!empty(post('id_records'))) {
$id_records = post('id_records'); $id_records = post('id_records');
$id_records = is_array($id_records) ? $id_records : explode(';', $id_records); $id_records = is_array($id_records) ? $id_records : explode(';', $id_records);
$id_records = array_clean($id_records); $id_records = array_clean($id_records);

View File

@ -80,7 +80,7 @@ if (!empty($query)) {
$align = []; $align = [];
$row = isset($rows[0]) ? $rows[0] : []; $row = isset($rows[0]) ? $rows[0] : [];
foreach ($row as $field => $value) { foreach ($row as $field => $value) {
if (!empty($value)){ if (!empty($value)) {
$value = trim($value); $value = trim($value);
} }

View File

@ -65,4 +65,4 @@ if (json_last_error() == JSON_ERROR_NONE) {
// Stampa dei risultati // Stampa dei risultati
echo $response; echo $response;
Auth::logout(); Auth::logout();

View File

@ -27,7 +27,6 @@ $db_options = [
//'sort_buffer_size' => '2M', //'sort_buffer_size' => '2M',
]; ];
// Percorso della cartella di backup // Percorso della cartella di backup
$backup_dir = __DIR__.'/backup/'; $backup_dir = __DIR__.'/backup/';

View File

@ -68,7 +68,7 @@ $in_esecuzione = Cache::pool('Cron in esecuzione');
$cron_id = Cache::pool('ID del cron'); $cron_id = Cache::pool('ID del cron');
$disattiva = Cache::pool('Disabilita cron'); $disattiva = Cache::pool('Disabilita cron');
if ($disattiva->content || (in_array($_SERVER['HTTP_HOST'],['localhost', '127.0.0.1']) && !$forza_cron_localhost)) { if ($disattiva->content || (in_array($_SERVER['HTTP_HOST'], ['localhost', '127.0.0.1']) && !$forza_cron_localhost)) {
return; return;
} }

View File

@ -40,7 +40,7 @@ if (!empty($id_record)) {
Util\Query::setSegments(true); Util\Query::setSegments(true);
} }
// Rimozione della condizione deleted_at IS NULL per visualizzare anche i record eliminati // Rimozione della condizione deleted_at IS NULL per visualizzare anche i record eliminati
if (!empty($query)){ if (!empty($query)) {
if (preg_match('/[`]*([a-z0-9_]*)[`]*[\.]*([`]*deleted_at[`]* IS NULL)/i', $query, $m)) { if (preg_match('/[`]*([a-z0-9_]*)[`]*[\.]*([`]*deleted_at[`]* IS NULL)/i', $query, $m)) {
$conditions_to_remove = []; $conditions_to_remove = [];
@ -170,12 +170,12 @@ if (empty($record) || !$has_access) {
{( "name": "button", "type": "email", "id_module": "'.$id_module.'", "id_plugin": "'.$id_plugin.'", "id_record": "'.$id_record.'" )}'; {( "name": "button", "type": "email", "id_module": "'.$id_module.'", "id_plugin": "'.$id_plugin.'", "id_record": "'.$id_record.'" )}';
if (Modules::get('Account SMS')) { if (Modules::get('Account SMS')) {
echo ' echo '
{( "name": "button", "type": "sms", "id_module": "'.$id_module.'", "id_plugin": "'.$id_plugin.'", "id_record": "'.$id_record.'" )}'; {( "name": "button", "type": "sms", "id_module": "'.$id_module.'", "id_plugin": "'.$id_plugin.'", "id_record": "'.$id_record.'" )}';
} }
echo ' echo '
<div class="btn-group" id="save-buttons"> <div class="btn-group" id="save-buttons">
<a class="btn btn-success" id="'.(!empty($record['deleted_at']) ? 'restore' : 'save').'"> <a class="btn btn-success" id="'.(!empty($record['deleted_at']) ? 'restore' : 'save').'">

View File

@ -329,12 +329,12 @@ foreach ($righe as $i => $riga) {
echo '&nbsp;'.nl2br($descrizione); echo '&nbsp;'.nl2br($descrizione);
if( $riga->isArticolo() ){ if ($riga->isArticolo()) {
$dettaglio_fornitore = DettaglioFornitore::where('id_articolo', $riga->idarticolo) $dettaglio_fornitore = DettaglioFornitore::where('id_articolo', $riga->idarticolo)
->where('id_fornitore', $documento->idanagrafica) ->where('id_fornitore', $documento->idanagrafica)
->first(); ->first();
if( !empty($dettaglio_fornitore->codice_fornitore) ){ if (!empty($dettaglio_fornitore->codice_fornitore)) {
echo ' echo '
<br><small class="text-muted">'.tr('Codice fornitore ').': '.$dettaglio_fornitore->codice_fornitore.'</small>'; <br><small class="text-muted">'.tr('Codice fornitore ').': '.$dettaglio_fornitore->codice_fornitore.'</small>';
} }
@ -352,7 +352,6 @@ foreach ($righe as $i => $riga) {
} }
} }
echo ' echo '
</td>'; </td>';

View File

@ -36,7 +36,7 @@ echo '
// Quantità // Quantità
echo ' echo '
<div class="col-md-'.$width.'"> <div class="col-md-'.$width.'">
{[ "type": "number", "label": "'.tr('Q.tà').'", "name": "qta", "required": 1, "value": "'.abs((float) $result['qta']).'", "decimals": "qta"'.(isset($result['max_qta']) ? ', "icon-after": "<span class=\"tip\" title=\"'.tr("L'elemento è collegato a un documento: la quantità massima ammessa è relativa allo stato di evasione dell'elemento nel documento di origine (quantità dell'elemento / quantità massima ammessa)").'\">/ '.numberFormat(abs((float) $result['max_qta']), 'qta').' <i class=\"fa fa-question-circle-o\"></i></span>"' : '').', "min-value": "'.abs((float) $result['qta_evasa']).'" ]} {[ "type": "number", "label": "'.tr('Q.tà').'", "name": "qta", "required": 1, "value": "'.abs((float) $result['qta']).'", "decimals": "qta"'.(isset($result['max_qta']) ? ', "icon-after": "<span class=\"tip\" title=\"'.tr("L'elemento è collegato a un documento: la quantità massima ammessa è relativa allo stato di evasione dell'elemento nel documento di origine (quantità dell'elemento / quantità massima ammessa)").'\">/ '.numberFormat(abs((float) $result['max_qta']), 'qta').' <i class=\"fa fa-question-circle-o\"></i></span>"' : '').', "min-value": "'.abs((float) $result['qta_evasa']).'" ]}
</div>'; </div>';
// Unità di misura // Unità di misura
@ -47,9 +47,9 @@ echo '
// Unità di misura // Unità di misura
if ($options['dir'] == 'uscita' && $articolo['fattore_um_secondaria']) { if ($options['dir'] == 'uscita' && $articolo['fattore_um_secondaria']) {
echo ' echo '
<div class="col-md-3"> <div class="col-md-3">
{[ "type": "number", "label": "'.tr('Q.tà secondaria').'", "name": "fattore_um_secondaria", "value": "'.abs((float)$articolo['fattore_um_secondaria'] * $result['qta']).'", "icon-after": "'.$articolo['um_secondaria'].'" ]} {[ "type": "number", "label": "'.tr('Q.tà secondaria').'", "name": "fattore_um_secondaria", "value": "'.abs((float) $articolo['fattore_um_secondaria'] * $result['qta']).'", "icon-after": "'.$articolo['um_secondaria'].'" ]}
</div> </div>
<script> <script>
@ -216,9 +216,9 @@ if ($options['dir'] == 'entrata') {
<div class="row"> <div class="row">
<div class="col-md-4 margine"></div> <div class="col-md-4 margine"></div>
<div class="col-md-4 prezzi"></div>'; <div class="col-md-4 prezzi"></div>';
// Provvigione // Provvigione
echo ' echo '
<div class="col-md-4"> <div class="col-md-4">
<div class="sconto"></div> <div class="sconto"></div>
{[ "type": "number", "label": "'.tr('Provvigione unitaria').'", "name": "provvigione", "value": "'.($result['provvigione_percentuale'] ?: ($result['provvigione_unitaria'] ?: $result['provvigione_default'])).'", "icon-after": "choice|untprc|'.($result['tipo_provvigione'] ?: $result['tipo_provvigione_default']).'", "help": "'.tr('Provvigione destinata all\'agente.').'", "min-value": "0" ]} {[ "type": "number", "label": "'.tr('Provvigione unitaria').'", "name": "provvigione", "value": "'.($result['provvigione_percentuale'] ?: ($result['provvigione_unitaria'] ?: $result['provvigione_default'])).'", "icon-after": "choice|untprc|'.($result['tipo_provvigione'] ?: $result['tipo_provvigione_default']).'", "help": "'.tr('Provvigione destinata all\'agente.').'", "min-value": "0" ]}
@ -378,4 +378,4 @@ if (in_array($module['name'], ['Fatture di vendita', 'Fatture di acquisto'])) {
} }
} }
</script>'; </script>';
} }

View File

@ -179,19 +179,14 @@ if (post('db_host') !== null) {
} }
// Continua con l'esecuzione delle operazioni previste // Continua con l'esecuzione delle operazioni previste
else { else {
// Creazione manifest.json // Creazione manifest.json
include_once App::filepath('include/init', 'manifest.php'); include_once App::filepath('include/init', 'manifest.php');
redirect(base_path().'/index.php'); redirect(base_path().'/index.php');
exit(); exit();
} }
} }
} }
// Controlla che i parametri di configurazione permettano l'accesso al database // Controlla che i parametri di configurazione permettano l'accesso al database
if ((file_exists('config.inc.php') || $valid_config) && !$dbo->isConnected()) { if ((file_exists('config.inc.php') || $valid_config) && !$dbo->isConnected()) {
echo ' echo '
@ -200,7 +195,7 @@ if ((file_exists('config.inc.php') || $valid_config) && !$dbo->isConnected()) {
<h3 class="box-title">'.tr('Impossibile connettersi al database').'</h3> <h3 class="box-title">'.tr('Impossibile connettersi al database').'</h3>
</div> </div>
<div class="box-body"> <div class="box-body">
<p>'.tr("Si è verificato un errore durante la connessione al database").'.</p> <p>'.tr('Si è verificato un errore durante la connessione al database').'.</p>
<p>'.tr('Controllare di aver inserito correttamente i dati di accesso, e che il database atto ad ospitare i dati del gestionale sia esistente').'.</p> <p>'.tr('Controllare di aver inserito correttamente i dati di accesso, e che il database atto ad ospitare i dati del gestionale sia esistente').'.</p>
<a class="btn btn-info" href="'.base_path().'/index.php"><i class="fa fa-repeat"></i> '.tr('Riprova').'</a> <a class="btn btn-info" href="'.base_path().'/index.php"><i class="fa fa-repeat"></i> '.tr('Riprova').'</a>
</div> </div>

View File

@ -20,15 +20,14 @@
$creation = file_put_contents('manifest.json', ''); $creation = file_put_contents('manifest.json', '');
if (!$creation) { if (!$creation) {
$manifest = '{ $manifest = '{
"dir" : "ltr", "dir" : "ltr",
"lang" : "'.((empty($lang) || $lang == '|lang|') ? 'it-IT' : str_replace('_','-',$lang)).'", "lang" : "'.((empty($lang) || $lang == '|lang|') ? 'it-IT' : str_replace('_', '-', $lang)).'",
"name" : "'.tr('OpenSTAManager').'", "name" : "'.tr('OpenSTAManager').'",
"scope" : "'.((empty(base_path()) || base_path()=='/') ? '' : '.').'", "scope" : "'.((empty(base_path()) || base_path() == '/') ? '' : '.').'",
"display" : "fullscreen", "display" : "fullscreen",
"start_url" : "'.((empty(base_path()) || base_path()=='/') ? '/' : './').'", "start_url" : "'.((empty(base_path()) || base_path() == '/') ? '/' : './').'",
"short_name" : "OSM", "short_name" : "OSM",
"theme_color" : "transparent", "theme_color" : "transparent",
"description" : "'.tr('OpenSTAManager').'", "description" : "'.tr('OpenSTAManager').'",
@ -44,11 +43,8 @@ if (!$creation) {
] ]
}'; }';
file_put_contents('manifest.json', $manifest); file_put_contents('manifest.json', $manifest);
} else {
}else{
echo ' echo '
<div class="box box-center box-danger box-solid text-center"> <div class="box box-center box-danger box-solid text-center">
<div class="box-header with-border"> <div class="box-header with-border">
@ -61,5 +57,3 @@ if (!$creation) {
</div> </div>
</div>'; </div>';
} }

View File

@ -45,7 +45,6 @@ foreach ($modules as $name => $values) {
//PHP //PHP
$settings = [ $settings = [
'php_version' => [ 'php_version' => [
'type' => 'version', 'type' => 'version',
'description' => '7.3.x - 8.0.x, consigliato almeno 7.4.x', 'description' => '7.3.x - 8.0.x, consigliato almeno 7.4.x',
@ -107,7 +106,7 @@ $settings = [
'type' => 'value', 'type' => 'value',
'description' => 1, 'description' => 1,
], ],
'upload_max_filesize' => [ 'upload_max_filesize' => [
'type' => 'value', 'type' => 'value',
'description' => '>32M', 'description' => '>32M',
@ -122,7 +121,6 @@ $settings = [
'type' => 'value', 'type' => 'value',
'description' => '>5000', 'description' => '>5000',
], ],
]; ];
$php = []; $php = [];
@ -130,14 +128,12 @@ foreach ($settings as $name => $values) {
$description = $values['description']; $description = $values['description'];
if ($values['type'] == 'version') { if ($values['type'] == 'version') {
$description = tr('Valore consigliato: _VALUE_ (Valore attuale: _PHP_VERSION_)', [ $description = tr('Valore consigliato: _VALUE_ (Valore attuale: _PHP_VERSION_)', [
'_VALUE_' => $description, '_VALUE_' => $description,
'_PHP_VERSION_' => phpversion(), '_PHP_VERSION_' => phpversion(),
]); ]);
$status = ((version_compare(phpversion(), $values['minimum'], ">=") && version_compare(phpversion(), $values['maximum'], "<=")) ? 1 : 0); $status = ((version_compare(phpversion(), $values['minimum'], '>=') && version_compare(phpversion(), $values['maximum'], '<=')) ? 1 : 0);
} elseif ($values['type'] == 'ext') { } elseif ($values['type'] == 'ext') {
$status = extension_loaded($name); $status = extension_loaded($name);
} else { } else {
@ -166,12 +162,12 @@ foreach ($settings as $name => $values) {
$type = ($values['type'] == 'ext') ? tr('Estensione') : tr('Impostazione'); $type = ($values['type'] == 'ext') ? tr('Estensione') : tr('Impostazione');
if ($values['type'] == 'ext'){ if ($values['type'] == 'ext') {
$type = tr('Estensione'); $type = tr('Estensione');
}elseif ($values['type'] == 'version') { } elseif ($values['type'] == 'version') {
$type = tr('Versione'); $type = tr('Versione');
}else{ } else {
$type = tr('Impostazione'); $type = tr('Impostazione');
} }
$php[] = [ $php[] = [
@ -183,26 +179,23 @@ foreach ($settings as $name => $values) {
} }
// MySQL // MySQL
if ($database->isInstalled()){ if ($database->isInstalled()) {
$db = [ $db = [
'mysql_version' => [ 'mysql_version' => [
'type' => 'version', 'type' => 'version',
'description' => '5.7.x - 8.0.x', 'description' => '5.7.x - 8.0.x',
'minimum' => '5.7.0', 'minimum' => '5.7.0',
'maximum' => '8.0.99', 'maximum' => '8.0.99',
], ],
'sort_buffer_size' => [ 'sort_buffer_size' => [
'type' => 'value', 'type' => 'value',
'description' => '>2M', 'description' => '>2M',
], ],
]; ];
/*foreach (App::getConfig()['db_options'] as $n => $v){ /*foreach (App::getConfig()['db_options'] as $n => $v){
switch ($n){ switch ($n){
case 'sort_buffer_size': case 'sort_buffer_size':
$db[$n] = [ $db[$n] = [
@ -211,40 +204,36 @@ if ($database->isInstalled()){
]; ];
break; break;
} }
}*/
}*/
} }
foreach ($db as $name => $values) { foreach ($db as $name => $values) {
$description = $values['description']; $description = $values['description'];
if ($values['type'] == 'version') { if ($values['type'] == 'version') {
$type = tr('Versione');
$type = tr('Versione');
$description = tr('Valore consigliato: _VALUE_ (Valore attuale: _MYSQL_VERSION_)', [ $description = tr('Valore consigliato: _VALUE_ (Valore attuale: _MYSQL_VERSION_)', [
'_VALUE_' => $description, '_VALUE_' => $description,
'_MYSQL_VERSION_' => $database->getMySQLVersion(), '_MYSQL_VERSION_' => $database->getMySQLVersion(),
]); ]);
$status = ((version_compare($database->getMySQLVersion(), $values['minimum'], ">=") && version_compare($database->getMySQLVersion(), $values['maximum'], "<=")) ? 1 : 0); $status = ((version_compare($database->getMySQLVersion(), $values['minimum'], '>=') && version_compare($database->getMySQLVersion(), $values['maximum'], '<=')) ? 1 : 0);
} else {
$type = tr('Impostazione');
} else{
$type = tr('Impostazione');
//Vedo se riesco a recuperare l'impostazione dalle variabili di sessione o globali di mysql //Vedo se riesco a recuperare l'impostazione dalle variabili di sessione o globali di mysql
$rs_session_variabile = $dbo->fetchArray('SHOW SESSION VARIABLES LIKE '.prepare($name)); $rs_session_variabile = $dbo->fetchArray('SHOW SESSION VARIABLES LIKE '.prepare($name));
$rs_global_variabile = $dbo->fetchArray('SHOW GLOBAL VARIABLES LIKE '.prepare($name)); $rs_global_variabile = $dbo->fetchArray('SHOW GLOBAL VARIABLES LIKE '.prepare($name));
if (!empty($rs_session_variabile[0]['Value'])) if (!empty($rs_session_variabile[0]['Value'])) {
$inc = $rs_session_variabile[0]['Value']; $inc = $rs_session_variabile[0]['Value'];
else if (!empty($rs_global_variabile[0]['Value'])) } elseif (!empty($rs_global_variabile[0]['Value'])) {
$inc = $rs_global_variabile[0]['Value']; $inc = $rs_global_variabile[0]['Value'];
else } else {
$inc = str_replace(['k', 'M'], ['000', '000000'], App::getConfig()['db_options'][$name]); $inc = str_replace(['k', 'M'], ['000', '000000'], App::getConfig()['db_options'][$name]);
}
$real = str_replace(['k', 'M'], ['000', '000000'], $description); $real = str_replace(['k', 'M'], ['000', '000000'], $description);
if (string_starts_with($real, '>')) { if (string_starts_with($real, '>')) {
@ -261,12 +250,10 @@ foreach ($db as $name => $values) {
$description = str_replace(['>', '<'], '', $description); $description = str_replace(['>', '<'], '', $description);
} }
$description = tr('Valore consigliato: _VALUE_ (Valore attuale: _INC_)', [ $description = tr('Valore consigliato: _VALUE_ (Valore attuale: _INC_)', [
'_VALUE_' => $description, '_VALUE_' => $description,
'_INC_' => \Util\FileSystem::formatBytes($inc), '_INC_' => \Util\FileSystem::formatBytes($inc),
]); ]);
} }
$mysql[] = [ $mysql[] = [
@ -277,7 +264,6 @@ foreach ($db as $name => $values) {
]; ];
} }
// Percorsi di servizio // Percorsi di servizio
$dirs_to_check = [ $dirs_to_check = [
'backup' => tr('Necessario per il salvataggio dei backup'), 'backup' => tr('Necessario per il salvataggio dei backup'),
@ -298,7 +284,6 @@ foreach ($dirs_to_check as $name => $description) {
]; ];
} }
// File di servizio // File di servizio
$files_to_check = [ $files_to_check = [
'manifest.json' => tr('Necessario per l\'aggiunta a schermata home da terminale (creato al termine della configurazione)'), 'manifest.json' => tr('Necessario per l\'aggiunta a schermata home da terminale (creato al termine della configurazione)'),
@ -319,7 +304,6 @@ foreach ($files_to_check as $name => $description) {
]; ];
} }
// Configurazioni OSM // Configurazioni OSM
$config_to_check = [ $config_to_check = [
'lang' => [ 'lang' => [
@ -349,42 +333,36 @@ $config_to_check = [
'value_to_check' => '|time|', 'value_to_check' => '|time|',
'suggested_value' => 'H:i', 'suggested_value' => 'H:i',
'section' => 'formatter', 'section' => 'formatter',
] ],
]; ];
$config = []; $config = [];
foreach ($config_to_check as $name => $values) { foreach ($config_to_check as $name => $values) {
$type = $values['type']; $type = $values['type'];
if ($type == 'value') { if ($type == 'value') {
$description = tr('Valore consigliato: _SUGGESTED_ (Valore attuale: _ACTUAL_)', [ $description = tr('Valore consigliato: _SUGGESTED_ (Valore attuale: _ACTUAL_)', [
'_SUGGESTED_' => $values['suggested_value'], '_SUGGESTED_' => $values['suggested_value'],
'_ACTUAL_' => (!empty($values['section'])? ${$values['section']}[$name] : $$name), '_ACTUAL_' => (!empty($values['section']) ? ${$values['section']}[$name] : $$name),
]); ]);
} }
$status = ($values['operator']((!empty($values['section']) ? ${$values['section']}[$name] : $$name), $values['value_to_check']) ? 1 : 0); $status = ($values['operator']((!empty($values['section']) ? ${$values['section']}[$name] : $$name), $values['value_to_check']) ? 1 : 0);
$config[] = [ $config[] = [
'name' => $name, 'name' => $name,
'description' => $description, 'description' => $description,
'status' => $status, 'status' => $status,
'type' => tr('Configurazione'), 'type' => tr('Configurazione'),
]; ];
} }
$requirements = [ $requirements = [
tr('Apache') => $apache, tr('Apache') => $apache,
tr('PHP (_VERSION_ _SUPPORTED_)', [ tr('PHP (_VERSION_ _SUPPORTED_)', [
'_VERSION_' => phpversion(), '_VERSION_' => phpversion(),
'_SUPPORTED_' => ( ( version_compare(phpversion(), $settings['php_version']['minimum'], ">=") && version_compare(phpversion(), $settings['php_version']['maximum'], "<=") ) ? '' : '<small><small class="label label-danger" ><i class="fa fa-warning"></i> '.tr('versioni supportate:').' '.$settings['php_version']['description'].'</small></small>') '_SUPPORTED_' => ((version_compare(phpversion(), $settings['php_version']['minimum'], '>=') && version_compare(phpversion(), $settings['php_version']['maximum'], '<=')) ? '' : '<small><small class="label label-danger" ><i class="fa fa-warning"></i> '.tr('versioni supportate:').' '.$settings['php_version']['description'].'</small></small>'),
]) => $php, ]) => $php,
tr('MySQL') => $mysql, tr('MySQL') => $mysql,
tr('Percorsi di servizio') => $directories, tr('Percorsi di servizio') => $directories,
@ -392,11 +370,10 @@ $requirements = [
tr('Configurazioni') => $config, tr('Configurazioni') => $config,
]; ];
if (!$database->isInstalled() || empty($mysql)){ if (!$database->isInstalled() || empty($mysql)) {
unset($requirements['MySQL']); unset($requirements['MySQL']);
} }
// Tabelle di riepilogo // Tabelle di riepilogo
foreach ($requirements as $key => $values) { foreach ($requirements as $key => $values) {
$statuses = array_column($values, 'status'); $statuses = array_column($values, 'status');

View File

@ -123,7 +123,7 @@ if (filter('action') == 'do_update') {
<h3 class="box-title">'.tr('Aggiornamento in corso!').'</h3> <h3 class="box-title">'.tr('Aggiornamento in corso!').'</h3>
</div> </div>
<div class="box-body"> <div class="box-body">
<p>'.tr("Il software si trova attualmente nella fase di aggiornamento, potrebbero volerci fino a 10 minuti, siete pregati di attendere sino alla sua conclusione").'.</p> <p>'.tr('Il software si trova attualmente nella fase di aggiornamento, potrebbero volerci fino a 10 minuti, siete pregati di attendere sino alla sua conclusione').'.</p>
<p>'.tr("In caso di problemi rivolgersi all'amministratore di sistema o all'assistenza del gestionale").'.</p> <p>'.tr("In caso di problemi rivolgersi all'amministratore di sistema o all'assistenza del gestionale").'.</p>
<a class="btn btn-info" href="'.base_path().'/index.php"><i class="fa fa-repeat"></i> '.tr('Riprova').'</a> <a class="btn btn-info" href="'.base_path().'/index.php"><i class="fa fa-repeat"></i> '.tr('Riprova').'</a>
</div> </div>

View File

@ -19,12 +19,12 @@
use Models\Upload; use Models\Upload;
$id_allegati = (array)json_decode(filter('id_allegati')); $id_allegati = (array) json_decode(filter('id_allegati'));
// Form di inserimento riga documento // Form di inserimento riga documento
echo ' echo '
<form action="" method="post" id="modifica-allegato"> <form action="" method="post" id="modifica-allegato">
<input type="hidden" name="id_allegati" value="'.implode(';',$id_allegati).'"> <input type="hidden" name="id_allegati" value="'.implode(';', $id_allegati).'">
<input type="hidden" name="backto" value="record-edit"> <input type="hidden" name="backto" value="record-edit">
<input type="hidden" name="op" value="modifica-allegato"> <input type="hidden" name="op" value="modifica-allegato">

View File

@ -26,7 +26,7 @@ $user = Auth::user();
$pageTitle = !empty($pageTitle) ? $pageTitle : $structure->title; $pageTitle = !empty($pageTitle) ? $pageTitle : $structure->title;
$lang = (empty($lang) || $lang == '|lang|' ) ? 'it_IT' : $lang; $lang = (empty($lang) || $lang == '|lang|') ? 'it_IT' : $lang;
$messages = flash()->getMessages(); $messages = flash()->getMessages();
@ -406,8 +406,8 @@ if (Auth::check()) {
<p style="padding:10px 15px;">&nbsp;</p> <p style="padding:10px 15px;">&nbsp;</p>
</li>'; </li>';
if ($user->gruppo == 'Amministratori') { if ($user->gruppo == 'Amministratori') {
echo ' echo '
<li class="dropdown notifications-menu nav-button"> <li class="dropdown notifications-menu nav-button">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-bell-o"></i> <i class="fa fa-bell-o"></i>
@ -433,9 +433,9 @@ if (Auth::check()) {
<li class="nav-button"><a href="'.base_path().'/log.php" class="tip nav-button" title="'.tr('Log accessi').'"> <li class="nav-button"><a href="'.base_path().'/log.php" class="tip nav-button" title="'.tr('Log accessi').'">
<i class="fa fa-book"></i> <i class="fa fa-book"></i>
</a></li>'; </a></li>';
} }
echo ' echo '
<li class="nav-button"><a data-href="'.base_path().'/shortcuts.php" data-title="'.tr('Scorciatoie da tastiera').'" class="tip nav-button" title="'.tr('Scorciatoie').'"> <li class="nav-button"><a data-href="'.base_path().'/shortcuts.php" data-title="'.tr('Scorciatoie da tastiera').'" class="tip nav-button" title="'.tr('Scorciatoie').'">
<i class="fa fa-keyboard-o"></i> <i class="fa fa-keyboard-o"></i>
</a></li> </a></li>
@ -518,18 +518,16 @@ if (Auth::check()) {
if (!empty($id_record)) { if (!empty($id_record)) {
$plugins = $dbo->fetchArray('SELECT id, title, options, options2 FROM zz_plugins WHERE idmodule_to='.prepare($id_module)." AND position='tab' AND enabled = 1 ORDER BY zz_plugins.order DESC"); $plugins = $dbo->fetchArray('SELECT id, title, options, options2 FROM zz_plugins WHERE idmodule_to='.prepare($id_module)." AND position='tab' AND enabled = 1 ORDER BY zz_plugins.order DESC");
foreach ($plugins as $plugin) { foreach ($plugins as $plugin) {
//Badge count per record plugin //Badge count per record plugin
$count = 0; $count = 0;
$opt = ''; $opt = '';
if (!empty($plugin['options2'])){ if (!empty($plugin['options2'])) {
$opt = json_decode($plugin['options2'], true); $opt = json_decode($plugin['options2'], true);
}else if (!empty($plugin['options'])){ } elseif (!empty($plugin['options'])) {
$opt = json_decode($plugin['options'], true); $opt = json_decode($plugin['options'], true);
} }
if (!empty($opt)){ if (!empty($opt)) {
$q = str_replace('|id_parent|', $id_record, $opt['main_query'][0]['query']); $q = str_replace('|id_parent|', $id_record, $opt['main_query'][0]['query']);
$count = $dbo->fetchNum($q); $count = $dbo->fetchNum($q);
} }
@ -538,7 +536,7 @@ if (Auth::check()) {
<li data-toggle="control-sidebar" class="btn-default" > <li data-toggle="control-sidebar" class="btn-default" >
<a data-toggle="tab" href="#tab_'.$plugin['id'].'" id="link-tab_'.$plugin['id'].'"> <a data-toggle="tab" href="#tab_'.$plugin['id'].'" id="link-tab_'.$plugin['id'].'">
'.$plugin['title'].' '.$plugin['title'].'
<span class="badge pull-right">'.($count>0 ? $count: '').'</span> <span class="badge pull-right">'.($count > 0 ? $count : '').'</span>
</a> </a>
</li>'; </li>';
} }
@ -557,7 +555,6 @@ if (Auth::check()) {
</li>'; </li>';
} }
// Tab per le checklist // Tab per le checklist
if ($structure->permission != '-' && $structure->use_checklists) { if ($structure->permission != '-' && $structure->use_checklists) {
$checklists_unchecked = $structure->recordChecks($id_record)->where('checked_at', null); $checklists_unchecked = $structure->recordChecks($id_record)->where('checked_at', null);
@ -567,7 +564,7 @@ if (Auth::check()) {
<li data-toggle="control-sidebar" class="btn-default"> <li data-toggle="control-sidebar" class="btn-default">
<a class="bg-info" data-toggle="tab" href="#tab_checks" id="link-tab_checks"> <a class="bg-info" data-toggle="tab" href="#tab_checks" id="link-tab_checks">
'.tr('Checklist').' '.tr('Checklist').'
'.(($checklists_total->count() > 0) ? '.(($checklists_total->count() > 0) ?
'<span class="badge pull-right">'.$checklists_unchecked->count().tr(' / ').($checklists_total->count()).'</span>' : '').' '<span class="badge pull-right">'.$checklists_unchecked->count().tr(' / ').($checklists_total->count()).'</span>' : '').'
</a> </a>
</li>'; </li>';
@ -680,6 +677,6 @@ if ($free_space < ($space_limit * (1024 ** 3))) {
'_TOT_' => FileSystem::formatBytes($free_space), '_TOT_' => FileSystem::formatBytes($free_space),
]).'.</p> ]).'.</p>
<p>'.tr('Questo può risultare un serio problema per la continuità di funzionamento del software, poiché le operazioni più espansive che richiedono spazio di archiviazione possono causare malfunzionamenti imprevisti').'. '.tr('Ad esempio, le attività di backup, caricamento di allegati o anche l\'utilizzo normale del gestionale potrebbero rendere i dati inaffidabili, provocando pertanto una perdita delle informazioni salvate').'.</p> <p>'.tr('Questo può risultare un serio problema per la continuità di funzionamento del software, poiché le operazioni più espansive che richiedono spazio di archiviazione possono causare malfunzionamenti imprevisti').'. '.tr('Ad esempio, le attività di backup, caricamento di allegati o anche l\'utilizzo normale del gestionale potrebbero rendere i dati inaffidabili, provocando pertanto una perdita delle informazioni salvate').'.</p>
<p>'.tr("Contatta gli amministratori di sistema per risolvere al più presto il problema").'.</p> <p>'.tr('Contatta gli amministratori di sistema per risolvere al più presto il problema').'.</p>
</div>'; </div>';
} }

View File

@ -62,7 +62,7 @@ switch ($op) {
Auth::logout(); Auth::logout();
redirect(base_path().'/index.php'); redirect(base_path().'/index.php');
exit(); exit();
} }
if (Auth::check() && isset($dbo) && $dbo->isConnected() && $dbo->isInstalled()) { if (Auth::check() && isset($dbo) && $dbo->isConnected() && $dbo->isInstalled()) {

View File

@ -245,4 +245,3 @@ function getSegmentPredefined($id_module)
return $id_segment; return $id_segment;
} }

View File

@ -132,7 +132,8 @@ function copyr($source, $destination, $ignores = [])
try { try {
$fs->chmod($destination, 0777, 0000, true); $fs->chmod($destination, 0777, 0000, true);
} catch (IOException $e) {} } catch (IOException $e) {
}
foreach ($files as $file) { foreach ($files as $file) {
$filename = rtrim($destination, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR.$file->getRelativePathname(); $filename = rtrim($destination, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR.$file->getRelativePathname();

View File

@ -274,7 +274,7 @@ function currency()
*/ */
function moneyFormat($number, $decimals = null) function moneyFormat($number, $decimals = null)
{ {
if (setting('Posizione del simbolo valuta') == 'Prima'){ if (setting('Posizione del simbolo valuta') == 'Prima') {
return tr('_CURRENCY_ _TOTAL_', [ return tr('_CURRENCY_ _TOTAL_', [
'_CURRENCY_' => currency(), '_CURRENCY_' => currency(),
'_TOTAL_' => numberFormat($number, $decimals), '_TOTAL_' => numberFormat($number, $decimals),

View File

@ -29,8 +29,8 @@ if (!function_exists('array_column')) {
/** /**
* Pluck an array of values from an array. * Pluck an array of values from an array.
* *
* @param $array - data * @param $array - data
* @param $key - value you want to pluck from array * @param $key - value you want to pluck from array
* *
* @since 2.3 * @since 2.3
* *
@ -48,7 +48,7 @@ if (!function_exists('array_clean')) {
/** /**
* Pulisce i contenuti vuoti di un array. * Pulisce i contenuti vuoti di un array.
* *
* @param $array * @param $array
* *
* @since 2.3.2 * @since 2.3.2
* *
@ -56,7 +56,7 @@ if (!function_exists('array_clean')) {
*/ */
function array_clean($array) function array_clean($array)
{ {
if (!empty($array)){ if (!empty($array)) {
return array_unique(array_values(array_filter($array, function ($value) { return array_unique(array_values(array_filter($array, function ($value) {
return !empty($value); return !empty($value);
}))); })));
@ -68,7 +68,7 @@ if (!function_exists('array_deep_clean')) {
/** /**
* Pulisce i contenuti vuoti di un array. * Pulisce i contenuti vuoti di un array.
* *
* @param $array * @param $array
* *
* @since 2.4.11 * @since 2.4.11
* *

View File

@ -35,7 +35,7 @@ $subject = $module->replacePlaceholders($id_record, $template['subject'], $place
$emails = []; $emails = [];
if ($module->replacePlaceholders($id_record, '{email}')) { if ($module->replacePlaceholders($id_record, '{email}')) {
$emails = explode(';', $module->replacePlaceholders($id_record, '{email}', $placeholder_options)); $emails = explode(';', $module->replacePlaceholders($id_record, '{email}', $placeholder_options));
} }
$id_anagrafica = $module->replacePlaceholders($id_record, '{id_anagrafica}', $placeholder_options); $id_anagrafica = $module->replacePlaceholders($id_record, '{id_anagrafica}', $placeholder_options);
@ -50,15 +50,14 @@ foreach ($mansioni as $mansione) {
} }
} }
// Aggiungo email tecnici assegnati quando sono sul template Notifica intervento // Aggiungo email tecnici assegnati quando sono sul template Notifica intervento
if ($template->name == 'Notifica intervento'){ if ($template->name == 'Notifica intervento') {
$tecnici = $dbo->select('in_interventi_tecnici_assegnati', 'id_tecnico', ['id_intervento' => $id_record]); $tecnici = $dbo->select('in_interventi_tecnici_assegnati', 'id_tecnico', ['id_intervento' => $id_record]);
foreach ($tecnici as $tecnico) { foreach ($tecnici as $tecnico) {
$anagrafica = $dbo->table('an_anagrafiche')->where('idanagrafica', $tecnico['id_tecnico'])->where('email', '!=', '')->first(); $anagrafica = $dbo->table('an_anagrafiche')->where('idanagrafica', $tecnico['id_tecnico'])->where('email', '!=', '')->first();
if (!in_array($anagrafica->email, $emails)) { if (!in_array($anagrafica->email, $emails)) {
$emails[] = $anagrafica->email; $emails[] = $anagrafica->email;
} }
} }
} }
@ -180,8 +179,8 @@ echo '
'id' => 'body_'.rand(0, 999), 'id' => 'body_'.rand(0, 999),
'value' => $body, 'value' => $body,
]); ]);
echo' echo '
</div> </div>
</div>'; </div>';

View File

@ -21,11 +21,11 @@ include_once __DIR__.'/../../core.php';
use Models\Cache; use Models\Cache;
use Modules\Aggiornamenti\Controlli\ColonneDuplicateViste; use Modules\Aggiornamenti\Controlli\ColonneDuplicateViste;
use Modules\Aggiornamenti\Controlli\ReaValidi;
use Modules\Aggiornamenti\Controlli\PluginDuplicati;
use Modules\Aggiornamenti\Controlli\Controllo; use Modules\Aggiornamenti\Controlli\Controllo;
use Modules\Aggiornamenti\Controlli\DatiFattureElettroniche; use Modules\Aggiornamenti\Controlli\DatiFattureElettroniche;
use Modules\Aggiornamenti\Controlli\PianoConti; use Modules\Aggiornamenti\Controlli\PianoConti;
use Modules\Aggiornamenti\Controlli\PluginDuplicati;
use Modules\Aggiornamenti\Controlli\ReaValidi;
use Modules\Aggiornamenti\UpdateHook; use Modules\Aggiornamenti\UpdateHook;
$id = post('id'); $id = post('id');
@ -46,9 +46,9 @@ switch (filter('op')) {
break; break;
case 'upload': case 'upload':
if (setting('Attiva aggiornamenti')){ if (setting('Attiva aggiornamenti')) {
include base_dir().'/modules/aggiornamenti/upload_modules.php'; include base_dir().'/modules/aggiornamenti/upload_modules.php';
}else{ } else {
flash()->error(tr('Non è permesso il caricamento di aggiornamenti o moduli!')); flash()->error(tr('Non è permesso il caricamento di aggiornamenti o moduli!'));
} }

View File

@ -75,7 +75,7 @@ $(document).ready(function () {
$mysql_min_version = '5.7.0'; $mysql_min_version = '5.7.0';
$mysql_max_version = '5.7.99'; $mysql_max_version = '5.7.99';
$contents = ((version_compare($database->getMySQLVersion(), $mysql_min_version, ">=") && version_compare($database->getMySQLVersion(), $mysql_max_version, "<=")) ? $file_to_check_database = 'database_5_7.json' : $file_to_check_database = 'database.json' ); $contents = ((version_compare($database->getMySQLVersion(), $mysql_min_version, '>=') && version_compare($database->getMySQLVersion(), $mysql_max_version, '<=')) ? $file_to_check_database = 'database_5_7.json' : $file_to_check_database = 'database.json');
$contents = file_get_contents(base_dir().'/'.$file_to_check_database); $contents = file_get_contents(base_dir().'/'.$file_to_check_database);
$data = json_decode($contents, true); $data = json_decode($contents, true);

View File

@ -185,8 +185,7 @@ function search(button) {
<div class="row">'; <div class="row">';
echo '
echo'
<div class="col-md-4"> <div class="col-md-4">
<div class="box box-success"> <div class="box box-success">
<div class="box-header with-border"> <div class="box-header with-border">
@ -198,13 +197,13 @@ echo'
<form action="'.base_path().'/controller.php?id_module='.$id_module.'" method="post" enctype="multipart/form-data" id="update"> <form action="'.base_path().'/controller.php?id_module='.$id_module.'" method="post" enctype="multipart/form-data" id="update">
<input type="hidden" name="op" value="upload"> <input type="hidden" name="op" value="upload">
{[ "type": "file", "name": "blob", "required": 1, "accept": ".zip", "disabled": '.(setting('Attiva aggiornamenti')? 0 : 1).' ]} {[ "type": "file", "name": "blob", "required": 1, "accept": ".zip", "disabled": '.(setting('Attiva aggiornamenti') ? 0 : 1).' ]}
'; ';
if (!empty($custom) || !empty($tables)) { if (!empty($custom) || !empty($tables)) {
$disabled = 'disabled'; $disabled = 'disabled';
echo ' <input type="checkbox" id="aggiorna_custom" class="pull-left" style="margin-top:10px;" value="1" >&nbsp; echo ' <input type="checkbox" id="aggiorna_custom" class="pull-left" style="margin-top:10px;" value="1" >&nbsp;
<label for="aggiorna_custom" style="margin-top:7px;" >'.tr("Desidero comunque procedere all'aggiornamento").'.</label> <label for="aggiorna_custom" style="margin-top:7px;" >'.tr("Desidero comunque procedere all'aggiornamento").'.</label>
<script> <script>
$("#aggiorna_custom").change(function() { $("#aggiorna_custom").change(function() {
@ -228,7 +227,6 @@ echo '
</div> </div>
</div>'; </div>';
echo ' echo '
<div class="col-md-4"> <div class="col-md-4">
<div class="box box-warning"> <div class="box box-warning">

View File

@ -67,7 +67,6 @@ class ReaValidi extends Controllo
GROUP BY an_anagrafiche.idanagrafica'); GROUP BY an_anagrafiche.idanagrafica');
foreach ($anagrafiche_interessate as $anagrafica) { foreach ($anagrafiche_interessate as $anagrafica) {
/*$tipi = explode(',', $anagrafica['tipi_anagrafica']); /*$tipi = explode(',', $anagrafica['tipi_anagrafica']);
$cliente = in_array('Cliente', $tipi) && empty($anagrafica['idconto_cliente']); $cliente = in_array('Cliente', $tipi) && empty($anagrafica['idconto_cliente']);
$fornitore = in_array('Fornitore', $tipi) && empty($anagrafica['idconto_fornitore']);*/ $fornitore = in_array('Fornitore', $tipi) && empty($anagrafica['idconto_fornitore']);*/
@ -79,7 +78,6 @@ class ReaValidi extends Controllo
'_REA_' => $anagrafica['codicerea'], '_REA_' => $anagrafica['codicerea'],
]), ]),
]); ]);
} }
} }
@ -88,7 +86,7 @@ class ReaValidi extends Controllo
$anagrafica = Anagrafica::find($record['id']); $anagrafica = Anagrafica::find($record['id']);
$anagrafica->codicerea = null; $anagrafica->codicerea = null;
$anagrafica->save(); $anagrafica->save();
return true; return true;
} }
} }

View File

@ -66,7 +66,7 @@ switch ($resource) {
foreach ($rs as $r) { foreach ($rs as $r) {
$results[] = [ $results[] = [
'value' => $r['email'], 'value' => $r['email'],
'label' => $r['ragione_sociale'].($r['sede']!=''?' ('.$r['sede'].')':'').' <'.$r['email'].'>', 'label' => $r['ragione_sociale'].($r['sede'] != '' ? ' ('.$r['sede'].')' : '').' <'.$r['email'].'>',
]; ];
} }
@ -82,7 +82,7 @@ switch ($resource) {
} }
// Tutti gli agenti del cliente // Tutti gli agenti del cliente
$q = "SELECT DISTINCT(email), ragione_sociale, idanagrafica FROM an_anagrafiche WHERE email != '' AND (idanagrafica=(SELECT idagente FROM an_anagrafiche AS agenti WHERE 1=1 ".$where.") OR idanagrafica IN (SELECT idagente FROM an_anagrafiche_agenti WHERE 1=1 ".$where."))"; $q = "SELECT DISTINCT(email), ragione_sociale, idanagrafica FROM an_anagrafiche WHERE email != '' AND (idanagrafica=(SELECT idagente FROM an_anagrafiche AS agenti WHERE 1=1 ".$where.') OR idanagrafica IN (SELECT idagente FROM an_anagrafiche_agenti WHERE 1=1 '.$where.'))';
$rs = $dbo->fetchArray($q); $rs = $dbo->fetchArray($q);
foreach ($rs as $r) { foreach ($rs as $r) {

View File

@ -17,8 +17,6 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
use Carbon\Carbon;
include_once __DIR__.'/../../../core.php'; include_once __DIR__.'/../../../core.php';
$filter_agente = Auth::user()['gruppo'] == 'Agenti'; $filter_agente = Auth::user()['gruppo'] == 'Agenti';
@ -59,10 +57,10 @@ switch ($resource) {
ON an_anagrafiche.idpagamento_vendite=co_pagamenti.id ON an_anagrafiche.idpagamento_vendite=co_pagamenti.id
LEFT JOIN LEFT JOIN
co_banche banca_vendite co_banche banca_vendite
ON co_pagamenti.idconto_vendite = banca_vendite.id_pianodeiconti3 AND banca_vendite.id_anagrafica = ".prepare($id_azienda)." AND banca_vendite.deleted_at IS NULL AND banca_vendite.predefined = 1 ON co_pagamenti.idconto_vendite = banca_vendite.id_pianodeiconti3 AND banca_vendite.id_anagrafica = ".prepare($id_azienda).' AND banca_vendite.deleted_at IS NULL AND banca_vendite.predefined = 1
|where| |where|
ORDER BY ORDER BY
ragione_sociale"; ragione_sociale';
foreach ($elements as $element) { foreach ($elements as $element) {
$filter[] = 'an_anagrafiche.idanagrafica='.prepare($element); $filter[] = 'an_anagrafiche.idanagrafica='.prepare($element);
@ -77,8 +75,6 @@ switch ($resource) {
} }
} }
if (!empty($search)) { if (!empty($search)) {
$search_fields[] = 'ragione_sociale LIKE '.prepare('%'.$search.'%'); $search_fields[] = 'ragione_sociale LIKE '.prepare('%'.$search.'%');
$search_fields[] = 'citta LIKE '.prepare('%'.$search.'%'); $search_fields[] = 'citta LIKE '.prepare('%'.$search.'%');
@ -92,12 +88,10 @@ switch ($resource) {
$rs = $data['results']; $rs = $data['results'];
foreach ($rs as $k => $r) { foreach ($rs as $k => $r) {
$rs[$k] = array_merge($r, [ $rs[$k] = array_merge($r, [
'text' => $r['descrizione'], 'text' => $r['descrizione'],
'disabled' => $r['is_bloccata'], 'disabled' => $r['is_bloccata'],
]); ]);
} }
$results = [ $results = [
@ -110,7 +104,7 @@ switch ($resource) {
case 'fornitori': case 'fornitori':
$id_azienda = setting('Azienda predefinita'); $id_azienda = setting('Azienda predefinita');
$query = "SELECT an_anagrafiche.idanagrafica AS id, CONCAT(ragione_sociale, IF(citta IS NULL OR citta = '', '', CONCAT(' (', citta, ')')), IF(an_anagrafiche.deleted_at IS NULL, '', ' (".tr('eliminata').")'),' - ', an_anagrafiche.codice) AS descrizione, idtipointervento_default AS idtipointervento, co_pagamenti.id AS id_pagamento, co_pagamenti.descrizione AS desc_pagamento, banca_acquisti.id AS id_banca_acquisti, CONCAT(banca_acquisti.nome, ' - ', banca_acquisti.iban) AS descrizione_banca_acquisti FROM an_anagrafiche INNER JOIN (an_tipianagrafiche_anagrafiche INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica=an_tipianagrafiche.idtipoanagrafica) ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica LEFT JOIN co_pagamenti ON an_anagrafiche.idpagamento_acquisti=co_pagamenti.id LEFT JOIN co_banche banca_acquisti ON co_pagamenti.idconto_acquisti = banca_acquisti.id_pianodeiconti3 AND banca_acquisti.id_anagrafica = ".prepare($id_azienda)." AND banca_acquisti.deleted_at IS NULL AND banca_acquisti.predefined = 1 |where| ORDER BY ragione_sociale"; $query = "SELECT an_anagrafiche.idanagrafica AS id, CONCAT(ragione_sociale, IF(citta IS NULL OR citta = '', '', CONCAT(' (', citta, ')')), IF(an_anagrafiche.deleted_at IS NULL, '', ' (".tr('eliminata').")'),' - ', an_anagrafiche.codice) AS descrizione, idtipointervento_default AS idtipointervento, co_pagamenti.id AS id_pagamento, co_pagamenti.descrizione AS desc_pagamento, banca_acquisti.id AS id_banca_acquisti, CONCAT(banca_acquisti.nome, ' - ', banca_acquisti.iban) AS descrizione_banca_acquisti FROM an_anagrafiche INNER JOIN (an_tipianagrafiche_anagrafiche INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica=an_tipianagrafiche.idtipoanagrafica) ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica LEFT JOIN co_pagamenti ON an_anagrafiche.idpagamento_acquisti=co_pagamenti.id LEFT JOIN co_banche banca_acquisti ON co_pagamenti.idconto_acquisti = banca_acquisti.id_pianodeiconti3 AND banca_acquisti.id_anagrafica = ".prepare($id_azienda).' AND banca_acquisti.deleted_at IS NULL AND banca_acquisti.predefined = 1 |where| ORDER BY ragione_sociale';
foreach ($elements as $element) { foreach ($elements as $element) {
$filter[] = 'an_anagrafiche.idanagrafica='.prepare($element); $filter[] = 'an_anagrafiche.idanagrafica='.prepare($element);
@ -447,7 +441,6 @@ switch ($resource) {
} }
} }
break; break;
case 'relazioni': case 'relazioni':
$query = "SELECT id, CONCAT(descrizione, IF(an_relazioni.deleted_at IS NULL, '', ' (".tr('eliminata').")')) AS descrizione, colore AS _bgcolor_ FROM an_relazioni |where| ORDER BY descrizione"; $query = "SELECT id, CONCAT(descrizione, IF(an_relazioni.deleted_at IS NULL, '', ' (".tr('eliminata').")')) AS descrizione, colore AS _bgcolor_ FROM an_relazioni |where| ORDER BY descrizione";
@ -465,7 +458,7 @@ switch ($resource) {
} }
break; break;
case 'provenienze': case 'provenienze':
$query = 'SELECT id, descrizione, colore AS bgcolor FROM an_provenienze |where| ORDER BY descrizione'; $query = 'SELECT id, descrizione, colore AS bgcolor FROM an_provenienze |where| ORDER BY descrizione';
@ -479,7 +472,6 @@ switch ($resource) {
break; break;
case 'settori': case 'settori':
$query = 'SELECT id, descrizione FROM an_settori |where| ORDER BY descrizione'; $query = 'SELECT id, descrizione FROM an_settori |where| ORDER BY descrizione';
@ -497,20 +489,16 @@ switch ($resource) {
* Opzioni utilizzate: * Opzioni utilizzate:
* - idanagrafica * - idanagrafica
*/ */
case 'dichiarazioni_intento':
case 'dichiarazioni_intento':
if (isset($superselect['idanagrafica']) && isset($superselect['data'])) { if (isset($superselect['idanagrafica']) && isset($superselect['data'])) {
//$query = "SELECT id, CONCAT('N. prot. ', numero_protocollo, ' (periodo dal ', DATE_FORMAT(data_inizio, '%d/%m/%Y'), ' al ' ,DATE_FORMAT(data_fine, '%d/%m/%Y'),') (utilizzati ',REPLACE(REPLACE(REPLACE(FORMAT(SUM(totale),2), ',', '#'), '.', ','), '#', '.'), ' su ' , REPLACE(REPLACE(REPLACE(FORMAT(SUM(massimale),2), ',', '#'), '.', ','), '#', '.'), ' &euro;)' ) AS descrizione, data_inizio, data_fine FROM co_dichiarazioni_intento |where| ORDER BY `data`, `id`"; //$query = "SELECT id, CONCAT('N. prot. ', numero_protocollo, ' (periodo dal ', DATE_FORMAT(data_inizio, '%d/%m/%Y'), ' al ' ,DATE_FORMAT(data_fine, '%d/%m/%Y'),') (utilizzati ',REPLACE(REPLACE(REPLACE(FORMAT(SUM(totale),2), ',', '#'), '.', ','), '#', '.'), ' su ' , REPLACE(REPLACE(REPLACE(FORMAT(SUM(massimale),2), ',', '#'), '.', ','), '#', '.'), ' &euro;)' ) AS descrizione, data_inizio, data_fine FROM co_dichiarazioni_intento |where| ORDER BY `data`, `id`";
$query = "SELECT id, numero_protocollo, data_inizio, data_fine, massimale, totale FROM co_dichiarazioni_intento |where| ORDER BY data"; $query = 'SELECT id, numero_protocollo, data_inizio, data_fine, massimale, totale FROM co_dichiarazioni_intento |where| ORDER BY data';
foreach ($elements as $element) { foreach ($elements as $element) {
$filter[] = 'id='.prepare($element); $filter[] = 'id='.prepare($element);
} }
//$where[] = '( '.prepare($superselect['data']).' BETWEEN data_inizio AND data_fine)'; //$where[] = '( '.prepare($superselect['data']).' BETWEEN data_inizio AND data_fine)';
@ -531,9 +519,8 @@ switch ($resource) {
$data = AJAX::selectResults($query, $where, $filter, $search_fields, $limit, $custom); $data = AJAX::selectResults($query, $where, $filter, $search_fields, $limit, $custom);
$rs = $data['results']; $rs = $data['results'];
foreach ($rs as $k => $r) { foreach ($rs as $k => $r) {
$currentDate = date('Y-m-d', strtotime($superselect['data']));
$currentDate = date('Y-m-d', strtotime($superselect['data']));
$startDate = date('Y-m-d', strtotime($r['data_inizio'])); $startDate = date('Y-m-d', strtotime($r['data_inizio']));
$endDate = date('Y-m-d', strtotime($r['data_fine'])); $endDate = date('Y-m-d', strtotime($r['data_fine']));

View File

@ -87,7 +87,6 @@ switch (post('op')) {
$anagrafica->idrelazione = $idrelazione; $anagrafica->idrelazione = $idrelazione;
$anagrafica->save(); $anagrafica->save();
} }
break; break;
} }

View File

@ -74,10 +74,10 @@ if (in_array($id_cliente, $tipi_anagrafica) or in_array($id_fornitore, $tipi_ana
echo ' echo '
</ul> </ul>
</div>'; </div>';
} }
if (in_array($id_agente, $tipi_anagrafica)) { if (in_array($id_agente, $tipi_anagrafica)) {
//Aggiunta liquidazione provvigioni per agente //Aggiunta liquidazione provvigioni per agente
echo' echo '
<button type="button" class="btn btn-primary" data-title="'.tr('Liquida Provvigioni').'" data-href="'.base_path().'/modules/anagrafiche/liquida_provvigioni.php?nome_stampa=Provvigioni&id_record='.$id_record.'" ><i class="fa fa-print"></i>'.tr(' Liquida Provvigioni').'</button>'; <button type="button" class="btn btn-primary" data-title="'.tr('Liquida Provvigioni').'" data-href="'.base_path().'/modules/anagrafiche/liquida_provvigioni.php?nome_stampa=Provvigioni&id_record='.$id_record.'" ><i class="fa fa-print"></i>'.tr(' Liquida Provvigioni').'</button>';
} }

View File

@ -252,7 +252,7 @@ echo '
<h3 class="panel-title"> '.tr('Geolocalizzazione').'</h3> <h3 class="panel-title"> '.tr('Geolocalizzazione').'</h3>
</div> </div>
<div class="panel-body">'; <div class="panel-body">';
// Area caricamento mappa // Area caricamento mappa
echo ' echo '
<div id="map-edit" style="width: 100%;"></div> <div id="map-edit" style="width: 100%;"></div>
@ -261,42 +261,37 @@ echo '
<br>'; <br>';
if (!empty($sede_cliente->gaddress) || (!empty($sede_cliente->lat) && !empty($sede_cliente->lng))) { if (!empty($sede_cliente->gaddress) || (!empty($sede_cliente->lat) && !empty($sede_cliente->lng))) {
// Modifica manuale delle informazioni // Modifica manuale delle informazioni
echo ' echo '
<a class="btn btn-info btn-block" onclick="modificaPosizione()"> <a class="btn btn-info btn-block" onclick="modificaPosizione()">
<i class="fa fa-map"></i> ' . tr('Aggiorna posizione') . ' <i class="fa fa-map"></i> '.tr('Aggiorna posizione').'
</a>'; </a>';
} else { } else {
// Definizione manuale delle informazioni // Definizione manuale delle informazioni
echo ' echo '
<a class="btn btn-primary btn-block" onclick="modificaPosizione()"> <a class="btn btn-primary btn-block" onclick="modificaPosizione()">
<i class="fa fa-map"></i> ' . tr('Definisci posizione') . ' <i class="fa fa-map"></i> '.tr('Definisci posizione').'
</a>'; </a>';
} }
// Navigazione diretta verso l'indirizzo // Navigazione diretta verso l'indirizzo
echo ' echo '
<a class="btn btn-info btn-block '.((empty($sede_cliente->lat) && empty($sede_cliente->lng))? "disabled" : "").'" onclick="$(\'#map-edit\').height(235); caricaMappa(); $(this).hide();"> <a class="btn btn-info btn-block '.((empty($sede_cliente->lat) && empty($sede_cliente->lng)) ? 'disabled' : '').'" onclick="$(\'#map-edit\').height(235); caricaMappa(); $(this).hide();">
<i class="fa fa-compass"></i> ' . tr('Carica mappa') . ' <i class="fa fa-compass"></i> '.tr('Carica mappa').'
</a>'; </a>';
// Navigazione diretta verso l'indirizzo // Navigazione diretta verso l'indirizzo
echo ' echo '
<a class="btn btn-info btn-block '.(($anagrafica->isAzienda() || (empty($sede_cliente->lat) || empty($sede_cliente->lng))|| (empty($sede_azienda->lat) || empty($sede_azienda->lng)) ) ? "disabled": "").'" onclick="calcolaPercorso()"> <a class="btn btn-info btn-block '.(($anagrafica->isAzienda() || (empty($sede_cliente->lat) || empty($sede_cliente->lng)) || (empty($sede_azienda->lat) || empty($sede_azienda->lng))) ? 'disabled' : '').'" onclick="calcolaPercorso()">
<i class="fa fa-map-signs"></i> '.tr('Calcola percorso').' <i class="fa fa-map-signs"></i> '.tr('Calcola percorso').'
'.((!empty($sede_cliente->lat) && !empty($sede_azienda->lat)) ? tr('(GPS)'): '' ).' '.((!empty($sede_cliente->lat) && !empty($sede_azienda->lat)) ? tr('(GPS)') : '').'
</a>'; </a>';
// Ricerca diretta su Mappa // Ricerca diretta su Mappa
echo ' echo '
<a class="btn btn-info btn-block" onclick="cercaOpenStreetMap()"> <a class="btn btn-info btn-block" onclick="cercaOpenStreetMap()">
<i class="fa fa-map-marker"></i> '.tr('Cerca su Mappa').' <i class="fa fa-map-marker"></i> '.tr('Cerca su Mappa').'
'.((!empty($sede_cliente->lat)) ? tr(' (GPS)'): '' ).' '.((!empty($sede_cliente->lat)) ? tr(' (GPS)') : '').'
</a>'; </a>';
echo ' echo '
@ -350,10 +345,10 @@ echo '
var map = null; var map = null;
function caricaMappa() { function caricaMappa() {
const lat = parseFloat("'.$sede_cliente->lat.'"); const lat = parseFloat("'.$sede_cliente->lat.'");
const lng = parseFloat("'.$sede_cliente->lng. '"); const lng = parseFloat("'.$sede_cliente->lng.'");
if (typeof lat === "undefined" || typeof lng === "undefined"){ if (typeof lat === "undefined" || typeof lng === "undefined"){
swal("' . tr('Errore') . '", "' . tr("La posizione non è stata definita. Impossibile caricare la mappa.") . '", "error"); swal("'.tr('Errore').'", "'.tr('La posizione non è stata definita. Impossibile caricare la mappa.').'", "error");
return false; return false;
} }
@ -369,7 +364,7 @@ echo '
gestureHandling: true gestureHandling: true
}); });
L.tileLayer("'.setting("Tile server OpenStreetMap").'", { L.tileLayer("'.setting('Tile server OpenStreetMap').'", {
maxZoom: 17, maxZoom: 17,
attribution: "© OpenStreetMap" attribution: "© OpenStreetMap"
}).addTo(map); }).addTo(map);
@ -648,7 +643,7 @@ if ($is_cliente or $is_fornitore or $is_tecnico) {
</div> </div>
<?php <?php
if ($is_agente) { if ($is_agente) {
?> ?>
<div class="col-md-3"> <div class="col-md-3">
{[ "type": "number", "label": "<?php echo tr('Provvigione predefinita'); ?>", "name": "provvigione_default", "value": "$provvigione_default$", "icon-after": "%" ]} {[ "type": "number", "label": "<?php echo tr('Provvigione predefinita'); ?>", "name": "provvigione_default", "value": "$provvigione_default$", "icon-after": "%" ]}
</div> </div>

View File

@ -19,8 +19,8 @@
include_once __DIR__.'/../../core.php'; include_once __DIR__.'/../../core.php';
use Models\Module;
use Carbon\Carbon; use Carbon\Carbon;
use Models\Module;
$id_record = filter('id_record'); $id_record = filter('id_record');
$dir = filter('dir'); $dir = filter('dir');
@ -40,7 +40,7 @@ echo '
<form action="" method="post" id="form" > <form action="" method="post" id="form" >
<div class="row">'; <div class="row">';
echo ' echo '
<div class="col-md-4"> <div class="col-md-4">
{[ "type": "date", "label": "'.tr('Data inizio').'", "required": "1", "name": "date_start", "value": "'.$_SESSION['period_start'].'" ]} {[ "type": "date", "label": "'.tr('Data inizio').'", "required": "1", "name": "date_start", "value": "'.$_SESSION['period_start'].'" ]}
</div> </div>
@ -67,7 +67,7 @@ echo '
</div> </div>
'; ';
echo ' echo '
<div class="col-md-4 pull-right"> <div class="col-md-4 pull-right">
<p style="line-height:14px;">&nbsp;</p> <p style="line-height:14px;">&nbsp;</p>
<button type="button" class="btn btn-primary btn-block" onclick="if($(\'#form\').parsley().validate()) { return avvia_stampa(); }"> <button type="button" class="btn btn-primary btn-block" onclick="if($(\'#form\').parsley().validate()) { return avvia_stampa(); }">
@ -108,9 +108,9 @@ echo '
input("date_start").disable(); input("date_start").disable();
input("date_end").disable(); input("date_end").disable();
}'; }';
if ($nome_stampa != 'Liquidazione IVA') { if ($nome_stampa != 'Liquidazione IVA') {
echo 'eseguiControlli();'; echo 'eseguiControlli();';
} }
echo ' echo '
}); });
</script>'; </script>';

View File

@ -32,15 +32,15 @@ echo '
<div class="col-md-2"> <div class="col-md-2">
<label>&nbsp;</label> <label>&nbsp;</label>
<br><button type="button" class="btn btn-primary" onclick="initGeocomplete();"><i class="fa fa-search"></i> '.tr('Cerca'). '</button> <br><button type="button" class="btn btn-primary" onclick="initGeocomplete();"><i class="fa fa-search"></i> '.tr('Cerca').'</button>
</div> </div>
<div class="col-md-2"> <div class="col-md-2">
{[ "type": "text", "label": "' . tr('Latitudine') . '", "name": "lat", "value": "' . $record['lat'] . '", "extra": "data-geo=\'lat\'", "class": "text-right", "readonly": true ]} {[ "type": "text", "label": "'.tr('Latitudine').'", "name": "lat", "value": "'.$record['lat'].'", "extra": "data-geo=\'lat\'", "class": "text-right", "readonly": true ]}
</div> </div>
<div class="col-md-2"> <div class="col-md-2">
{[ "type": "text", "label": "' . tr('Longitudine') . '", "name": "lng", "value": "' . $record['lng'] . '", "extra": "data-geo=\'lng\'", "class": "text-right", "readonly": true ]} {[ "type": "text", "label": "'.tr('Longitudine').'", "name": "lng", "value": "'.$record['lng'].'", "extra": "data-geo=\'lng\'", "class": "text-right", "readonly": true ]}
</div> </div>
</div> </div>
@ -102,7 +102,7 @@ function caricaMappa() {
gestureHandling: true gestureHandling: true
}); });
L.tileLayer("'.setting("Tile server OpenStreetMap").'", { L.tileLayer("'.setting('Tile server OpenStreetMap').'", {
maxZoom: 17, maxZoom: 17,
attribution: "© OpenStreetMap" attribution: "© OpenStreetMap"
}).addTo(map); }).addTo(map);

View File

@ -41,7 +41,6 @@ if (empty($_GET['visualizza_allegati'])) {
</div> </div>
</div>'; </div>';
} else { } else {
//Controllo i permessi dei modulo per la visualizzazione degli allegati //Controllo i permessi dei modulo per la visualizzazione degli allegati
$rs = $dbo->table('zz_permissions')->where('idgruppo', $user->idgruppo)->get(); $rs = $dbo->table('zz_permissions')->where('idgruppo', $user->idgruppo)->get();
$permessi = []; $permessi = [];

View File

@ -409,12 +409,13 @@ class Anagrafica extends Model
if ($this->isTipo('Cliente')) { if ($this->isTipo('Cliente')) {
$database->update('co_pianodeiconti3', ['descrizione' => $this->ragione_sociale], ['id' => $this->idconto_cliente]); $database->update('co_pianodeiconti3', ['descrizione' => $this->ragione_sociale], ['id' => $this->idconto_cliente]);
} }
if ($this->isTipo('Fornitore')) { if ($this->isTipo('Fornitore')) {
$database->update('co_pianodeiconti3', ['descrizione' => $this->ragione_sociale], ['id' => $this->idconto_fornitore]); $database->update('co_pianodeiconti3', ['descrizione' => $this->ragione_sociale], ['id' => $this->idconto_fornitore]);
} }
} }
protected function fixRagioneSociale() protected function fixRagioneSociale()
{ {
if (!empty($this->cognome) || !empty($this->nome)) { if (!empty($this->cognome) || !empty($this->nome)) {

View File

@ -27,8 +27,15 @@ class Referente extends Model
use SimpleModelTrait; use SimpleModelTrait;
protected $table = 'an_referenti'; protected $table = 'an_referenti';
/** /**
* The attributes that aren't mass assignable.
*
* @var array
*/
protected $guarded = [];
/**
* Crea un nuovo referente. * Crea un nuovo referente.
* *
* @param string $nome * @param string $nome
@ -39,7 +46,6 @@ class Referente extends Model
{ {
$model = new static(); $model = new static();
$model->idanagrafica = $idanagrafica; $model->idanagrafica = $idanagrafica;
$model->nome = $nome; $model->nome = $nome;
@ -52,14 +58,6 @@ class Referente extends Model
return $model; return $model;
} }
/**
* The attributes that aren't mass assignable.
*
* @var array
*/
protected $guarded = [];
public function anagrafica() public function anagrafica()
{ {
return $this->belongsTo(Anagrafica::class, 'idanagrafica'); return $this->belongsTo(Anagrafica::class, 'idanagrafica');

View File

@ -39,4 +39,4 @@ return [
'id_anagrafica' => $anagrafica->idanagrafica, 'id_anagrafica' => $anagrafica->idanagrafica,
'conto' => $conto, 'conto' => $conto,
'conto_descrizione' => $conto_descrizione, 'conto_descrizione' => $conto_descrizione,
]; ];

View File

@ -72,7 +72,7 @@ switch (post('op')) {
$articolo->um = post('um'); $articolo->um = post('um');
$articolo->um_secondaria = post('um_secondaria'); $articolo->um_secondaria = post('um_secondaria');
$articolo->fattore_um_secondaria = post('fattore_um_secondaria'); $articolo->fattore_um_secondaria = post('fattore_um_secondaria');
$articolo->save(); $articolo->save();
// Aggiornamento delle varianti per i campi comuni // Aggiornamento delle varianti per i campi comuni
@ -244,7 +244,7 @@ switch (post('op')) {
// Duplica articolo // Duplica articolo
case 'copy': case 'copy':
$new = $articolo->replicate(); $new = $articolo->replicate();
//Se non specifico il codice articolo lo imposto uguale all'id della riga //Se non specifico il codice articolo lo imposto uguale all'id della riga
if (empty(post('codice'))) { if (empty(post('codice'))) {
$codice = $dbo->fetchOne('SELECT MAX(id) as codice FROM mg_articoli')['codice'] + 1; $codice = $dbo->fetchOne('SELECT MAX(id) as codice FROM mg_articoli')['codice'] + 1;
@ -374,7 +374,6 @@ switch (post('op')) {
break; break;
case 'add-movimento': case 'add-movimento':
$articolo = Articolo::find(post('idarticolo')); $articolo = Articolo::find(post('idarticolo'));
$tipo_movimento = post('tipo_movimento'); $tipo_movimento = post('tipo_movimento');
$descrizione = post('movimento'); $descrizione = post('movimento');
@ -399,7 +398,6 @@ switch (post('op')) {
$articolo->movimenta($qta, $descrizione, $data, 1, [ $articolo->movimenta($qta, $descrizione, $data, 1, [
'idsede' => $id_sede_azienda, 'idsede' => $id_sede_azienda,
]); ]);
} elseif ($tipo_movimento == 'spostamento') { } elseif ($tipo_movimento == 'spostamento') {
// Registrazione del movimento verso la sede di destinazione // Registrazione del movimento verso la sede di destinazione
$articolo->registra($qta, $descrizione, $data, 1, [ $articolo->registra($qta, $descrizione, $data, 1, [

View File

@ -126,7 +126,7 @@ $aliquota_predefinita = floatval(Aliquota::find($iva_predefinita)->percentuale);
<div class="row"> <div class="row">
<div class="col-md-6"> <div class="col-md-6">
{[ "type": "checkbox", "label": "<?php echo tr('Abilita serial number'); ?>", "name": "abilita_serial", "help": "<?php echo tr('Abilita serial number in fase di aggiunta articolo in fattura o ddt'); ?>", "value": "<?php echo setting('Serial number abilitato di default') ?>","placeholder": "<?php echo tr('Serial number'); ?>" ]} {[ "type": "checkbox", "label": "<?php echo tr('Abilita serial number'); ?>", "name": "abilita_serial", "help": "<?php echo tr('Abilita serial number in fase di aggiunta articolo in fattura o ddt'); ?>", "value": "<?php echo setting('Serial number abilitato di default'); ?>","placeholder": "<?php echo tr('Serial number'); ?>" ]}
</div> </div>
</div> </div>
</div> </div>

View File

@ -56,7 +56,7 @@ foreach ($rs as $r) {
$result['link'] = base_path().'/editor.php?id_module='.$link_id.'&id_record='.$r['id']; $result['link'] = base_path().'/editor.php?id_module='.$link_id.'&id_record='.$r['id'];
$result['title'] = $r['codice'].' - '.$r['descrizione'].'<br> $result['title'] = $r['codice'].' - '.$r['descrizione'].'<br>
<small>'. <small>'.
( $show_prezzi ? '<strong>'.tr('Prezzo di vendita').':</strong> '.moneyFormat( $prezzi_ivati ? $r['prezzo_vendita_ivato'] : $r['prezzo_vendita']).'<br>' : '' ).' ($show_prezzi ? '<strong>'.tr('Prezzo di vendita').':</strong> '.moneyFormat($prezzi_ivati ? $r['prezzo_vendita_ivato'] : $r['prezzo_vendita']).'<br>' : '').'
<strong>'.tr('Q.').':</strong> '.Translator::numberToLocale($r['qta'], 'qta').' '.$r['um'].' <strong>'.tr('Q.').':</strong> '.Translator::numberToLocale($r['qta'], 'qta').' '.$r['um'].'
</small>'; </small>';
$result['category'] = 'Articoli'; $result['category'] = 'Articoli';

View File

@ -42,9 +42,9 @@ switch ($resource) {
IF(`categoria`.`nome` IS NOT NULL, CONCAT(`categoria`.`nome`, IF(`sottocategoria`.`nome` IS NOT NULL, CONCAT(' (', `sottocategoria`.`nome`, ')'), '-')), '<i>".tr('Nessuna categoria')."</i>') AS optgroup, IF(`categoria`.`nome` IS NOT NULL, CONCAT(`categoria`.`nome`, IF(`sottocategoria`.`nome` IS NOT NULL, CONCAT(' (', `sottocategoria`.`nome`, ')'), '-')), '<i>".tr('Nessuna categoria')."</i>') AS optgroup,
`mg_articoli`.`barcode`, `mg_articoli`.`barcode`,
`mg_articoli`.".($prezzi_ivati ? '`prezzo_vendita_ivato`' : '`prezzo_vendita`')." AS prezzo_vendita, `mg_articoli`.".($prezzi_ivati ? '`prezzo_vendita_ivato`' : '`prezzo_vendita`').' AS prezzo_vendita,
`mg_articoli`.`prezzo_vendita_ivato` AS prezzo_vendita_ivato, `mg_articoli`.`prezzo_vendita_ivato` AS prezzo_vendita_ivato,
`mg_articoli`.".($prezzi_ivati ? '`minimo_vendita_ivato`' : '`minimo_vendita`')." AS minimo_vendita,"; `mg_articoli`.'.($prezzi_ivati ? '`minimo_vendita_ivato`' : '`minimo_vendita`').' AS minimo_vendita,';
// Informazioni relative al fornitore specificato dal documenti di acquisto // Informazioni relative al fornitore specificato dal documenti di acquisto
if ($usare_dettaglio_fornitore) { if ($usare_dettaglio_fornitore) {

View File

@ -66,7 +66,7 @@ switch (post('op')) {
foreach ($id_records as $id) { foreach ($id_records as $id) {
$articolo = Articolo::find($id); $articolo = Articolo::find($id);
if (empty((int)$articolo->coefficiente)) { if (empty((int) $articolo->coefficiente)) {
$prezzo_partenza = post('prezzo_partenza') == 'vendita' ? $articolo->prezzo_vendita : $articolo->prezzo_acquisto; $prezzo_partenza = post('prezzo_partenza') == 'vendita' ? $articolo->prezzo_vendita : $articolo->prezzo_acquisto;
$aliquota_iva = floatval(Aliquota::find($articolo->idiva_vendita)->percentuale); $aliquota_iva = floatval(Aliquota::find($articolo->idiva_vendita)->percentuale);
@ -92,7 +92,7 @@ switch (post('op')) {
$articolo->setPrezzoVendita($new_prezzo_vendita, $articolo->idiva_vendita); $articolo->setPrezzoVendita($new_prezzo_vendita, $articolo->idiva_vendita);
$articolo->save(); $articolo->save();
} else { } else {
$articoli_coeff++; ++$articoli_coeff;
} }
} }
@ -111,7 +111,7 @@ switch (post('op')) {
$coefficiente = post('coefficiente'); $coefficiente = post('coefficiente');
$articolo->coefficiente = $coefficiente; $articolo->coefficiente = $coefficiente;
$articolo->prezzo_vendita = $articolo->prezzo_acquisto*$coefficiente; $articolo->prezzo_vendita = $articolo->prezzo_acquisto * $coefficiente;
$articolo->save(); $articolo->save();
} }
@ -156,7 +156,6 @@ switch (post('op')) {
redirect(base_path().'/pdfgen.php?id_print='.$id_print.'&id_record='.Articolo::where('codice', '!=', '')->first()->id); redirect(base_path().'/pdfgen.php?id_print='.$id_print.'&id_record='.Articolo::where('codice', '!=', '')->first()->id);
exit(); exit();
case 'change-qta': case 'change-qta':
$descrizione = post('descrizione'); $descrizione = post('descrizione');
$data = post('data'); $data = post('data');
@ -221,7 +220,6 @@ switch (post('op')) {
redirect(base_path().'/editor.php?id_module='.Modules::get('Preventivi')['id'].'&id_record='.$id_preventivo); redirect(base_path().'/editor.php?id_module='.Modules::get('Preventivi')['id'].'&id_record='.$id_preventivo);
exit(); exit();
case 'export-csv': case 'export-csv':
$file = temp_file(); $file = temp_file();
$exporter = new CSV($file); $exporter = new CSV($file);
@ -286,14 +284,14 @@ switch (post('op')) {
foreach ($id_records as $id) { foreach ($id_records as $id) {
$articolo = Articolo::find($id); $articolo = Articolo::find($id);
if ($articolo->prezzo_acquisto==0 && empty($articolo->idfornitore)) { if ($articolo->prezzo_acquisto == 0 && empty($articolo->idfornitore)) {
$new_prezzo_acquisto = $dbo->fetchOne('SELECT (prezzo_unitario-sconto_unitario) AS prezzo_acquisto FROM co_righe_documenti LEFT JOIN co_documenti ON co_righe_documenti.iddocumento=co_documenti.id LEFT JOIN co_tipidocumento ON co_tipidocumento.id=co_documenti.idtipodocumento WHERE idarticolo='.prepare($id).' AND dir="uscita" ORDER BY co_documenti.data DESC, co_righe_documenti.id DESC LIMIT 0,1')['prezzo_acquisto']; $new_prezzo_acquisto = $dbo->fetchOne('SELECT (prezzo_unitario-sconto_unitario) AS prezzo_acquisto FROM co_righe_documenti LEFT JOIN co_documenti ON co_righe_documenti.iddocumento=co_documenti.id LEFT JOIN co_tipidocumento ON co_tipidocumento.id=co_documenti.idtipodocumento WHERE idarticolo='.prepare($id).' AND dir="uscita" ORDER BY co_documenti.data DESC, co_righe_documenti.id DESC LIMIT 0,1')['prezzo_acquisto'];
$articolo->prezzo_acquisto = $new_prezzo_acquisto; $articolo->prezzo_acquisto = $new_prezzo_acquisto;
$articolo->save(); $articolo->save();
if ($new_prezzo_acquisto!=0) { if ($new_prezzo_acquisto != 0) {
$n_art++; ++$n_art;
} }
} }
} }
@ -389,7 +387,7 @@ switch (post('op')) {
'tipo_provvigione' => post('tipo_provvigione'), 'tipo_provvigione' => post('tipo_provvigione'),
]); ]);
} }
$n_art++; ++$n_art;
} }
flash()->info(tr('Provvigioni inserite correttamente!', [ flash()->info(tr('Provvigioni inserite correttamente!', [
@ -489,7 +487,7 @@ $operations['crea-preventivo'] = [
'msg' => tr('Ogni articolo selezionato, verrà aggiunto al preventivo').' 'msg' => tr('Ogni articolo selezionato, verrà aggiunto al preventivo').'
<br><br>{[ "type": "text", "label": "'.tr('Nome preventivo').'", "name": "nome", "required": 1 ]} <br><br>{[ "type": "text", "label": "'.tr('Nome preventivo').'", "name": "nome", "required": 1 ]}
{[ "type": "select", "label": "'.tr('Cliente').'", "name": "id_cliente", "ajax-source": "clienti", "required": 1 ]} {[ "type": "select", "label": "'.tr('Cliente').'", "name": "id_cliente", "ajax-source": "clienti", "required": 1 ]}
{[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_segment", "required": 1, "ajax-source": "segmenti", "select-options": '.json_encode(["id_module" => $id_preventivi, 'is_sezionale' => 1]).', "value": "'.$id_segment.'", "select-options-escape": true ]} {[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_segment", "required": 1, "ajax-source": "segmenti", "select-options": '.json_encode(['id_module' => $id_preventivi, 'is_sezionale' => 1]).', "value": "'.$id_segment.'", "select-options-escape": true ]}
{[ "type": "select", "label": "'.tr('Tipo di attività').'", "name": "id_tipo", "ajax-source": "tipiintervento", "required": 1 ]} {[ "type": "select", "label": "'.tr('Tipo di attività').'", "name": "id_tipo", "ajax-source": "tipiintervento", "required": 1 ]}
{[ "type": "date", "label": "'.tr('Data').'", "name": "data", "required": 1, "value": "-now-" ]}', {[ "type": "date", "label": "'.tr('Data').'", "name": "data", "required": 1, "value": "-now-" ]}',
'button' => tr('Procedi'), 'button' => tr('Procedi'),

View File

@ -50,8 +50,8 @@ use Modules\Iva\Aliquota;
<div class="row"> <div class="row">
<div class="col-md-6"> <div class="col-md-6">
<?php echo ((!empty($record['id_categoria'])) ? <?php echo (!empty($record['id_categoria'])) ?
Modules::link('Categorie articoli', $record['id_categoria'], null, null, 'class="pull-right"') : '') ?> Modules::link('Categorie articoli', $record['id_categoria'], null, null, 'class="pull-right"') : ''; ?>
{[ "type": "select", "label": "<?php echo tr('Categoria'); ?>", "name": "categoria", "required": 0, "value": "$id_categoria$", "ajax-source": "categorie", "icon-after": "add|<?php echo Modules::get('Categorie articoli')['id']; ?>" ]} {[ "type": "select", "label": "<?php echo tr('Categoria'); ?>", "name": "categoria", "required": 0, "value": "$id_categoria$", "ajax-source": "categorie", "icon-after": "add|<?php echo Modules::get('Categorie articoli')['id']; ?>" ]}
</div> </div>
@ -107,7 +107,7 @@ use Modules\Iva\Aliquota;
<div class="panel-body"> <div class="panel-body">
<div class="row"> <div class="row">
<div class="col-md-6"> <div class="col-md-6">
{[ "type": "number", "label": "<?php echo tr('Quantità'); ?>", "name": "qta", "required": 1, "value": "$qta$", "readonly": 1, "decimals": "qta", "min-value": "undefined", "icon-after": "<?php echo (!empty($record['um']) ? $record['um']: ''); ?>" ]} {[ "type": "number", "label": "<?php echo tr('Quantità'); ?>", "name": "qta", "required": 1, "value": "$qta$", "readonly": 1, "decimals": "qta", "min-value": "undefined", "icon-after": "<?php echo !empty($record['um']) ? $record['um'] : ''; ?>" ]}
<input type="hidden" id="old_qta" value="<?php echo $record['qta']; ?>"> <input type="hidden" id="old_qta" value="<?php echo $record['qta']; ?>">
</div> </div>
@ -127,7 +127,7 @@ use Modules\Iva\Aliquota;
<div class="alert alert-info"> <div class="alert alert-info">
<p><?php echo tr('Le modifiche alle quantità in questa schermata prevedono la generazione di un movimento relativo alla sede legale'); ?>. <?php echo tr('Se si desidera effettuare movimenti per altre sedi, utilizzare il modulo _MODULO_ ', [ <p><?php echo tr('Le modifiche alle quantità in questa schermata prevedono la generazione di un movimento relativo alla sede legale'); ?>. <?php echo tr('Se si desidera effettuare movimenti per altre sedi, utilizzare il modulo _MODULO_ ', [
'_MODULO_' => Modules::link('Movimenti', null, tr('Movimenti')) '_MODULO_' => Modules::link('Movimenti', null, tr('Movimenti')),
]); ?>.</p> ]); ?>.</p>
</div> </div>
@ -182,8 +182,8 @@ use Modules\Iva\Aliquota;
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<?php echo ((!empty($record['id_fornitore'])) ? <?php echo (!empty($record['id_fornitore'])) ?
Plugins::link('Listino Fornitori', $id_record, null, null, 'class="pull-right" onclick="modificaFornitore('.$id_record.','.$record['id_fornitore'].')"', null): ''); ?> Plugins::link('Listino Fornitori', $id_record, null, null, 'class="pull-right" onclick="modificaFornitore('.$id_record.','.$record['id_fornitore'].')"', null) : ''; ?>
{[ "type": "select", "label": "<?php echo tr('Fornitore predefinito'); ?>", "name": "id_fornitore", "ajax-source": "fornitori-articolo", "select-options": <?php echo json_encode(['id_articolo' => $id_record]); ?>, "value":"$id_fornitore$", "help": "<?php echo tr('Fornitore predefinito selezionabile tra i fornitori presenti nel plugin \"Listino fornitori\"'); ?>." ]} {[ "type": "select", "label": "<?php echo tr('Fornitore predefinito'); ?>", "name": "id_fornitore", "ajax-source": "fornitori-articolo", "select-options": <?php echo json_encode(['id_articolo' => $id_record]); ?>, "value":"$id_fornitore$", "help": "<?php echo tr('Fornitore predefinito selezionabile tra i fornitori presenti nel plugin \"Listino fornitori\"'); ?>." ]}
</div> </div>
</div> </div>
@ -230,13 +230,13 @@ $iva_predefinita = setting('Iva predefinita');
$aliquota_predefinita = floatval(Aliquota::find($iva_predefinita)->percentuale); $aliquota_predefinita = floatval(Aliquota::find($iva_predefinita)->percentuale);
if (empty($prezzi_ivati)) { if (empty($prezzi_ivati)) {
echo ' echo '
<button type="button" class="btn btn-info btn-xs pull-right tip pull-right '.(!empty((int)$articolo->coefficiente) ? 'disabled' : '').'" title="'.tr('Scorpora l\'IVA dal prezzo di vendita.').'" id="scorporaIva"> <button type="button" class="btn btn-info btn-xs pull-right tip pull-right '.(!empty((int) $articolo->coefficiente) ? 'disabled' : '').'" title="'.tr('Scorpora l\'IVA dal prezzo di vendita.').'" id="scorporaIva">
<i class="fa fa-calculator"></i> <i class="fa fa-calculator"></i>
</button>'; </button>';
} }
echo ' echo '
{[ "type": "number", "label": "'.tr('Prezzo di vendita').'", "name": "prezzo_vendita", "value": "'.($prezzi_ivati ? $articolo->prezzo_vendita_ivato : $articolo->prezzo_vendita).'", "icon-after": "'.currency().'", "help": "'.($prezzi_ivati ? tr('Importo IVA inclusa') : '').'", "disabled": "'.(!empty((int)$articolo->coefficiente) ? 1 : 0).'" ]} {[ "type": "number", "label": "'.tr('Prezzo di vendita').'", "name": "prezzo_vendita", "value": "'.($prezzi_ivati ? $articolo->prezzo_vendita_ivato : $articolo->prezzo_vendita).'", "icon-after": "'.currency().'", "help": "'.($prezzi_ivati ? tr('Importo IVA inclusa') : '').'", "disabled": "'.(!empty((int) $articolo->coefficiente) ? 1 : 0).'" ]}
</div>'; </div>';
?> ?>
@ -274,7 +274,7 @@ echo '
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
{[ "type": "number", "label": "<?php echo tr('Minimo di vendita'); ?>", "name": "minimo_vendita", "value": "<?php echo ($prezzi_ivati ? $articolo->minimo_vendita_ivato : $articolo->minimo_vendita); ?>", "icon-after": "<?php echo currency(); ?>", "help": "<?php echo ($prezzi_ivati ? tr('Importo IVA inclusa') : ''); ?>" ]} {[ "type": "number", "label": "<?php echo tr('Minimo di vendita'); ?>", "name": "minimo_vendita", "value": "<?php echo $prezzi_ivati ? $articolo->minimo_vendita_ivato : $articolo->minimo_vendita; ?>", "icon-after": "<?php echo currency(); ?>", "help": "<?php echo $prezzi_ivati ? tr('Importo IVA inclusa') : ''; ?>" ]}
</div> </div>
</div> </div>
</div> </div>

View File

@ -29,7 +29,7 @@ include_once __DIR__.'/../../../core.php';
<div class="row"> <div class="row">
<div class="col-md-4"> <div class="col-md-4">
{["type": "select", "label": "<?php echo tr('Articolo'); ?>", "name": "idarticolo", "ajax-source": "articoli", "value": "<?php echo get('id_articolo');?>", "required": 1, "readonly": 1, "select-options": {"permetti_movimento_a_zero": 1, "idanagrafica": <?php echo setting('Azienda predefinita'); ?>, "idsede_partenza": 0, "idsede_destinazione": 0 } ]} {["type": "select", "label": "<?php echo tr('Articolo'); ?>", "name": "idarticolo", "ajax-source": "articoli", "value": "<?php echo get('id_articolo'); ?>", "required": 1, "readonly": 1, "select-options": {"permetti_movimento_a_zero": 1, "idanagrafica": <?php echo setting('Azienda predefinita'); ?>, "idsede_partenza": 0, "idsede_destinazione": 0 } ]}
</div> </div>
<div class="col-md-2"> <div class="col-md-2">

View File

@ -50,11 +50,11 @@ echo '
<div class="panel-body"> <div class="panel-body">
<div class="row"> <div class="row">
<div class="col-md-6"> <div class="col-md-6">
<span><b>'.tr("Codice: ").'</b>'.$articolo->codice.'</span> <span><b>'.tr('Codice: ').'</b>'.$articolo->codice.'</span>
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<span><b>'.tr("Descrizione: ").'</b>'.$articolo->descrizione.'</span> <span><b>'.tr('Descrizione: ').'</b>'.$articolo->descrizione.'</span>
</div> </div>
</div> </div>
</div> </div>
@ -296,4 +296,4 @@ function getDettagli(idsede) {
openModal("'.tr('Dettagli').'", "'.$rootdir.'/modules/articoli/plugins/dettagli_giacenze.php?id_module=" + globals.id_module + "&id_record=" + globals.id_record + "&idsede=" + idsede ); openModal("'.tr('Dettagli').'", "'.$rootdir.'/modules/articoli/plugins/dettagli_giacenze.php?id_module=" + globals.id_module + "&id_record=" + globals.id_record + "&idsede=" + idsede );
} }
</script>'; </script>';

View File

@ -99,23 +99,23 @@ echo '
// Elenco // Elenco
if (empty(get('modal'))) { if (empty(get('modal'))) {
echo ' echo '
<div class="box"> <div class="box">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title">'.tr('Elenco seriali').'</h3> <h3 class="box-title">'.tr('Elenco seriali').'</h3>
</div> </div>
<div class="box-body">'; <div class="box-body">';
// Conteggio totale prodotti // Conteggio totale prodotti
$rs = $dbo->fetchArray('SELECT COUNT(id) AS tot FROM mg_prodotti WHERE id_articolo='.prepare($id_record)); $rs = $dbo->fetchArray('SELECT COUNT(id) AS tot FROM mg_prodotti WHERE id_articolo='.prepare($id_record));
$tot_prodotti = $rs[0]['tot']; $tot_prodotti = $rs[0]['tot'];
// Visualizzazione di tutti i prodotti // Visualizzazione di tutti i prodotti
$search_serial = get('search_serial'); $search_serial = get('search_serial');
$query = 'SELECT id, serial, created_at FROM mg_prodotti WHERE serial IS NOT NULL AND id_articolo='.prepare($id_record).(!empty($search_serial) ? ' AND serial LIKE '.prepare('%'.$search_serial.'%') : '').' GROUP BY serial ORDER BY created_at DESC, serial DESC, lotto DESC, altro DESC'; $query = 'SELECT id, serial, created_at FROM mg_prodotti WHERE serial IS NOT NULL AND id_articolo='.prepare($id_record).(!empty($search_serial) ? ' AND serial LIKE '.prepare('%'.$search_serial.'%') : '').' GROUP BY serial ORDER BY created_at DESC, serial DESC, lotto DESC, altro DESC';
$rs2 = $dbo->fetchArray($query); $rs2 = $dbo->fetchArray($query);
echo ' echo '
<table id="table-serials" class="table table-striped table-hover table-condensed table-bordered text-center datatables"> <table id="table-serials" class="table table-striped table-hover table-condensed table-bordered text-center datatables">
<thead> <thead>
<tr> <tr>
@ -130,201 +130,199 @@ echo '
</thead> </thead>
<tbody>'; <tbody>';
for ($i = 0; $i < count($rs2); ++$i) { for ($i = 0; $i < count($rs2); ++$i) {
echo ' echo '
<tr> <tr>
<td>'.$rs2[$i]['serial'].'</td>'; <td>'.$rs2[$i]['serial'].'</td>';
echo ' echo '
<td>'.Translator::timestampToLocale($rs2[$i]['created_at']).'</td>'; <td>'.Translator::timestampToLocale($rs2[$i]['created_at']).'</td>';
// Ricerca acquisti // Ricerca acquisti
$acquisti = $dbo->fetchArray('SELECT * FROM mg_prodotti WHERE dir=\'uscita\' AND id_articolo='.prepare($id_record).' AND (id_riga_documento IS NOT NULL OR id_riga_ordine IS NOT NULL OR id_riga_ddt IS NOT NULL) AND serial='.prepare($rs2[$i]['serial'])); $acquisti = $dbo->fetchArray('SELECT * FROM mg_prodotti WHERE dir=\'uscita\' AND id_articolo='.prepare($id_record).' AND (id_riga_documento IS NOT NULL OR id_riga_ordine IS NOT NULL OR id_riga_ddt IS NOT NULL) AND serial='.prepare($rs2[$i]['serial']));
if (!empty($acquisti)) { if (!empty($acquisti)) {
echo ' echo '
<td>'; <td>';
$totali = []; $totali = [];
foreach ($acquisti as $acquisto) { foreach ($acquisti as $acquisto) {
// Acquistato su fatture // Acquistato su fatture
if (!empty($acquisto['id_riga_documento'])) { if (!empty($acquisto['id_riga_documento'])) {
$module_id = Modules::get('Fatture di acquisto')['id']; $module_id = Modules::get('Fatture di acquisto')['id'];
// Ricerca vendite su fatture // Ricerca vendite su fatture
$query = 'SELECT *, ( SELECT descrizione FROM co_tipidocumento WHERE id=(SELECT idtipodocumento FROM co_documenti WHERE id=iddocumento) ) AS tipo_documento, ( SELECT `dir` FROM co_tipidocumento WHERE id=(SELECT idtipodocumento FROM co_documenti WHERE id=iddocumento) ) AS `dir`, ( SELECT numero FROM co_documenti WHERE id=iddocumento ) AS numero, ( SELECT numero_esterno FROM co_documenti WHERE id=iddocumento ) AS numero_esterno, ( SELECT data FROM co_documenti WHERE id=iddocumento ) AS data FROM co_righe_documenti WHERE co_righe_documenti.id='.prepare($acquisto['id_riga_documento']); $query = 'SELECT *, ( SELECT descrizione FROM co_tipidocumento WHERE id=(SELECT idtipodocumento FROM co_documenti WHERE id=iddocumento) ) AS tipo_documento, ( SELECT `dir` FROM co_tipidocumento WHERE id=(SELECT idtipodocumento FROM co_documenti WHERE id=iddocumento) ) AS `dir`, ( SELECT numero FROM co_documenti WHERE id=iddocumento ) AS numero, ( SELECT numero_esterno FROM co_documenti WHERE id=iddocumento ) AS numero_esterno, ( SELECT data FROM co_documenti WHERE id=iddocumento ) AS data FROM co_righe_documenti WHERE co_righe_documenti.id='.prepare($acquisto['id_riga_documento']);
$data = $dbo->fetchArray($query); $data = $dbo->fetchArray($query);
$id = $data[0]['iddocumento']; $id = $data[0]['iddocumento'];
} }
// Acquistato su ddt // Acquistato su ddt
elseif (!empty($acquisto['id_riga_ddt'])) { elseif (!empty($acquisto['id_riga_ddt'])) {
$module_id = Modules::get('Ddt di acquisto')['id']; $module_id = Modules::get('Ddt di acquisto')['id'];
$query = 'SELECT *, ( SELECT descrizione FROM dt_tipiddt WHERE id=(SELECT idtipoddt FROM dt_ddt WHERE id=idddt) ) AS tipo_documento, ( SELECT `dir` FROM dt_tipiddt WHERE id=(SELECT idtipoddt FROM dt_ddt WHERE id=idddt) ) AS `dir`, ( SELECT numero FROM dt_ddt WHERE id=idddt ) AS numero, ( SELECT numero_esterno FROM dt_ddt WHERE id=idddt ) AS numero_esterno, ( SELECT data FROM dt_ddt WHERE id=idddt ) AS data FROM dt_righe_ddt WHERE dt_righe_ddt.id='.prepare($acquisto['id_riga_ddt']); $query = 'SELECT *, ( SELECT descrizione FROM dt_tipiddt WHERE id=(SELECT idtipoddt FROM dt_ddt WHERE id=idddt) ) AS tipo_documento, ( SELECT `dir` FROM dt_tipiddt WHERE id=(SELECT idtipoddt FROM dt_ddt WHERE id=idddt) ) AS `dir`, ( SELECT numero FROM dt_ddt WHERE id=idddt ) AS numero, ( SELECT numero_esterno FROM dt_ddt WHERE id=idddt ) AS numero_esterno, ( SELECT data FROM dt_ddt WHERE id=idddt ) AS data FROM dt_righe_ddt WHERE dt_righe_ddt.id='.prepare($acquisto['id_riga_ddt']);
$data = $dbo->fetchArray($query); $data = $dbo->fetchArray($query);
$id = $data[0]['idddt']; $id = $data[0]['idddt'];
} }
// Inserito su ordini // Inserito su ordini
elseif (!empty($acquisto['id_riga_ordine'])) { elseif (!empty($acquisto['id_riga_ordine'])) {
$module_id = Modules::get('Ordini cliente')['id']; $module_id = Modules::get('Ordini cliente')['id'];
// Ricerca inserimenti su ordini // Ricerca inserimenti su ordini
$query = 'SELECT *, ( SELECT descrizione FROM or_tipiordine WHERE id=(SELECT idtipoordine FROM or_ordini WHERE id=idordine) ) AS tipo_documento, ( SELECT `dir` FROM or_tipiordine WHERE id=(SELECT idtipoordine FROM or_ordini WHERE id=idordine) ) AS `dir`, ( SELECT numero FROM or_ordini WHERE id=idordine ) AS numero, ( SELECT numero_esterno FROM or_ordini WHERE id=idordine ) AS numero_esterno, ( SELECT data FROM or_ordini WHERE id=idordine ) AS data FROM or_righe_ordini WHERE or_righe_ordini.id='.prepare($acquisto['id_riga_ordine']); $query = 'SELECT *, ( SELECT descrizione FROM or_tipiordine WHERE id=(SELECT idtipoordine FROM or_ordini WHERE id=idordine) ) AS tipo_documento, ( SELECT `dir` FROM or_tipiordine WHERE id=(SELECT idtipoordine FROM or_ordini WHERE id=idordine) ) AS `dir`, ( SELECT numero FROM or_ordini WHERE id=idordine ) AS numero, ( SELECT numero_esterno FROM or_ordini WHERE id=idordine ) AS numero_esterno, ( SELECT data FROM or_ordini WHERE id=idordine ) AS data FROM or_righe_ordini WHERE or_righe_ordini.id='.prepare($acquisto['id_riga_ordine']);
$data = $dbo->fetchArray($query); $data = $dbo->fetchArray($query);
$id = $data[0]['idordine']; $id = $data[0]['idordine'];
} }
$totali[] = [($data[0]['prezzo_unitario']-$data[0]['sconto_unitario']), $data[0]['iva_unitaria']]; $totali[] = [($data[0]['prezzo_unitario'] - $data[0]['sconto_unitario']), $data[0]['iva_unitaria']];
$numero = !empty($data[0]['numero_esterno']) ? $data[0]['numero_esterno'] : $data[0]['numero']; $numero = !empty($data[0]['numero_esterno']) ? $data[0]['numero_esterno'] : $data[0]['numero'];
$text = tr('_DOC_ num. _NUM_ del _DATE_', [ $text = tr('_DOC_ num. _NUM_ del _DATE_', [
'_DOC_' => $data[0]['tipo_documento'], '_DOC_' => $data[0]['tipo_documento'],
'_NUM_' => $numero, '_NUM_' => $numero,
'_DATE_' => Translator::dateToLocale($data[0]['data']), '_DATE_' => Translator::dateToLocale($data[0]['data']),
]).(!empty($extra) ? ' '.$extra : ''); ]).(!empty($extra) ? ' '.$extra : '');
echo echo Modules::link($module_id, $id, $text).'<br>';
Modules::link($module_id, $id, $text).'<br>'; }
}
echo '
echo '
</td> </td>
<td class="text-center">'; <td class="text-center">';
foreach ($totali as $value) { foreach ($totali as $value) {
$subtotale = $value[0]; $subtotale = $value[0];
$iva = $value[1]; $iva = $value[1];
echo '
<span>'.moneyFormat($subtotale + $iva).'</span>';
if (!empty($subtotale) && !empty($iva)) {
echo ' echo '
<span>'.moneyFormat($subtotale + $iva).'</span>';
if (!empty($subtotale) && !empty($iva)) {
echo '
<small style="color:#555;">('.Translator::numberToLocale($subtotale).' + '.Translator::numberToLocale($iva).')</small>'; <small style="color:#555;">('.Translator::numberToLocale($subtotale).' + '.Translator::numberToLocale($iva).')</small>';
} }
echo ' echo '
<br>'; <br>';
} }
echo '
</td>';
}
// Non venduto echo '
else { </td>';
echo ' }
// Non venduto
else {
echo '
<td></td> <td></td>
<td></td>'; <td></td>';
} }
// Ricerca vendite // Ricerca vendite
$vendite = $dbo->fetchArray('SELECT * FROM mg_prodotti WHERE dir=\'entrata\' AND id_articolo='.prepare($id_record).' AND serial='.prepare($rs2[$i]['serial'])); $vendite = $dbo->fetchArray('SELECT * FROM mg_prodotti WHERE dir=\'entrata\' AND id_articolo='.prepare($id_record).' AND serial='.prepare($rs2[$i]['serial']));
if (!empty($vendite)) { if (!empty($vendite)) {
echo ' echo '
<td>'; <td>';
$totali = []; $totali = [];
foreach ($vendite as $vendita) { foreach ($vendite as $vendita) {
// Venduto su fatture // Venduto su fatture
if (!empty($vendita['id_riga_documento'])) { if (!empty($vendita['id_riga_documento'])) {
$module_id = Modules::get('Fatture di vendita')['id']; $module_id = Modules::get('Fatture di vendita')['id'];
// Ricerca vendite su fatture // Ricerca vendite su fatture
$query = 'SELECT *, ( SELECT descrizione FROM co_tipidocumento WHERE id=(SELECT idtipodocumento FROM co_documenti WHERE id=iddocumento) ) AS tipo_documento, ( SELECT `dir` FROM co_tipidocumento WHERE id=(SELECT idtipodocumento FROM co_documenti WHERE id=iddocumento) ) AS `dir`, ( SELECT numero FROM co_documenti WHERE id=iddocumento ) AS numero, ( SELECT numero_esterno FROM co_documenti WHERE id=iddocumento ) AS numero_esterno, ( SELECT data FROM co_documenti WHERE id=iddocumento ) AS data FROM co_righe_documenti WHERE co_righe_documenti.id='.prepare($vendita['id_riga_documento']); $query = 'SELECT *, ( SELECT descrizione FROM co_tipidocumento WHERE id=(SELECT idtipodocumento FROM co_documenti WHERE id=iddocumento) ) AS tipo_documento, ( SELECT `dir` FROM co_tipidocumento WHERE id=(SELECT idtipodocumento FROM co_documenti WHERE id=iddocumento) ) AS `dir`, ( SELECT numero FROM co_documenti WHERE id=iddocumento ) AS numero, ( SELECT numero_esterno FROM co_documenti WHERE id=iddocumento ) AS numero_esterno, ( SELECT data FROM co_documenti WHERE id=iddocumento ) AS data FROM co_righe_documenti WHERE co_righe_documenti.id='.prepare($vendita['id_riga_documento']);
$data = $dbo->fetchArray($query); $data = $dbo->fetchArray($query);
$id = $data[0]['iddocumento']; $id = $data[0]['iddocumento'];
} }
// Venduto su ddt // Venduto su ddt
elseif (!empty($vendita['id_riga_ddt'])) { elseif (!empty($vendita['id_riga_ddt'])) {
$module_id = Modules::get('Ddt di vendita')['id']; $module_id = Modules::get('Ddt di vendita')['id'];
$query = 'SELECT *, ( SELECT descrizione FROM dt_tipiddt WHERE id=(SELECT idtipoddt FROM dt_ddt WHERE id=idddt) ) AS tipo_documento, ( SELECT `dir` FROM dt_tipiddt WHERE id=(SELECT idtipoddt FROM dt_ddt WHERE id=idddt) ) AS `dir`, ( SELECT numero FROM dt_ddt WHERE id=idddt ) AS numero, ( SELECT numero_esterno FROM dt_ddt WHERE id=idddt ) AS numero_esterno, ( SELECT data FROM dt_ddt WHERE id=idddt ) AS data FROM dt_righe_ddt WHERE dt_righe_ddt.id='.prepare($vendita['id_riga_ddt']); $query = 'SELECT *, ( SELECT descrizione FROM dt_tipiddt WHERE id=(SELECT idtipoddt FROM dt_ddt WHERE id=idddt) ) AS tipo_documento, ( SELECT `dir` FROM dt_tipiddt WHERE id=(SELECT idtipoddt FROM dt_ddt WHERE id=idddt) ) AS `dir`, ( SELECT numero FROM dt_ddt WHERE id=idddt ) AS numero, ( SELECT numero_esterno FROM dt_ddt WHERE id=idddt ) AS numero_esterno, ( SELECT data FROM dt_ddt WHERE id=idddt ) AS data FROM dt_righe_ddt WHERE dt_righe_ddt.id='.prepare($vendita['id_riga_ddt']);
$data = $dbo->fetchArray($query); $data = $dbo->fetchArray($query);
$id = $data[0]['idddt']; $id = $data[0]['idddt'];
} }
// Inserito su ordini // Inserito su ordini
elseif (!empty($vendita['id_riga_ordine'])) { elseif (!empty($vendita['id_riga_ordine'])) {
$module_id = Modules::get('Ordini cliente')['id']; $module_id = Modules::get('Ordini cliente')['id'];
// Ricerca inserimenti su ordini // Ricerca inserimenti su ordini
$query = 'SELECT *, ( SELECT descrizione FROM or_tipiordine WHERE id=(SELECT idtipoordine FROM or_ordini WHERE id=idordine) ) AS tipo_documento, ( SELECT `dir` FROM or_tipiordine WHERE id=(SELECT idtipoordine FROM or_ordini WHERE id=idordine) ) AS `dir`, ( SELECT numero FROM or_ordini WHERE id=idordine ) AS numero, ( SELECT numero_esterno FROM or_ordini WHERE id=idordine ) AS numero_esterno, ( SELECT data FROM or_ordini WHERE id=idordine ) AS data FROM or_righe_ordini WHERE or_righe_ordini.id='.prepare($vendita['id_riga_ordine']); $query = 'SELECT *, ( SELECT descrizione FROM or_tipiordine WHERE id=(SELECT idtipoordine FROM or_ordini WHERE id=idordine) ) AS tipo_documento, ( SELECT `dir` FROM or_tipiordine WHERE id=(SELECT idtipoordine FROM or_ordini WHERE id=idordine) ) AS `dir`, ( SELECT numero FROM or_ordini WHERE id=idordine ) AS numero, ( SELECT numero_esterno FROM or_ordini WHERE id=idordine ) AS numero_esterno, ( SELECT data FROM or_ordini WHERE id=idordine ) AS data FROM or_righe_ordini WHERE or_righe_ordini.id='.prepare($vendita['id_riga_ordine']);
$data = $dbo->fetchArray($query); $data = $dbo->fetchArray($query);
$id = $data[0]['idordine']; $id = $data[0]['idordine'];
} }
// Inserito su intervento // Inserito su intervento
elseif (!empty($vendita['id_riga_intervento'])) { elseif (!empty($vendita['id_riga_intervento'])) {
$module_id = Modules::get('Interventi')['id']; $module_id = Modules::get('Interventi')['id'];
// Ricerca inserimenti su interventi // Ricerca inserimenti su interventi
$query = 'SELECT in_righe_interventi.*, in_interventi.codice, ( SELECT orario_inizio FROM in_interventi_tecnici WHERE idintervento=in_righe_interventi.idintervento LIMIT 0,1 ) AS data FROM in_righe_interventi JOIN in_interventi ON in_interventi.id = in_righe_interventi.idintervento WHERE in_righe_interventi.id='.prepare($vendita['id_riga_intervento']); $query = 'SELECT in_righe_interventi.*, in_interventi.codice, ( SELECT orario_inizio FROM in_interventi_tecnici WHERE idintervento=in_righe_interventi.idintervento LIMIT 0,1 ) AS data FROM in_righe_interventi JOIN in_interventi ON in_interventi.id = in_righe_interventi.idintervento WHERE in_righe_interventi.id='.prepare($vendita['id_riga_intervento']);
$data = $dbo->fetchArray($query); $data = $dbo->fetchArray($query);
$id = $data[0]['idintervento']; $id = $data[0]['idintervento'];
$data[0]['tipo_documento'] = tr('Intervento').' '.$data[0]['codice']; $data[0]['tipo_documento'] = tr('Intervento').' '.$data[0]['codice'];
$extra = tr('(q.tà _QTA_)', [ $extra = tr('(q.tà _QTA_)', [
'_QTA_' => $data[0]['qta'], '_QTA_' => $data[0]['qta'],
]); ]);
} }
$totali[] = [($data[0]['prezzo_unitario']-$data[0]['sconto_unitario']), $data[0]['iva_unitaria']]; $totali[] = [($data[0]['prezzo_unitario'] - $data[0]['sconto_unitario']), $data[0]['iva_unitaria']];
$numero = !empty($data[0]['numero_esterno']) ? $data[0]['numero_esterno'] : $data[0]['numero']; $numero = !empty($data[0]['numero_esterno']) ? $data[0]['numero_esterno'] : $data[0]['numero'];
$text = tr('_DOC_ num. _NUM_ del _DATE_', [ $text = tr('_DOC_ num. _NUM_ del _DATE_', [
'_DOC_' => $data[0]['tipo_documento'], '_DOC_' => $data[0]['tipo_documento'],
'_NUM_' => $numero, '_NUM_' => $numero,
'_DATE_' => Translator::dateToLocale($data[0]['data']), '_DATE_' => Translator::dateToLocale($data[0]['data']),
]).(!empty($extra) ? ' '.$extra : ''); ]).(!empty($extra) ? ' '.$extra : '');
echo
Modules::link($module_id, $id, $text).'<br>';
}
echo ' echo Modules::link($module_id, $id, $text).'<br>';
}
echo '
</td> </td>
<td class="text-center">'; <td class="text-center">';
foreach ($totali as $value) { foreach ($totali as $value) {
$subtotale = $value[0]; $subtotale = $value[0];
$iva = $value[1]; $iva = $value[1];
echo '
<span>'.moneyFormat($subtotale + $iva).'</span>';
if (!empty($subtotale) && !empty($iva)) {
echo ' echo '
<span>'.moneyFormat($subtotale + $iva).'</span>';
if (!empty($subtotale) && !empty($iva)) {
echo '
<small style="color:#555;">('.Translator::numberToLocale($subtotale).' + '.Translator::numberToLocale($iva).')</small>'; <small style="color:#555;">('.Translator::numberToLocale($subtotale).' + '.Translator::numberToLocale($iva).')</small>';
} }
echo ' echo '
<br>'; <br>';
} }
echo ' echo '
</td> </td>
<td></td>'; <td></td>';
} }
// Non venduto // Non venduto
else { else {
// Documento di vendita // Documento di vendita
echo ' echo '
<td></td> <td></td>
<td></td> <td></td>
@ -333,11 +331,11 @@ for ($i = 0; $i < count($rs2); ++$i) {
<i class="fa fa-trash"></i> <i class="fa fa-trash"></i>
</a> </a>
</td>'; </td>';
}
echo '
</tr>';
} }
echo ' echo '
</tr>';
}
echo '
</tbody> </tbody>
</table> </table>
</div> </div>

View File

@ -28,11 +28,11 @@ echo '
<div class="panel-body"> <div class="panel-body">
<div class="row"> <div class="row">
<div class="col-md-6"> <div class="col-md-6">
<span><b>'.tr("Codice: ").'</b>'.$articolo->codice.'</span> <span><b>'.tr('Codice: ').'</b>'.$articolo->codice.'</span>
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<span><b>'.tr("Descrizione: ").'</b>'.$articolo->descrizione.'</span> <span><b>'.tr('Descrizione: ').'</b>'.$articolo->descrizione.'</span>
</div> </div>
</div> </div>
</div> </div>
@ -143,7 +143,7 @@ if (!empty($movimenti)) {
</td>'; </td>';
// Data // Data
$utente = $dbo->table('zz_users')->where('id',$movimento->idutente)->first(); $utente = $dbo->table('zz_users')->where('id', $movimento->idutente)->first();
$data = ($movimento->data ? $movimento->data : $movimento->data_movimento); $data = ($movimento->data ? $movimento->data : $movimento->data_movimento);
echo ' echo '
<td class="text-center">'.dateFormat($data).' <span class="tip" title="'.tr('Creazione movimento: _DATE_ <br>Creatore movimento: _USER_', [ <td class="text-center">'.dateFormat($data).' <span class="tip" title="'.tr('Creazione movimento: _DATE_ <br>Creatore movimento: _USER_', [

View File

@ -25,7 +25,7 @@ $articolo = Articolo::find($id_record);
$idsede = (empty(get('idsede')) ? 0 : get('idsede')); $idsede = (empty(get('idsede')) ? 0 : get('idsede'));
$movimenti = $articolo->movimentiComposti() $movimenti = $articolo->movimentiComposti()
->where('idsede',$idsede) ->where('idsede', $idsede)
->orderBy('mg_movimenti.data', 'DESC') ->orderBy('mg_movimenti.data', 'DESC')
->orderBy('mg_movimenti.id', 'DESC'); ->orderBy('mg_movimenti.id', 'DESC');
@ -104,7 +104,7 @@ if (!empty($movimenti)) {
<table class="table table-bordered"> <table class="table table-bordered">
<tr> <tr>
<th class="text-right">'.tr('Totale').'</th> <th class="text-right">'.tr('Totale').'</th>
<th class="text-right" width="17.9%">'.Translator::numberToLocale($totale,'qta').' '.$articolo->um.'</th> <th class="text-right" width="17.9%">'.Translator::numberToLocale($totale, 'qta').' '.$articolo->um.'</th>
</tr> </tr>
</table>'; </table>';
} else { } else {
@ -113,4 +113,4 @@ if (!empty($movimenti)) {
<i class="fa fa-info-circle"></i> <i class="fa fa-info-circle"></i>
'.tr('Questo articolo non è ancora stato movimentato').'. '.tr('Questo articolo non è ancora stato movimentato').'.
</div>'; </div>';
} }

View File

@ -186,7 +186,7 @@ class Articolo extends Model
$prezzo_vendita = $prezzo_vendita * (1 + $percentuale_aliquota / 100); $prezzo_vendita = $prezzo_vendita * (1 + $percentuale_aliquota / 100);
} }
$this->setPrezzoVendita(round($prezzo_vendita,2), $this->idiva_vendita); $this->setPrezzoVendita(round($prezzo_vendita, 2), $this->idiva_vendita);
} }
} }
@ -296,7 +296,7 @@ class Articolo extends Model
'idsede', 'idsede',
database()->raw('SUM(qta) AS qta') database()->raw('SUM(qta) AS qta')
)->groupBy(['idsede']); )->groupBy(['idsede']);
if (!empty($data)) { if (!empty($data)) {
$movimenti = $movimenti->where('data', '<=', \Carbon\Carbon::parse($data)->format('Y-m-d')); $movimenti = $movimenti->where('data', '<=', \Carbon\Carbon::parse($data)->format('Y-m-d'));
} }
@ -306,7 +306,7 @@ class Articolo extends Model
return [$item->idsede => (float) $item->attributes['qta']]; return [$item->idsede => (float) $item->attributes['qta']];
}) })
->toArray(); ->toArray();
return $movimenti; return $movimenti;
} }

View File

@ -215,7 +215,7 @@ class CSV extends CSVImporter
// Count the numbers of rows in a CSV // Count the numbers of rows in a CSV
$number = 0; $number = 0;
foreach ($this->csv as $row) { foreach ($this->csv as $row) {
$number++; ++$number;
} }
// Lettura primo record: se non c'è la pulizia listini da fare, esco, altrimenti // Lettura primo record: se non c'è la pulizia listini da fare, esco, altrimenti
@ -417,7 +417,7 @@ class CSV extends CSVImporter
$id_sede = $sede->id ?: 0; $id_sede = $sede->id ?: 0;
} }
if( isset($record['qta']) ) { if (isset($record['qta'])) {
$giacenze = $articolo->getGiacenze($record['data_qta']); $giacenze = $articolo->getGiacenze($record['data_qta']);
$qta_movimento = $nuova_qta - $giacenze[$id_sede][0]; $qta_movimento = $nuova_qta - $giacenze[$id_sede][0];
@ -480,10 +480,10 @@ class CSV extends CSVImporter
$fornitore->save(); $fornitore->save();
} }
// Imposto fornitore e prezzo predefinito // Imposto fornitore e prezzo predefinito
$listino_id_fornitore = DettaglioPrezzo::dettaglioPredefinito($articolo->id, $dettagli['id_fornitore'], 'uscita')->first(); $listino_id_fornitore = DettaglioPrezzo::dettaglioPredefinito($articolo->id, $dettagli['id_fornitore'], 'uscita')->first();
if (!empty($listino_id_fornitore)) { if (!empty($listino_id_fornitore)) {
$prezzo_acquisto = $listino_id_fornitore->prezzo_unitario - ($listino_id_fornitore->prezzo_unitario*$listino_id_fornitore->sconto_percentuale) / 100; $prezzo_acquisto = $listino_id_fornitore->prezzo_unitario - ($listino_id_fornitore->prezzo_unitario * $listino_id_fornitore->sconto_percentuale) / 100;
$articolo->prezzo_acquisto = $prezzo_acquisto; $articolo->prezzo_acquisto = $prezzo_acquisto;
$articolo->id_fornitore = $dettagli['id_fornitore']; $articolo->id_fornitore = $dettagli['id_fornitore'];
$articolo->save(); $articolo->save();

View File

@ -99,8 +99,7 @@ if (filter('op') == 'restore') {
$backups = Backup::getList(); $backups = Backup::getList();
$path = $backups[$number]; $path = $backups[$number];
} }
Backup::restore($path, is_file($path)); Backup::restore($path, is_file($path));
$database->beginTransaction(); $database->beginTransaction();
} }

View File

@ -41,14 +41,13 @@ switch (filter('op')) {
} }
// Redirect alla categoria se si sta modificando una sottocategoria // Redirect alla categoria se si sta modificando una sottocategoria
if($id_original != null) { if ($id_original != null) {
$database->commitTransaction(); $database->commitTransaction();
redirect(base_path().'/editor.php?id_module='.$id_module.'&id_record='.($id_original ?: $id_record)); redirect(base_path().'/editor.php?id_module='.$id_module.'&id_record='.($id_original ?: $id_record));
exit(); exit();
} }
break; break;
case 'add': case 'add':
$nome = filter('nome'); $nome = filter('nome');

View File

@ -22,15 +22,14 @@ include_once __DIR__.'/../../core.php';
use Modules\Checklists\Check; use Modules\Checklists\Check;
use Modules\Checklists\ChecklistItem; use Modules\Checklists\ChecklistItem;
switch(post('op')){ switch (post('op')) {
case 'delete_check':
case "delete_check":
$id = post('id'); $id = post('id');
$main_check = post('main_check'); $main_check = post('main_check');
if($main_check){ if ($main_check) {
$record = ChecklistItem::find($id); $record = ChecklistItem::find($id);
}else{ } else {
$record = Check::find($id); $record = Check::find($id);
} }
@ -38,25 +37,23 @@ switch(post('op')){
break; break;
case "update_position": case 'update_position':
$main_check = post('main_check'); $main_check = post('main_check');
$order = explode(',', post('order', true)); $order = explode(',', post('order', true));
if($main_check){ if ($main_check) {
foreach($order as $i => $id){ foreach ($order as $i => $id) {
$dbo->query("UPDATE zz_checklist_items SET `order`=".prepare($i)." WHERE id=".prepare($id)); $dbo->query('UPDATE zz_checklist_items SET `order`='.prepare($i).' WHERE id='.prepare($id));
} }
}else{ } else {
foreach($order as $i => $id){ foreach ($order as $i => $id) {
$dbo->query("UPDATE zz_checks SET `order`=".prepare($i)." WHERE id=".prepare($id)); $dbo->query('UPDATE zz_checks SET `order`='.prepare($i).' WHERE id='.prepare($id));
} }
} }
break; break;
case "save_checkbox": case 'save_checkbox':
$id = post('id'); $id = post('id');
$record = Check::find($id); $record = Check::find($id);
@ -66,7 +63,7 @@ switch(post('op')){
break; break;
case "save_note": case 'save_note':
$note = post('note'); $note = post('note');
$id = post('id'); $id = post('id');
@ -78,24 +75,23 @@ switch(post('op')){
break; break;
case "remove_checkbox": case 'remove_checkbox':
$id = post('id'); $id = post('id');
$record = Check::find($id); $record = Check::find($id);
$record->checked_by = NULL; $record->checked_by = null;
$record->checked_at = NULL; $record->checked_at = null;
$record->save(); $record->save();
break; break;
case "edit_check": case 'edit_check':
$id_record = post('id_record'); $id_record = post('id_record');
$main_check = post('main_check'); $main_check = post('main_check');
if($main_check){ if ($main_check) {
$record = ChecklistItem::find($id_record); $record = ChecklistItem::find($id_record);
}else{ } else {
$record = Check::find($id_record); $record = Check::find($id_record);
} }
@ -107,5 +103,3 @@ switch(post('op')){
break; break;
} }
?>

View File

@ -39,7 +39,7 @@ echo '
'label' => tr('Contenuto'), 'label' => tr('Contenuto'),
'name' => 'content', 'name' => 'content',
'required' => 1, 'required' => 1,
'value' => '' 'value' => '',
]).' ]).'
</div> </div>
</div> </div>

View File

@ -18,15 +18,15 @@
*/ */
include_once __DIR__.'/../../../core.php'; include_once __DIR__.'/../../../core.php';
use Modules\Checklists\ChecklistItem;
use Modules\Checklists\Check; use Modules\Checklists\Check;
use Modules\Checklists\ChecklistItem;
$id_record = get("id_record"); $id_record = get('id_record');
$main_check = get("main_check"); $main_check = get('main_check');
if($main_check){ if ($main_check) {
$record = ChecklistItem::find($id_record); $record = ChecklistItem::find($id_record);
}else{ } else {
$record = Check::find($id_record); $record = Check::find($id_record);
} }
@ -40,7 +40,7 @@ if($main_check){
'label' => tr('Descrizione'), 'label' => tr('Descrizione'),
'name' => 'content_edit', 'name' => 'content_edit',
'required' => 1, 'required' => 1,
'value' => htmlentities($record->content) 'value' => htmlentities($record->content),
]); ]);
?> ?>
</div> </div>
@ -48,7 +48,7 @@ if($main_check){
<div class="row"> <div class="row">
<div class="col-md-4"> <div class="col-md-4">
{[ "type": "checkbox", "label": "<?php echo tr('Utilizza come titolo'); ?>", "name": "is_titolo", "value": "<?php echo $record->is_titolo ?>" ]} {[ "type": "checkbox", "label": "<?php echo tr('Utilizza come titolo'); ?>", "name": "is_titolo", "value": "<?php echo $record->is_titolo; ?>" ]}
</div> </div>
<div class="col-md-8 text-right"> <div class="col-md-8 text-right">
@ -64,10 +64,10 @@ if($main_check){
$.post('<?php echo $rootdir; ?>/modules/checklists/ajax.php', { $.post('<?php echo $rootdir; ?>/modules/checklists/ajax.php', {
op: "edit_check", op: "edit_check",
id_record: "<?=$id_record?>", id_record: "<?php echo $id_record; ?>",
content: input('content_edit').get(), content: input('content_edit').get(),
is_titolo: input('is_titolo').get(), is_titolo: input('is_titolo').get(),
main_check: "<?=$main_check?>", main_check: "<?php echo $main_check; ?>",
}, function(){ }, function(){
location.reload(); location.reload();
}); });

View File

@ -96,7 +96,7 @@ echo '
'label' => tr('Contenuto'), 'label' => tr('Contenuto'),
'name' => 'content', 'name' => 'content',
'required' => 1, 'required' => 1,
'value' => '' 'value' => '',
]).' ]).'
</div> </div>
@ -119,8 +119,8 @@ echo " <table class='table'>
foreach ($checks as $check) { foreach ($checks as $check) {
echo renderChecklistInserimento($check); echo renderChecklistInserimento($check);
} }
echo " </tbody> echo ' </tbody>
</table>"; </table>';
echo ' echo '
</ul> </ul>
@ -221,4 +221,4 @@ function edit_check(id){
launch_modal("Modifica checklist", "'.$checklist_module->fileurl('components/edit-check.php').'?id_record="+id+"&main_check=1", 1); launch_modal("Modifica checklist", "'.$checklist_module->fileurl('components/edit-check.php').'?id_record="+id+"&main_check=1", 1);
} }
</script>'; </script>';

View File

@ -25,4 +25,4 @@ $checklist_module = Modules::get('Checklists');
if (isset($id_record)) { if (isset($id_record)) {
$record = Checklist::find($id_record); $record = Checklist::find($id_record);
} }

View File

@ -17,14 +17,14 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
function renderChecklist($check, $level = 1, $parent = 0) { function renderChecklist($check, $level = 1, $parent = 0)
{
global $structure; global $structure;
$user = auth()->getUser(); $user = auth()->getUser();
$enabled = $check->assignedUsers ? ($check->assignedUsers->pluck('id')->search($user->id) !== false || ($user->idgruppo) == 1): true; $enabled = $check->assignedUsers ? ($check->assignedUsers->pluck('id')->search($user->id) !== false || ($user->idgruppo) == 1) : true;
$margin = ($level*20); $margin = ($level * 20);
$result = ' $result = '
<tr id="check_'.$check->id.'" data-id="'.$check->id.'" class="sortablerow sonof_'.$parent.'" > <tr id="check_'.$check->id.'" data-id="'.$check->id.'" class="sortablerow sonof_'.$parent.'" >
@ -41,11 +41,11 @@ function renderChecklist($check, $level = 1, $parent = 0) {
$result .= ' $result .= '
<td style="width:40px;text-align:center;border-top:0px;border-left:3px solid #eaeaea;"> <td style="width:40px;text-align:center;border-top:0px;border-left:3px solid #eaeaea;">
<input type="checkbox" class="checkbox unblockable" data-id="'.$check->id.'" value="'.(!empty($check->checked_at) ? '1' : '0').'" '.(!empty($check->checked_at) ? 'checked' : '').' '.(!$enabled ? 'disabled' : '').'> <input type="checkbox" class="checkbox unblockable" data-id="'.$check->id.'" value="'.(!empty($check->checked_at) ? '1' : '0').'" '.(!empty($check->checked_at) ? 'checked' : '').' '.(!$enabled ? 'disabled' : '').'>
</td>'; </td>';
$result .= ' $result .= '
<td style="border-top:0px;"> <td style="border-top:0px;">
<span class="text unblockable" style="'.(!empty($check->checked_at)?'text-decoration:line-through;':'').'">'.$check->content.' </span> <span class="text unblockable" style="'.(!empty($check->checked_at) ? 'text-decoration:line-through;' : '').'">'.$check->content.' </span>
</td>'; </td>';
$result .= ' $result .= '
@ -56,14 +56,14 @@ function renderChecklist($check, $level = 1, $parent = 0) {
$result .= ' $result .= '
<td style="width:250px;border-top:0px;">'; <td style="width:250px;border-top:0px;">';
if (intval($check->assignedUsers->pluck('id')->toArray())>0) { if (intval($check->assignedUsers->pluck('id')->toArray()) > 0) {
$result .= ' <span class="label label-info pull-right" style="padding:6px 8px;" data-toggle="tooltip" title="Assegnato a '. implode(', ', $check->assignedUsers->pluck('username')->toArray()).'"><i class="fa fa-user"></i></span>'; $result .= ' <span class="label label-info pull-right" style="padding:6px 8px;" data-toggle="tooltip" title="Assegnato a '.implode(', ', $check->assignedUsers->pluck('username')->toArray()).'"><i class="fa fa-user"></i></span>';
} else { } else {
$result .= ' <span class="label label-danger pull-right" style="padding:6px 8px;">'. tr('Nessun utente assegnato').'</span>'; $result .= ' <span class="label label-danger pull-right" style="padding:6px 8px;">'.tr('Nessun utente assegnato').'</span>';
} }
if (!empty($check->checked_at)) { if (!empty($check->checked_at)) {
$result .= ' $result .= '
<span class="label label-default pull-right" style="margin-right:5px;padding:6px 8px;">'.(!empty($check->checked_at) ? tr('Verificato da _NAME_ il _DATE_', [ <span class="label label-default pull-right" style="margin-right:5px;padding:6px 8px;">'.(!empty($check->checked_at) ? tr('Verificato da _NAME_ il _DATE_', [
'_NAME_' => $check->checkUser->username, '_NAME_' => $check->checkUser->username,
'_DATE_' => timestampFormat($check->checked_at), '_DATE_' => timestampFormat($check->checked_at),
@ -72,7 +72,7 @@ function renderChecklist($check, $level = 1, $parent = 0) {
} }
$result .= ' $result .= '
</td>'; </td>';
} }
$result .= ' $result .= '
<td style="width:10px;text-align:center;border-top:0px;"> <td style="width:10px;text-align:center;border-top:0px;">
@ -86,16 +86,16 @@ function renderChecklist($check, $level = 1, $parent = 0) {
$result .= ' $result .= '
</tr>'; </tr>';
if(sizeof($check->children)>0){ if (sizeof($check->children) > 0) {
$result .= ' $result .= '
<tr> <tr>
<td colspan="5" style="padding-left:'.$margin.'px;padding-right:10px;padding-top:0px;padding-bottom:0px;border-top:0px;"> <td colspan="5" style="padding-left:'.$margin.'px;padding-right:10px;padding-top:0px;padding-bottom:0px;border-top:0px;">
<table class="table" style="margin-bottom:0px;"> <table class="table" style="margin-bottom:0px;">
<tbody class="sort" data-sonof="'.$check->id.'">'; <tbody class="sort" data-sonof="'.$check->id.'">';
$children = $structure->checks()->where('id_parent', $check->id)->orderBy('order')->get(); $children = $structure->checks()->where('id_parent', $check->id)->orderBy('order')->get();
foreach ($children as $child) { foreach ($children as $child) {
$result .= renderChecklist($child, $level + 1, $check->id); $result .= renderChecklist($child, $level + 1, $check->id);
} }
$result .= ' $result .= '
</tbody> </tbody>
</table> </table>
@ -113,10 +113,9 @@ function renderChecklist($check, $level = 1, $parent = 0) {
function renderChecklistInserimento($check, $level = 1, $parent = 0) function renderChecklistInserimento($check, $level = 1, $parent = 0)
{ {
global $record; global $record;
$margin = ($level*20); $margin = ($level * 20);
$result = ' $result = '
<tr id="check_'.$check->id.'" data-id="'.$check->id.'" class="sortablerow sonof_'.$parent.'" > <tr id="check_'.$check->id.'" data-id="'.$check->id.'" class="sortablerow sonof_'.$parent.'" >
@ -129,7 +128,7 @@ function renderChecklistInserimento($check, $level = 1, $parent = 0)
$result .= ' $result .= '
<span class="text">'.$check->content.'</span>'; <span class="text">'.$check->content.'</span>';
$result .= ' $result .= '
</td>'; </td>';
$result .= ' $result .= '
<td style="width:40px;text-align:right;border-top:0px;"> <td style="width:40px;text-align:right;border-top:0px;">
@ -139,21 +138,19 @@ function renderChecklistInserimento($check, $level = 1, $parent = 0)
</div> </div>
</td>'; </td>';
$result .= ' $result .= '
</tr>'; </tr>';
if(sizeof($check->children)>0){ if (sizeof($check->children) > 0) {
$result .= ' $result .= '
<tr> <tr>
<td colspan="4" style="padding-left:'.$margin.'px;padding-right:0px;padding-top:0px;padding-bottom:0px;border-top:0px;"> <td colspan="4" style="padding-left:'.$margin.'px;padding-right:0px;padding-top:0px;padding-bottom:0px;border-top:0px;">
<table class="table" style="margin-bottom:0px;"> <table class="table" style="margin-bottom:0px;">
<tbody class="sort" data-sonof="'.$check->id.'">'; <tbody class="sort" data-sonof="'.$check->id.'">';
$children = $record->checks()->where('id_parent', $check->id)->orderBy('order')->get(); $children = $record->checks()->where('id_parent', $check->id)->orderBy('order')->get();
foreach ($children as $child) { foreach ($children as $child) {
$result .= renderChecklistInserimento($child, $level + 1, $check->id); $result .= renderChecklistInserimento($child, $level + 1, $check->id);
} }
$result .= ' $result .= '
</tbody> </tbody>
</table> </table>
@ -181,15 +178,15 @@ function renderChecklistHtml($check, $level = 0)
$user = auth()->getUser(); $user = auth()->getUser();
$enabled = $check->assignedUsers ? $check->assignedUsers->pluck('id')->search($user->id) !== false : true; $enabled = $check->assignedUsers ? $check->assignedUsers->pluck('id')->search($user->id) !== false : true;
$width = 10+20*$level; $width = 10 + 20 * $level;
$result = ' $result = '
<tr> <tr>
<td class="text-center" style="width:30px;"> <td class="text-center" style="width:30px;">
'.(!empty($check->checked_at)?'<img src="'.ROOTDIR.'/templates/interventi/check.png" style="width:10px;">':'').' '.(!empty($check->checked_at) ? '<img src="'.ROOTDIR.'/templates/interventi/check.png" style="width:10px;">' : '').'
</td> </td>
<td style="padding-left:'.$width.'px;"> <td style="padding-left:'.$width.'px;">
<span class="text"><b>'.$check->content.'</b>'.(!empty($check->value)?': '.$check->value:'').'</span> <span class="text"><b>'.$check->content.'</b>'.(!empty($check->value) ? ': '.$check->value : '').'</span>
</td> </td>
</tr>'; </tr>';
@ -199,4 +196,4 @@ function renderChecklistHtml($check, $level = 0)
} }
return $result; return $result;
} }

View File

@ -48,8 +48,8 @@ switch (filter('op')) {
$id_articolo = filter('id_articolo'); $id_articolo = filter('id_articolo');
$database->delete('mg_articolo_attributo', ['id_articolo' => $id_articolo]); $database->delete('mg_articolo_attributo', ['id_articolo' => $id_articolo]);
foreach ($valori as $valore){ foreach ($valori as $valore) {
$database->insert('mg_articolo_attributo', [ $database->insert('mg_articolo_attributo', [
'id_articolo' => $id_articolo, 'id_articolo' => $id_articolo,
'id_valore' => $valore, 'id_valore' => $valore,

View File

@ -45,7 +45,7 @@ class Combinazione extends Model
public function delete() public function delete()
{ {
$database = database(); $database = database();
// Rimozione articoli collegati // Rimozione articoli collegati
$articoli = $this->articoli; $articoli = $this->articoli;
foreach ($articoli as $articolo) { foreach ($articoli as $articolo) {
@ -116,7 +116,7 @@ class Combinazione extends Model
$articolo->codice = $this->codice.'-'.implode('|', $variante); $articolo->codice = $this->codice.'-'.implode('|', $variante);
$articolo->save(); $articolo->save();
} }
// Uso di un articolo già esistente // Uso di un articolo già esistente
else { else {
$articolo = Articolo::find($id_articolo); $articolo = Articolo::find($id_articolo);

View File

@ -273,8 +273,8 @@ switch (post('op')) {
// Eliminazione riga // Eliminazione riga
case 'delete_riga': case 'delete_riga':
$id_righe = (array)post('righe'); $id_righe = (array) post('righe');
foreach ($id_righe as $id_riga) { foreach ($id_righe as $id_riga) {
$riga = Articolo::find($id_riga) ?: Riga::find($id_riga); $riga = Articolo::find($id_riga) ?: Riga::find($id_riga);
$riga = $riga ?: Descrizione::find($id_riga); $riga = $riga ?: Descrizione::find($id_riga);
@ -290,8 +290,8 @@ switch (post('op')) {
// Duplicazione riga // Duplicazione riga
case 'copy_riga': case 'copy_riga':
$id_righe = (array)post('righe'); $id_righe = (array) post('righe');
foreach ($id_righe as $id_riga) { foreach ($id_righe as $id_riga) {
$riga = Articolo::find($id_riga) ?: Riga::find($id_riga); $riga = Articolo::find($id_riga) ?: Riga::find($id_riga);
$riga = $riga ?: Descrizione::find($id_riga); $riga = $riga ?: Descrizione::find($id_riga);
@ -546,7 +546,7 @@ switch (post('op')) {
$dir = 'entrata'; $dir = 'entrata';
if (!empty($barcode)) { if (!empty($barcode)) {
$id_articolo = $dbo->selectOne('mg_articoli', 'id', ['deleted_at' => null, 'attivo' => 1, 'barcode' => $barcode])['id']; $id_articolo = $dbo->selectOne('mg_articoli', 'id', ['deleted_at' => null, 'attivo' => 1, 'barcode' => $barcode])['id'];
} }
if (!empty($id_articolo)) { if (!empty($id_articolo)) {
@ -566,7 +566,7 @@ switch (post('op')) {
$id_iva = ($contratto->anagrafica->idiva_vendite ?: $originale->idiva_vendita) ?: setting('Iva predefinita'); $id_iva = ($contratto->anagrafica->idiva_vendite ?: $originale->idiva_vendita) ?: setting('Iva predefinita');
$id_anagrafica = $contratto->idanagrafica; $id_anagrafica = $contratto->idanagrafica;
$prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA'); $prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
// CALCOLO PREZZO UNITARIO // CALCOLO PREZZO UNITARIO
$prezzo_unitario = 0; $prezzo_unitario = 0;
$sconto = 0; $sconto = 0;
@ -589,7 +589,7 @@ switch (post('op')) {
continue; continue;
} }
} }
} }
if (empty($prezzo_unitario)) { if (empty($prezzo_unitario)) {
// Prezzi listini clienti // Prezzi listini clienti
$listino = $dbo->fetchOne('SELECT sconto_percentuale AS sconto_percentuale_listino, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario_listino $listino = $dbo->fetchOne('SELECT sconto_percentuale AS sconto_percentuale_listino, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario_listino
@ -617,7 +617,6 @@ switch (post('op')) {
$articolo->setProvvigione($provvigione ?: 0, 'PRC'); $articolo->setProvvigione($provvigione ?: 0, 'PRC');
$articolo->save(); $articolo->save();
flash()->info(tr('Nuovo articolo aggiunto!')); flash()->info(tr('Nuovo articolo aggiunto!'));
} else { } else {
$response['error'] = tr('Nessun articolo corrispondente a magazzino'); $response['error'] = tr('Nessun articolo corrispondente a magazzino');
@ -653,7 +652,7 @@ switch (post('op')) {
$articolo = Articolo::build($fattura, $originale); $articolo = Articolo::build($fattura, $originale);
$articolo->id_dettaglio_fornitore = post('id_dettaglio_fornitore') ?: null; $articolo->id_dettaglio_fornitore = post('id_dettaglio_fornitore') ?: null;
} }
if ($articolo['prezzo_unitario'] != $riga['price']) { if ($articolo['prezzo_unitario'] != $riga['price']) {
$articolo->setPrezzoUnitario($riga['price'], $articolo->idiva); $articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
$articolo->save(); $articolo->save();
@ -665,7 +664,7 @@ switch (post('op')) {
flash()->info(tr('_NUM_ prezzi modificati!', [ flash()->info(tr('_NUM_ prezzi modificati!', [
'_NUM_' => $numero_totale, '_NUM_' => $numero_totale,
])); ]));
} else if ($numero_totale == 1) { } elseif ($numero_totale == 1) {
flash()->info(tr('_NUM_ prezzo modificato!', [ flash()->info(tr('_NUM_ prezzo modificato!', [
'_NUM_' => $numero_totale, '_NUM_' => $numero_totale,
])); ]));
@ -674,4 +673,4 @@ switch (post('op')) {
} }
break; break;
} }

View File

@ -130,13 +130,12 @@ switch (post('op')) {
case 'renew_contratto': case 'renew_contratto':
$numero_totale = 0; $numero_totale = 0;
// Lettura righe selezionate // Lettura righe selezionate
foreach ($id_records as $id) { foreach ($id_records as $id) {
$contratto = Contratto::find($id); $contratto = Contratto::find($id);
$rinnova = !empty($contratto->data_accettazione) && !empty($contratto->data_conclusione) && $contratto->data_accettazione != '0000-00-00' && $contratto->data_conclusione != '0000-00-00' && $contratto->stato->is_completato && $contratto->rinnovabile; $rinnova = !empty($contratto->data_accettazione) && !empty($contratto->data_conclusione) && $contratto->data_accettazione != '0000-00-00' && $contratto->data_conclusione != '0000-00-00' && $contratto->stato->is_completato && $contratto->rinnovabile;
if($rinnova) { if ($rinnova) {
$diff = $contratto->data_conclusione->diffAsCarbonInterval($contratto->data_accettazione); $diff = $contratto->data_conclusione->diffAsCarbonInterval($contratto->data_accettazione);
$new_contratto = $contratto->replicate(); $new_contratto = $contratto->replicate();
@ -208,7 +207,7 @@ switch (post('op')) {
// Cambio stato precedente contratto in concluso (non più pianificabile) // Cambio stato precedente contratto in concluso (non più pianificabile)
$dbo->query('UPDATE `co_contratti` SET `rinnovabile`= 0, `idstato`= (SELECT id FROM co_staticontratti WHERE descrizione = \'Concluso\') WHERE `id` = '.prepare($contratto->id)); $dbo->query('UPDATE `co_contratti` SET `rinnovabile`= 0, `idstato`= (SELECT id FROM co_staticontratti WHERE descrizione = \'Concluso\') WHERE `id` = '.prepare($contratto->id));
$numero_totale++; ++$numero_totale;
} }
} }
@ -223,20 +222,20 @@ switch (post('op')) {
case 'cambia_stato': case 'cambia_stato':
$id_stato = post('id_stato'); $id_stato = post('id_stato');
$n_contratti = 0; $n_contratti = 0;
$stato = StatoContratto::find($id_stato); $stato = StatoContratto::find($id_stato);
// Lettura righe selezionate // Lettura righe selezionate
foreach ($id_records as $id) { foreach ($id_records as $id) {
$contratto = Contratto::find($id); $contratto = Contratto::find($id);
$contratto->stato()->associate($stato); $contratto->stato()->associate($stato);
$contratto->save(); $contratto->save();
++$n_contratti; ++$n_contratti;
} }
if ($n_contratti > 0) { if ($n_contratti > 0) {
flash()->info(tr('Stato aggiornato a _NUM_ contratti!', [ flash()->info(tr('Stato aggiornato a _NUM_ contratti!', [
'_NUM_' => $n_contratti, '_NUM_' => $n_contratti,
@ -244,7 +243,7 @@ switch (post('op')) {
} else { } else {
flash()->warning(tr('Nessuno stato aggiornato!')); flash()->warning(tr('Nessuno stato aggiornato!'));
} }
break; break;
} }
@ -253,7 +252,7 @@ $operations['crea_fattura'] = [
'data' => [ 'data' => [
'title' => tr('Fatturare i _TYPE_ selezionati?', ['_TYPE_' => strtolower($module['name'])]), 'title' => tr('Fatturare i _TYPE_ selezionati?', ['_TYPE_' => strtolower($module['name'])]),
'msg' => '{[ "type": "checkbox", "label": "<small>'.tr('Aggiungere alle fatture di vendita non ancora emesse?').'</small>", "placeholder": "'.tr('Aggiungere alle fatture esistenti non ancora emesse?').'", "name": "accodare" ]}<br> 'msg' => '{[ "type": "checkbox", "label": "<small>'.tr('Aggiungere alle fatture di vendita non ancora emesse?').'</small>", "placeholder": "'.tr('Aggiungere alle fatture esistenti non ancora emesse?').'", "name": "accodare" ]}<br>
{[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_segment", "required": 1, "ajax-source": "segmenti", "select-options": '.json_encode(["id_module" => $id_fatture, 'is_sezionale' => 1]).', "value": "'.$id_segment.'", "select-options-escape": true ]}<br> {[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_segment", "required": 1, "ajax-source": "segmenti", "select-options": '.json_encode(['id_module' => $id_fatture, 'is_sezionale' => 1]).', "value": "'.$id_segment.'", "select-options-escape": true ]}<br>
{[ "type": "select", "label": "'.tr('Tipo documento').'", "name": "idtipodocumento", "required": 1, "values": "query=SELECT id, CONCAT(codice_tipo_documento_fe, \' - \', descrizione) AS descrizione FROM co_tipidocumento WHERE enabled = 1 AND dir =\'entrata\' ORDER BY codice_tipo_documento_fe", "value": "'.$idtipodocumento.'" ]}', {[ "type": "select", "label": "'.tr('Tipo documento').'", "name": "idtipodocumento", "required": 1, "values": "query=SELECT id, CONCAT(codice_tipo_documento_fe, \' - \', descrizione) AS descrizione FROM co_tipidocumento WHERE enabled = 1 AND dir =\'entrata\' ORDER BY codice_tipo_documento_fe", "value": "'.$idtipodocumento.'" ]}',
'button' => tr('Procedi'), 'button' => tr('Procedi'),
'class' => 'btn btn-lg btn-warning', 'class' => 'btn btn-lg btn-warning',

View File

@ -52,4 +52,4 @@ echo '
echo ' echo '
<button type="button" class="btn btn-primary ask" data-title="'.tr('Duplicare questo contratto?').'" data-msg="'.tr('Clicca su tasto duplica per procedere.').'" data-op="copy" data-button="'.tr('Duplica').'" data-class="btn btn-lg btn-primary" data-backto="record-edit"> <button type="button" class="btn btn-primary ask" data-title="'.tr('Duplicare questo contratto?').'" data-msg="'.tr('Clicca su tasto duplica per procedere.').'" data-op="copy" data-button="'.tr('Duplica').'" data-class="btn btn-lg btn-primary" data-backto="record-edit">
<i class="fa fa-copy"></i> '.tr('Duplica contratto').' <i class="fa fa-copy"></i> '.tr('Duplica contratto').'
</button>'; </button>';

View File

@ -21,7 +21,7 @@ include_once __DIR__.'/../../core.php';
$block_edit = $record['is_completato']; $block_edit = $record['is_completato'];
if (strtotime($record['data_conclusione']) < strtotime($record['data_accettazione']) && !empty(strtotime($record['data_accettazione'])) && !empty(strtotime($record['data_conclusione'])) ) { if (strtotime($record['data_conclusione']) < strtotime($record['data_accettazione']) && !empty(strtotime($record['data_accettazione'])) && !empty(strtotime($record['data_conclusione']))) {
echo ' echo '
<div class="alert alert-warning"><a class="clickable" onclick="$(\'.alert\').hide();"><i class="fa fa-times"></i></a> '.tr('Attenzione! La data di accettazione supera la data di conclusione del contratto. Verificare le informazioni inserite.').'</div>'; <div class="alert alert-warning"><a class="clickable" onclick="$(\'.alert\').hide();"><i class="fa fa-times"></i></a> '.tr('Attenzione! La data di accettazione supera la data di conclusione del contratto. Verificare le informazioni inserite.').'</div>';
} }
@ -135,15 +135,14 @@ echo '
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<?php <?php echo input([
echo input([
'type' => 'ckeditor', 'type' => 'ckeditor',
'use_full_ckeditor' => 0, 'use_full_ckeditor' => 0,
'label' => tr('Condizioni generali di fornitura'), 'label' => tr('Condizioni generali di fornitura'),
'name' => 'condizioni_fornitura', 'name' => 'condizioni_fornitura',
'value' => $record['condizioni_fornitura'], 'value' => $record['condizioni_fornitura'],
]); ]);
?> ?>
</div> </div>
</div> </div>

View File

@ -88,8 +88,8 @@ $righe = $dbo->fetchArray(
?> ?>
<tr> <tr>
<td><?= $riga['codice'] ?></td> <td><?php echo $riga['codice']; ?></td>
<td><?= $riga['descrizione'] ?></td> <td><?php echo $riga['descrizione']; ?></td>
<td> <td>
<div> <div>
{[ "type": "number", "label": "", "data-id":"<?php echo $riga['id']; ?>","name": "nuovo_prezzo_unitario[]", "value": "<?php echo numberFormat($riga['prezzo_unitario'], 2); ?>"]} {[ "type": "number", "label": "", "data-id":"<?php echo $riga['id']; ?>","name": "nuovo_prezzo_unitario[]", "value": "<?php echo numberFormat($riga['prezzo_unitario'], 2); ?>"]}
@ -97,14 +97,14 @@ $righe = $dbo->fetchArray(
</td> </td>
<td class="text-center"><?php <td class="text-center"><?php
if (isset($ultimo_prezzo_preventivo)) { if (isset($ultimo_prezzo_preventivo)) {
echo moneyFormat($ultimo_prezzo_preventivo['prezzo_unitario'], 2) . (!empty($ultimo_prezzo_preventivo['updated_at']) ? ' <br><small class="help-block tip" title="'.dateFormat($ultimo_prezzo_preventivo['updated_at']).'">' . (new Carbon($ultimo_prezzo_preventivo['updated_at']))->diffForHumans().'</small>' : ''); echo moneyFormat($ultimo_prezzo_preventivo['prezzo_unitario'], 2).(!empty($ultimo_prezzo_preventivo['updated_at']) ? ' <br><small class="help-block tip" title="'.dateFormat($ultimo_prezzo_preventivo['updated_at']).'">'.(new Carbon($ultimo_prezzo_preventivo['updated_at']))->diffForHumans().'</small>' : '');
} else { } else {
echo 'n.d.'; echo 'n.d.';
} }
?></td> ?></td>
<td class="text-center"><?php <td class="text-center"><?php
if (isset($ultimo_prezzo_vendita)) { if (isset($ultimo_prezzo_vendita)) {
echo moneyFormat($ultimo_prezzo_vendita['prezzo_unitario'], 2) . (!empty($ultimo_prezzo_vendita['updated_at']) ? ' <br><small class="help-block tip" title="'.dateFormat($ultimo_prezzo_vendita['updated_at']).'">' . (new Carbon($ultimo_prezzo_vendita['updated_at']))->diffForHumans().'</small>' : ''); echo moneyFormat($ultimo_prezzo_vendita['prezzo_unitario'], 2).(!empty($ultimo_prezzo_vendita['updated_at']) ? ' <br><small class="help-block tip" title="'.dateFormat($ultimo_prezzo_vendita['updated_at']).'">'.(new Carbon($ultimo_prezzo_vendita['updated_at']))->diffForHumans().'</small>' : '');
} else { } else {
echo 'n.d.'; echo 'n.d.';
} }

View File

@ -23,9 +23,8 @@ use Modules\Contratti\Contratto;
use Modules\Interventi\Intervento; use Modules\Interventi\Intervento;
/** /**
* Calcolo imponibile contratto (totale_righe - sconto) * Calcolo imponibile contratto (totale_righe - sconto).
*/ */
function get_imponibile_contratto($idcontratto) function get_imponibile_contratto($idcontratto)
{ {
$contratto = Contratto::find($idcontratto); $contratto = Contratto::find($idcontratto);
@ -33,10 +32,8 @@ function get_imponibile_contratto($idcontratto)
return $contratto->totale_imponibile; return $contratto->totale_imponibile;
} }
function get_totale_interventi_contratto($idcontratto) function get_totale_interventi_contratto($idcontratto)
{ {
$interventi = Intervento::where('id_contratto', $idcontratto)->get(); $interventi = Intervento::where('id_contratto', $idcontratto)->get();
$array_interventi = $interventi->toArray(); $array_interventi = $interventi->toArray();

View File

@ -57,7 +57,7 @@ if (!empty($interventi)) {
</td> </td>
<td class="text-right"> <td class="text-right">
'.($intervento->ore_totali<=0 ? '<i class="fa fa-warning tip" style="position:relative;margin-left:-16px;" title="'.tr("Questa sessione è vuota").'" ></i> ': '' ).numberFormat($intervento->ore_totali).' '.($intervento->ore_totali <= 0 ? '<i class="fa fa-warning tip" style="position:relative;margin-left:-16px;" title="'.tr('Questa sessione è vuota').'" ></i> ' : '').numberFormat($intervento->ore_totali).'
</td> </td>
<td class="text-right"> <td class="text-right">
@ -119,7 +119,7 @@ if (!empty($interventi)) {
$tipologie[$sessione->tipo->descrizione]['ore'] += $sessione->ore; $tipologie[$sessione->tipo->descrizione]['ore'] += $sessione->ore;
$tipologie[$sessione->tipo->descrizione]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata; $tipologie[$sessione->tipo->descrizione]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata;
$tipologie[$sessione->tipo->descrizione]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata - $sessione->sconto_totale_viaggio; $tipologie[$sessione->tipo->descrizione]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata - $sessione->sconto_totale_viaggio;
// Raggruppamento per tecnico // Raggruppamento per tecnico
$tecnici[$sessione->anagrafica->ragione_sociale]['ore'] += $sessione->ore; $tecnici[$sessione->anagrafica->ragione_sociale]['ore'] += $sessione->ore;
$tecnici[$sessione->anagrafica->ragione_sociale]['km'] += $sessione->km; $tecnici[$sessione->anagrafica->ragione_sociale]['km'] += $sessione->km;
@ -340,18 +340,18 @@ if (empty($totale_ore_contratto)) {
<th width="10%">'.tr('Ricarico').'</th> <th width="10%">'.tr('Ricarico').'</th>
</tr>'; </tr>';
ksort($tipologie); ksort($tipologie);
foreach ($tipologie as $key => $tipologia){ foreach ($tipologie as $key => $tipologia) {
$margine = $tipologia['ricavo'] - $tipologia['costo']; $margine = $tipologia['ricavo'] - $tipologia['costo'];
$margine_prc = (int)(1 - ($tipologia['costo'] / $tipologia['ricavo'])) * 100; $margine_prc = (int) (1 - ($tipologia['costo'] / $tipologia['ricavo'])) * 100;
$ricarico_prc = ($tipologia['ricavo'] && $tipologia['costo']) ? (int)((($tipologia['ricavo'] / $tipologia['costo']) - 1) * 100) : 100; $ricarico_prc = ($tipologia['ricavo'] && $tipologia['costo']) ? (int) ((($tipologia['ricavo'] / $tipologia['costo']) - 1) * 100) : 100;
echo ' echo '
<tr> <tr>
<td>'.$key.'</td> <td>'.$key.'</td>
<td class="text-right">'.Translator::numberToLocale($tipologia['ore']).'</td> <td class="text-right">'.Translator::numberToLocale($tipologia['ore']).'</td>
<td class="text-right">'.Translator::numberToLocale($tipologia['costo']).' </td> <td class="text-right">'.Translator::numberToLocale($tipologia['costo']).' </td>
<td class="text-right">'.Translator::numberToLocale($tipologia['ricavo']).' </td> <td class="text-right">'.Translator::numberToLocale($tipologia['ricavo']).' </td>
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$margine_prc.'%)</td> <td class="text-right '.($margine > 0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$margine_prc.'%)</td>
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$ricarico_prc.'%)</td> <td class="text-right '.($margine > 0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$ricarico_prc.'%)</td>
</tr>'; </tr>';
} }
echo ' echo '
@ -370,19 +370,19 @@ if (empty($totale_ore_contratto)) {
<th width="10%">'.tr('Ricarico').'</th> <th width="10%">'.tr('Ricarico').'</th>
</tr>'; </tr>';
ksort($tecnici); ksort($tecnici);
foreach ($tecnici as $key => $tecnico){ foreach ($tecnici as $key => $tecnico) {
$margine = $tecnico['ricavo'] - $tecnico['costo']; $margine = $tecnico['ricavo'] - $tecnico['costo'];
$margine_prc = (int)(1 - ($tecnico['costo'] / $tecnico['ricavo'])) * 100; $margine_prc = (int) (1 - ($tecnico['costo'] / $tecnico['ricavo'])) * 100;
$ricarico_prc = ($tecnico['ricavo'] && $tecnico['costo']) ? (int)((($tecnico['ricavo'] / $tecnico['costo']) - 1) * 100) : 100; $ricarico_prc = ($tecnico['ricavo'] && $tecnico['costo']) ? (int) ((($tecnico['ricavo'] / $tecnico['costo']) - 1) * 100) : 100;
echo ' echo '
<tr> <tr>
<td>'.$key.'</td> <td>'.$key.'</td>
<td class="text-right">'.(int)$tecnico['km'].'</td> <td class="text-right">'.(int) $tecnico['km'].'</td>
<td class="text-right">'.Translator::numberToLocale($tecnico['ore']).'</td> <td class="text-right">'.Translator::numberToLocale($tecnico['ore']).'</td>
<td class="text-right">'.Translator::numberToLocale($tecnico['costo']).' </td> <td class="text-right">'.Translator::numberToLocale($tecnico['costo']).' </td>
<td class="text-right">'.Translator::numberToLocale($tecnico['ricavo']).' </td> <td class="text-right">'.Translator::numberToLocale($tecnico['ricavo']).' </td>
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$margine_prc.'%)</td> <td class="text-right '.($margine > 0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$margine_prc.'%)</td>
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$ricarico_prc.'%)</td> <td class="text-right '.($margine > 0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$ricarico_prc.'%)</td>
</tr>'; </tr>';
} }
echo ' echo '
@ -402,18 +402,18 @@ if (empty($totale_ore_contratto)) {
<th width="10%">'.tr('Ricarico').'</th> <th width="10%">'.tr('Ricarico').'</th>
</tr>'; </tr>';
ksort($stati_intervento); ksort($stati_intervento);
foreach ($stati_intervento as $key => $stato){ foreach ($stati_intervento as $key => $stato) {
$margine = $stato['ricavo'] - $stato['costo']; $margine = $stato['ricavo'] - $stato['costo'];
$margine_prc = (int)(1 - ($stato['costo'] / $stato['ricavo'])) * 100; $margine_prc = (int) (1 - ($stato['costo'] / $stato['ricavo'])) * 100;
$ricarico_prc = ($stato['ricavo'] && $stato['costo']) ? (int)((($stato['ricavo'] / $stato['costo']) - 1) * 100) : 100; $ricarico_prc = ($stato['ricavo'] && $stato['costo']) ? (int) ((($stato['ricavo'] / $stato['costo']) - 1) * 100) : 100;
echo ' echo '
<tr> <tr>
<td><div class="img-circle" style="width:18px; height:18px; position:relative; bottom:-2px; background:'.$stato['colore'].'; float:left;"></div> '.$key.'</td> <td><div class="img-circle" style="width:18px; height:18px; position:relative; bottom:-2px; background:'.$stato['colore'].'; float:left;"></div> '.$key.'</td>
<td class="text-right">'.Translator::numberToLocale($stato['ore']).'</td> <td class="text-right">'.Translator::numberToLocale($stato['ore']).'</td>
<td class="text-right">'.Translator::numberToLocale($stato['costo']).' </td> <td class="text-right">'.Translator::numberToLocale($stato['costo']).' </td>
<td class="text-right">'.Translator::numberToLocale($stato['ricavo']).' </td> <td class="text-right">'.Translator::numberToLocale($stato['ricavo']).' </td>
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$margine_prc.'%)</td> <td class="text-right '.($margine > 0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$margine_prc.'%)</td>
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$ricarico_prc.'%)</td> <td class="text-right '.($margine > 0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$ricarico_prc.'%)</td>
</tr>'; </tr>';
} }
echo ' echo '
@ -431,38 +431,38 @@ if (empty($totale_ore_contratto)) {
<th width="10%">'.tr('Ricarico').'</th> <th width="10%">'.tr('Ricarico').'</th>
</tr>'; </tr>';
ksort($materiali_art); ksort($materiali_art);
foreach ($materiali_art as $key => $materiali_array1){ foreach ($materiali_art as $key => $materiali_array1) {
foreach ($materiali_array1 as $materiali_array2){ foreach ($materiali_array1 as $materiali_array2) {
foreach ($materiali_array2 as $materiale){ foreach ($materiali_array2 as $materiale) {
$margine = $materiale['ricavo'] - $materiale['costo']; $margine = $materiale['ricavo'] - $materiale['costo'];
$margine_prc = (int)(1 - ($materiale['costo'] / $materiale['ricavo'])) * 100; $margine_prc = (int) (1 - ($materiale['costo'] / $materiale['ricavo'])) * 100;
$ricarico_prc = ($materiale['ricavo'] && $materiale['costo']) ? (int)((($materiale['ricavo'] / $materiale['costo']) - 1) * 100) : 100; $ricarico_prc = ($materiale['ricavo'] && $materiale['costo']) ? (int) ((($materiale['ricavo'] / $materiale['costo']) - 1) * 100) : 100;
echo ' echo '
<tr> <tr>
<td>'.Modules::link('Articoli', $materiale['id'], $key).'</td> <td>'.Modules::link('Articoli', $materiale['id'], $key).'</td>
<td class="text-center">'.$materiale['qta'].'</td> <td class="text-center">'.$materiale['qta'].'</td>
<td class="text-right">'.Translator::numberToLocale($materiale['costo']).' </td> <td class="text-right">'.Translator::numberToLocale($materiale['costo']).' </td>
<td class="text-right">'.Translator::numberToLocale($materiale['ricavo']).' </td> <td class="text-right">'.Translator::numberToLocale($materiale['ricavo']).' </td>
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$margine_prc.'%)</td> <td class="text-right '.($margine > 0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$margine_prc.'%)</td>
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$ricarico_prc.'%)</td> <td class="text-right '.($margine > 0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$ricarico_prc.'%)</td>
</tr>'; </tr>';
} }
} }
} }
ksort($materiali_righe); ksort($materiali_righe);
foreach ($materiali_righe as $key => $materiale){ foreach ($materiali_righe as $key => $materiale) {
$margine = $materiale['ricavo'] - $materiale['costo']; $margine = $materiale['ricavo'] - $materiale['costo'];
$margine_prc = (int)(1 - ($materiale['costo'] / $materiale['ricavo'])) * 100; $margine_prc = (int) (1 - ($materiale['costo'] / $materiale['ricavo'])) * 100;
$ricarico_prc = ($materiale['ricavo'] && $materiale['costo']) ? (int)((($materiale['ricavo'] / $materiale['costo']) - 1) * 100) : 100; $ricarico_prc = ($materiale['ricavo'] && $materiale['costo']) ? (int) ((($materiale['ricavo'] / $materiale['costo']) - 1) * 100) : 100;
echo ' echo '
<tr> <tr>
<td>'.$key.'</td> <td>'.$key.'</td>
<td class="text-center">'.$materiale['qta'].'</td> <td class="text-center">'.$materiale['qta'].'</td>
<td class="text-right">'.Translator::numberToLocale($materiale['costo']).' </td> <td class="text-right">'.Translator::numberToLocale($materiale['costo']).' </td>
<td class="text-right">'.Translator::numberToLocale($materiale['ricavo']).' </td> <td class="text-right">'.Translator::numberToLocale($materiale['ricavo']).' </td>
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$margine_prc.'%)</td> <td class="text-right '.($margine > 0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$margine_prc.'%)</td>
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$ricarico_prc.'%)</td> <td class="text-right '.($margine > 0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$ricarico_prc.'%)</td>
</tr>'; </tr>';
} }
echo ' echo '

View File

@ -56,7 +56,7 @@ $result = [
]; ];
// Leggo la provvigione predefinita per l'anagrafica // Leggo la provvigione predefinita per l'anagrafica
$result['provvigione_default'] = $dbo->fetchOne('SELECT provvigione_default FROM an_anagrafiche WHERE idanagrafica='.prepare($documento->idagente))['provvigione_default']; $result['provvigione_default'] = $dbo->fetchOne('SELECT provvigione_default FROM an_anagrafiche WHERE idanagrafica='.prepare($documento->idagente))['provvigione_default'];
// Leggo l'iva predefinita per l'anagrafica e se non c'è leggo quella predefinita generica // 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($documento['idanagrafica'])); $iva = $dbo->fetchArray('SELECT idiva_vendite AS idiva FROM an_anagrafiche WHERE idanagrafica='.prepare($documento['idanagrafica']));

View File

@ -59,11 +59,11 @@ foreach ($righe as $riga) {
echo ' echo '
<tr data-id="'.$riga->id.'" data-type="'.get_class($riga).'"> <tr data-id="'.$riga->id.'" data-type="'.get_class($riga).'">
<td class="text-center">'; <td class="text-center">';
if (!$block_edit) { if (!$block_edit) {
echo ' echo '
<input class="check" type="checkbox"/>'; <input class="check" type="checkbox"/>';
} }
echo ' echo '
</td> </td>
<td class="text-center"> <td class="text-center">
@ -90,13 +90,13 @@ foreach ($righe as $riga) {
if ($riga->isArticolo() && !empty($riga->articolo->barcode)) { if ($riga->isArticolo() && !empty($riga->articolo->barcode)) {
echo ' echo '
<br><small><i class="fa fa-barcode"></i> '.$riga->articolo->barcode.'</small>'; <br><small><i class="fa fa-barcode"></i> '.$riga->articolo->barcode.'</small>';
} }
if (!empty($riga->note)) { if (!empty($riga->note)) {
echo ' echo '
<br><small class="label label-default">'.nl2br($riga->note).'</small>'; <br><small class="label label-default">'.nl2br($riga->note).'</small>';
} }
echo ' echo '
</td>'; </td>';
if ($riga->isDescrizione()) { if ($riga->isDescrizione()) {
@ -106,38 +106,38 @@ foreach ($righe as $riga) {
<td></td> <td></td>
<td></td>'; <td></td>';
} else { } else {
// Quantità e unità di misura // Quantità e unità di misura
echo ' echo '
<td class="text-center"> <td class="text-center">
{[ "type": "number", "name": "qta_'.$riga->id.'", "value": "'.$riga->qta.'", "min-value": "0", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-after": "<span class=\'tip\' title=\''.tr('Quantità evasa').' / '.tr('totale').': '.tr('_QTA_ / _TOT_', ['_QTA_' => numberFormat($riga->qta_evasa, 'qta'), '_TOT_' => numberFormat($riga->qta, 'qta')]).'\'>'.$riga->um.' <small><i class=\'text-muted fa fa-info-circle\'></i></small></span>", "disabled": "'.($riga->isSconto() ? 1 : 0).'", "disabled": "'.$block_edit.'" ]} {[ "type": "number", "name": "qta_'.$riga->id.'", "value": "'.$riga->qta.'", "min-value": "0", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-after": "<span class=\'tip\' title=\''.tr('Quantità evasa').' / '.tr('totale').': '.tr('_QTA_ / _TOT_', ['_QTA_' => numberFormat($riga->qta_evasa, 'qta'), '_TOT_' => numberFormat($riga->qta, 'qta')]).'\'>'.$riga->um.' <small><i class=\'text-muted fa fa-info-circle\'></i></small></span>", "disabled": "'.($riga->isSconto() ? 1 : 0).'", "disabled": "'.$block_edit.'" ]}
<div class="progress" style="height:4px;">'; <div class="progress" style="height:4px;">';
// Visualizzazione evasione righe per documento // Visualizzazione evasione righe per documento
$evasione_bar = []; $evasione_bar = [];
$evasione_bar['dt_righe_ddt'] = 'info'; $evasione_bar['dt_righe_ddt'] = 'info';
$evasione_bar['co_righe_documenti'] = 'primary'; $evasione_bar['co_righe_documenti'] = 'primary';
$evasione_bar['in_righe_interventi'] = 'warning'; $evasione_bar['in_righe_interventi'] = 'warning';
$evasione_bar['or_righe_ordini'] = 'success'; $evasione_bar['or_righe_ordini'] = 'success';
foreach ($evasione_bar as $table => $color) { foreach ($evasione_bar as $table => $color) {
$righe_ev = $dbo->table($table)->where('original_id', $riga->id)->where('original_type', get_class($riga))->get(); $righe_ev = $dbo->table($table)->where('original_id', $riga->id)->where('original_type', get_class($riga))->get();
$perc_ev = $righe_ev->sum('qta') * 100 / $riga->qta; $perc_ev = $righe_ev->sum('qta') * 100 / $riga->qta;
if ($perc_ev > 0) { if ($perc_ev > 0) {
echo ' echo '
<div class="progress-bar progress-bar-'.$color.'" style="width:'.$perc_ev.'%"></div>'; <div class="progress-bar progress-bar-'.$color.'" style="width:'.$perc_ev.'%"></div>';
} }
} }
echo ' echo '
</div> </div>
</td>'; </td>';
// Prezzi unitari // Prezzi unitari
echo ' echo '
<td class="text-right">'; <td class="text-right">';
// Provvigione riga // Provvigione riga
if (abs($riga->provvigione_unitaria) > 0) { if (abs($riga->provvigione_unitaria) > 0) {
$text = provvigioneInfo($riga); $text = provvigioneInfo($riga);
echo '<span class="pull-left text-info" title="'.$text.'"><i class="fa fa-handshake-o"></i></span>'; echo '<span class="pull-left text-info" title="'.$text.'"><i class="fa fa-handshake-o"></i></span>';
} }
echo moneyFormat($riga->prezzo_unitario_corrente); echo moneyFormat($riga->prezzo_unitario_corrente);
if ($dir == 'entrata' && $riga->costo_unitario != 0) { if ($dir == 'entrata' && $riga->costo_unitario != 0) {
echo ' echo '
@ -155,7 +155,7 @@ foreach ($righe as $riga) {
echo ' echo '
</td>'; </td>';
// Sconto unitario // Sconto unitario
if (!$block_edit) { if (!$block_edit) {
echo ' echo '
@ -169,8 +169,8 @@ foreach ($righe as $riga) {
<td class="text-right"> <td class="text-right">
'.moneyFormat($riga->importo); '.moneyFormat($riga->importo);
// Iva // Iva
echo ' echo '
<br><small class="'.(($riga->aliquota->deleted_at) ? 'text-red' : '').' text-muted">'.$riga->aliquota->descrizione.(($riga->aliquota->esente) ? ' ('.$riga->aliquota->codice_natura_fe.')' : null).'</small> <br><small class="'.(($riga->aliquota->deleted_at) ? 'text-red' : '').' text-muted">'.$riga->aliquota->descrizione.(($riga->aliquota->esente) ? ' ('.$riga->aliquota->codice_natura_fe.')' : null).'</small>
</td>'; </td>';
} }
@ -304,7 +304,7 @@ if ($totale != $netto_a_pagare) {
} }
// Provvigione // Provvigione
if(!empty($contratto->provvigione)) { if (!empty($contratto->provvigione)) {
echo ' echo '
<tr> <tr>
<td colspan="'.$colspan.'" class="text-right"> <td colspan="'.$colspan.'" class="text-right">
@ -325,7 +325,7 @@ if(!empty($contratto->provvigione)) {
'.moneyFormat($netto_a_pagare - $contratto->provvigione, 2).' '.moneyFormat($netto_a_pagare - $contratto->provvigione, 2).'
</td> </td>
<td></td> <td></td>
</tr>'; </tr>';
} }
echo ' echo '

View File

@ -257,7 +257,7 @@ class Contratto extends Document
$interventi = $this->interventi; $interventi = $this->interventi;
$stato_intervento = \Modules\Interventi\Stato::where('codice', $codice_intervento)->first(); $stato_intervento = \Modules\Interventi\Stato::where('codice', $codice_intervento)->first();
foreach ($interventi as $intervento) { foreach ($interventi as $intervento) {
if ($intervento->stato->is_completato==1) { if ($intervento->stato->is_completato == 1) {
$intervento->stato()->associate($stato_intervento); $intervento->stato()->associate($stato_intervento);
$intervento->save(); $intervento->save();
} }

View File

@ -69,7 +69,7 @@ if (!empty($rs)) {
} }
} else { } else {
$scadenza = tr('scaduto da _DAYS_ giorni'); $scadenza = tr('scaduto da _DAYS_ giorni');
} }
$scadenza = str_replace('_DAYS_', abs($r['giorni_rimanenti']), $scadenza); $scadenza = str_replace('_DAYS_', abs($r['giorni_rimanenti']), $scadenza);

View File

@ -42,14 +42,14 @@ include_once __DIR__.'/../../core.php';
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<?php <?php
echo input([ echo input([
'type' => 'textarea', 'type' => 'textarea',
'label' => tr('Codice'), 'label' => tr('Codice'),
'name' => 'content', 'name' => 'content',
'required' => 1, 'required' => 1,
'value' => '{[ "type": "text", "label": "|label|", "name": "|name|", "value": "|value|" ]}', 'value' => '{[ "type": "text", "label": "|label|", "name": "|name|", "value": "|value|" ]}',
]); ]);
?> ?>
</div> </div>
</div> </div>

View File

@ -58,13 +58,13 @@ include_once __DIR__.'/../../core.php';
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<?php <?php
echo input([ echo input([
'type' => 'textarea', 'type' => 'textarea',
'label' => tr('Codice'), 'label' => tr('Codice'),
'name' => 'content', 'name' => 'content',
'value' => $record['content'], 'value' => $record['content'],
]); ]);
?> ?>
</div> </div>
</div> </div>
</form> </form>

View File

@ -189,11 +189,11 @@ switch (filter('op')) {
WHERE WHERE
`zz_events`.`is_bank_holiday` = 0 `zz_events`.`is_bank_holiday` = 0
AND (`zz_events`.`is_recurring` = 1 AND AND (`zz_events`.`is_recurring` = 1 AND
DAYOFYEAR(`zz_events`.`data`) BETWEEN DAYOFYEAR('.prepare($start).') AND IF(YEAR('.prepare($start).') = YEAR('.prepare($end).'), DAYOFYEAR('.prepare($end).'), DAYOFYEAR('.prepare(date('Y-m-d', strtotime($end. '-1 day'))).')) DAYOFYEAR(`zz_events`.`data`) BETWEEN DAYOFYEAR('.prepare($start).') AND IF(YEAR('.prepare($start).') = YEAR('.prepare($end).'), DAYOFYEAR('.prepare($end).'), DAYOFYEAR('.prepare(date('Y-m-d', strtotime($end.'-1 day'))).'))
) )
OR OR
(`zz_events`.`is_recurring` = 0 AND `zz_events`.`data` >= '.prepare($start).' AND `zz_events`.`data` <= '.prepare($end).')'; (`zz_events`.`is_recurring` = 0 AND `zz_events`.`data` >= '.prepare($start).' AND `zz_events`.`data` <= '.prepare($end).')';
//echo $query; //echo $query;
$eventi = $dbo->fetchArray($query); $eventi = $dbo->fetchArray($query);
@ -202,7 +202,7 @@ switch (filter('op')) {
$results[] = [ $results[] = [
'id' => $modulo_eventi->id.'_'.$evento['id'], 'id' => $modulo_eventi->id.'_'.$evento['id'],
'title' => '<b>'.tr('Evento').':</b> '.$evento['nome'].'</b>', 'title' => '<b>'.tr('Evento').':</b> '.$evento['nome'].'</b>',
'start' => ($evento['is_recurring'] ? date('Y-', strtotime($start)).date('m-d', strtotime($evento['data'])): $evento['data']), 'start' => ($evento['is_recurring'] ? date('Y-', strtotime($start)).date('m-d', strtotime($evento['data'])) : $evento['data']),
//'end' => $evento['data'], //'end' => $evento['data'],
'extendedProps' => [ 'extendedProps' => [
'link' => base_path().'/editor.php?id_module='.$modulo_eventi->id.'&id_record='.$evento['id'], 'link' => base_path().'/editor.php?id_module='.$modulo_eventi->id.'&id_record='.$evento['id'],
@ -343,14 +343,13 @@ switch (filter('op')) {
$rs = $dbo->fetchArray($query); $rs = $dbo->fetchArray($query);
if (!empty($rs[0]['cliente'])){ if (!empty($rs[0]['cliente'])) {
$tooltip = '<b>Prev. '.$rs[0]['numero'].'</b> '.$rs[0]['nome'].''.(($rs[0]['have_attachments']) ? ' <i class="fa fa-paperclip" aria-hidden="true"></i>' : '').'<br><b>'.tr('Cliente').':</b> '.$rs[0]['cliente']; $tooltip = '<b>Prev. '.$rs[0]['numero'].'</b> '.$rs[0]['nome'].''.(($rs[0]['have_attachments']) ? ' <i class="fa fa-paperclip" aria-hidden="true"></i>' : '').'<br><b>'.tr('Cliente').':</b> '.$rs[0]['cliente'];
}else{ } else {
$tooltip = tr('Rilascia per aggiungere l\'attività...'); $tooltip = tr('Rilascia per aggiungere l\'attività...');
} }
} }
$tooltip .= ' $tooltip .= '
<script type="text/javascript"> <script type="text/javascript">
$(".shorten").shorten({ $(".shorten").shorten({
@ -359,10 +358,8 @@ switch (filter('op')) {
showChars : 200 showChars : 200
}); });
</script>'; </script>';
echo $tooltip; echo $tooltip;
} }
break; break;
@ -479,7 +476,6 @@ switch (filter('op')) {
break; break;
case 'calendario_eventi': case 'calendario_eventi':
$start = filter('start'); $start = filter('start');
$end = filter('end'); $end = filter('end');
@ -488,20 +484,20 @@ switch (filter('op')) {
WHERE `zz_events`.`is_bank_holiday` = 1 WHERE `zz_events`.`is_bank_holiday` = 1
AND AND
(`zz_events`.`is_recurring` = 1 (`zz_events`.`is_recurring` = 1
AND DAYOFYEAR(`zz_events`.`data`) BETWEEN DAYOFYEAR('.prepare($start).') AND IF(YEAR('.prepare($start).') = YEAR('.prepare($end).'), DAYOFYEAR('.prepare($end).'), DAYOFYEAR('.prepare(date('Y-m-d', strtotime($end. '-1 day'))).')) ) AND DAYOFYEAR(`zz_events`.`data`) BETWEEN DAYOFYEAR('.prepare($start).') AND IF(YEAR('.prepare($start).') = YEAR('.prepare($end).'), DAYOFYEAR('.prepare($end).'), DAYOFYEAR('.prepare(date('Y-m-d', strtotime($end.'-1 day'))).')) )
OR OR
(`zz_events`.`is_recurring` = 0 AND `zz_events`.`data` >= '.prepare($start).' AND `zz_events`.`data` <= '.prepare($end).')'; (`zz_events`.`is_recurring` = 0 AND `zz_events`.`data` >= '.prepare($start).' AND `zz_events`.`data` <= '.prepare($end).')';
$eventi = $dbo->fetchArray($query); $eventi = $dbo->fetchArray($query);
$results = []; $results = [];
foreach ($eventi as $evento) { foreach ($eventi as $evento) {
$results[] = [ $results[] = [
'id' => $evento['id'], 'id' => $evento['id'],
'title' => $evento['nome'], 'title' => $evento['nome'],
'start' => ($evento['is_recurring'] ? date('Y-', strtotime($start)).date('m-d', strtotime($evento['data'])): $evento['data']), 'start' => ($evento['is_recurring'] ? date('Y-', strtotime($start)).date('m-d', strtotime($evento['data'])) : $evento['data']),
//'end' => date('Y-m-d', strtotime($evento['data']. '+1 day')), //'end' => date('Y-m-d', strtotime($evento['data']. '+1 day')),
'display' => "background", 'display' => 'background',
'allDay' => true, 'allDay' => true,
'overlap' => true, 'overlap' => true,
]; ];

View File

@ -19,6 +19,7 @@
*/ */
use Carbon\Carbon; use Carbon\Carbon;
include_once __DIR__.'/../../core.php'; include_once __DIR__.'/../../core.php';
// Individuazione dati selezionabili // Individuazione dati selezionabili
@ -47,7 +48,7 @@ if (!isset($_SESSION['dashboard']['idtecnici'])) {
$_SESSION['dashboard']['idtecnici'] = ["'-1'"]; $_SESSION['dashboard']['idtecnici'] = ["'-1'"];
foreach ($tecnici_disponibili as $tecnico) { foreach ($tecnici_disponibili as $tecnico) {
if(($user['gruppo']=='Tecnici' && $user['idanagrafica']==$tecnico['id']) || $user['gruppo']!='Tecnici'){ if (($user['gruppo'] == 'Tecnici' && $user['idanagrafica'] == $tecnico['id']) || $user['gruppo'] != 'Tecnici') {
$_SESSION['dashboard']['idtecnici'][] = "'".$tecnico['id']."'"; $_SESSION['dashboard']['idtecnici'][] = "'".$tecnico['id']."'";
} }
} }
@ -315,9 +316,8 @@ WHERE (SELECT COUNT(*) FROM in_interventi_tecnici WHERE in_interventi_tecnici.id
$chiave = $data->format('mY'); $chiave = $data->format('mY');
$testo = $data->formatLocalized('%B %Y'); $testo = $data->formatLocalized('%B %Y');
if (checkdate($data->format('m'), $data->format('d'), $data->format('Y'))) {
if (checkdate($data->format('m'), $data->format('d'), $data->format('Y'))){ echo '
echo '
<option value="'.$chiave.'">'.ucfirst($testo).'</option>'; <option value="'.$chiave.'">'.ucfirst($testo).'</option>';
} }
} }
@ -347,15 +347,15 @@ $days = [
4 => 'Giovedì', 4 => 'Giovedì',
5 => 'Venerdì', 5 => 'Venerdì',
6 => 'Sabato', 6 => 'Sabato',
0 => 'Domenica' 0 => 'Domenica',
]; ];
$working_days = explode(",",setting('Giorni lavorativi')); $working_days = explode(',', setting('Giorni lavorativi'));
$non_working_days = []; $non_working_days = [];
foreach ($days as $key => $day) { foreach ($days as $key => $day) {
if (!in_array($day, $working_days)) { if (!in_array($day, $working_days)) {
array_push($non_working_days, $key); array_push($non_working_days, $key);
} }
} }
$modulo_interventi = Modules::get('Interventi'); $modulo_interventi = Modules::get('Interventi');
@ -671,7 +671,7 @@ globals.dashboard = {
}); });
},'; },';
if(isMobile() && setting('Utilizzare i tooltip sul calendario')){ if (isMobile() && setting('Utilizzare i tooltip sul calendario')) {
echo ' echo '
eventClick: function(info) { eventClick: function(info) {
let link = info.event.extendedProps.link; let link = info.event.extendedProps.link;
@ -688,7 +688,7 @@ if(isMobile() && setting('Utilizzare i tooltip sul calendario')){
location.href = link; location.href = link;
} }
},'; },';
}else{ } else {
echo ' echo '
eventClick: function(info) { eventClick: function(info) {
if (info.event.extendedProps.link !== undefined) { if (info.event.extendedProps.link !== undefined) {

View File

@ -58,7 +58,7 @@ foreach ($moduli as $module_id => $note) {
<table class="table table-hover"> <table class="table table-hover">
<tr> <tr>
<th width="15%" >'.tr('Riferimento').'</th> <th width="15%" >'.tr('Riferimento').'</th>
<th width="20%" >'.(($modulo->title == 'Fatture di acquisto' || $modulo->title == 'Ordini fornitore' || $modulo->title == 'Ddt in entrata') ? tr('Fornitore'): tr('Cliente')).'</th> <th width="20%" >'.(($modulo->title == 'Fatture di acquisto' || $modulo->title == 'Ordini fornitore' || $modulo->title == 'Ddt in entrata') ? tr('Fornitore') : tr('Cliente')).'</th>
<th>'.tr('Contenuto').'</th> <th>'.tr('Contenuto').'</th>
<th width="20%" class="text-center">'.tr('Data di notifica').'</th> <th width="20%" class="text-center">'.tr('Data di notifica').'</th>
<th class="text-center">#</th> <th class="text-center">#</th>
@ -66,33 +66,33 @@ foreach ($moduli as $module_id => $note) {
foreach ($note as $nota) { foreach ($note as $nota) {
$class = (strtotime($nota->notification_date) < strtotime(date('Y-m-d')) && !empty($nota->notification_date)) ? 'danger' : ''; $class = (strtotime($nota->notification_date) < strtotime(date('Y-m-d')) && !empty($nota->notification_date)) ? 'danger' : '';
$documento = ''; $documento = '';
if ($modulo->title == 'Attività') { if ($modulo->title == 'Attività') {
$documento = $dbo->fetchOne("SELECT in_interventi.codice AS numero, ragione_sociale FROM zz_notes INNER JOIN in_interventi ON (in_interventi.id = zz_notes.id_record AND zz_notes.id_module=(SELECT id FROM zz_modules WHERE title = 'Attività')) INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = in_interventi.idanagrafica"); $documento = $dbo->fetchOne("SELECT in_interventi.codice AS numero, ragione_sociale FROM zz_notes INNER JOIN in_interventi ON (in_interventi.id = zz_notes.id_record AND zz_notes.id_module=(SELECT id FROM zz_modules WHERE title = 'Attività')) INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = in_interventi.idanagrafica");
} else if ($modulo->title == 'Fatture di vendita') { } elseif ($modulo->title == 'Fatture di vendita') {
$documento = $dbo->fetchOne("SELECT numero_esterno AS numero, ragione_sociale FROM zz_notes INNER JOIN co_documenti ON (co_documenti.id = zz_notes.id_record AND zz_notes.id_module=(SELECT id FROM zz_modules WHERE title = 'Fatture di vendita')) INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = co_documenti.idanagrafica"); $documento = $dbo->fetchOne("SELECT numero_esterno AS numero, ragione_sociale FROM zz_notes INNER JOIN co_documenti ON (co_documenti.id = zz_notes.id_record AND zz_notes.id_module=(SELECT id FROM zz_modules WHERE title = 'Fatture di vendita')) INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = co_documenti.idanagrafica");
} else if ($modulo->title == 'Fatture di acquisto') { } elseif ($modulo->title == 'Fatture di acquisto') {
$documento = $dbo->fetchOne("SELECT numero, ragione_sociale FROM zz_notes INNER JOIN co_documenti ON (co_documenti.id = zz_notes.id_record AND zz_notes.id_module=(SELECT id FROM zz_modules WHERE title = 'Fatture di acquisto')) INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = co_documenti.idanagrafica"); $documento = $dbo->fetchOne("SELECT numero, ragione_sociale FROM zz_notes INNER JOIN co_documenti ON (co_documenti.id = zz_notes.id_record AND zz_notes.id_module=(SELECT id FROM zz_modules WHERE title = 'Fatture di acquisto')) INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = co_documenti.idanagrafica");
} else if ($modulo->title == 'Preventivi') { } elseif ($modulo->title == 'Preventivi') {
$documento = $dbo->fetchOne("SELECT numero, ragione_sociale FROM zz_notes INNER JOIN co_preventivi ON (co_preventivi.id = zz_notes.id_record AND zz_notes.id_module=(SELECT id FROM zz_modules WHERE title = 'Preventivi')) INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = co_preventivi.idanagrafica"); $documento = $dbo->fetchOne("SELECT numero, ragione_sociale FROM zz_notes INNER JOIN co_preventivi ON (co_preventivi.id = zz_notes.id_record AND zz_notes.id_module=(SELECT id FROM zz_modules WHERE title = 'Preventivi')) INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = co_preventivi.idanagrafica");
} else if ($modulo->title == 'Contratti') { } elseif ($modulo->title == 'Contratti') {
$documento = $dbo->fetchOne("SELECT numero, ragione_sociale FROM zz_notes INNER JOIN co_contratti ON (co_contratti.id = zz_notes.id_record AND zz_notes.id_module=(SELECT id FROM zz_modules WHERE title = 'Contratti')) INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = co_contratti.idanagrafica"); $documento = $dbo->fetchOne("SELECT numero, ragione_sociale FROM zz_notes INNER JOIN co_contratti ON (co_contratti.id = zz_notes.id_record AND zz_notes.id_module=(SELECT id FROM zz_modules WHERE title = 'Contratti')) INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = co_contratti.idanagrafica");
} else if ($modulo->title == 'Ordini cliente') { } elseif ($modulo->title == 'Ordini cliente') {
$documento = $dbo->fetchOne("SELECT numero_esterno as numero, ragione_sociale FROM zz_notes INNER JOIN or_ordini ON (or_ordini.id = zz_notes.id_record AND zz_notes.id_module=(SELECT id FROM zz_modules WHERE title = 'Ordini cliente')) INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = or_ordini.idanagrafica"); $documento = $dbo->fetchOne("SELECT numero_esterno as numero, ragione_sociale FROM zz_notes INNER JOIN or_ordini ON (or_ordini.id = zz_notes.id_record AND zz_notes.id_module=(SELECT id FROM zz_modules WHERE title = 'Ordini cliente')) INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = or_ordini.idanagrafica");
} else if ($modulo->title == 'Ordini fornitore') { } elseif ($modulo->title == 'Ordini fornitore') {
$documento = $dbo->fetchOne("SELECT numero, ragione_sociale FROM zz_notes INNER JOIN or_ordini ON (or_ordini.id = zz_notes.id_record AND zz_notes.id_module=(SELECT id FROM zz_modules WHERE title = 'Ordini fornitore')) INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = or_ordini.idanagrafica"); $documento = $dbo->fetchOne("SELECT numero, ragione_sociale FROM zz_notes INNER JOIN or_ordini ON (or_ordini.id = zz_notes.id_record AND zz_notes.id_module=(SELECT id FROM zz_modules WHERE title = 'Ordini fornitore')) INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = or_ordini.idanagrafica");
} else if ($modulo->title == 'Ddt in uscita') { } elseif ($modulo->title == 'Ddt in uscita') {
$documento = $dbo->fetchOne("SELECT numero_esterno as numero, ragione_sociale FROM zz_notes INNER JOIN dt_ddt ON (dt_ddt.id = zz_notes.id_record AND zz_notes.id_module=(SELECT id FROM zz_modules WHERE title = 'Ddt in uscita')) INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = dt_ddt.idanagrafica"); $documento = $dbo->fetchOne("SELECT numero_esterno as numero, ragione_sociale FROM zz_notes INNER JOIN dt_ddt ON (dt_ddt.id = zz_notes.id_record AND zz_notes.id_module=(SELECT id FROM zz_modules WHERE title = 'Ddt in uscita')) INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = dt_ddt.idanagrafica");
} else if ($modulo->title == 'Ddt in entrata') { } elseif ($modulo->title == 'Ddt in entrata') {
$documento = $dbo->fetchOne("SELECT numero, ragione_sociale FROM zz_notes INNER JOIN dt_ddt ON (dt_ddt.id = zz_notes.id_record AND zz_notes.id_module=(SELECT id FROM zz_modules WHERE title = 'Ddt in uscita')) INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = dt_ddt.idanagrafica"); $documento = $dbo->fetchOne("SELECT numero, ragione_sociale FROM zz_notes INNER JOIN dt_ddt ON (dt_ddt.id = zz_notes.id_record AND zz_notes.id_module=(SELECT id FROM zz_modules WHERE title = 'Ddt in uscita')) INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = dt_ddt.idanagrafica");
} else if ($modulo->title == 'Articoli') { } elseif ($modulo->title == 'Articoli') {
$documento = $dbo->fetchOne("SELECT codice AS numero FROM zz_notes INNER JOIN mg_articoli ON (mg_articoli.id = zz_notes.id_record AND zz_notes.id_module=(SELECT id FROM zz_modules WHERE title = 'Articoli'))"); $documento = $dbo->fetchOne("SELECT codice AS numero FROM zz_notes INNER JOIN mg_articoli ON (mg_articoli.id = zz_notes.id_record AND zz_notes.id_module=(SELECT id FROM zz_modules WHERE title = 'Articoli'))");
} else if ($modulo->title == 'Impianti') { } elseif ($modulo->title == 'Impianti') {
$documento = $dbo->fetchOne("SELECT matricola AS numero, ragione_sociale FROM zz_notes INNER JOIN my_impianti ON (my_impianti.id = zz_notes.id_record AND zz_notes.id_module=(SELECT id FROM zz_modules WHERE title = 'Impianti')) INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = my_impianti.idanagrafica"); $documento = $dbo->fetchOne("SELECT matricola AS numero, ragione_sociale FROM zz_notes INNER JOIN my_impianti ON (my_impianti.id = zz_notes.id_record AND zz_notes.id_module=(SELECT id FROM zz_modules WHERE title = 'Impianti')) INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = my_impianti.idanagrafica");
} else { } else {
$documento['numero'] = ' '; $documento['numero'] = ' ';
}; }
echo ' echo '
<tr class="'.$class.'"> <tr class="'.$class.'">

View File

@ -19,8 +19,6 @@
include_once __DIR__.'/../../../core.php'; include_once __DIR__.'/../../../core.php';
use Carbon\Carbon;
// Trovo id_print della stampa // Trovo id_print della stampa
$id_print = Prints::getPrints()['Stampa calendario settimanale']; $id_print = Prints::getPrints()['Stampa calendario settimanale'];

View File

@ -178,7 +178,7 @@ switch (filter('op')) {
if ($dir == 'entrata') { if ($dir == 'entrata') {
$articolo->setProvvigione(post('provvigione'), post('tipo_provvigione')); $articolo->setProvvigione(post('provvigione'), post('tipo_provvigione'));
} }
try { try {
$articolo->qta = post('qta'); $articolo->qta = post('qta');
} catch (UnexpectedValueException $e) { } catch (UnexpectedValueException $e) {
@ -322,7 +322,7 @@ switch (filter('op')) {
$ddt->save(); $ddt->save();
$evadi_qta_parent = true; $evadi_qta_parent = true;
if ($documento->tipo->descrizione=='Ddt in uscita' || $documento->tipo->descrizione=='Ddt in entrata') { if ($documento->tipo->descrizione == 'Ddt in uscita' || $documento->tipo->descrizione == 'Ddt in entrata') {
$evadi_qta_parent = false; $evadi_qta_parent = false;
} }
@ -335,11 +335,11 @@ switch (filter('op')) {
// Aggiornamento seriali dalla riga dell'ordine // Aggiornamento seriali dalla riga dell'ordine
if ($copia->isArticolo()) { if ($copia->isArticolo()) {
if ($documento->tipo->descrizione=='Ddt in uscita' || $documento->tipo->descrizione=='Ddt in entrata') { if ($documento->tipo->descrizione == 'Ddt in uscita' || $documento->tipo->descrizione == 'Ddt in entrata') {
// TODO: estrarre il listino corrispondente se presente // TODO: estrarre il listino corrispondente se presente
$originale = ArticoloOriginale::find($riga->idarticolo); $originale = ArticoloOriginale::find($riga->idarticolo);
$prezzo = $documento->tipo->descrizione=='Ddt in entrata' ? $originale->prezzo_vendita : $originale->prezzo_acquisto; $prezzo = $documento->tipo->descrizione == 'Ddt in entrata' ? $originale->prezzo_vendita : $originale->prezzo_acquisto;
if ($dir == 'entrata') { if ($dir == 'entrata') {
$id_iva = ($ddt->anagrafica->idiva_vendite ?: setting('Iva predefinita')); $id_iva = ($ddt->anagrafica->idiva_vendite ?: setting('Iva predefinita'));
} else { } else {
@ -375,8 +375,8 @@ switch (filter('op')) {
// Eliminazione riga // Eliminazione riga
case 'delete_riga': case 'delete_riga':
$id_righe = (array)post('righe'); $id_righe = (array) post('righe');
foreach ($id_righe as $id_riga) { foreach ($id_righe as $id_riga) {
$riga = Articolo::find($id_riga) ?: Riga::find($id_riga); $riga = Articolo::find($id_riga) ?: Riga::find($id_riga);
$riga = $riga ?: Descrizione::find($id_riga); $riga = $riga ?: Descrizione::find($id_riga);
@ -397,8 +397,8 @@ switch (filter('op')) {
// Duplicazione riga // Duplicazione riga
case 'copy_riga': case 'copy_riga':
$id_righe = (array)post('righe'); $id_righe = (array) post('righe');
foreach ($id_righe as $id_riga) { foreach ($id_righe as $id_riga) {
$riga = Articolo::find($id_riga) ?: Riga::find($id_riga); $riga = Articolo::find($id_riga) ?: Riga::find($id_riga);
$riga = $riga ?: Descrizione::find($id_riga); $riga = $riga ?: Descrizione::find($id_riga);
@ -434,7 +434,7 @@ switch (filter('op')) {
$riga_trasporto->movimenta(-$riga_trasporto->qta); $riga_trasporto->movimenta(-$riga_trasporto->qta);
} }
} }
$ddt->delete(); $ddt->delete();
flash()->info(tr('Ddt eliminato!')); flash()->info(tr('Ddt eliminato!'));
@ -554,7 +554,7 @@ switch (filter('op')) {
$barcode = post('barcode'); $barcode = post('barcode');
if (!empty($barcode)) { if (!empty($barcode)) {
$id_articolo = $dbo->selectOne('mg_articoli', 'id', ['deleted_at' => null, 'attivo' => 1, 'barcode' => $barcode])['id']; $id_articolo = $dbo->selectOne('mg_articoli', 'id', ['deleted_at' => null, 'attivo' => 1, 'barcode' => $barcode])['id'];
} }
if (!empty($id_articolo)) { if (!empty($id_articolo)) {
@ -582,7 +582,7 @@ switch (filter('op')) {
} }
$id_anagrafica = $ddt->idanagrafica; $id_anagrafica = $ddt->idanagrafica;
$prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA'); $prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
// CALCOLO PREZZO UNITARIO // CALCOLO PREZZO UNITARIO
$prezzo_unitario = 0; $prezzo_unitario = 0;
$sconto = 0; $sconto = 0;
@ -605,7 +605,7 @@ switch (filter('op')) {
continue; continue;
} }
} }
} }
if (empty($prezzo_unitario)) { if (empty($prezzo_unitario)) {
// Prezzi listini clienti // Prezzi listini clienti
$listino = $dbo->fetchOne('SELECT sconto_percentuale AS sconto_percentuale_listino, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario_listino $listino = $dbo->fetchOne('SELECT sconto_percentuale AS sconto_percentuale_listino, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario_listino
@ -624,7 +624,7 @@ switch (filter('op')) {
} else { } else {
$prezzo_unitario = $prezzo_unitario ?: $originale->prezzo_acquisto; $prezzo_unitario = $prezzo_unitario ?: $originale->prezzo_acquisto;
} }
// Aggiunta sconto combinato se è presente un piano di sconto nell'anagrafica // Aggiunta sconto combinato se è presente un piano di sconto nell'anagrafica
$join = ($dir == 'entrata' ? 'id_piano_sconto_vendite' : 'id_piano_sconto_acquisti'); $join = ($dir == 'entrata' ? 'id_piano_sconto_vendite' : 'id_piano_sconto_acquisti');
$piano_sconto = $dbo->fetchOne('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_piani_sconto ON an_anagrafiche.'.$join.'=mg_piani_sconto.id WHERE idanagrafica='.prepare($id_anagrafica)); $piano_sconto = $dbo->fetchOne('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_piani_sconto ON an_anagrafiche.'.$join.'=mg_piani_sconto.id WHERE idanagrafica='.prepare($id_anagrafica));
@ -636,7 +636,6 @@ switch (filter('op')) {
$articolo->setSconto($sconto, 'PRC'); $articolo->setSconto($sconto, 'PRC');
$articolo->save(); $articolo->save();
flash()->info(tr('Nuovo articolo aggiunto!')); flash()->info(tr('Nuovo articolo aggiunto!'));
} }
} else { } else {
@ -673,7 +672,7 @@ switch (filter('op')) {
$articolo = Articolo::build($fattura, $originale); $articolo = Articolo::build($fattura, $originale);
$articolo->id_dettaglio_fornitore = post('id_dettaglio_fornitore') ?: null; $articolo->id_dettaglio_fornitore = post('id_dettaglio_fornitore') ?: null;
} }
if ($articolo['prezzo_unitario'] != $riga['price']) { if ($articolo['prezzo_unitario'] != $riga['price']) {
$articolo->setPrezzoUnitario($riga['price'], $articolo->idiva); $articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
$articolo->save(); $articolo->save();
@ -685,7 +684,7 @@ switch (filter('op')) {
flash()->info(tr('_NUM_ prezzi modificati!', [ flash()->info(tr('_NUM_ prezzi modificati!', [
'_NUM_' => $numero_totale, '_NUM_' => $numero_totale,
])); ]));
} else if ($numero_totale == 1) { } elseif ($numero_totale == 1) {
flash()->info(tr('_NUM_ prezzo modificato!', [ flash()->info(tr('_NUM_ prezzo modificato!', [
'_NUM_' => $numero_totale, '_NUM_' => $numero_totale,
])); ]));
@ -696,7 +695,6 @@ switch (filter('op')) {
break; break;
} }
// Aggiornamento stato degli ordini presenti in questa fattura in base alle quantità totali evase // Aggiornamento stato degli ordini presenti in questa fattura in base alle quantità totali evase
if (!empty($id_record) && setting('Cambia automaticamente stato ordini fatturati')) { if (!empty($id_record) && setting('Cambia automaticamente stato ordini fatturati')) {
$rs = $dbo->fetchArray('SELECT idordine FROM dt_righe_ddt WHERE idddt='.prepare($id_record).' AND idordine!=0'); $rs = $dbo->fetchArray('SELECT idordine FROM dt_righe_ddt WHERE idddt='.prepare($id_record).' AND idordine!=0');

View File

@ -182,7 +182,7 @@ $operations['crea_fattura'] = [
'data' => [ 'data' => [
'title' => tr('Fatturare i _TYPE_ selezionati?', ['_TYPE_' => strtolower($module['name'])]), 'title' => tr('Fatturare i _TYPE_ selezionati?', ['_TYPE_' => strtolower($module['name'])]),
'msg' => '{[ "type": "checkbox", "label": "<small>'.tr('Aggiungere alle _TYPE_ non ancora emesse?', ['_TYPE_' => strtolower($module_fatture)]).'", "placeholder": "'.tr('Aggiungere alle _TYPE_ nello stato bozza?', ['_TYPE_' => strtolower($module_fatture)]).'</small>", "name": "accodare" ]}<br> 'msg' => '{[ "type": "checkbox", "label": "<small>'.tr('Aggiungere alle _TYPE_ non ancora emesse?', ['_TYPE_' => strtolower($module_fatture)]).'", "placeholder": "'.tr('Aggiungere alle _TYPE_ nello stato bozza?', ['_TYPE_' => strtolower($module_fatture)]).'</small>", "name": "accodare" ]}<br>
{[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_segment", "required": 1, "ajax-source": "segmenti", "select-options": '.json_encode(["id_module" => $id_fatture, 'is_sezionale' => 1]).', "value": "'.$id_segment.'", "select-options-escape": true ]}<br> {[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_segment", "required": 1, "ajax-source": "segmenti", "select-options": '.json_encode(['id_module' => $id_fatture, 'is_sezionale' => 1]).', "value": "'.$id_segment.'", "select-options-escape": true ]}<br>
{[ "type": "select", "label": "'.tr('Tipo documento').'", "name": "idtipodocumento", "required": 1, "values": "query=SELECT id, CONCAT(codice_tipo_documento_fe, \' - \', descrizione) AS descrizione FROM co_tipidocumento WHERE enabled = 1 AND dir ='.prepare($dir).' ORDER BY codice_tipo_documento_fe", "value": "'.$idtipodocumento.'" ]}', {[ "type": "select", "label": "'.tr('Tipo documento').'", "name": "idtipodocumento", "required": 1, "values": "query=SELECT id, CONCAT(codice_tipo_documento_fe, \' - \', descrizione) AS descrizione FROM co_tipidocumento WHERE enabled = 1 AND dir ='.prepare($dir).' ORDER BY codice_tipo_documento_fe", "value": "'.$idtipodocumento.'" ]}',
'button' => tr('Procedi'), 'button' => tr('Procedi'),
'class' => 'btn btn-lg btn-warning', 'class' => 'btn btn-lg btn-warning',

View File

@ -43,7 +43,7 @@ if (!empty($ddt->id_ddt_trasporto_interno)) {
function completaTrasporto() { function completaTrasporto() {
swal({ swal({
title: "'.tr('Completare il trasporto?').'", title: "'.tr('Completare il trasporto?').'",
html: "'.tr('Sei sicuro di voler completare il trasporto interno tramite un DDT in direzione opposta?').'" + `<br><br>{[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_segment", "required": 1, "ajax-source": "segmenti", "select-options": '.json_encode(["id_module" => $id_module_collegamento, 'is_sezionale' => 1]).', "value": "'.$_SESSION['module_'.$id_module_collegamento]['id_segment'].'" ]}`, html: "'.tr('Sei sicuro di voler completare il trasporto interno tramite un DDT in direzione opposta?').'" + `<br><br>{[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_segment", "required": 1, "ajax-source": "segmenti", "select-options": '.json_encode(['id_module' => $id_module_collegamento, 'is_sezionale' => 1]).', "value": "'.$_SESSION['module_'.$id_module_collegamento]['id_segment'].'" ]}`,
type: "warning", type: "warning",
showCancelButton: true, showCancelButton: true,
confirmButtonClass: "btn btn-lg btn-success", confirmButtonClass: "btn btn-lg btn-success",
@ -88,4 +88,3 @@ echo '
<button type="button" class="btn btn-primary ask" data-title="'.tr('Duplicare questo Ddt?').'" data-msg="'.tr('Clicca su tasto duplica per procedere.').'" data-op="copy" data-button="'.tr('Duplica').'" data-class="btn btn-lg btn-primary" data-backto="record-edit"> <button type="button" class="btn btn-primary ask" data-title="'.tr('Duplicare questo Ddt?').'" data-msg="'.tr('Clicca su tasto duplica per procedere.').'" data-op="copy" data-button="'.tr('Duplica').'" data-class="btn btn-lg btn-primary" data-backto="record-edit">
<i class="fa fa-copy"></i> '.tr('Duplica ddt').' <i class="fa fa-copy"></i> '.tr('Duplica ddt').'
</button>'; </button>';

View File

@ -29,7 +29,7 @@ if ($module['name'] == 'Ddt di acquisto') {
$dir = 'entrata'; $dir = 'entrata';
} }
if ($dir=='entrata') { if ($dir == 'entrata') {
$numero_previsto = verifica_numero_ddt($ddt); $numero_previsto = verifica_numero_ddt($ddt);
if (!empty($numero_previsto)) { if (!empty($numero_previsto)) {
echo ' echo '
@ -123,12 +123,12 @@ if ($dir=='entrata') {
</div> </div>
<?php <?php
if ($dir == 'entrata') { if ($dir == 'entrata') {
echo ' echo '
<div class="col-md-3">'; <div class="col-md-3">';
if ($record['idagente'] != 0) { if ($record['idagente'] != 0) {
echo Modules::link('Anagrafiche', $record['idagente'], null, null, 'class="pull-right"'); echo Modules::link('Anagrafiche', $record['idagente'], null, null, 'class="pull-right"');
} }
echo ' echo '
{[ "type": "select", "label": "'.tr('Agente').'", "name": "idagente", "ajax-source": "agenti", "select-options": {"idanagrafica": '.$record['idanagrafica'].'}, "value": "$idagente$" ]} {[ "type": "select", "label": "'.tr('Agente').'", "name": "idagente", "ajax-source": "agenti", "select-options": {"idanagrafica": '.$record['idanagrafica'].'}, "value": "$idagente$" ]}
</div>'; </div>';
} }
@ -668,4 +668,4 @@ input("ordinamento").on("change", function(){
}); });
} }
}); });
</script>'; </script>';

View File

@ -89,8 +89,8 @@ $righe = $dbo->fetchArray(
?> ?>
<tr> <tr>
<td><?= $riga['codice'] ?></td> <td><?php echo $riga['codice']; ?></td>
<td><?= $riga['descrizione'] ?></td> <td><?php echo $riga['descrizione']; ?></td>
<td> <td>
<div> <div>
{[ "type": "number", "label": "", "data-id":"<?php echo $riga['id']; ?>","name": "nuovo_prezzo_unitario[]", "value": "<?php echo numberFormat($riga['prezzo_unitario'], 2); ?>"]} {[ "type": "number", "label": "", "data-id":"<?php echo $riga['id']; ?>","name": "nuovo_prezzo_unitario[]", "value": "<?php echo numberFormat($riga['prezzo_unitario'], 2); ?>"]}
@ -98,14 +98,14 @@ $righe = $dbo->fetchArray(
</td> </td>
<td class="text-center"><?php <td class="text-center"><?php
if (isset($ultimo_prezzo_preventivo)) { if (isset($ultimo_prezzo_preventivo)) {
echo moneyFormat($ultimo_prezzo_preventivo['prezzo_unitario'], 2) . (!empty($ultimo_prezzo_preventivo['updated_at']) ? ' <br><small class="help-block tip" title="'.dateFormat($ultimo_prezzo_preventivo['updated_at']).'">' . (new Carbon($ultimo_prezzo_preventivo['updated_at']))->diffForHumans().'</small>' : ''); echo moneyFormat($ultimo_prezzo_preventivo['prezzo_unitario'], 2).(!empty($ultimo_prezzo_preventivo['updated_at']) ? ' <br><small class="help-block tip" title="'.dateFormat($ultimo_prezzo_preventivo['updated_at']).'">'.(new Carbon($ultimo_prezzo_preventivo['updated_at']))->diffForHumans().'</small>' : '');
} else { } else {
echo 'n.d.'; echo 'n.d.';
} }
?></td> ?></td>
<td class="text-center"><?php <td class="text-center"><?php
if (isset($ultimo_prezzo_vendita)) { if (isset($ultimo_prezzo_vendita)) {
echo moneyFormat($ultimo_prezzo_vendita['prezzo_unitario'], 2) . (!empty($ultimo_prezzo_vendita['updated_at']) ? ' <br><small class="help-block tip" title="'.dateFormat($ultimo_prezzo_vendita['updated_at']).'">' . (new Carbon($ultimo_prezzo_vendita['updated_at']))->diffForHumans().'</small>' : ''); echo moneyFormat($ultimo_prezzo_vendita['prezzo_unitario'], 2).(!empty($ultimo_prezzo_vendita['updated_at']) ? ' <br><small class="help-block tip" title="'.dateFormat($ultimo_prezzo_vendita['updated_at']).'">'.(new Carbon($ultimo_prezzo_vendita['updated_at']))->diffForHumans().'</small>' : '');
} else { } else {
echo 'n.d.'; echo 'n.d.';
} }

View File

@ -242,7 +242,7 @@ function verifica_numero_ddt(DDT $ddt)
'YEAR(data) = '.prepare(date('Y', strtotime($data))), 'YEAR(data) = '.prepare(date('Y', strtotime($data))),
'idtipoddt = '.prepare($tipo->id), 'idtipoddt = '.prepare($tipo->id),
], $data); ], $data);
do { do {
$numero = Generator::generate($maschera, $ultimo, 1, Generator::dateToPattern($data)); $numero = Generator::generate($maschera, $ultimo, 1, Generator::dateToPattern($data));
@ -259,4 +259,4 @@ function verifica_numero_ddt(DDT $ddt)
} while ($numero != $ddt->numero_esterno); } while ($numero != $ddt->numero_esterno);
return null; return null;
} }

View File

@ -59,7 +59,7 @@ $result = [
]; ];
// Leggo la provvigione predefinita per l'anagrafica // Leggo la provvigione predefinita per l'anagrafica
$result['provvigione_default'] = $dbo->fetchOne('SELECT provvigione_default FROM an_anagrafiche WHERE idanagrafica='.prepare($documento->idagente))['provvigione_default']; $result['provvigione_default'] = $dbo->fetchOne('SELECT provvigione_default FROM an_anagrafiche WHERE idanagrafica='.prepare($documento->idagente))['provvigione_default'];
// Leggo l'iva predefinita per l'anagrafica e se non c'è leggo quella predefinita generica // Leggo l'iva predefinita per l'anagrafica e se non c'è leggo quella predefinita generica
$iva = $dbo->fetchArray('SELECT idiva_'.($dir == 'uscita' ? 'acquisti' : 'vendite').' AS idiva FROM an_anagrafiche WHERE idanagrafica='.prepare($documento['idanagrafica'])); $iva = $dbo->fetchArray('SELECT idiva_'.($dir == 'uscita' ? 'acquisti' : 'vendite').' AS idiva FROM an_anagrafiche WHERE idanagrafica='.prepare($documento['idanagrafica']));

View File

@ -74,11 +74,11 @@ foreach ($righe as $riga) {
echo ' echo '
<tr data-id="'.$riga->id.'" data-type="'.get_class($riga).'"> <tr data-id="'.$riga->id.'" data-type="'.get_class($riga).'">
<td class="text-center">'; <td class="text-center">';
if (!$block_edit) { if (!$block_edit) {
echo ' echo '
<input class="check" type="checkbox"/>'; <input class="check" type="checkbox"/>';
} }
echo ' echo '
</td> </td>
<td class="text-center"> <td class="text-center">
@ -88,53 +88,52 @@ foreach ($righe as $riga) {
<td> <td>
<small class="pull-right text-right text-muted">'; <small class="pull-right text-right text-muted">';
$numero_riferimenti_riga = $riga->referenceTargets()->count(); $numero_riferimenti_riga = $riga->referenceTargets()->count();
$numero_riferimenti_collegati = $riga->referenceSources()->count(); $numero_riferimenti_collegati = $riga->referenceSources()->count();
$riferimenti_presenti = $numero_riferimenti_riga; $riferimenti_presenti = $numero_riferimenti_riga;
$testo_aggiuntivo = $riferimenti_presenti ? $numero_riferimenti_riga : ''; $testo_aggiuntivo = $riferimenti_presenti ? $numero_riferimenti_riga : '';
echo ' echo '
<button type="button" class="btn btn-xs btn-'.($riferimenti_presenti ? 'primary' : 'info').'" onclick="apriRiferimenti(this)"> <button type="button" class="btn btn-xs btn-'.($riferimenti_presenti ? 'primary' : 'info').'" onclick="apriRiferimenti(this)">
<i class="fa fa-chevron-right"></i> '.tr('Riferimenti').' '.$testo_aggiuntivo.' <i class="fa fa-chevron-right"></i> '.tr('Riferimenti').' '.$testo_aggiuntivo.'
</button>'; </button>';
// Aggiunta dei riferimenti ai documenti // Aggiunta dei riferimenti ai documenti
if ($riga->hasOriginalComponent()) { if ($riga->hasOriginalComponent()) {
echo '
<br>'.reference($riga->getOriginalComponent()->getDocument(), tr('Origine'));
}
echo ' echo '
<br>'.reference($riga->getOriginalComponent()->getDocument(), tr('Origine'));
}
echo '
</small>'; </small>';
if ($riga->isArticolo()) { if ($riga->isArticolo()) {
echo Modules::link('Articoli', $riga->idarticolo, $riga->codice.' - '.$riga->descrizione); echo Modules::link('Articoli', $riga->idarticolo, $riga->codice.' - '.$riga->descrizione);
} else { } else {
echo nl2br($riga->descrizione); echo nl2br($riga->descrizione);
} }
if ($riga->isArticolo() && !empty($riga->abilita_serial)) { if ($riga->isArticolo() && !empty($riga->abilita_serial)) {
if (!empty($mancanti)) { if (!empty($mancanti)) {
echo ' echo '
<br><b><small class="text-danger">'.tr('_NUM_ serial mancanti', [ <br><b><small class="text-danger">'.tr('_NUM_ serial mancanti', [
'_NUM_' => $mancanti, '_NUM_' => $mancanti,
]).'</small></b>'; ]).'</small></b>';
}
if (!empty($serials)) {
echo '
<br>'.tr('SN').': '.implode(', ', $serials);
}
} }
if (!empty($serials)) {
if ($riga->isArticolo() && !empty($riga->articolo->barcode)) {
echo ' echo '
<br><small><i class="fa fa-barcode"></i> '.$riga->articolo->barcode.'</small>'; <br>'.tr('SN').': '.implode(', ', $serials);
} }
}
if ($riga->isArticolo() && !empty($riga->articolo->barcode)) {
if (!empty($riga->note)) {
echo '
<br><small class="label label-default">'.nl2br($riga->note).'</small>';
}
echo ' echo '
<br><small><i class="fa fa-barcode"></i> '.$riga->articolo->barcode.'</small>';
}
if (!empty($riga->note)) {
echo '
<br><small class="label label-default">'.nl2br($riga->note).'</small>';
}
echo '
</td>'; </td>';
if ($riga->isDescrizione()) { if ($riga->isDescrizione()) {
@ -144,38 +143,38 @@ foreach ($righe as $riga) {
<td></td> <td></td>
<td></td>'; <td></td>';
} else { } else {
// Quantità e unità di misura // Quantità e unità di misura
echo ' echo '
<td class="text-center"> <td class="text-center">
{[ "type": "number", "name": "qta_'.$riga->id.'", "value": "'.$riga->qta.'", "min-value": "0", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-after": "<span class=\'tip\' title=\''.tr('Quantità evasa').' / '.tr('totale').': '.tr('_QTA_ / _TOT_', ['_QTA_' => numberFormat($riga->qta_evasa, 'qta'), '_TOT_' => numberFormat($riga->qta, 'qta')]).'\'>'.$riga->um.' <small><i class=\'text-muted fa fa-info-circle\'></i></small></span>", "disabled": "'.($riga->isSconto() ? 1 : 0).'", "disabled": "'.$block_edit.'" ]} {[ "type": "number", "name": "qta_'.$riga->id.'", "value": "'.$riga->qta.'", "min-value": "0", "onchange": "aggiornaInline($(this).closest(\'tr\').data(\'id\'))", "icon-after": "<span class=\'tip\' title=\''.tr('Quantità evasa').' / '.tr('totale').': '.tr('_QTA_ / _TOT_', ['_QTA_' => numberFormat($riga->qta_evasa, 'qta'), '_TOT_' => numberFormat($riga->qta, 'qta')]).'\'>'.$riga->um.' <small><i class=\'text-muted fa fa-info-circle\'></i></small></span>", "disabled": "'.($riga->isSconto() ? 1 : 0).'", "disabled": "'.$block_edit.'" ]}
<div class="progress" style="height:4px;">'; <div class="progress" style="height:4px;">';
// Visualizzazione evasione righe per documento // Visualizzazione evasione righe per documento
$evasione_bar = []; $evasione_bar = [];
$evasione_bar['dt_righe_ddt'] = 'info'; $evasione_bar['dt_righe_ddt'] = 'info';
$evasione_bar['co_righe_documenti'] = 'primary'; $evasione_bar['co_righe_documenti'] = 'primary';
$evasione_bar['in_righe_interventi'] = 'warning'; $evasione_bar['in_righe_interventi'] = 'warning';
$evasione_bar['or_righe_ordini'] = 'success'; $evasione_bar['or_righe_ordini'] = 'success';
foreach ($evasione_bar as $table => $color) { foreach ($evasione_bar as $table => $color) {
$righe_ev = $dbo->table($table)->where('original_id', $riga->id)->where('original_type', get_class($riga))->get(); $righe_ev = $dbo->table($table)->where('original_id', $riga->id)->where('original_type', get_class($riga))->get();
$perc_ev = $righe_ev->sum('qta') * 100 / $riga->qta; $perc_ev = $righe_ev->sum('qta') * 100 / $riga->qta;
if ($perc_ev > 0) { if ($perc_ev > 0) {
echo ' echo '
<div class="progress-bar progress-bar-'.$color.'" style="width:'.$perc_ev.'%"></div>'; <div class="progress-bar progress-bar-'.$color.'" style="width:'.$perc_ev.'%"></div>';
} }
} }
echo ' echo '
</div> </div>
</td>'; </td>';
// Prezzi unitari // Prezzi unitari
echo ' echo '
<td class="text-right">'; <td class="text-right">';
// Provvigione riga // Provvigione riga
if (abs($riga->provvigione_unitaria) > 0) { if (abs($riga->provvigione_unitaria) > 0) {
$text = provvigioneInfo($riga); $text = provvigioneInfo($riga);
echo '<span class="pull-left text-info" title="'.$text.'"><i class="fa fa-handshake-o"></i></span>'; echo '<span class="pull-left text-info" title="'.$text.'"><i class="fa fa-handshake-o"></i></span>';
} }
echo moneyFormat($riga->prezzo_unitario_corrente); echo moneyFormat($riga->prezzo_unitario_corrente);
if ($dir == 'entrata' && $riga->costo_unitario != 0) { if ($dir == 'entrata' && $riga->costo_unitario != 0) {
echo ' echo '
@ -193,7 +192,7 @@ foreach ($righe as $riga) {
echo ' echo '
</td>'; </td>';
// Sconto unitario // Sconto unitario
if (!$block_edit) { if (!$block_edit) {
echo ' echo '
@ -207,28 +206,28 @@ foreach ($righe as $riga) {
<td class="text-right"> <td class="text-right">
'.moneyFormat($riga->importo); '.moneyFormat($riga->importo);
// Iva // Iva
echo ' echo '
<br><small class="'.(($riga->aliquota->deleted_at) ? 'text-red' : '').' text-muted">'.$riga->aliquota->descrizione.(($riga->aliquota->esente) ? ' ('.$riga->aliquota->codice_natura_fe.')' : null).'</small> <br><small class="'.(($riga->aliquota->deleted_at) ? 'text-red' : '').' text-muted">'.$riga->aliquota->descrizione.(($riga->aliquota->esente) ? ' ('.$riga->aliquota->codice_natura_fe.')' : null).'</small>
</td>'; </td>';
} }
// Possibilità di rimuovere una riga solo se il ddt non è evaso // Possibilità di rimuovere una riga solo se il ddt non è evaso
echo ' echo '
<td class="text-center">'; <td class="text-center">';
if ($record['flag_completato'] == 0) { if ($record['flag_completato'] == 0) {
echo ' echo '
<div class="input-group-btn">'; <div class="input-group-btn">';
if ($riga->isArticolo() && !empty($riga->abilita_serial)) { if ($riga->isArticolo() && !empty($riga->abilita_serial)) {
echo ' echo '
<a class="btn btn-primary btn-xs" title="'.tr('Modifica seriali della riga').'" onclick="modificaSeriali(this)"> <a class="btn btn-primary btn-xs" title="'.tr('Modifica seriali della riga').'" onclick="modificaSeriali(this)">
<i class="fa fa-barcode"></i> <i class="fa fa-barcode"></i>
</a>'; </a>';
} }
echo ' echo '
<a class="btn btn-xs btn-warning" title="'.tr('Modifica riga').'" onclick="modificaRiga(this)"> <a class="btn btn-xs btn-warning" title="'.tr('Modifica riga').'" onclick="modificaRiga(this)">
<i class="fa fa-edit"></i> <i class="fa fa-edit"></i>
</a> </a>
@ -241,9 +240,9 @@ foreach ($righe as $riga) {
<i class="fa fa-sort"></i> <i class="fa fa-sort"></i>
</a> </a>
</div>'; </div>';
} }
echo ' echo '
</td> </td>
</tr>'; </tr>';
} }
@ -351,7 +350,7 @@ if ($totale != $netto_a_pagare) {
} }
// Provvigione // Provvigione
if(!empty($ddt->provvigione)) { if (!empty($ddt->provvigione)) {
echo ' echo '
<tr> <tr>
<td colspan="'.$colspan.'" class="text-right"> <td colspan="'.$colspan.'" class="text-right">
@ -372,7 +371,7 @@ if(!empty($ddt->provvigione)) {
'.moneyFormat($ddt->totale_imponibile - $ddt->provvigione).' '.moneyFormat($ddt->totale_imponibile - $ddt->provvigione).'
</td> </td>
<td></td> <td></td>
</tr>'; </tr>';
} }
echo ' echo '
@ -387,12 +386,13 @@ if (!$block_edit && sizeof($righe) > 0) {
<button type="button" class="btn btn-xs btn-default disabled" id="elimina_righe" onclick="rimuoviRiga(getSelectData());"> <button type="button" class="btn btn-xs btn-default disabled" id="elimina_righe" onclick="rimuoviRiga(getSelectData());">
<i class="fa fa-trash"></i> <i class="fa fa-trash"></i>
</button>'; </button>';
if ($dir == 'entrata') { if ($dir == 'entrata') {
echo' echo '
<button type="button" class="btn btn-xs btn-default disabled" id="confronta_righe" onclick="confrontaRighe(getSelectData());"> <button type="button" class="btn btn-xs btn-default disabled" id="confronta_righe" onclick="confrontaRighe(getSelectData());">
Confronta prezzi Confronta prezzi
</button>'; </button>';
} echo' }
echo '
</div>'; </div>';
} }
echo ' echo '

View File

@ -90,7 +90,7 @@ class DDT extends Document
$model->stato()->associate($stato_documento); $model->stato()->associate($stato_documento);
$model->id_segment = $id_segment; $model->id_segment = $id_segment;
$model->idagente = $anagrafica->idagente; $model->idagente = $anagrafica->idagente;
$model->save(); $model->save();
// Salvataggio delle informazioni // Salvataggio delle informazioni

View File

@ -116,15 +116,14 @@ echo '
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<?php <?php echo input([
echo input([
'type' => 'ckeditor', 'type' => 'ckeditor',
'use_full_ckeditor' => 1, 'use_full_ckeditor' => 1,
'label' => tr('Contenuto'), 'label' => tr('Contenuto'),
'name' => 'body', 'name' => 'body',
'value' => $record['body'], 'value' => $record['body'],
]); ]);
?> ?>
</div> </div>
</div> </div>

View File

@ -19,17 +19,15 @@
namespace Modules\Emails; namespace Modules\Emails;
use Carbon\Carbon;
use Notifications\EmailNotification; use Notifications\EmailNotification;
use PHPMailer\PHPMailer\Exception; use PHPMailer\PHPMailer\Exception;
use Tasks\Manager; use Tasks\Manager;
class EmailTask extends Manager class EmailTask extends Manager
{ {
public function needsExecution() public function needsExecution()
{ {
$lista = database()->fetchArray("SELECT * FROM em_emails WHERE (sent_at IS NULL OR failed_at IS NOT NULL) AND attempt<".prepare(setting('Numero massimo di tentativi'))." ORDER BY created_at"); $lista = database()->fetchArray('SELECT * FROM em_emails WHERE (sent_at IS NULL OR failed_at IS NOT NULL) AND attempt<'.prepare(setting('Numero massimo di tentativi')).' ORDER BY created_at');
$remaining = sizeof($lista); $remaining = sizeof($lista);
return !empty($remaining); return !empty($remaining);
@ -37,10 +35,9 @@ class EmailTask extends Manager
public function execute() public function execute()
{ {
$lista = database()->fetchArray("SELECT * FROM em_emails WHERE (sent_at IS NULL OR failed_at IS NOT NULL) AND attempt<".prepare(setting('Numero massimo di tentativi'))." ORDER BY created_at LIMIT 0,".setting('Numero email da inviare in contemporanea per account')); $lista = database()->fetchArray('SELECT * FROM em_emails WHERE (sent_at IS NULL OR failed_at IS NOT NULL) AND attempt<'.prepare(setting('Numero massimo di tentativi')).' ORDER BY created_at LIMIT 0,'.setting('Numero email da inviare in contemporanea per account'));
foreach ($lista as $mail) { foreach ($lista as $mail) {
$mail = Mail::find($mail['id']); $mail = Mail::find($mail['id']);
try { try {
@ -53,4 +50,4 @@ class EmailTask extends Manager
return $lista; return $lista;
} }
} }

View File

@ -27,13 +27,12 @@ switch (post('op')) {
$id_regione = post('id_regione'); $id_regione = post('id_regione');
$is_recurring = post('is_recurring'); $is_recurring = post('is_recurring');
$is_bank_holiday = post('is_bank_holiday'); $is_bank_holiday = post('is_bank_holiday');
if ($dbo->fetchNum('SELECT * FROM `zz_events` WHERE `nome`='.prepare($nome).' AND `id`!='.prepare($id_record)) == 0) { if ($dbo->fetchNum('SELECT * FROM `zz_events` WHERE `nome`='.prepare($nome).' AND `id`!='.prepare($id_record)) == 0) {
$dbo->update('zz_events', [ $dbo->update('zz_events', [
'nome' => $nome, 'nome' => $nome,
'data' => $data, 'data' => $data,
'id_nazione' =>$id_nazione, 'id_nazione' => $id_nazione,
'id_regione' => $id_regione, 'id_regione' => $id_regione,
'is_recurring' => $is_recurring, 'is_recurring' => $is_recurring,
'is_bank_holiday' => $is_bank_holiday, 'is_bank_holiday' => $is_bank_holiday,
@ -41,7 +40,6 @@ switch (post('op')) {
'id' => $id_record, 'id' => $id_record,
]); ]);
flash()->info(tr('Salvataggio completato.')); flash()->info(tr('Salvataggio completato.'));
} else { } else {
flash()->error(tr("E' già presente un _TYPE_ con lo stesso nome", [ flash()->error(tr("E' già presente un _TYPE_ con lo stesso nome", [
@ -56,7 +54,6 @@ switch (post('op')) {
$data = post('data'); $data = post('data');
$id_nazione = post('id_nazione'); $id_nazione = post('id_nazione');
if ($dbo->fetchNum('SELECT * FROM `zz_events` WHERE `id_nazione` = '.prepare($id_nazione).' AND `nome`='.prepare($nome).' AND `data`='.prepare($data)) == 0) { if ($dbo->fetchNum('SELECT * FROM `zz_events` WHERE `id_nazione` = '.prepare($id_nazione).' AND `nome`='.prepare($nome).' AND `data`='.prepare($data)) == 0) {
$dbo->insert('zz_events', [ $dbo->insert('zz_events', [
'nome' => $nome, 'nome' => $nome,
'data' => $data, 'data' => $data,
@ -81,7 +78,6 @@ switch (post('op')) {
break; break;
case 'delete': case 'delete':
$dbo->delete('zz_events', [ $dbo->delete('zz_events', [
'id' => $id_record, 'id' => $id_record,
]); ]);

View File

@ -17,7 +17,6 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
use Carbon\Carbon;
include_once __DIR__.'/../../core.php'; include_once __DIR__.'/../../core.php';
//$block_edit = $record['is_predefined']; //$block_edit = $record['is_predefined'];

View File

@ -29,14 +29,13 @@ switch (post('op')) {
$is_predefined = post('is_predefined'); $is_predefined = post('is_predefined');
if ($dbo->fetchNum('SELECT * FROM `in_fasceorarie` WHERE `nome`='.prepare($nome).' AND `id`!='.prepare($id_record)) == 0) { if ($dbo->fetchNum('SELECT * FROM `in_fasceorarie` WHERE `nome`='.prepare($nome).' AND `id`!='.prepare($id_record)) == 0) {
if (!empty($is_predefined)) { if (!empty($is_predefined)) {
$dbo->query('UPDATE in_fasceorarie SET is_predefined = 0'); $dbo->query('UPDATE in_fasceorarie SET is_predefined = 0');
} }
$dbo->update('in_fasceorarie', [ $dbo->update('in_fasceorarie', [
'nome' => $nome, 'nome' => $nome,
'giorni' => $giorni ? implode(',' , $giorni) : null, 'giorni' => $giorni ? implode(',', $giorni) : null,
'ora_inizio' => $ora_inizio, 'ora_inizio' => $ora_inizio,
'ora_fine' => $ora_fine, 'ora_fine' => $ora_fine,
'include_bank_holidays' => $include_bank_holidays, 'include_bank_holidays' => $include_bank_holidays,
@ -60,7 +59,6 @@ switch (post('op')) {
$ora_fine = post('ora_fine'); $ora_fine = post('ora_fine');
if ($dbo->fetchNum('SELECT * FROM `in_fasceorarie` WHERE `nome`='.prepare($nome)) == 0) { if ($dbo->fetchNum('SELECT * FROM `in_fasceorarie` WHERE `nome`='.prepare($nome)) == 0) {
$dbo->insert('in_fasceorarie', [ $dbo->insert('in_fasceorarie', [
'nome' => $nome, 'nome' => $nome,
'ora_inizio' => $ora_inizio, 'ora_inizio' => $ora_inizio,

View File

@ -17,7 +17,6 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
include_once __DIR__.'/../../core.php'; include_once __DIR__.'/../../core.php';
//$block_edit = $record['is_predefined']; //$block_edit = $record['is_predefined'];
@ -79,7 +78,6 @@ include_once __DIR__.'/../../core.php';
$results = $dbo->fetchArray('SELECT * FROM `co_pagamenti` WHERE descrizione='.prepare($record['descrizione']).' ORDER BY `num_giorni` ASC'); $results = $dbo->fetchArray('SELECT * FROM `co_pagamenti` WHERE descrizione='.prepare($record['descrizione']).' ORDER BY `num_giorni` ASC');
$numero_data = 1; $numero_data = 1;
foreach ($results as $result) { foreach ($results as $result) {
} }
?> ?>
@ -162,12 +160,11 @@ if (!empty($elementi)) {
'_TIPO_INTERVENTO_' => $elemento['codice'], '_TIPO_INTERVENTO_' => $elemento['codice'],
]); ]);
$modulo = 'Tipi di intervento'; $modulo = 'Tipi di intervento';
$id = $elemento['idtipointervento']; $id = $elemento['idtipointervento'];
echo ' echo '
<li>'.Modules::link($modulo, $id, $descrizione).'</li>'; <li>'.Modules::link($modulo, $id, $descrizione).'</li>';
} }
echo ' echo '
@ -178,6 +175,6 @@ if (!empty($elementi)) {
?> ?>
<a class="btn btn-danger ask <?php echo (intval($record['can_delete'])==0 ? 'disabled' : ''); ?>" data-backto="record-list"> <a class="btn btn-danger ask <?php echo intval($record['can_delete']) == 0 ? 'disabled' : ''; ?>" data-backto="record-list">
<i class="fa fa-trash"></i> <?php echo tr('Elimina'); ?> <i class="fa fa-trash"></i> <?php echo tr('Elimina'); ?>
</a> </a>

View File

@ -42,7 +42,7 @@ if ($module['name'] == 'Fatture di vendita') {
} }
// Controllo se la fattura è già stata inviata allo SDI // Controllo se la fattura è già stata inviata allo SDI
$stato_fe= $dbo->fetchOne('SELECT codice_stato_fe FROM co_documenti WHERE id = '.$fattura->id); $stato_fe = $dbo->fetchOne('SELECT codice_stato_fe FROM co_documenti WHERE id = '.$fattura->id);
$ops = ['update', 'add_intervento', 'manage_documento_fe', 'manage_riga_fe', 'manage_articolo', 'manage_sconto', 'manage_riga', 'manage_descrizione', 'unlink_intervento', 'delete_riga', 'copy_riga', 'add_serial', 'add_articolo', 'edit-price']; $ops = ['update', 'add_intervento', 'manage_documento_fe', 'manage_riga_fe', 'manage_articolo', 'manage_sconto', 'manage_riga', 'manage_descrizione', 'unlink_intervento', 'delete_riga', 'copy_riga', 'add_serial', 'add_articolo', 'edit-price'];
@ -94,7 +94,7 @@ switch ($op) {
WHERE WHERE
co_statidocumento.descrizione = "Emessa" AND co_tipidocumento.dir="entrata" AND co_documenti.id_segment='.$fattura->id_segment); co_statidocumento.descrizione = "Emessa" AND co_tipidocumento.dir="entrata" AND co_documenti.id_segment='.$fattura->id_segment);
if ((setting('Data emissione fattura automatica') == 1) && ($dir == 'entrata') && ($stato->descrizione == 'Emessa') && (Carbon::parse($data)->lessThan(Carbon::parse($data_fattura_precedente['datamax']))) && (!empty($data_fattura_precedente['datamax']))){ if ((setting('Data emissione fattura automatica') == 1) && ($dir == 'entrata') && ($stato->descrizione == 'Emessa') && (Carbon::parse($data)->lessThan(Carbon::parse($data_fattura_precedente['datamax']))) && (!empty($data_fattura_precedente['datamax']))) {
$fattura->data = $data_fattura_precedente['datamax']; $fattura->data = $data_fattura_precedente['datamax'];
$fattura->data_competenza = $data_fattura_precedente['datamax']; $fattura->data_competenza = $data_fattura_precedente['datamax'];
flash()->info(tr('Data di emissione aggiornata, come da impostazione!')); flash()->info(tr('Data di emissione aggiornata, come da impostazione!'));
@ -173,7 +173,7 @@ switch ($op) {
$fattura->setScontoFinale(post('sconto_finale'), post('tipo_sconto_finale')); $fattura->setScontoFinale(post('sconto_finale'), post('tipo_sconto_finale'));
$anagrafica = Anagrafica::find($fattura->idanagrafica); $anagrafica = Anagrafica::find($fattura->idanagrafica);
if ($anagrafica->tipo === "Privato" && $fattura->is_fattura_conto_terzi) { if ($anagrafica->tipo === 'Privato' && $fattura->is_fattura_conto_terzi) {
flash()->warning(tr('L\'anagrafica selezionata è del tipo "Privato", correggere la tipologia dalla scheda anagrafica!')); flash()->warning(tr('L\'anagrafica selezionata è del tipo "Privato", correggere la tipologia dalla scheda anagrafica!'));
} else { } else {
$results = $fattura->save(); $results = $fattura->save();
@ -181,7 +181,6 @@ switch ($op) {
flash()->info(tr('Fattura modificata correttamente!')); flash()->info(tr('Fattura modificata correttamente!'));
} }
foreach ($results as $numero => $result) { foreach ($results as $numero => $result) {
foreach ($result as $title => $links) { foreach ($result as $title => $links) {
foreach ($links as $link => $errors) { foreach ($links as $link => $errors) {
@ -243,7 +242,7 @@ switch ($op) {
->where('id', '!=', $id_record) ->where('id', '!=', $id_record)
->where('data', '>=', $_SESSION['period_start']) ->where('data', '>=', $_SESSION['period_start'])
->where('data', '<=', $_SESSION['period_end']) ->where('data', '<=', $_SESSION['period_end'])
->where('numero_esterno', '!=', NULL) ->where('numero_esterno', '!=', null)
->whereHas('tipo', function ($query) use ($direzione) { ->whereHas('tipo', function ($query) use ($direzione) {
$query->where('dir', '=', $direzione); $query->where('dir', '=', $direzione);
})->count(); })->count();
@ -281,15 +280,14 @@ switch ($op) {
} }
$totale_documento = abs($totale_documento); $totale_documento = abs($totale_documento);
} catch (Exception $e) { } catch (Exception $e) {
} }
echo json_encode([ echo json_encode([
'stored' => round($totale_documento,2), 'stored' => round($totale_documento, 2),
'calculated' => round($fattura->totale,2), 'calculated' => round($fattura->totale, 2),
]); ]);
break; break;
// Elenco fatture in stato Bozza per il cliente // Elenco fatture in stato Bozza per il cliente
@ -322,7 +320,7 @@ switch ($op) {
->where('co_documenti.idanagrafica', $id_anagrafica) ->where('co_documenti.idanagrafica', $id_anagrafica)
->whereIn('idstatodocumento', [$stato1->id, $stato2->id]) ->whereIn('idstatodocumento', [$stato1->id, $stato2->id])
->join('co_scadenziario', 'co_documenti.id', '=', 'co_scadenziario.iddocumento') ->join('co_scadenziario', 'co_documenti.id', '=', 'co_scadenziario.iddocumento')
->join('co_tipidocumento', 'co_tipidocumento.id','=','co_documenti.idtipodocumento') ->join('co_tipidocumento', 'co_tipidocumento.id', '=', 'co_documenti.idtipodocumento')
->whereRaw('co_scadenziario.da_pagare > co_scadenziario.pagato') ->whereRaw('co_scadenziario.da_pagare > co_scadenziario.pagato')
->whereRaw('co_scadenziario.scadenza < NOW()') ->whereRaw('co_scadenziario.scadenza < NOW()')
->groupBy('co_scadenziario.iddocumento') ->groupBy('co_scadenziario.iddocumento')
@ -416,7 +414,7 @@ switch ($op) {
$riga->idintervento = $id_intervento; $riga->idintervento = $id_intervento;
$riga->save(); $riga->save();
} }
aggiungi_intervento_in_fattura($id_intervento, $id_record, post('descrizione'), post('idiva'), post('idconto'), post('id_rivalsa_inps'), post('id_ritenuta_acconto'), post('calcolo_ritenuta_acconto')); aggiungi_intervento_in_fattura($id_intervento, $id_record, post('descrizione'), post('idiva'), post('idconto'), post('id_rivalsa_inps'), post('id_ritenuta_acconto'), post('calcolo_ritenuta_acconto'));
flash()->info(tr('Intervento _NUM_ aggiunto!', [ flash()->info(tr('Intervento _NUM_ aggiunto!', [
@ -446,7 +444,7 @@ switch ($op) {
$fattura->save(); $fattura->save();
flash()->info(tr('Dati FE aggiornati correttamente!')); flash()->info(tr('Dati FE aggiornati correttamente!'));
break; break;
case 'manage_riga_fe': case 'manage_riga_fe':
@ -524,7 +522,7 @@ switch ($op) {
} else { } else {
flash()->info(tr('Articolo aggiunto!')); flash()->info(tr('Articolo aggiunto!'));
} }
// Ricalcolo inps, ritenuta e bollo // Ricalcolo inps, ritenuta e bollo
ricalcola_costiagg_fattura($id_record); ricalcola_costiagg_fattura($id_record);
@ -536,7 +534,7 @@ switch ($op) {
} else { } else {
$sconto = Sconto::build($fattura); $sconto = Sconto::build($fattura);
} }
$sconto->idconto = post('idconto'); $sconto->idconto = post('idconto');
$sconto->calcolo_ritenuta_acconto = post('calcolo_ritenuta_acconto') ?: null; $sconto->calcolo_ritenuta_acconto = post('calcolo_ritenuta_acconto') ?: null;
@ -554,10 +552,9 @@ switch ($op) {
} else { } else {
flash()->info(tr('Sconto/maggiorazione aggiunto!')); flash()->info(tr('Sconto/maggiorazione aggiunto!'));
} }
// Ricalcolo inps, ritenuta e bollo // Ricalcolo inps, ritenuta e bollo
ricalcola_costiagg_fattura($id_record); ricalcola_costiagg_fattura($id_record);
break; break;
@ -568,7 +565,6 @@ switch ($op) {
$riga = Riga::build($fattura); $riga = Riga::build($fattura);
} }
$qta = post('qta'); $qta = post('qta');
$riga->descrizione = post('descrizione'); $riga->descrizione = post('descrizione');
@ -598,10 +594,10 @@ switch ($op) {
} else { } else {
flash()->info(tr('Riga aggiunta!')); flash()->info(tr('Riga aggiunta!'));
} }
// Ricalcolo inps, ritenuta e bollo // Ricalcolo inps, ritenuta e bollo
ricalcola_costiagg_fattura($id_record); ricalcola_costiagg_fattura($id_record);
break; break;
case 'manage_descrizione': case 'manage_descrizione':
@ -614,7 +610,6 @@ switch ($op) {
$riga->descrizione = post('descrizione'); $riga->descrizione = post('descrizione');
$riga->note = post('note'); $riga->note = post('note');
$riga->save(); $riga->save();
if (post('idriga') != null) { if (post('idriga') != null) {
@ -622,7 +617,7 @@ switch ($op) {
} else { } else {
flash()->info(tr('Riga descrittiva aggiunta!')); flash()->info(tr('Riga descrittiva aggiunta!'));
} }
break; break;
// Scollegamento intervento da documento // Scollegamento intervento da documento
@ -644,18 +639,18 @@ switch ($op) {
} }
} }
} }
break; break;
// Scollegamento riga generica da documento // Scollegamento riga generica da documento
case 'delete_riga': case 'delete_riga':
$id_righe = (array)post('righe'); $id_righe = (array) post('righe');
foreach ($id_righe as $id_riga) { foreach ($id_righe as $id_riga) {
$riga = Articolo::find($id_riga) ?: Riga::find($id_riga); $riga = Articolo::find($id_riga) ?: Riga::find($id_riga);
$riga = $riga ?: Descrizione::find($id_riga); $riga = $riga ?: Descrizione::find($id_riga);
$riga = $riga ?: Sconto::find($id_riga); $riga = $riga ?: Sconto::find($id_riga);
try { try {
$riga->delete(); $riga->delete();
@ -668,13 +663,13 @@ switch ($op) {
$riga = null; $riga = null;
flash()->info(tr('Righe eliminate!')); flash()->info(tr('Righe eliminate!'));
} }
break; break;
// Duplicazione riga // Duplicazione riga
case 'copy_riga': case 'copy_riga':
$id_righe = (array)post('righe'); $id_righe = (array) post('righe');
foreach ($id_righe as $id_riga) { foreach ($id_righe as $id_riga) {
$riga = Articolo::find($id_riga) ?: Riga::find($id_riga); $riga = Articolo::find($id_riga) ?: Riga::find($id_riga);
$riga = $riga ?: Descrizione::find($id_riga); $riga = $riga ?: Descrizione::find($id_riga);
@ -741,7 +736,6 @@ switch ($op) {
$fattura->idpagamento = setting('Tipo di pagamento predefinito'); $fattura->idpagamento = setting('Tipo di pagamento predefinito');
} }
$idsede = ($documento->idsede_destinazione ? $documento->idsede_destinazione : $documento->idsede); $idsede = ($documento->idsede_destinazione ? $documento->idsede_destinazione : $documento->idsede);
$fattura->idsede_destinazione = $idsede; $fattura->idsede_destinazione = $idsede;
@ -855,7 +849,6 @@ switch ($op) {
$id_record = $nota->id; $id_record = $nota->id;
aggiorna_sedi_movimenti('documenti', $id_record); aggiorna_sedi_movimenti('documenti', $id_record);
break; break;
@ -914,7 +907,7 @@ switch ($op) {
break; break;
case 'controlla_serial': case 'controlla_serial':
if (post('is_rientrabile')) { if (post('is_rientrabile')) {
// Controllo che i serial entrati e usciti siano uguali in modo da poterli registrare nuovamente. // Controllo che i serial entrati e usciti siano uguali in modo da poterli registrare nuovamente.
$serial_uscita = $dbo->fetchOne('SELECT COUNT(id) AS `tot` FROM mg_prodotti WHERE serial='.prepare(post('serial')).' AND dir="uscita" AND id_articolo='.prepare(post('id_articolo')))['tot']; $serial_uscita = $dbo->fetchOne('SELECT COUNT(id) AS `tot` FROM mg_prodotti WHERE serial='.prepare(post('serial')).' AND dir="uscita" AND id_articolo='.prepare(post('id_articolo')))['tot'];
@ -923,17 +916,17 @@ switch ($op) {
} else { } else {
$has_serial = $dbo->fetchOne('SELECT id FROM mg_prodotti WHERE serial='.prepare(post('serial')).' AND dir="uscita" AND id_articolo='.prepare(post('id_articolo')).' AND (id_riga_documento IS NOT NULL OR id_riga_ordine IS NOT NULL OR id_riga_ddt IS NOT NULL)')['id']; $has_serial = $dbo->fetchOne('SELECT id FROM mg_prodotti WHERE serial='.prepare(post('serial')).' AND dir="uscita" AND id_articolo='.prepare(post('id_articolo')).' AND (id_riga_documento IS NOT NULL OR id_riga_ordine IS NOT NULL OR id_riga_ddt IS NOT NULL)')['id'];
} }
echo json_encode($has_serial); echo json_encode($has_serial);
break; break;
case 'add_articolo': case 'add_articolo':
$id_articolo = post('id_articolo'); $id_articolo = post('id_articolo');
$barcode = post('barcode'); $barcode = post('barcode');
if (!empty($barcode)) { if (!empty($barcode)) {
$id_articolo = $dbo->selectOne('mg_articoli', 'id', ['deleted_at' => null, 'attivo' => 1, 'barcode' => $barcode])['id']; $id_articolo = $dbo->selectOne('mg_articoli', 'id', ['deleted_at' => null, 'attivo' => 1, 'barcode' => $barcode])['id'];
} }
if (!empty($id_articolo)) { if (!empty($id_articolo)) {
@ -961,7 +954,7 @@ switch ($op) {
$id_conto = $originale->idconto_acquisto; $id_conto = $originale->idconto_acquisto;
} }
$articolo->idconto = $id_conto; $articolo->idconto = $id_conto;
if ($dir == 'entrata') { if ($dir == 'entrata') {
$id_iva = ($fattura->anagrafica->idiva_vendite ?: $originale->idiva_vendita) ?: setting('Iva predefinita'); $id_iva = ($fattura->anagrafica->idiva_vendite ?: $originale->idiva_vendita) ?: setting('Iva predefinita');
} else { } else {
@ -969,7 +962,7 @@ switch ($op) {
} }
$id_anagrafica = $fattura->idanagrafica; $id_anagrafica = $fattura->idanagrafica;
$prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA'); $prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
// CALCOLO PREZZO UNITARIO // CALCOLO PREZZO UNITARIO
$prezzo_unitario = 0; $prezzo_unitario = 0;
$sconto = 0; $sconto = 0;
@ -992,7 +985,7 @@ switch ($op) {
continue; continue;
} }
} }
} }
if (empty($prezzo_unitario)) { if (empty($prezzo_unitario)) {
// Prezzi listini clienti // Prezzi listini clienti
$listino = $dbo->fetchOne('SELECT sconto_percentuale AS sconto_percentuale_listino, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario_listino $listino = $dbo->fetchOne('SELECT sconto_percentuale AS sconto_percentuale_listino, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario_listino
@ -1020,7 +1013,6 @@ switch ($op) {
$articolo->setProvvigione($provvigione ?: 0, 'PRC'); $articolo->setProvvigione($provvigione ?: 0, 'PRC');
$articolo->save(); $articolo->save();
flash()->info(tr('Nuovo articolo aggiunto!')); flash()->info(tr('Nuovo articolo aggiunto!'));
} }
} else { } else {
@ -1029,10 +1021,10 @@ switch ($op) {
} }
break; break;
// Controllo se impostare anagrafica azienda in base a tipologia documento // Controllo se impostare anagrafica azienda in base a tipologia documento
case 'check_tipodocumento': case 'check_tipodocumento':
$idtipodocumento = post('idtipodocumento'); $idtipodocumento = post('idtipodocumento');
$tipologie = Tipo::wherein('codice_tipo_documento_fe', ['TD21','TD27'])->where('dir', 'entrata')->get()->pluck('id')->toArray(); $tipologie = Tipo::wherein('codice_tipo_documento_fe', ['TD21', 'TD27'])->where('dir', 'entrata')->get()->pluck('id')->toArray();
$azienda = Anagrafica::find(setting('Azienda predefinita')); $azienda = Anagrafica::find(setting('Azienda predefinita'));
$result = false; $result = false;
@ -1048,7 +1040,7 @@ switch ($op) {
} }
$result = [ $result = [
'id' => $azienda->id, 'id' => $azienda->id,
'ragione_sociale' => $azienda->ragione_sociale 'ragione_sociale' => $azienda->ragione_sociale,
]; ];
} }
@ -1068,7 +1060,7 @@ switch ($op) {
$articolo = Articolo::build($fattura, $originale); $articolo = Articolo::build($fattura, $originale);
$articolo->id_dettaglio_fornitore = post('id_dettaglio_fornitore') ?: null; $articolo->id_dettaglio_fornitore = post('id_dettaglio_fornitore') ?: null;
} }
if ($articolo['prezzo_unitario'] != $riga['price']) { if ($articolo['prezzo_unitario'] != $riga['price']) {
$articolo->setPrezzoUnitario($riga['price'], $articolo->idiva); $articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
$articolo->save(); $articolo->save();
@ -1080,7 +1072,7 @@ switch ($op) {
flash()->info(tr('_NUM_ prezzi modificati!', [ flash()->info(tr('_NUM_ prezzi modificati!', [
'_NUM_' => $numero_totale, '_NUM_' => $numero_totale,
])); ]));
} else if ($numero_totale == 1) { } elseif ($numero_totale == 1) {
flash()->info(tr('_NUM_ prezzo modificato!', [ flash()->info(tr('_NUM_ prezzo modificato!', [
'_NUM_' => $numero_totale, '_NUM_' => $numero_totale,
])); ]));
@ -1088,7 +1080,6 @@ switch ($op) {
flash()->warning(tr('Nessun prezzo modificato!')); flash()->warning(tr('Nessun prezzo modificato!'));
} }
break; break;
} }

View File

@ -87,7 +87,7 @@ $idtipodocumento = $dbo->selectOne('co_tipidocumento', ['id'], [
<div id="info-title-bozza" class="box"> <div id="info-title-bozza" class="box">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title">'.tr("Fatture in stato Bozza del cliente").'</h3> <h3 class="box-title">'.tr('Fatture in stato Bozza del cliente').'</h3>
<div class="box-tools pull-right"> <div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="collapse"> <button type="button" class="btn btn-box-tool" data-widget="collapse">
<i class="fa fa-minus"></i> <i class="fa fa-minus"></i>
@ -100,7 +100,7 @@ $idtipodocumento = $dbo->selectOne('co_tipidocumento', ['id'], [
<div class="col-md-6"> <div class="col-md-6">
<div id="info-title-scadute" class="box"> <div id="info-title-scadute" class="box">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title">'.tr("Fatture con termini di pagamento trascorsi").'</h3> <h3 class="box-title">'.tr('Fatture con termini di pagamento trascorsi').'</h3>
<div class="box-tools pull-right"> <div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="collapse"> <button type="button" class="btn btn-box-tool" data-widget="collapse">
<i class="fa fa-minus"></i> <i class="fa fa-minus"></i>
@ -116,7 +116,7 @@ $idtipodocumento = $dbo->selectOne('co_tipidocumento', ['id'], [
<!-- DETTAGLI CLIENTE --> <!-- DETTAGLI CLIENTE -->
<div class="box box-info collapsable collapsed-box"> <div class="box box-info collapsable collapsed-box">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title">'.tr("Dettagli cliente").'</h3> <h3 class="box-title">'.tr('Dettagli cliente').'</h3>
<div class="box-tools pull-right"> <div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="collapse"> <button type="button" class="btn btn-box-tool" data-widget="collapse">
<i class="fa fa-plus"></i> <i class="fa fa-plus"></i>
@ -125,7 +125,7 @@ $idtipodocumento = $dbo->selectOne('co_tipidocumento', ['id'], [
</div> </div>
<div class="box-body" id="dettagli_cliente"> <div class="box-body" id="dettagli_cliente">
'.tr("Seleziona prima un cliente").'... '.tr('Seleziona prima un cliente').'...
</div> </div>
</div>'; </div>';
} }

View File

@ -82,8 +82,8 @@ foreach ($rs as $key => $value) {
$prezzo = $intervento->totale; $prezzo = $intervento->totale;
$rs[$key]['prezzo'] = Translator::numberToLocale($prezzo); $rs[$key]['prezzo'] = Translator::numberToLocale($prezzo);
$rs[$key]['descrizione_intervento'] = str_replace("'", " ", strip_tags($rs[$key]['descrizione_intervento'])); $rs[$key]['descrizione_intervento'] = str_replace("'", ' ', strip_tags($rs[$key]['descrizione_intervento']));
$rs[$key]['info'] = str_replace("'", " ", strip_tags($module_interventi->replacePlaceholders($value['id'], setting('Descrizione personalizzata in fatturazione')))) ?: $rs[$key]['info']; $rs[$key]['info'] = str_replace("'", ' ', strip_tags($module_interventi->replacePlaceholders($value['id'], setting('Descrizione personalizzata in fatturazione')))) ?: $rs[$key]['info'];
} }
// Intervento // Intervento

View File

@ -19,17 +19,17 @@
include_once __DIR__.'/../../core.php'; include_once __DIR__.'/../../core.php';
use Carbon\Carbon;
use Modules\Aggiornamenti\Controlli\DatiFattureElettroniche; use Modules\Aggiornamenti\Controlli\DatiFattureElettroniche;
use Modules\Anagrafiche\Anagrafica; use Modules\Anagrafiche\Anagrafica;
use Modules\Fatture\Export\CSV; use Modules\Fatture\Export\CSV;
use Modules\Fatture\Fattura; use Modules\Fatture\Fattura;
use Modules\Fatture\Stato;
use Plugins\ExportFE\FatturaElettronica; use Plugins\ExportFE\FatturaElettronica;
use Plugins\ExportFE\Interaction; use Plugins\ExportFE\Interaction;
use Plugins\ReceiptFE\Ricevuta;
use Util\XML; use Util\XML;
use Util\Zip; use Util\Zip;
use Modules\Fatture\Stato;
use Plugins\ReceiptFE\Ricevuta;
use Carbon\Carbon;
$anagrafica_azienda = Anagrafica::find(setting('Azienda predefinita')); $anagrafica_azienda = Anagrafica::find(setting('Azienda predefinita'));
$stato_emessa = $dbo->selectOne('co_statidocumento', 'id', ['descrizione' => 'Emessa'])['id']; $stato_emessa = $dbo->selectOne('co_statidocumento', 'id', ['descrizione' => 'Emessa'])['id'];
@ -97,7 +97,7 @@ switch (post('op')) {
if (!empty($id_records)) { if (!empty($id_records)) {
foreach ($id_records as $id_record) { foreach ($id_records as $id_record) {
Prints::render( $id_print, $id_record, $dir.'tmp/', false, true); Prints::render($id_print, $id_record, $dir.'tmp/', false, true);
} }
// Creazione zip // Creazione zip
@ -333,10 +333,9 @@ switch (post('op')) {
if (post('skip_time') == 'Anno') { if (post('skip_time') == 'Anno') {
$data = date('Y-m-d', strtotime('+1 year', strtotime($fattura->data))); $data = date('Y-m-d', strtotime('+1 year', strtotime($fattura->data)));
} }
$new = $fattura->replicate(); $new = $fattura->replicate();
$new->data = $data; $new->data = $data;
$new->id_segment = $id_segment; $new->id_segment = $id_segment;
$new->numero = Fattura::getNextNumero($data, $dir, $id_segment); $new->numero = Fattura::getNextNumero($data, $dir, $id_segment);
@ -363,7 +362,7 @@ switch (post('op')) {
} }
} }
if (!empty($fattura->numero_esterno)){ if (!empty($fattura->numero_esterno)) {
array_push($list, $fattura->numero_esterno); array_push($list, $fattura->numero_esterno);
} }
} }
@ -487,7 +486,7 @@ switch (post('op')) {
WHERE WHERE
co_statidocumento.descrizione = "Emessa" AND co_tipidocumento.dir="entrata" AND co_documenti.id_segment='.$fattura->id_segment); co_statidocumento.descrizione = "Emessa" AND co_tipidocumento.dir="entrata" AND co_documenti.id_segment='.$fattura->id_segment);
if ((setting('Data emissione fattura automatica') == 1) && ($dir == 'entrata') && (Carbon::parse($data)->lessThan(Carbon::parse($data_fattura_precedente['datamax']))) && (!empty($data_fattura_precedente['datamax']))){ if ((setting('Data emissione fattura automatica') == 1) && ($dir == 'entrata') && (Carbon::parse($data)->lessThan(Carbon::parse($data_fattura_precedente['datamax']))) && (!empty($data_fattura_precedente['datamax']))) {
$fattura->data = $data_fattura_precedente['datamax']; $fattura->data = $data_fattura_precedente['datamax'];
$fattura->data_competenza = $data_fattura_precedente['datamax']; $fattura->data_competenza = $data_fattura_precedente['datamax'];
} }
@ -556,11 +555,9 @@ switch (post('op')) {
case 'verify-notifiche': case 'verify-notifiche':
foreach ($id_records as $id) { foreach ($id_records as $id) {
$documento = Fattura::find($id); $documento = Fattura::find($id);
if($documento->codice_stato_fe == 'GEN' || $documento->codice_stato_fe == 'WAIT'){ if ($documento->codice_stato_fe == 'GEN' || $documento->codice_stato_fe == 'WAIT') {
$result = Interaction::getInvoiceRecepits($id); $result = Interaction::getInvoiceRecepits($id);
$last_recepit = $result['results'][0]; $last_recepit = $result['results'][0];
if (!empty($last_recepit)) { if (!empty($last_recepit)) {
@ -577,12 +574,12 @@ switch (post('op')) {
foreach ($id_records as $id) { foreach ($id_records as $id) {
$documento = Fattura::find($id); $documento = Fattura::find($id);
++ $count; ++$count;
if($documento->stato->descrizione == 'Bozza') { if ($documento->stato->descrizione == 'Bozza') {
$documento->id_segment = post('id_segment'); $documento->id_segment = post('id_segment');
$documento->save(); $documento->save();
++ $n_doc; ++$n_doc;
} }
} }
@ -597,7 +594,7 @@ switch (post('op')) {
'_NUM_' => $count - $n_doc, '_NUM_' => $count - $n_doc,
])); ]));
} }
break; break;
} }
@ -620,7 +617,7 @@ $operations['export-csv'] = [
$operations['copy-bulk'] = [ $operations['copy-bulk'] = [
'text' => '<span><i class="fa fa-copy"></i> '.tr('Duplica selezionati').'</span>', 'text' => '<span><i class="fa fa-copy"></i> '.tr('Duplica selezionati').'</span>',
'data' => [ 'data' => [
'msg' => tr('Vuoi davvero duplicare le righe selezionate?').'<br><br>{[ "type": "select", "label": "'.tr('Fattura in avanti di').'", "name": "skip_time", "required": 1, "values": "list=\"Giorno\":\"'.tr('Un giorno').'\", \"Settimana\":\"'.tr('Una settimana').'\", \"Mese\":\"'.tr('Un mese').'\", \"Anno\":\"'.tr('Un anno').'\" ", "value": "Giorno" ]}<br>{[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_segment", "required": 1, "ajax-source": "segmenti", "select-options": '.json_encode(["id_module" => $id_module, 'is_sezionale' => 1]).', "value": "'.$_SESSION['module_'.$id_module]['id_segment'].'", "select-options-escape": true ]}<br>{[ "type": "checkbox", "label": "'.tr('Aggiungere i riferimenti ai documenti esterni?').'", "placeholder": "'.tr('Aggiungere i riferimenti ai documenti esterni?').'", "name": "riferimenti" ]}', 'msg' => tr('Vuoi davvero duplicare le righe selezionate?').'<br><br>{[ "type": "select", "label": "'.tr('Fattura in avanti di').'", "name": "skip_time", "required": 1, "values": "list=\"Giorno\":\"'.tr('Un giorno').'\", \"Settimana\":\"'.tr('Una settimana').'\", \"Mese\":\"'.tr('Un mese').'\", \"Anno\":\"'.tr('Un anno').'\" ", "value": "Giorno" ]}<br>{[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_segment", "required": 1, "ajax-source": "segmenti", "select-options": '.json_encode(['id_module' => $id_module, 'is_sezionale' => 1]).', "value": "'.$_SESSION['module_'.$id_module]['id_segment'].'", "select-options-escape": true ]}<br>{[ "type": "checkbox", "label": "'.tr('Aggiungere i riferimenti ai documenti esterni?').'", "placeholder": "'.tr('Aggiungere i riferimenti ai documenti esterni?').'", "name": "riferimenti" ]}',
'button' => tr('Procedi'), 'button' => tr('Procedi'),
'class' => 'btn btn-lg btn-warning', 'class' => 'btn btn-lg btn-warning',
], ],
@ -733,7 +730,7 @@ $operations['cambia-sezionale'] = [
'title' => tr('Cambia sezionale'), 'title' => tr('Cambia sezionale'),
'msg' => tr('Scegli il sezionale _TIPOLOGIA_ in cui spostare le fatture in stato "Bozza" selezionate', [ 'msg' => tr('Scegli il sezionale _TIPOLOGIA_ in cui spostare le fatture in stato "Bozza" selezionate', [
'_TIPOLOGIA_' => $is_fiscale ? tr('fiscale') : tr('non fiscale'), '_TIPOLOGIA_' => $is_fiscale ? tr('fiscale') : tr('non fiscale'),
]).':<br><br>{[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_segment", "required": 1, "ajax-source": "segmenti", "select-options": '.json_encode(["id_module" => $id_module, 'is_sezionale' => 1, 'is_fiscale' => $is_fiscale, 'escludi_id' => $_SESSION['module_'.$id_module]['id_segment']]).', "select-options-escape": true ]}', ]).':<br><br>{[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_segment", "required": 1, "ajax-source": "segmenti", "select-options": '.json_encode(['id_module' => $id_module, 'is_sezionale' => 1, 'is_fiscale' => $is_fiscale, 'escludi_id' => $_SESSION['module_'.$id_module]['id_segment']]).', "select-options-escape": true ]}',
'button' => tr('Procedi'), 'button' => tr('Procedi'),
'class' => 'btn btn-lg btn-warning', 'class' => 'btn btn-lg btn-warning',
'blank' => false, 'blank' => false,

View File

@ -29,14 +29,14 @@ if ($module->name == 'Fatture di vendita') {
} }
if ($dir == 'entrata' || !empty($abilita_autofattura)) { if ($dir == 'entrata' || !empty($abilita_autofattura)) {
echo ' echo '
<div class="btn-group"> <div class="btn-group">
<button type="button" class="btn btn-primary unblockable dropdown-toggle '.(((!empty($record['ref_documento']) || $record['stato'] != 'Bozza') and (empty($record['is_reversed']) || !empty($abilita_autofattura))) ? '' : 'disabled').'" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <button type="button" class="btn btn-primary unblockable dropdown-toggle '.(((!empty($record['ref_documento']) || $record['stato'] != 'Bozza') and (empty($record['is_reversed']) || !empty($abilita_autofattura))) ? '' : 'disabled').'" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="fa fa-magic"></i> '.tr('Crea').' <i class="fa fa-magic"></i> '.tr('Crea').'
<span class="caret"></span> <span class="caret"></span>
</button>'; </button>';
if ($dir == 'entrata') { if ($dir == 'entrata') {
echo ' echo '
<ul class="dropdown-menu dropdown-menu-right"> <ul class="dropdown-menu dropdown-menu-right">
<li><a href="'.base_path().'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'&op=nota_addebito&backto=record-edit"> <li><a href="'.base_path().'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'&op=nota_addebito&backto=record-edit">
'.tr('Nota di debito').' '.tr('Nota di debito').'
@ -47,19 +47,19 @@ echo '
</a></li> </a></li>
</ul>'; </ul>';
} elseif (!empty($abilita_autofattura)) { } elseif (!empty($abilita_autofattura)) {
echo ' echo '
<ul class="dropdown-menu dropdown-menu-right"> <ul class="dropdown-menu dropdown-menu-right">
<li><a data-href="'.base_path().'/modules/fatture/crea_autofattura.php?id_module='.$id_module.'&id_record='.$id_record.'&iddocumento='.$id_record.'" data-title="Aggiungi autofattura"> <li><a data-href="'.base_path().'/modules/fatture/crea_autofattura.php?id_module='.$id_module.'&id_record='.$id_record.'&iddocumento='.$id_record.'" data-title="Aggiungi autofattura">
'.tr('Autofattura').' '.tr('Autofattura').'
</a></li> </a></li>
</ul>'; </ul>';
} }
echo ' echo '
</div>'; </div>';
} }
if (empty($record['is_fiscale'])) { if (empty($record['is_fiscale'])) {
$msg = '<br>{[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_segment", "required": 1, "ajax-source": "segmenti", "select-options": '.json_encode(["id_module" => $id_module, 'is_sezionale' => 1, 'is_fiscale' => 1]).', "select-options-escape": true ]} $msg = '<br>{[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_segment", "required": 1, "ajax-source": "segmenti", "select-options": '.json_encode(['id_module' => $id_module, 'is_sezionale' => 1, 'is_fiscale' => 1]).', "select-options-escape": true ]}
{[ "type": "date", "label": "'.tr('Data').'", "name": "data", "required": 1, "value": "-now-" ]}'; {[ "type": "date", "label": "'.tr('Data').'", "name": "data", "required": 1, "value": "-now-" ]}';
echo ' echo '
@ -93,7 +93,6 @@ if (!empty($record['is_fiscale'])) {
// Aggiunta prima nota solo se non c'è già, se non si è in bozza o se il pagamento non è completo // Aggiunta prima nota solo se non c'è già, se non si è in bozza o se il pagamento non è completo
$prima_nota_presente = $dbo->fetchNum('SELECT id FROM co_movimenti WHERE iddocumento = '.prepare($id_record).' AND primanota = 1'); $prima_nota_presente = $dbo->fetchNum('SELECT id FROM co_movimenti WHERE iddocumento = '.prepare($id_record).' AND primanota = 1');
$registrazione_contabile = 0; $registrazione_contabile = 0;
if ($differenza != 0 || (!$prima_nota_presente && $record['stato'] == 'Emessa')) { if ($differenza != 0 || (!$prima_nota_presente && $record['stato'] == 'Emessa')) {
$registrazione_contabile = 1; $registrazione_contabile = 1;

View File

@ -29,33 +29,29 @@ $services_enable = Interaction::isEnabled();
if ($module->name == 'Fatture di vendita' && $services_enable) { if ($module->name == 'Fatture di vendita' && $services_enable) {
$documenti_scarto = []; $documenti_scarto = [];
$documenti_invio = []; $documenti_invio = [];
$codici_scarto = ['EC02','ERR','ERVAL','NS']; $codici_scarto = ['EC02', 'ERR', 'ERVAL', 'NS'];
$codici_invio = ['GEN','QUEUE']; $codici_invio = ['GEN', 'QUEUE'];
$data_limite = (new Carbon())->subMonths(6); $data_limite = (new Carbon())->subMonths(6);
$data_limite_invio = (new Carbon())->subDays(10); $data_limite_invio = (new Carbon())->subDays(10);
$data_setting = Carbon::createFromFormat('d/m/Y', setting('Data inizio controlli su stati FE'))->format('Y-m-d'); $data_setting = Carbon::createFromFormat('d/m/Y', setting('Data inizio controlli su stati FE'))->format('Y-m-d');
$documenti = Fattura::where('data', '>', $data_limite)->where('data', '>', $data_setting)->whereIn('codice_stato_fe', ['EC02', 'ERR', 'ERVAL', 'NS', 'GEN', 'QUEUE'])->get();
$documenti = Fattura::where('data', '>', $data_limite)->where('data', '>', $data_setting)->whereIn('codice_stato_fe', ['EC02','ERR','ERVAL','NS','GEN','QUEUE'])->get();
foreach ($documenti as $documento) { foreach ($documenti as $documento) {
$stato_fe = $database->fetchOne('SELECT descrizione, icon FROM fe_stati_documento WHERE codice = '.prepare($documento->codice_stato_fe)); $stato_fe = $database->fetchOne('SELECT descrizione, icon FROM fe_stati_documento WHERE codice = '.prepare($documento->codice_stato_fe));
if (in_array($documento->codice_stato_fe, $codici_scarto)) { if (in_array($documento->codice_stato_fe, $codici_scarto)) {
// In caso di NS verifico che non sia semplicemente un codice 00404 (Fattura duplicata) // In caso di NS verifico che non sia semplicemente un codice 00404 (Fattura duplicata)
if ($documento->codice_stato_fe == 'NS'){ if ($documento->codice_stato_fe == 'NS') {
$ricevuta_principale = $documento->getRicevutaPrincipale(); $ricevuta_principale = $documento->getRicevutaPrincipale();
if (!empty($ricevuta_principale)) { if (!empty($ricevuta_principale)) {
$contenuto_ricevuta = XML::readFile($ricevuta_principale->filepath); $contenuto_ricevuta = XML::readFile($ricevuta_principale->filepath);
$lista_errori = $contenuto_ricevuta['ListaErrori']; $lista_errori = $contenuto_ricevuta['ListaErrori'];
if ($lista_errori) { if ($lista_errori) {
$lista_errori = $lista_errori[0] ? $lista_errori : [$lista_errori]; $lista_errori = $lista_errori[0] ? $lista_errori : [$lista_errori];
$errore = $lista_errori[0]['Errore']; $errore = $lista_errori[0]['Errore'];
if ($errore['Codice'] == '00404'){ if ($errore['Codice'] == '00404') {
return; return;
} }
} }
@ -69,15 +65,13 @@ if ($module->name == 'Fatture di vendita' && $services_enable) {
])); ]));
$show_avviso = $show_avviso ?: ($documento->data_stato_fe < (new Carbon())->subDays(4) ? 1 : 0); $show_avviso = $show_avviso ?: ($documento->data_stato_fe < (new Carbon())->subDays(4) ? 1 : 0);
} elseif (in_array($documento->codice_stato_fe, $codici_invio)) { } elseif (in_array($documento->codice_stato_fe, $codici_invio)) {
$is_estera = false; $is_estera = false;
if (setting('Rimuovi avviso fatture estere')) { if (setting('Rimuovi avviso fatture estere')) {
$is_estera = $database->fetchOne('SELECT idanagrafica FROM an_anagrafiche INNER JOIN an_nazioni ON an_anagrafiche.id_nazione = an_nazioni.id WHERE an_nazioni.nome != "Italia" AND an_anagrafiche.idanagrafica = '.prepare($documento->idanagrafica)); $is_estera = $database->fetchOne('SELECT idanagrafica FROM an_anagrafiche INNER JOIN an_nazioni ON an_anagrafiche.id_nazione = an_nazioni.id WHERE an_nazioni.nome != "Italia" AND an_anagrafiche.idanagrafica = '.prepare($documento->idanagrafica));
} }
if ($documento->data <= $data_limite_invio && !$is_estera) { if ($documento->data <= $data_limite_invio && !$is_estera) {
$documenti_invio[] = Modules::link('Fatture di vendita', $documento->id, tr('_ICON_ Fattura numero _NUM_ del _DATE_ : <b>_STATO_</b>', [ $documenti_invio[] = Modules::link('Fatture di vendita', $documento->id, tr('_ICON_ Fattura numero _NUM_ del _DATE_ : <b>_STATO_</b>', [
'_ICON_' => '<i class="'.$stato_fe['icon'].'"></i>', '_ICON_' => '<i class="'.$stato_fe['icon'].'"></i>',
@ -92,16 +86,16 @@ if ($module->name == 'Fatture di vendita' && $services_enable) {
if (sizeof($documenti_scarto) > 0) { if (sizeof($documenti_scarto) > 0) {
echo ' echo '
<div class="alert alert-danger"> <div class="alert alert-danger">
<i class="fa fa-warning"></i> '.tr("<b>ATTENZIONE:</b> le seguenti fatture riscontrano problemi").':<ul>'; <i class="fa fa-warning"></i> '.tr('<b>ATTENZIONE:</b> le seguenti fatture riscontrano problemi').':<ul>';
foreach ($documenti_scarto as $documento) { foreach ($documenti_scarto as $documento) {
echo ' echo '
<li><b>'.$documento.'</b></li>'; <li><b>'.$documento.'</b></li>';
} }
echo ' echo '
</ul>'; </ul>';
if ($show_avviso) { if ($show_avviso) {
echo tr('Cosa fare in caso di fattura elettronica scartata? Dovrai correggere la fattura e inviarla di nuovo al SdI <b>entro 5 giorni dalla data di notifica dello scarto</b>, mantenendo lo stesso numero e data del documento.'); echo tr('Cosa fare in caso di fattura elettronica scartata? Dovrai correggere la fattura e inviarla di nuovo al SdI <b>entro 5 giorni dalla data di notifica dello scarto</b>, mantenendo lo stesso numero e data del documento.');
} }
echo ' echo '
</div>'; </div>';
} }
@ -109,11 +103,11 @@ if ($module->name == 'Fatture di vendita' && $services_enable) {
if (sizeof($documenti_invio) > 0) { if (sizeof($documenti_invio) > 0) {
echo ' echo '
<div class="alert alert-warning"> <div class="alert alert-warning">
<i class="fa fa-clock-o"></i> '.tr("Le seguenti fatture sono in attesa di essere inviate").':<ul>'; <i class="fa fa-clock-o"></i> '.tr('Le seguenti fatture sono in attesa di essere inviate').':<ul>';
foreach ($documenti_invio as $documento) { foreach ($documenti_invio as $documento) {
echo ' echo '
<li><b>'.$documento.'</b></li>'; <li><b>'.$documento.'</b></li>';
} }
echo ' echo '
</ul> </ul>
</div>'; </div>';

View File

@ -19,7 +19,6 @@
use Carbon\Carbon; use Carbon\Carbon;
use Modules\Anagrafiche\Anagrafica; use Modules\Anagrafiche\Anagrafica;
use Modules\Anagrafiche\Nazione;
use Modules\Fatture\Fattura; use Modules\Fatture\Fattura;
use Modules\Fatture\Gestori\Bollo; use Modules\Fatture\Gestori\Bollo;
use Modules\Interventi\Intervento; use Modules\Interventi\Intervento;
@ -39,7 +38,7 @@ if ($dir == 'entrata') {
} }
// Informazioni sulla dichiarazione d'intento, visibili solo finchè la fattura è in bozza // Informazioni sulla dichiarazione d'intento, visibili solo finchè la fattura è in bozza
if ($dir == 'entrata' && !empty($fattura->dichiarazione) ) { if ($dir == 'entrata' && !empty($fattura->dichiarazione)) {
$diff = $fattura->dichiarazione->massimale - $fattura->dichiarazione->totale; $diff = $fattura->dichiarazione->massimale - $fattura->dichiarazione->totale;
$diff_in_days = Carbon::parse($fattura->dichiarazione->data_fine)->diffAsCarbonInterval($fattura->data); $diff_in_days = Carbon::parse($fattura->dichiarazione->data_fine)->diffAsCarbonInterval($fattura->data);
@ -47,7 +46,6 @@ if ($dir == 'entrata' && !empty($fattura->dichiarazione) ) {
$iva = Aliquota::find($id_iva); $iva = Aliquota::find($id_iva);
if (!empty($iva)) { if (!empty($iva)) {
if ($diff == 0) { if ($diff == 0) {
echo ' echo '
<div class="alert alert-info"> <div class="alert alert-info">
@ -64,8 +62,7 @@ if ($dir == 'entrata' && !empty($fattura->dichiarazione) ) {
'_PROTOCOLLO_' => $fattura->dichiarazione->numero_protocollo, '_PROTOCOLLO_' => $fattura->dichiarazione->numero_protocollo,
]).'.</b> ]).'.</b>
</div>'; </div>';
} } elseif ($diff_in_days < 0) {
elseif ($diff_in_days < 0) {
echo ' echo '
<div class="alert alert-warning"> <div class="alert alert-warning">
<i class="fa fa-warning"></i> '.tr("La dichiarazione d'intento _PROTOCOLLO_ ha come data fine validità _SCADENZA_ mentre la fattura ha data _DATA_", [ <i class="fa fa-warning"></i> '.tr("La dichiarazione d'intento _PROTOCOLLO_ ha come data fine validità _SCADENZA_ mentre la fattura ha data _DATA_", [
@ -75,7 +72,6 @@ if ($dir == 'entrata' && !empty($fattura->dichiarazione) ) {
]).'.</b> ]).'.</b>
</div>'; </div>';
} }
} else { } else {
//TODO link ad impostazioni con nuova ricerca rapida //TODO link ad impostazioni con nuova ricerca rapida
echo ' echo '
@ -116,7 +112,7 @@ if ($abilita_autofattura) {
} elseif ($autofattura_collegata != null) { } elseif ($autofattura_collegata != null) {
echo ' echo '
<div class="alert alert-info"> <div class="alert alert-info">
<i class="fa fa-info"></i> '.tr("Questa autofattura è già stata importata come fattura di acquisto").': <i class="fa fa-info"></i> '.tr('Questa autofattura è già stata importata come fattura di acquisto').':
<b>'.Modules::link('Fatture di acquisto', $autofattura_collegata->id, tr('Fattura num. _NUM_ del _DATE_', [ <b>'.Modules::link('Fatture di acquisto', $autofattura_collegata->id, tr('Fattura num. _NUM_ del _DATE_', [
'_NUM_' => $autofattura_collegata->numero_esterno, '_NUM_' => $autofattura_collegata->numero_esterno,
'_DATE_' => dateFormat($autofattura_collegata->data), '_DATE_' => dateFormat($autofattura_collegata->data),
@ -135,7 +131,7 @@ if (!empty($note_accredito)) {
]); ]);
echo ' echo '
<br>'.Modules::link( ($dir == 'entrata' ? 'Fatture di vendita' : 'Fatture di acquisto' ), $nota['id'], $text, $text); <br>'.Modules::link(($dir == 'entrata' ? 'Fatture di vendita' : 'Fatture di acquisto'), $nota['id'], $text, $text);
} }
echo ' echo '
</div>'; </div>';
@ -146,7 +142,7 @@ if (!empty($fattura->ref_documento) && $fattura->isNota()) {
$nota = Fattura::find($fattura->ref_documento); $nota = Fattura::find($fattura->ref_documento);
echo ' echo '
<div class="alert alert-info"> <div class="alert alert-info">
<i class="fa fa-info"></i> '.tr("Questa è una _TIPO_ generata dalla seguente fattura", [ <i class="fa fa-info"></i> '.tr('Questa è una _TIPO_ generata dalla seguente fattura', [
'_TIPO_' => $fattura->tipo->descrizione, '_TIPO_' => $fattura->tipo->descrizione,
]).': ]).':
<b>'.Modules::link($module->name, $fattura->ref_documento, tr('Fattura num. _NUM_ del _DATE_', [ <b>'.Modules::link($module->name, $fattura->ref_documento, tr('Fattura num. _NUM_ del _DATE_', [
@ -157,14 +153,12 @@ if (!empty($fattura->ref_documento) && $fattura->isNota()) {
} }
// Ricordo che si sta emettendo una fattura conto terzi // Ricordo che si sta emettendo una fattura conto terzi
if ($dir == 'entrata' && $fattura->stato->descrizione == 'Bozza' ) { if ($dir == 'entrata' && $fattura->stato->descrizione == 'Bozza') {
if ($fattura->is_fattura_conto_terzi){ if ($fattura->is_fattura_conto_terzi) {
echo ' echo '
<div class="alert alert-info"> <div class="alert alert-info">
<i class="fa fa-info"></i> '.tr("Questa è una fattura per conto di terzi. Nell'XML della Fattura Elettronica sarà indicato il fornitore _FORNITORE_ come cessionario e il cliente come cedente/prestatore", ['_FORNITORE_' => '"<b>'.stripslashes($database->fetchOne('SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica = '.prepare(setting('Azienda predefinita')))['ragione_sociale']).'</b>"',]).'.</b> <i class="fa fa-info"></i> '.tr("Questa è una fattura per conto di terzi. Nell'XML della Fattura Elettronica sarà indicato il fornitore _FORNITORE_ come cessionario e il cliente come cedente/prestatore", ['_FORNITORE_' => '"<b>'.stripslashes($database->fetchOne('SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica = '.prepare(setting('Azienda predefinita')))['ragione_sociale']).'</b>"']).'.</b>
</div>'; </div>';
} }
} }
// Verifica aggiuntive sulla sequenzialità dei numeri // Verifica aggiuntive sulla sequenzialità dei numeri
@ -312,7 +306,7 @@ elseif ($record['stato'] == 'Bozza') {
if ($record['idagente'] != 0) { if ($record['idagente'] != 0) {
echo Modules::link('Anagrafiche', $record['idagente_fattura'], null, null, 'class="pull-right"'); echo Modules::link('Anagrafiche', $record['idagente_fattura'], null, null, 'class="pull-right"');
} }
echo ' echo '
{[ "type": "select", "label": "'.tr('Agente di riferimento').'", "name": "idagente", "ajax-source": "agenti", "select-options": {"idanagrafica": '.$record['idanagrafica'].'}, "value": "$idagente_fattura$" ]} {[ "type": "select", "label": "'.tr('Agente di riferimento').'", "name": "idagente", "ajax-source": "agenti", "select-options": {"idanagrafica": '.$record['idanagrafica'].'}, "value": "$idagente_fattura$" ]}
</div>'; </div>';
} }
@ -371,10 +365,9 @@ echo '
</div> </div>
<div class="col-md-3"> <div class="col-md-3">
<?php <?php if ($record['id_banca_azienda'] != 0) {
if ($record['id_banca_azienda'] != 0) { echo Modules::link('Banche', $record['id_banca_azienda'], null, null, 'class="pull-right"');
echo Modules::link('Banche', $record['id_banca_azienda'], null, null, 'class="pull-right"'); }
}
?> ?>
{[ "type": "select", "label": "<?php echo tr('Banca azienda'); ?>", "name": "id_banca_azienda", "ajax-source": "banche", "select-options": <?php echo json_encode(['id_anagrafica' => $anagrafica_azienda->id]); ?>, "value": "$id_banca_azienda$", "icon-after": "add|<?php echo Modules::get('Banche')['id']; ?>|id_anagrafica=<?php echo $anagrafica_azienda->id; ?>", "extra": " <?php echo (intval($block_edit)) ? 'disabled' : ''; ?> " ]} {[ "type": "select", "label": "<?php echo tr('Banca azienda'); ?>", "name": "id_banca_azienda", "ajax-source": "banche", "select-options": <?php echo json_encode(['id_anagrafica' => $anagrafica_azienda->id]); ?>, "value": "$id_banca_azienda$", "icon-after": "add|<?php echo Modules::get('Banche')['id']; ?>|id_anagrafica=<?php echo $anagrafica_azienda->id; ?>", "extra": " <?php echo (intval($block_edit)) ? 'disabled' : ''; ?> " ]}
</div> </div>
@ -457,7 +450,6 @@ echo '
echo '<div class="col-md-3"> echo '<div class="col-md-3">
{[ "type": "number", "label": "'.tr('Sconto in fattura').'", "name": "sconto_finale", "value": "'.($fattura->sconto_finale_percentuale ?: $fattura->sconto_finale).'", "icon-after": "choice|untprc|'.(empty($fattura->sconto_finale) ? 'PRC' : 'UNT').'", "help": "'.tr('Sconto in fattura, utilizzabile per applicare sconti sul Netto a pagare del documento e le relative scadenze').'. '.tr('Per utilizzarlo in relazione a una riga della Fattura Elettronica, inserire il tipo di dato in \'\'Attributi avanzati\'\' -> \'\'Altri Dati Gestionali\'\' -> \'\'TipoDato\'\' e il testo di descrizione in \'\'Attributi avanzati\'\' -> \'\'Altri Dati Gestionali\'\' -> \'\'RiferimentoTesto\'\' della specifica riga').'. '.tr('Nota: lo sconto in fattura non influenza i movimenti contabili').'." ]} {[ "type": "number", "label": "'.tr('Sconto in fattura').'", "name": "sconto_finale", "value": "'.($fattura->sconto_finale_percentuale ?: $fattura->sconto_finale).'", "icon-after": "choice|untprc|'.(empty($fattura->sconto_finale) ? 'PRC' : 'UNT').'", "help": "'.tr('Sconto in fattura, utilizzabile per applicare sconti sul Netto a pagare del documento e le relative scadenze').'. '.tr('Per utilizzarlo in relazione a una riga della Fattura Elettronica, inserire il tipo di dato in \'\'Attributi avanzati\'\' -> \'\'Altri Dati Gestionali\'\' -> \'\'TipoDato\'\' e il testo di descrizione in \'\'Attributi avanzati\'\' -> \'\'Altri Dati Gestionali\'\' -> \'\'RiferimentoTesto\'\' della specifica riga').'. '.tr('Nota: lo sconto in fattura non influenza i movimenti contabili').'." ]}
</div>'; </div>';
} }
?> ?>
</div> </div>
@ -555,13 +547,12 @@ if ($record['descrizione_tipo'] == 'Fattura accompagnatoria di vendita') {
</div> </div>
<div class="col-md-3">'; <div class="col-md-3">';
if (!empty($record['idvettore'])) { if (!empty($record['idvettore'])) {
echo Modules::link('Anagrafiche', $record['idvettore'], null, null, 'class="pull-right"'); echo Modules::link('Anagrafiche', $record['idvettore'], null, null, 'class="pull-right"');
} }
$esterno = $dbo->selectOne('dt_spedizione', 'esterno', [ $esterno = $dbo->selectOne('dt_spedizione', 'esterno', [
'id' => $record['idspedizione'], 'id' => $record['idspedizione'],
])['esterno']; ])['esterno']; ?>
?>
{[ "type": "select", "label": "<?php echo tr('Vettore'); ?>", "name": "idvettore", "ajax-source": "vettori", "value": "$idvettore$", "disabled": <?php echo empty($esterno) || (!empty($esterno) && !empty($record['idvettore'])) ? 1 : 0; ?>, "required": <?php echo !empty($esterno) ?: 0; ?>, "icon-after": "add|<?php echo Modules::get('Anagrafiche')['id']; ?>|tipoanagrafica=Vettore&readonly_tipo=1|btn_idvettore|<?php echo ($esterno and (intval(!$record['flag_completato']) || empty($record['idvettore']))) ? '' : 'disabled'; ?>", "class": "<?php echo empty($record['idvettore']) ? 'unblockable' : ''; ?>" ]} {[ "type": "select", "label": "<?php echo tr('Vettore'); ?>", "name": "idvettore", "ajax-source": "vettori", "value": "$idvettore$", "disabled": <?php echo empty($esterno) || (!empty($esterno) && !empty($record['idvettore'])) ? 1 : 0; ?>, "required": <?php echo !empty($esterno) ?: 0; ?>, "icon-after": "add|<?php echo Modules::get('Anagrafiche')['id']; ?>|tipoanagrafica=Vettore&readonly_tipo=1|btn_idvettore|<?php echo ($esterno and (intval(!$record['flag_completato']) || empty($record['idvettore']))) ? '' : 'disabled'; ?>", "class": "<?php echo empty($record['idvettore']) ? 'unblockable' : ''; ?>" ]}
</div> </div>
@ -693,22 +684,18 @@ echo '
</form>'; </form>';
//Dich. intento collegata //Dich. intento collegata
if ($dir == 'entrata' && !empty($fattura->dichiarazione)){ if ($dir == 'entrata' && !empty($fattura->dichiarazione)) {
$ive_accettate = $dbo->table('co_iva')->where('codice_natura_fe', 'N3.5')->get();
$ive_accettate = $dbo->table('co_iva')->where('codice_natura_fe','N3.5')->get(); foreach ($ive_accettate as $iva_accettata) {
foreach($ive_accettate as $iva_accettata){
$descrizione_iva_accettata .= '<li>'.$iva_accettata->descrizione.'</li>'; $descrizione_iva_accettata .= '<li>'.$iva_accettata->descrizione.'</li>';
} }
if ($fattura->stato->descrizione == 'Bozza'){ if ($fattura->stato->descrizione == 'Bozza') {
echo ' echo '
<div class="alert alert-info"> <div class="alert alert-info">
<i class="fa fa-info"></i> '.tr("La fattura è collegata ad una dichiarazione d'intento con diponibilità residura pari a _MONEY_.", [ '_MONEY_' => moneyFormat($diff),]).'<br>'.tr("Per collegare una riga alla dichiarazione è sufficiente specificare come IVA <ul>_IVA_</ul>", ['_IVA_' => $descrizione_iva_accettata]).'</b> <i class="fa fa-info"></i> '.tr("La fattura è collegata ad una dichiarazione d'intento con diponibilità residura pari a _MONEY_.", ['_MONEY_' => moneyFormat($diff)]).'<br>'.tr('Per collegare una riga alla dichiarazione è sufficiente specificare come IVA <ul>_IVA_</ul>', ['_IVA_' => $descrizione_iva_accettata]).'</b>
</div>'; </div>';
} }
} }
echo ' echo '
@ -774,8 +761,8 @@ if (!$block_edit) {
$ordini = $dbo->fetchArray($ordini_query)[0]['tot']; $ordini = $dbo->fetchArray($ordini_query)[0]['tot'];
} }
// Form di inserimento riga documento // Form di inserimento riga documento
echo ' echo '
<form id="link_form" action="" method="post"> <form id="link_form" action="" method="post">
<input type="hidden" name="op" value="add_articolo"> <input type="hidden" name="op" value="add_articolo">
<input type="hidden" name="backto" value="record-edit"> <input type="hidden" name="backto" value="record-edit">
@ -815,9 +802,9 @@ if (!$block_edit) {
<i class="fa fa-plus"></i> '.tr('Sconto/maggiorazione').' <i class="fa fa-plus"></i> '.tr('Sconto/maggiorazione').'
</a> </a>
</li>'; </li>';
if (empty($record['ref_documento'])) { if (empty($record['ref_documento'])) {
if ($dir == 'entrata') { if ($dir == 'entrata') {
echo ' echo '
<li> <li>
<a class="'.(!empty($interventi) ? '' : ' disabled').'" style="cursor:pointer" data-href="'.$structure->fileurl('add_intervento.php').'?id_module='.$id_module.'&id_record='.$id_record.'" data-toggle="modal" data-title="'.tr('Aggiungi Attività').'" onclick="saveForm()"> <a class="'.(!empty($interventi) ? '' : ' disabled').'" style="cursor:pointer" data-href="'.$structure->fileurl('add_intervento.php').'?id_module='.$id_module.'&id_record='.$id_record.'" data-toggle="modal" data-title="'.tr('Aggiungi Attività').'" onclick="saveForm()">
<i class="fa fa-plus"></i> '.tr('Attività').' <i class="fa fa-plus"></i> '.tr('Attività').'
@ -835,8 +822,8 @@ if (!$block_edit) {
<i class="fa fa-plus"></i> '.tr('Contratto').' <i class="fa fa-plus"></i> '.tr('Contratto').'
</a> </a>
</li>'; </li>';
} }
echo ' echo '
<li> <li>
<a class="'.(!empty($ddt) ? '' : ' disabled').'" style="cursor:pointer" data-href="'.$structure->fileurl('add_ddt.php').'?id_module='.$id_module.'&id_record='.$id_record.'" data-toggle="modal" data-title="'.tr('Aggiungi Ddt').'" onclick="saveForm()"> <a class="'.(!empty($ddt) ? '' : ' disabled').'" style="cursor:pointer" data-href="'.$structure->fileurl('add_ddt.php').'?id_module='.$id_module.'&id_record='.$id_record.'" data-toggle="modal" data-title="'.tr('Aggiungi Ddt').'" onclick="saveForm()">
<i class="fa fa-plus"></i> '.tr('Ddt').' <i class="fa fa-plus"></i> '.tr('Ddt').'
@ -848,8 +835,8 @@ if (!$block_edit) {
<i class="fa fa-plus"></i> '.tr('Ordine').' <i class="fa fa-plus"></i> '.tr('Ordine').'
</a> </a>
</li>'; </li>';
} }
echo ' echo '
</ul> </ul>
</div> </div>
</div> </div>
@ -946,8 +933,6 @@ echo '
.selectSetNew(data.id_pagamento, data.desc_pagamento, {"id_banca_vendite": data.id_banca_vendite, "id_banca_acquisti": data.id_banca_acquisti, "descrizione_banca_vendite": data.descrizione_banca_vendite, "descrizione_banca_acquisti": data.descrizione_banca_acquisti}); .selectSetNew(data.id_pagamento, data.desc_pagamento, {"id_banca_vendite": data.id_banca_vendite, "id_banca_acquisti": data.id_banca_acquisti, "descrizione_banca_vendite": data.descrizione_banca_vendite, "descrizione_banca_acquisti": data.descrizione_banca_acquisti});
} }
}'; }';
if ($dir == 'entrata') { if ($dir == 'entrata') {
echo '$("#idsede_destinazione").selectReset();'; echo '$("#idsede_destinazione").selectReset();';

Some files were not shown because too many files have changed in this diff Show More