mirror of
https://github.com/devcode-it/openstamanager.git
synced 2025-02-16 19:40:44 +01:00
Merge branch 'master' into 2.4.2
This commit is contained in:
commit
0103608070
@ -32,10 +32,9 @@
|
||||
</Files>
|
||||
|
||||
# Disable indexing of php, html, htm, pdf files
|
||||
ServerSignature Off
|
||||
<IfModule mod_headers.c>
|
||||
<FilesMatch "\.(php|html|htm|pdf|log)$">
|
||||
Header set X-Robots-Tag: "noindex"
|
||||
</FilesMatch>
|
||||
Header set X-Robots-Tag: "noindex,nofollow"
|
||||
</IfModule>
|
||||
|
||||
<IfModule mod_rewrite.c>
|
||||
@ -58,6 +57,10 @@
|
||||
RewriteRule ^node_modules/ - [F,L]
|
||||
RewriteRule ^vendor/ - [F,L]
|
||||
|
||||
# Disable HTTP TRACE
|
||||
RewriteCond %{REQUEST_METHOD} ^TRACE
|
||||
RewriteRule .* - [F]
|
||||
|
||||
# Prevent hacks
|
||||
# proc/self/environ? no way!
|
||||
RewriteCond %{QUERY_STRING} proc/self/environ [OR]
|
||||
|
@ -57,7 +57,7 @@ La documentazione ufficiale è disponibile all'indirizzo <https://devcode-it.git
|
||||
L'installazione del gestionale richiede la presenza di un server web con abilitato il [DBMS MySQL](https://www.mysql.com) e il linguaggio di programmazione [PHP](http://php.net).
|
||||
|
||||
- PHP >= 5.6
|
||||
- MySQL >= 5.0
|
||||
- MySQL >= 5.6.5
|
||||
|
||||
Per ulteriori informazioni sui pacchetti che forniscono questi elementi di default, visitare la sezione [Installazione](https://devcode-it.github.io/openstamanager/installazione.html) della documentazione.
|
||||
|
||||
|
225
actions.php
225
actions.php
@ -8,6 +8,7 @@ if (!empty($id_plugin)) {
|
||||
|
||||
$directory = '/plugins/'.$info['directory'];
|
||||
$permesso = $info['idmodule_to'];
|
||||
$id_module = $info['idmodule_to'];
|
||||
} else {
|
||||
$info = Modules::get($id_module);
|
||||
|
||||
@ -39,176 +40,40 @@ if (filter('op') == 'link_file' || filter('op') == 'unlink_file') {
|
||||
else {
|
||||
// UPLOAD
|
||||
if (filter('op') == 'link_file' && !empty($_FILES) && !empty($_FILES['blob']['name'])) {
|
||||
$nome = filter('nome_allegato');
|
||||
$nome = !empty($nome) ? $nome : $_FILES['blob']['name'];
|
||||
|
||||
$src = $_FILES['blob']['tmp_name'];
|
||||
$f = pathinfo($_FILES['blob']['name']);
|
||||
|
||||
/*
|
||||
$allowed = [
|
||||
// Image formats
|
||||
'jpg' => 'image/jpeg',
|
||||
'jpeg' => 'image/jpeg',
|
||||
'jpe' => 'image/jpeg',
|
||||
'gif' => 'image/gif',
|
||||
'png' => 'image/png',
|
||||
'bmp' => 'image/bmp',
|
||||
'tif' => 'image/tiff',
|
||||
'tiff' => 'image/tiff',
|
||||
'ico' => 'image/x-icon',
|
||||
// Video formats
|
||||
'asx' => 'video/asf',
|
||||
'asf' => 'video/asf',
|
||||
'wax' => 'video/asf',
|
||||
'wmv' => 'video/asf',
|
||||
'wmx' => 'video/asf',
|
||||
'avi' => 'video/avi',
|
||||
'divx' => 'video/divx',
|
||||
'flv' => 'video/x-flv',
|
||||
'mov' => 'video/quicktime',
|
||||
'qt' => 'video/quicktime',
|
||||
'mpg' => 'video/mpeg',
|
||||
'mpeg' => 'video/mpeg',
|
||||
'mpe' => 'video/mpeg',
|
||||
'mp4' => 'video/mp4',
|
||||
'm4v' => 'video/mp4',
|
||||
'ogv' => 'video/ogg',
|
||||
'mkv' => 'video/x-matroska',
|
||||
// Text formats
|
||||
'txt' => 'text/plain',
|
||||
'csv' => 'text/csv',
|
||||
'tsv' => 'text/tab-separated-values',
|
||||
'ics' => 'text/calendar',
|
||||
'rtx' => 'text/richtext',
|
||||
'css' => 'text/css',
|
||||
'htm' => 'text/html',
|
||||
'html' => 'text/html',
|
||||
// Audio formats
|
||||
'mp3' => 'audio/mpeg',
|
||||
'm4a' => 'audio/mpeg',
|
||||
'm4b' => 'audio/mpeg',
|
||||
'mp' => 'audio/mpeg',
|
||||
'm4b' => 'audio/mpeg',
|
||||
'ra' => 'audio/x-realaudio',
|
||||
'ram' => 'audio/x-realaudio',
|
||||
'wav' => 'audio/wav',
|
||||
'ogg' => 'audio/ogg',
|
||||
'oga' => 'audio/ogg',
|
||||
'mid' => 'audio/midi',
|
||||
'midi' => 'audio/midi',
|
||||
'wma' => 'audio/wma',
|
||||
'mka' => 'audio/x-matroska',
|
||||
// Misc application formats
|
||||
'rtf' => 'application/rtf',
|
||||
'js' => 'application/javascript',
|
||||
'pdf' => 'application/pdf',
|
||||
'swf' => 'application/x-shockwave-flash',
|
||||
'class' => 'application/java',
|
||||
'tar' => 'application/x-tar',
|
||||
'zip' => 'application/zip',
|
||||
'gz' => 'application/x-gzip',
|
||||
'gzip' => 'application/x-gzip',
|
||||
'rar' => 'application/rar',
|
||||
'7z' => 'application/x-7z-compressed',
|
||||
// MS Office formats
|
||||
'doc' => 'application/msword',
|
||||
'pot' => 'application/vnd.ms-powerpoint',
|
||||
'pps' => 'application/vnd.ms-powerpoint',
|
||||
'ppt' => 'application/vnd.ms-powerpoint',
|
||||
'wri' => 'application/vnd.ms-write',
|
||||
'xla' => 'application/vnd.ms-excel',
|
||||
'xls' => 'application/vnd.ms-excel',
|
||||
'xlt' => 'application/vnd.ms-excel',
|
||||
'xlw' => 'application/vnd.ms-excel',
|
||||
'mdb' => 'application/vnd.ms-access',
|
||||
'mpp' => 'application/vnd.ms-project',
|
||||
'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
||||
'docm' => 'application/vnd.ms-word.document.macroEnabled.12',
|
||||
'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
|
||||
'dotm' => 'application/vnd.ms-word.template.macroEnabled.12',
|
||||
'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
||||
'xlsm' => 'application/vnd.ms-excel.sheet.macroEnabled.12',
|
||||
'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12',
|
||||
'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
|
||||
'xltm' => 'application/vnd.ms-excel.template.macroEnabled.12',
|
||||
'xlam' => 'application/vnd.ms-excel.addin.macroEnabled.12',
|
||||
'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
|
||||
'pptm' => 'application/vnd.ms-powerpoint.presentation.macroEnabled.12',
|
||||
'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
|
||||
'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12',
|
||||
'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template',
|
||||
'potm' => 'application/vnd.ms-powerpoint.template.macroEnabled.12',
|
||||
'ppam' => 'application/vnd.ms-powerpoint.addin.macroEnabled.12',
|
||||
'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide',
|
||||
'sldm' => 'application/vnd.ms-powerpoint.slide.macroEnabled.12',
|
||||
'onetoc' => 'application/onenote',
|
||||
'onetoc2' => 'application/onenote',
|
||||
'onetmp' => 'application/onenote',
|
||||
'onepkg' => 'application/onenote',
|
||||
// OpenOffice formats
|
||||
'odt' => 'application/vnd.oasis.opendocument.text',
|
||||
'odp' => 'application/vnd.oasis.opendocument.presentation',
|
||||
'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
|
||||
'odg' => 'application/vnd.oasis.opendocument.graphics',
|
||||
'odc' => 'application/vnd.oasis.opendocument.chart',
|
||||
'odb' => 'application/vnd.oasis.opendocument.database',
|
||||
'odf' => 'application/vnd.oasis.opendocument.formula',
|
||||
// WordPerfect formats
|
||||
'wp' => 'application/wordperfect',
|
||||
'wpd' => 'application/wordperfect',
|
||||
];
|
||||
|
||||
|
||||
if (in_array($f['extension'], array_keys($allowed))) {
|
||||
*/
|
||||
do {
|
||||
$filename = random_string().'.'.$f['extension'];
|
||||
} while (file_exists($upload_dir.'/'.$filename));
|
||||
$upload = Uploads::upload($_FILES['blob'], [
|
||||
'name' => filter('nome_allegato'),
|
||||
'category' => filter('categoria'),
|
||||
'id_module' => $id_module,
|
||||
'id_plugin' => $id_plugin,
|
||||
'id_record' => $id_record,
|
||||
]);
|
||||
|
||||
// Creazione file fisico
|
||||
if (move_uploaded_file($src, $upload_dir.'/'.$filename)) {
|
||||
$dbo->insert('zz_files', [
|
||||
'nome' => $nome,
|
||||
'filename' => $filename,
|
||||
'original' => $_FILES['blob']['name'],
|
||||
'id_module' => $id_module,
|
||||
'id_record' => $id_record,
|
||||
]);
|
||||
|
||||
if (!empty($upload)) {
|
||||
$_SESSION['infos'][] = tr('File caricato correttamente!');
|
||||
} else {
|
||||
$_SESSION['errors'][] = tr('Errore durante il caricamento del file!');
|
||||
}
|
||||
/*
|
||||
} else {
|
||||
$_SESSION['errors'][] = tr('Tipologia di file non permessa!');
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
// DELETE
|
||||
elseif (filter('op') == 'unlink_file' && filter('filename') !== null) {
|
||||
$filename = filter('filename');
|
||||
$name = Uploads::delete(filter('filename'), [
|
||||
'id_module' => $id_module,
|
||||
'id_plugin' => $id_plugin,
|
||||
'id_record' => $id_record,
|
||||
]);
|
||||
|
||||
$rs = $dbo->fetchArray('SELECT * FROM zz_files WHERE id_module='.prepare($id_module).' AND id='.prepare(filter('id')).' AND filename='.prepare($filename));
|
||||
|
||||
if (delete($upload_dir.'/'.$filename)) {
|
||||
$query = 'DELETE FROM zz_files WHERE id_module='.prepare($id_module).' AND id='.prepare(filter('id')).' AND filename='.prepare($filename);
|
||||
if ($dbo->query($query)) {
|
||||
$_SESSION['infos'][] = tr('File _FILE_ eliminato!', [
|
||||
'_FILE_' => '"'.$rs[0]['nome'].'"',
|
||||
]);
|
||||
}
|
||||
} else {
|
||||
$_SESSION['errors'][] = tr("Errore durante l'eliminazione del file _FILE_ in _DIR_!", [
|
||||
'_FILE_' => '"'.$rs[0]['nome'].'"',
|
||||
'_DIR_' => '"files/'.$module_dir.'/"',
|
||||
if (!empty($name)) {
|
||||
$_SESSION['infos'][] = tr('File _FILE_ eliminato!', [
|
||||
'_FILE_' => '"'.$name.'"',
|
||||
]);
|
||||
} else {
|
||||
$_SESSION['errors'][] = tr("Errore durante l'eliminazione del file!");
|
||||
}
|
||||
}
|
||||
|
||||
redirect(ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$id_record);
|
||||
redirect(ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.((!empty($options['id_plugin'])) ? '#tab_'.$options['id_plugin'] : ''));
|
||||
}
|
||||
} elseif (filter('op') == 'download_file') {
|
||||
$rs = $dbo->fetchArray('SELECT * FROM zz_files WHERE id_module='.prepare($id_module).' AND id='.prepare(filter('id')).' AND filename='.prepare(filter('filename')));
|
||||
@ -216,6 +81,7 @@ if (filter('op') == 'link_file' || filter('op') == 'unlink_file') {
|
||||
download($upload_dir.'/'.$rs[0]['filename'], $rs[0]['original']);
|
||||
} elseif (filter('op') == 'send-email') {
|
||||
$template = Mail::getTemplate($post['template']);
|
||||
$id_account = $template['id_smtp'];
|
||||
|
||||
// Elenco degli allegati
|
||||
$attachments = [];
|
||||
@ -231,7 +97,7 @@ if (filter('op') == 'link_file' || filter('op') == 'unlink_file') {
|
||||
|
||||
$attachments[] = [
|
||||
'path' => $filename,
|
||||
'name' => $print['title'],
|
||||
'name' => $print['title'].'.pdf',
|
||||
];
|
||||
}
|
||||
|
||||
@ -264,7 +130,7 @@ if (filter('op') == 'link_file' || filter('op') == 'unlink_file') {
|
||||
}
|
||||
|
||||
// Preparazione email
|
||||
$mail = new Mail();
|
||||
$mail = new Mail($id_account);
|
||||
|
||||
// Conferma di lettura
|
||||
if (!empty($post['read_notify'])) {
|
||||
@ -335,30 +201,20 @@ if (filter('op') == 'link_file' || filter('op') == 'unlink_file') {
|
||||
}
|
||||
|
||||
if (Modules::getPermission($permesso) == 'r' || Modules::getPermission($permesso) == 'rw') {
|
||||
// Inclusione di eventuale plugin personalizzato
|
||||
if (!empty($info['script'])) {
|
||||
// Inclusione di eventuale plugin personalizzato
|
||||
if (file_exists(DOCROOT.'/modules/'.$info['module_dir'].'/plugins/custom/'.$info['script'])) {
|
||||
include DOCROOT.'/modules/'.$info['module_dir'].'/plugins/custom/'.$info['script'];
|
||||
} elseif (file_exists(DOCROOT.'/modules/'.$info['module_dir'].'/plugins/'.$info['script'])) {
|
||||
include DOCROOT.'/modules/'.$info['module_dir'].'/plugins/'.$info['script'];
|
||||
}
|
||||
include App::filepath('modules/'.$info['module_dir'].'/plugins|custom|', $info['script']);
|
||||
|
||||
$dbo->query('COMMIT');
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Caricamento helper modulo (verifico se ci sono helper personalizzati)
|
||||
if (file_exists(DOCROOT.$directory.'/custom/modutil.php')) {
|
||||
include_once DOCROOT.$directory.'/custom/modutil.php';
|
||||
} elseif (file_exists(DOCROOT.$directory.'/modutil.php')) {
|
||||
include_once DOCROOT.$directory.'/modutil.php';
|
||||
}
|
||||
include_once App::filepath($directory.'|custom|', 'modutil.php');
|
||||
|
||||
// Lettura risultato query del modulo
|
||||
if (file_exists(DOCROOT.$directory.'/custom/init.php')) {
|
||||
include DOCROOT.$directory.'/custom/init.php';
|
||||
} elseif (file_exists(DOCROOT.$directory.'/init.php')) {
|
||||
include DOCROOT.$directory.'/init.php';
|
||||
}
|
||||
include App::filepath($directory.'|custom|', 'init.php');
|
||||
|
||||
if (Modules::getPermission($permesso) == 'rw') {
|
||||
// Esecuzione delle operazioni di gruppo
|
||||
@ -367,23 +223,14 @@ if (Modules::getPermission($permesso) == 'r' || Modules::getPermission($permesso
|
||||
$id_records = array_filter($id_records, function ($var) {return !empty($var); });
|
||||
$id_records = array_unique($id_records);
|
||||
|
||||
$bulk = null;
|
||||
if (file_exists(DOCROOT.$directory.'/custom/bulk.php')) {
|
||||
$bulk = include DOCROOT.$directory.'/custom/bulk.php';
|
||||
} elseif (file_exists(DOCROOT.$directory.'/bulk.php')) {
|
||||
$bulk = include DOCROOT.$directory.'/bulk.php';
|
||||
}
|
||||
$bulk = (array) $bulk;
|
||||
$bulk = include App::filepath($directory.'|custom|', 'bulk.php');
|
||||
$bulk = empty($bulk) ? [] : $bulk;
|
||||
|
||||
if (in_array(post('op'), array_keys($bulk))) {
|
||||
redirect(ROOTDIR.'/controller.php?id_module='.$id_module, 'js');
|
||||
} else {
|
||||
// Esecuzione delle operazioni del modulo
|
||||
if (file_exists(DOCROOT.$directory.'/custom/actions.php')) {
|
||||
include DOCROOT.$directory.'/custom/actions.php';
|
||||
} elseif (file_exists(DOCROOT.$directory.'/actions.php')) {
|
||||
include DOCROOT.$directory.'/actions.php';
|
||||
}
|
||||
include App::filepath($directory.'|custom|', 'actions.php');
|
||||
|
||||
// Operazioni generiche per i campi personalizzati
|
||||
if (post('op') != null) {
|
||||
@ -407,10 +254,10 @@ if (Modules::getPermission($permesso) == 'r' || Modules::getPermission($permesso
|
||||
if (starts_with(post('op'), 'add')) {
|
||||
foreach ($values as $key => $value) {
|
||||
$dbo->insert('zz_field_record', [
|
||||
'id_record' => $id_record,
|
||||
'id_field' => $key,
|
||||
'value' => $value,
|
||||
]);
|
||||
'id_record' => $id_record,
|
||||
'id_field' => $key,
|
||||
'value' => $value,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
|
13
add.php
13
add.php
@ -38,6 +38,9 @@ echo '
|
||||
echo '
|
||||
|
||||
<div class="hide" id="custom_fields_top-add">
|
||||
<input type="hidden" name="id_module" value="'.$id_module.'">
|
||||
<input type="hidden" name="id_plugin" value="'.$id_plugin.'">
|
||||
|
||||
{( "name": "custom_fields", "id_module": "'.$id_module.'", "id_plugin": "'.$id_plugin.'", "position": "top", "place": "add" )}
|
||||
</div>
|
||||
|
||||
@ -72,17 +75,11 @@ $(document).ready(function(){
|
||||
echo '
|
||||
data.'.$key.' = "'.$value.'";';
|
||||
}
|
||||
|
||||
if (file_exists($docroot.$directory.'/custom/actions.php')) {
|
||||
$url = $rootdir.$directory.'/custom/actions.php';
|
||||
} elseif (file_exists($docroot.$directory.'/actions.php')) {
|
||||
$url = $rootdir.$directory.'/actions.php';
|
||||
}
|
||||
|
||||
echo '
|
||||
|
||||
$("#form_'.$id_module.'-'.$id_plugin.'").find("form").ajaxForm({
|
||||
url: "'.$url.'",
|
||||
url: globals.rootdir + "/actions.php",
|
||||
beforeSubmit: function(arr, $form, options) {
|
||||
return $form.parsley().validate();
|
||||
},
|
||||
@ -91,7 +88,7 @@ $(document).ready(function(){
|
||||
success: function(data){
|
||||
data = data.trim();
|
||||
|
||||
if(data && !$("#'.$get['select'].'").val()) {
|
||||
if(data && $("#'.$get['select'].'").val() !== undefined ) {
|
||||
result = JSON.parse(data);
|
||||
$("#'.$get['select'].'").selectSetNew(result.id, result.text);
|
||||
}
|
||||
|
9
ajax.php
9
ajax.php
@ -45,5 +45,14 @@ switch (get('op')) {
|
||||
$_SESSION[$array[0]][$array[1]] = $value;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 'list_attachments':
|
||||
$id_module = get('id_module');
|
||||
$id_record = get('id_record');
|
||||
$id_plugin = get('id_plugin');
|
||||
|
||||
echo '{( "name": "filelist_and_upload", "id_module": "'.$id_module.'", "id_record": "'.$id_record.'", "id_plugin": "'.$id_plugin.'" )}';
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -31,11 +31,7 @@ $results['summable'] = [];
|
||||
|
||||
if (!empty($result_query) && $result_query != 'menu' && $result_query != 'custom') {
|
||||
// Conteggio totale
|
||||
$count_query = 'SELECT COUNT(*) as `tot` FROM ('.$result_query.') AS `count`';
|
||||
$count = $dbo->fetchArray($count_query);
|
||||
if (!empty($count)) {
|
||||
$results['recordsTotal'] = $count[0]['tot'];
|
||||
}
|
||||
$results['recordsTotal'] = $dbo->fetchNum($result_query);
|
||||
|
||||
// Filtri di ricerica
|
||||
$search_filters = [];
|
||||
@ -102,6 +98,7 @@ if (!empty($result_query) && $result_query != 'menu' && $result_query != 'custom
|
||||
|
||||
// Query effettiva
|
||||
$query = str_replace_once('SELECT', 'SELECT SQL_CALC_FOUND_ROWS', $result_query);
|
||||
|
||||
$rs = $dbo->fetchArray($query);
|
||||
|
||||
// Conteggio dei record filtrati
|
||||
@ -160,7 +157,7 @@ if (!empty($result_query) && $result_query != 'menu' && $result_query != 'custom
|
||||
|
||||
// Icona
|
||||
if (preg_match('/^color_(.+?)$/', $field, $m)) {
|
||||
$value = $r['color_title_'.$m[1]] ?: '';
|
||||
$value = isset($r['color_title_'.$m[1]]) ? $r['color_title_'.$m[1]] : '';
|
||||
|
||||
$column['class'] = 'text-center small';
|
||||
$column['data-background'] = $r[$field];
|
||||
@ -186,7 +183,7 @@ if (!empty($result_query) && $result_query != 'menu' && $result_query != 'custom
|
||||
|
||||
// Colore del testo
|
||||
if (!empty($column['data-background'])) {
|
||||
$column['data-color'] = $column['data-color'] ?: color_inverse($column['data-background']);
|
||||
$column['data-color'] = isset($column['data-color']) ? $column['data-color'] : color_inverse($column['data-background']);
|
||||
}
|
||||
|
||||
// Link della colonna
|
||||
@ -222,4 +219,5 @@ if (!empty($result_query) && $result_query != 'menu' && $result_query != 'custom
|
||||
}
|
||||
}
|
||||
|
||||
echo json_encode($results);
|
||||
$rows = json_encode($results);
|
||||
echo $rows;
|
||||
|
@ -46,7 +46,7 @@ try {
|
||||
// Richiesta GET (ottenimento elementi)
|
||||
case 'GET':
|
||||
// Risorsa specificata
|
||||
if (!empty($request)) {
|
||||
if (count($request) > 1) {
|
||||
$result = $api->retrieve($request);
|
||||
}
|
||||
|
||||
@ -67,5 +67,14 @@ try {
|
||||
$result = API::error('serverError');
|
||||
}
|
||||
|
||||
json_decode($result);
|
||||
|
||||
// Impostazioni di Content-Type e Charset Header
|
||||
if (json_last_error() == JSON_ERROR_NONE) {
|
||||
header('Content-Type: application/json; charset=UTF-8');
|
||||
} else {
|
||||
header('Content-Type: text/plain; charset=UTF-8');
|
||||
}
|
||||
|
||||
// Stampa dei risultati
|
||||
echo $result;
|
||||
|
@ -364,6 +364,7 @@ span.form-control {
|
||||
.info-box-text {
|
||||
white-space: normal;
|
||||
overflow: auto;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.colorpicker,
|
||||
@ -529,15 +530,17 @@ input.small-width {
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
@media screen and (max-width: 767px) {
|
||||
.box-center,
|
||||
.box-center-large {
|
||||
width: 90%;
|
||||
margin-top: 20px
|
||||
}
|
||||
.main-header .logo {
|
||||
|
||||
.main-header .logo {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/*
|
||||
.content-wrapper,
|
||||
.right-side,
|
||||
@ -583,6 +586,9 @@ input.small-width {
|
||||
.callout a{
|
||||
text-decoration: none;
|
||||
}
|
||||
.dropdown-menu{
|
||||
min-width: 130px;
|
||||
}
|
||||
/*fix per tabs editor */
|
||||
.nav-tabs-custom > .nav-tabs > li{
|
||||
border-top: 3px solid #ddd;
|
||||
@ -598,4 +604,20 @@ input.small-width {
|
||||
.nav-tabs-custom > .nav-tabs > li{
|
||||
margin-bottom:-1px;
|
||||
margin-right: 0px;
|
||||
}
|
||||
}
|
||||
|
||||
.ui-autocomplete {
|
||||
background: #f6f6f6;
|
||||
border-color: #ccc;
|
||||
border-color: rgba(0, 0, 0, 0.2);
|
||||
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
-webkit-background-clip: padding-box;
|
||||
-moz-background-clip: padding;
|
||||
background-clip: padding-box;
|
||||
}
|
||||
|
||||
.parsley-errors-list{
|
||||
color: red;
|
||||
}
|
||||
|
@ -55,7 +55,8 @@
|
||||
.skin-default .main-header .navbar .nav .open a:hover,
|
||||
.skin-default .main-header .navbar .nav .open a:focus,
|
||||
.skin-default .main-header .navbar .nav .active a,
|
||||
.skin-default .main-header .navbar .nav .actual a {
|
||||
.skin-default .main-header .navbar .nav .actual a,
|
||||
.skin-default .main-header .navbar .nav .menu-open a {
|
||||
background: rgba(0, 0, 0, 0.2);
|
||||
color: #f6f6f6;
|
||||
}
|
||||
@ -132,7 +133,8 @@
|
||||
|
||||
.skin-default .sidebar-menu li:hover a,
|
||||
.skin-default .sidebar-menu li.active a,
|
||||
.skin-default .sidebar-menu li.actual a {
|
||||
.skin-default .sidebar-menu li.actual a,
|
||||
.skin-default .sidebar-menu li.menu-open a {
|
||||
background: #222;
|
||||
border-left-color: #222;
|
||||
}
|
||||
@ -195,20 +197,4 @@
|
||||
|
||||
.skin-default .panel-primary .panel-heading {
|
||||
border-bottom: 2px solid #57a;
|
||||
}
|
||||
|
||||
.skin-default .ui-autocomplete {
|
||||
background: #f6f6f6;
|
||||
border-color: #ccc;
|
||||
border-color: rgba(0, 0, 0, 0.2);
|
||||
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
-webkit-background-clip: padding-box;
|
||||
-moz-background-clip: padding;
|
||||
background-clip: padding-box;
|
||||
}
|
||||
|
||||
.skin-default .parsley-errors-list{
|
||||
color: red;
|
||||
}
|
||||
}
|
@ -1,44 +1,8 @@
|
||||
$(document).ready(function () {
|
||||
// Fix per il menu principale
|
||||
var animationSpeed = 500;
|
||||
$(document).off('click', '.sidebar li a')
|
||||
.on('click', '.sidebar li a', function (e) {
|
||||
//Get the clicked link and the next element
|
||||
var $this = $(this);
|
||||
var checkElement = $this.next();
|
||||
|
||||
//Check if the next element is a menu and is visible
|
||||
if ((checkElement.is('.treeview-menu')) && (checkElement.is(':visible')) && (!$('body').hasClass('sidebar-collapse'))) {
|
||||
//Close the menu
|
||||
checkElement.slideUp(animationSpeed, function () {
|
||||
checkElement.removeClass('menu-open');
|
||||
});
|
||||
checkElement.parent("li").removeClass("active");
|
||||
}
|
||||
//If the menu is not visible
|
||||
else if ((checkElement.is('.treeview-menu')) && (!checkElement.is(':visible'))) {
|
||||
//Get the parent menu
|
||||
var parent = $this.parents('ul').first();
|
||||
//Close all open menus within the parent
|
||||
var ul = parent.find('ul:visible').slideUp(animationSpeed);
|
||||
//Remove the menu-open class from the parent
|
||||
ul.removeClass('menu-open');
|
||||
//Get the parent li
|
||||
var parent_li = $this.parent("li");
|
||||
|
||||
//Open the target menu and add the menu-open class
|
||||
checkElement.slideDown(animationSpeed, function () {
|
||||
//Add the class active to the parent li
|
||||
checkElement.addClass('menu-open');
|
||||
parent.find('li.active').removeClass('active');
|
||||
parent_li.addClass('active');
|
||||
});
|
||||
}
|
||||
//if this isn't a link, prevent the page from being redirected
|
||||
if (checkElement.is('.treeview-menu') && $(e.target).is('.pull-right-container')) {
|
||||
e.preventDefault();
|
||||
}
|
||||
});
|
||||
$('.sidebar-menu').tree({
|
||||
followLink: true,
|
||||
});
|
||||
|
||||
// Pulsante per il ritorno a inizio pagina
|
||||
var slideToTop = $("<div />");
|
||||
|
17
bug.php
17
bug.php
@ -72,13 +72,8 @@ if (filter('op') == 'send') {
|
||||
}
|
||||
|
||||
$pageTitle = tr('Bug');
|
||||
$jscript_modules[] = App::getPaths()['js'].'/ckeditor/ckeditor.js';
|
||||
|
||||
if (file_exists($docroot.'/include/custom/top.php')) {
|
||||
include $docroot.'/include/custom/top.php';
|
||||
} else {
|
||||
include $docroot.'/include/top.php';
|
||||
}
|
||||
include_once App::filepath('include|custom|', 'top.php');
|
||||
|
||||
if (empty($mail['from_address']) || empty($mail['server'])) {
|
||||
echo '
|
||||
@ -191,10 +186,8 @@ echo '
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>';
|
||||
</script>
|
||||
|
||||
if (file_exists($docroot.'/include/custom/bottom.php')) {
|
||||
include $docroot.'/include/custom/bottom.php';
|
||||
} else {
|
||||
include $docroot.'/include/bottom.php';
|
||||
}
|
||||
<script type="text/javascript" charset="utf-8" src="'.App::getPaths()['js'].'/ckeditor/ckeditor.js'.'"></script>';
|
||||
|
||||
include_once App::filepath('include|custom|', 'bottom.php');
|
||||
|
@ -29,16 +29,18 @@
|
||||
"filp/whoops": "^2.1",
|
||||
"ifsnop/mysqldump-php": "^2.3",
|
||||
"intervention/image": "^2.3",
|
||||
"ircmaxell/password-compat": "^1.0",
|
||||
"league/csv": "^8.2",
|
||||
"maximebf/debugbar": "^1.15",
|
||||
"monolog/monolog": "^1.22",
|
||||
"mpdf/mpdf": "^7.0",
|
||||
"paragonie/random_compat": "^2.0",
|
||||
"mpdf/mpdf": "^7.1",
|
||||
"mpociot/vat-calculator": "^2.3",
|
||||
"phpmailer/phpmailer": "^6.0",
|
||||
"respect/validation": "^1.1",
|
||||
"spipu/html2pdf": "^5.0",
|
||||
"symfony/filesystem": "^3.3",
|
||||
"symfony/finder": "^3.3",
|
||||
"symfony/polyfill-ctype": "^1.8",
|
||||
"symfony/polyfill-php70": "^1.8",
|
||||
"symfony/translation": "^3.3",
|
||||
"symfony/var-dumper": "^3.3"
|
||||
},
|
||||
|
@ -5,6 +5,7 @@ $db_host = '|host|';
|
||||
$db_username = '|username|';
|
||||
$db_password = '|password|';
|
||||
$db_name = '|database|';
|
||||
//$port = '|port|';
|
||||
|
||||
// Percorso della cartella di backup
|
||||
$backup_dir = __DIR__.'/backup/';
|
||||
@ -40,5 +41,6 @@ $formatter = [
|
||||
// Ulteriori file CSS e JS da includere
|
||||
$assets = [
|
||||
'css' => [],
|
||||
'print' => [],
|
||||
'js' => [],
|
||||
];
|
||||
|
@ -8,11 +8,7 @@ if (!empty($id_record) && !empty($id_module)) {
|
||||
redirect(ROOTDIR.'/index.php');
|
||||
}
|
||||
|
||||
if (file_exists($docroot.'/include/custom/top.php')) {
|
||||
include $docroot.'/include/custom/top.php';
|
||||
} else {
|
||||
include $docroot.'/include/top.php';
|
||||
}
|
||||
include_once App::filepath('include|custom|', 'top.php');
|
||||
|
||||
// Lettura parametri iniziali del modulo
|
||||
$module = Modules::get($id_module);
|
||||
@ -89,8 +85,4 @@ redirectOperation($id_module, $id_record);
|
||||
// Widget in basso
|
||||
echo '{( "name": "widgets", "id_module": "'.$id_module.'", "position": "right", "place": "controller" )}';
|
||||
|
||||
if (file_exists($docroot.'/include/custom/bottom.php')) {
|
||||
include $docroot.'/include/custom/bottom.php';
|
||||
} else {
|
||||
include $docroot.'/include/bottom.php';
|
||||
}
|
||||
include_once App::filepath('include|custom|', 'bottom.php');
|
||||
|
75
core.php
75
core.php
@ -1,8 +1,7 @@
|
||||
<?php
|
||||
|
||||
// Impostazioni per la corretta interpretazione di UTF-8
|
||||
header('Content-Type: text/html; charset=UTF-8');
|
||||
ob_start();
|
||||
// Rimozione header X-Powered-By
|
||||
header_remove('X-Powered-By');
|
||||
|
||||
// Impostazioni di configurazione PHP
|
||||
date_default_timezone_set('Europe/Rome');
|
||||
@ -39,8 +38,8 @@ if (!empty($redirectHTTPS) && !isHTTPS(true)) {
|
||||
exit();
|
||||
}
|
||||
|
||||
// Forzamento del debug
|
||||
// $debug = true;
|
||||
// Forza l'abilitazione del debug
|
||||
// $debug = App::debug(true);
|
||||
|
||||
// Logger per la segnalazione degli errori
|
||||
$logger = new Monolog\Logger('Logs');
|
||||
@ -65,7 +64,7 @@ if (!API::isAPIRequest()) {
|
||||
|
||||
// Impostazioni di debug
|
||||
if (!empty($debug)) {
|
||||
// Ignoramento degli avvertimenti e delle informazioni relative alla deprecazione di componenti
|
||||
// Ignora gli avvertimenti e le informazioni relative alla deprecazione di componenti
|
||||
error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE & ~E_USER_DEPRECATED);
|
||||
|
||||
// File di log ordinato in base alla data
|
||||
@ -95,7 +94,18 @@ if (empty($debug)) {
|
||||
}
|
||||
|
||||
// Imposta il formato di salvataggio dei log
|
||||
$monologFormatter = new Monolog\Formatter\LineFormatter('[%datetime%] %channel%.%level_name%: %message%'.PHP_EOL.'%extra% '.PHP_EOL);
|
||||
$pattern = '[%datetime%] %channel%.%level_name%: %message%';
|
||||
if (!empty($debug)) {
|
||||
$pattern .= ' %context%';
|
||||
}
|
||||
$pattern .= PHP_EOL.'%extra% '.PHP_EOL;
|
||||
|
||||
$monologFormatter = new Monolog\Formatter\LineFormatter($pattern);
|
||||
|
||||
if (!empty($debug)) {
|
||||
$monologFormatter->includeStacktraces(true);
|
||||
}
|
||||
|
||||
foreach ($handlers as $handler) {
|
||||
$handler->setFormatter($monologFormatter);
|
||||
$logger->pushHandler(new FilterHandler($handler, [$handler->getLevel()]));
|
||||
@ -127,7 +137,11 @@ $dbo = Database::getConnection();
|
||||
// Controllo sulla presenza dei permessi di accesso basilari
|
||||
$continue = $dbo->isInstalled() && !Update::isUpdateAvailable() && (Auth::check() || API::isAPIRequest());
|
||||
|
||||
if (!$continue && getURLPath() != slashes(ROOTDIR.'/index.php')) {
|
||||
if (!empty($skip_permissions)) {
|
||||
Permissions::skip();
|
||||
}
|
||||
|
||||
if (!$continue && getURLPath() != slashes(ROOTDIR.'/index.php') && !Permissions::getSkip()) {
|
||||
if (Auth::check()) {
|
||||
Auth::logout();
|
||||
}
|
||||
@ -138,6 +152,9 @@ if (!$continue && getURLPath() != slashes(ROOTDIR.'/index.php')) {
|
||||
|
||||
// Operazione aggiuntive (richieste non API)
|
||||
if (!API::isAPIRequest()) {
|
||||
// Impostazioni di Content-Type e Charset Header
|
||||
header('Content-Type: text/html; charset=UTF-8');
|
||||
|
||||
/*
|
||||
// Controllo CSRF
|
||||
if(!CSRF::getInstance()->validate()){
|
||||
@ -161,38 +178,34 @@ if (!API::isAPIRequest()) {
|
||||
|
||||
// Registrazione globale del template per gli input HTML
|
||||
register_shutdown_function('translateTemplate');
|
||||
ob_start();
|
||||
|
||||
// Impostazione della sessione di base
|
||||
$_SESSION['infos'] = array_unique((array) $_SESSION['infos']);
|
||||
$_SESSION['warnings'] = array_unique((array) $_SESSION['warnings']);
|
||||
$_SESSION['errors'] = array_unique((array) $_SESSION['errors']);
|
||||
|
||||
// Imposto il periodo di visualizzazione dei record dal 01-01-yyy al 31-12-yyyy
|
||||
if (!empty($_GET['period_start'])) {
|
||||
$_SESSION['period_start'] = $_GET['period_start'];
|
||||
$_SESSION['period_end'] = $_GET['period_end'];
|
||||
} elseif (!isset($_SESSION['period_start'])) {
|
||||
$_SESSION['period_start'] = date('Y').'-01-01';
|
||||
$_SESSION['period_end'] = date('Y').'-12-31';
|
||||
}
|
||||
$_SESSION['infos'] = isset($_SESSION['infos']) ? array_unique($_SESSION['infos']) : [];
|
||||
$_SESSION['warnings'] = isset($_SESSION['warnings']) ? array_unique($_SESSION['warnings']) : [];
|
||||
$_SESSION['errors'] = isset($_SESSION['errors']) ? array_unique($_SESSION['errors']) : [];
|
||||
|
||||
// Impostazione del tema grafico di default
|
||||
$theme = !empty($theme) ? $theme : 'default';
|
||||
|
||||
$assets = App::getAssets();
|
||||
|
||||
// CSS di base del progetto
|
||||
$css_modules = $assets['css'];
|
||||
|
||||
// JS di base del progetto
|
||||
$jscript_modules = $assets['js'];
|
||||
|
||||
if ($continue) {
|
||||
$id_module = filter('id_module');
|
||||
$id_record = filter('id_record');
|
||||
$id_plugin = filter('id_plugin');
|
||||
$id_parent = filter('id_parent');
|
||||
|
||||
// Periodo di visualizzazione dei record
|
||||
// Personalizzato
|
||||
if (!empty($_GET['period_start'])) {
|
||||
$_SESSION['period_start'] = $_GET['period_start'];
|
||||
$_SESSION['period_end'] = $_GET['period_end'];
|
||||
}
|
||||
// Dal 01-01-yyy al 31-12-yyyy
|
||||
elseif (!isset($_SESSION['period_start'])) {
|
||||
$_SESSION['period_start'] = date('Y').'-01-01';
|
||||
$_SESSION['period_end'] = date('Y').'-12-31';
|
||||
}
|
||||
|
||||
$user = Auth::user();
|
||||
|
||||
if (!empty($id_module)) {
|
||||
@ -200,6 +213,12 @@ if (!API::isAPIRequest()) {
|
||||
|
||||
$pageTitle = $module['title'];
|
||||
|
||||
// Segmenti
|
||||
if (!isset($_SESSION['m'.$id_module]['id_segment'])) {
|
||||
$segments = Modules::getSegments($id_module);
|
||||
$_SESSION['m'.$id_module]['id_segment'] = isset($segments[0]['id']) ? $segments[0]['id'] : null;
|
||||
}
|
||||
|
||||
Permissions::addModule($id_module);
|
||||
}
|
||||
|
||||
|
@ -21,7 +21,7 @@ currentMenu: installazione
|
||||
L'installazione del gestionale richiede la presenza di un server web con abilitato il [DBMS MySQL](https://www.mysql.com) e il linguaggio di programmazione [PHP](http://php.net).
|
||||
|
||||
- PHP >= 5.6
|
||||
- MySQL >= 5.0
|
||||
- MySQL >= 5.6.5
|
||||
|
||||
Per ulteriori informazioni sui pacchetti che forniscono questi elementi di default, visitare la sezione [Installazione](https://devcode-it.github.io/openstamanager/installazione.html) della documentazione.
|
||||
|
||||
|
@ -198,6 +198,8 @@ L'archivio scaricato deve contenere direttamente al proprio interno i contenuti
|
||||
├── ... - File contententi il codice del modulo
|
||||
└── MODULE
|
||||
|
||||
Alcuni esempi sulla struttura dei moduli personalizzati sono disponibili nella repository https://github.com/devcode-it/example (download effettuabile da [qui](http://openstamanager.com/download/plugin_di_esempio.zip)).
|
||||
|
||||
#### update/VERSIONE.sql
|
||||
|
||||
Il file `VERSIONE.sql` (dove VERSIONE sta per la versione del modulo con `_`[underscore] al posto di `.`[punto]) contiene le operazioni di installazione del modulo a livello del database, comprendenti la creazione delle tabelle di base del modulo e l'inserimento di ulteriori dati nelle altre tabelle.
|
||||
@ -221,13 +223,13 @@ $dbo->query("DROP TABLE `tabella`");
|
||||
Il file `MODULE` è infine il diretto responsabile dell'installazione del modulo poiché definisce tutti i valori caratteristici dello stesso; in caso di sua assenza la cartella compressa viene considerata non corretta.
|
||||
|
||||
```ini
|
||||
module_name = "Nome del modulo"
|
||||
module_version = "Versione del modulo"
|
||||
module_directory = "Cartella di installazione del modulo"
|
||||
module_options = "Operazione da eseguire all'apertura del modulo"
|
||||
module_icon = "Icona del modulo (Font-Awesome)"
|
||||
module_compatibility = "Compatibilità del modulo"
|
||||
module_parent = "Genitore del modulo"
|
||||
name = "Nome del modulo"
|
||||
version = "Versione del modulo"
|
||||
directory = "Cartella di installazione del modulo"
|
||||
options = "Operazione da eseguire all'apertura del modulo"
|
||||
icon = "Icona del modulo (Font-Awesome)"
|
||||
compatibility = "Compatibilità del modulo"
|
||||
parent = "Genitore del modulo"
|
||||
```
|
||||
|
||||
## Moduli di base
|
||||
|
121
editor.php
121
editor.php
@ -8,11 +8,7 @@ if (empty($id_record) && !empty($id_module)) {
|
||||
redirect(ROOTDIR.'/index.php');
|
||||
}
|
||||
|
||||
if (file_exists($docroot.'/include/custom/top.php')) {
|
||||
include $docroot.'/include/custom/top.php';
|
||||
} else {
|
||||
include $docroot.'/include/top.php';
|
||||
}
|
||||
include_once App::filepath('include|custom|', 'top.php');
|
||||
|
||||
// Lettura parametri iniziali del modulo
|
||||
$module = Modules::get($id_module);
|
||||
@ -103,7 +99,7 @@ if (empty($records)) {
|
||||
{( "name": "button", "type": "email", "id_module": "'.$id_module.'", "id_record": "'.$id_record.'" )}
|
||||
|
||||
<a class="btn btn-success" id="save">
|
||||
<i class="fa fa-check"></i> '.tr('Salva modifiche').'
|
||||
<i class="fa fa-check"></i> '.tr('Salva').'
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
@ -128,6 +124,10 @@ if (empty($records)) {
|
||||
}
|
||||
});
|
||||
|
||||
if ($("#pulsanti").hasClass("affix")) {
|
||||
$("#pulsanti").css("width", $("#tab_0").css("width"));
|
||||
}
|
||||
|
||||
$("#pulsanti").on("affix.bs.affix", function(){
|
||||
$("#pulsanti").css("width", $("#tab_0").css("width"));
|
||||
});
|
||||
@ -146,11 +146,7 @@ if (empty($records)) {
|
||||
|
||||
// Pulsanti personalizzati
|
||||
ob_start();
|
||||
if (file_exists($docroot.'/modules/'.$module_dir.'/custom/buttons.php')) {
|
||||
include $docroot.'/modules/'.$module_dir.'/custom/buttons.php';
|
||||
} elseif (file_exists($docroot.'/modules/'.$module_dir.'/buttons.php')) {
|
||||
include $docroot.'/modules/'.$module_dir.'/buttons.php';
|
||||
}
|
||||
include Modules::filepath($id_module, 'buttons.php');
|
||||
$buttons = ob_get_clean();
|
||||
|
||||
if (!empty($buttons)) {
|
||||
@ -240,72 +236,71 @@ echo '
|
||||
</a>';
|
||||
|
||||
echo '
|
||||
<script>';
|
||||
<script>';
|
||||
|
||||
// Se l'utente ha i permessi in sola lettura per il modulo, converto tutti i campi di testo in span
|
||||
if ($module['permessi'] == 'r') {
|
||||
?>
|
||||
$(document).ready( function(){
|
||||
$('input, textarea, select', 'section.content').attr('readonly', 'true');
|
||||
$('select, input[type="checkbox"]').prop('disabled', true);
|
||||
$('a.btn, button, input[type=button], input[type=submit]', 'section.content').hide();
|
||||
$('a.btn-info, button.btn-info, input[type=button].btn-info', 'section.content').show();
|
||||
});
|
||||
<?php
|
||||
} ?>
|
||||
if (Modules::getPermission($id_module) == 'r' || !empty($block_edit)) {
|
||||
$not = (Modules::getPermission($id_module) == 'r') ? '' : '.not(".unblockable")';
|
||||
|
||||
var content_was_modified = false;
|
||||
echo '
|
||||
$(document).ready(function(){
|
||||
$("input, textarea, select", "section.content")'.$not.'.attr("readonly", "true");
|
||||
$("select, input[type=checkbox]")'.$not.'.prop("disabled", true);
|
||||
$("a.btn, button, input[type=button], input[type=submit]", "section.content")'.$not.'.hide();
|
||||
$("a.btn-info, a.btn-warning, button.btn-info, button.btn-warning, input[type=button].btn-info", "section.content")'.$not.'.show();
|
||||
});';
|
||||
|
||||
//controllo se digito qualche valore o cambio qualche select
|
||||
$("input, textarea, select").bind("change paste keyup", function(event) {
|
||||
if( event.keyCode >= 32 ){
|
||||
content_was_modified = true;
|
||||
}
|
||||
});
|
||||
}
|
||||
?>
|
||||
|
||||
//tolgo il controllo se sto salvando
|
||||
$(".btn-success, button[type=submit]").bind("click", function() {
|
||||
content_was_modified = false;
|
||||
});
|
||||
var content_was_modified = false;
|
||||
|
||||
// questo controllo blocca il modulo vendita al banco, dopo la lettura con barcode, appare il messaggio di conferma
|
||||
window.onbeforeunload = function(){
|
||||
if(content_was_modified) {
|
||||
return 'Uscire senza salvare?';
|
||||
}
|
||||
};
|
||||
//controllo se digito qualche valore o cambio qualche select
|
||||
$("input, textarea, select").bind("change paste keyup", function(event) {
|
||||
if( event.keyCode >= 32 ){
|
||||
content_was_modified = true;
|
||||
}
|
||||
});
|
||||
|
||||
//tolgo il controllo se sto salvando
|
||||
$(".btn-success, button[type=submit]").bind("click", function() {
|
||||
content_was_modified = false;
|
||||
});
|
||||
|
||||
// questo controllo blocca il modulo vendita al banco, dopo la lettura con barcode, appare il messaggio di conferma
|
||||
window.onbeforeunload = function(){
|
||||
if(content_was_modified) {
|
||||
return 'Uscire senza salvare?';
|
||||
}
|
||||
};
|
||||
<?php
|
||||
if ($advanced_sessions) {
|
||||
?>
|
||||
|
||||
function getActiveUsers(){
|
||||
$.getJSON('<?php echo ROOTDIR; ?>/call.php', {
|
||||
id_module: <?php echo $id_module; ?>,
|
||||
id_record: <?php echo $id_record; ?>
|
||||
},
|
||||
function(data) {
|
||||
if (data.length != 0) {
|
||||
$(".info-active").removeClass("hide");
|
||||
$(".info-active .list").html("");
|
||||
$.each( data, function( key, val ) {
|
||||
$(".info-active .list").append("<li>"+val.username+"</li>");
|
||||
});
|
||||
}
|
||||
else $(".info-active").addClass("hide");
|
||||
});
|
||||
}
|
||||
function getActiveUsers(){
|
||||
$.getJSON('<?php echo ROOTDIR; ?>/call.php', {
|
||||
id_module: <?php echo $id_module; ?>,
|
||||
id_record: <?php echo $id_record; ?>
|
||||
},
|
||||
function(data) {
|
||||
if (data.length != 0) {
|
||||
$(".info-active").removeClass("hide");
|
||||
$(".info-active .list").html("");
|
||||
$.each( data, function( key, val ) {
|
||||
$(".info-active .list").append("<li>"+val.username+"</li>");
|
||||
});
|
||||
}
|
||||
else $(".info-active").addClass("hide");
|
||||
});
|
||||
}
|
||||
|
||||
getActiveUsers();
|
||||
getActiveUsers();
|
||||
|
||||
setInterval(getActiveUsers, <?php echo get_var('Timeout notifica di presenza (minuti)') * 1000; ?>);
|
||||
setInterval(getActiveUsers, <?php echo get_var('Timeout notifica di presenza (minuti)') * 1000; ?>);
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</script>
|
||||
</script>
|
||||
<?php
|
||||
|
||||
if (file_exists($docroot.'/include/custom/bottom.php')) {
|
||||
include $docroot.'/include/custom/bottom.php';
|
||||
} else {
|
||||
include $docroot.'/include/bottom.php';
|
||||
}
|
||||
include_once App::filepath('include|custom|', 'bottom.php');
|
||||
|
15
gulpfile.js
15
gulpfile.js
@ -121,7 +121,7 @@ gulp.task('srcCSS', function () {
|
||||
|
||||
gulp.src([
|
||||
config.development + '/' + config.paths.css + '/themes/*.{css,scss,less,styl}',
|
||||
config.main.bowerDirectory + '/adminlte/dist/css/skins/_all-skins.css',
|
||||
config.main.bowerDirectory + '/admin-lte/dist/css/skins/_all-skins.css',
|
||||
])
|
||||
.pipe(gulpIf('*.scss', sass(), gulpIf('*.less', less(), gulpIf('*.styl', stylus()))))
|
||||
.pipe(autoprefixer({
|
||||
@ -208,16 +208,16 @@ gulp.task('chartjs', function () {
|
||||
|
||||
gulp.task('pdfjs', function () {
|
||||
gulp.src([
|
||||
config.main.bowerDirectory + '/pdfjs/web/**/*',
|
||||
'!' + config.main.bowerDirectory + '/pdfjs/web/cmaps/*',
|
||||
'!' + config.main.bowerDirectory + '/pdfjs/web/*.map',
|
||||
'!' + config.main.bowerDirectory + '/pdfjs/web/*.pdf',
|
||||
config.main.bowerDirectory + '/pdf/web/**/*',
|
||||
'!' + config.main.bowerDirectory + '/pdf/web/cmaps/*',
|
||||
'!' + config.main.bowerDirectory + '/pdf/web/*.map',
|
||||
'!' + config.main.bowerDirectory + '/pdf/web/*.pdf',
|
||||
])
|
||||
.pipe(gulp.dest(config.production + '/pdfjs/web'));
|
||||
|
||||
gulp.src([
|
||||
config.main.bowerDirectory + '/pdfjs/build/*',
|
||||
'!' + config.main.bowerDirectory + '/pdfjs/build/*.map',
|
||||
config.main.bowerDirectory + '/pdf/build/*',
|
||||
'!' + config.main.bowerDirectory + '/pdf/build/*.map',
|
||||
])
|
||||
.pipe(gulp.dest(config.production + '/pdfjs/build'));
|
||||
});
|
||||
@ -265,6 +265,7 @@ gulp.task('release', function () {
|
||||
'!./vendor/mpdf/mpdf/ttfonts/DejaVuinfo.txt',
|
||||
'!./vendor/mpdf/mpdf/ttfonts/DejaVu*Condensed*',
|
||||
'./vendor/maximebf/debugbar/src/DebugBar/Resources/vendor/*',
|
||||
'./vendor/respect/validation/tests/*',
|
||||
]);
|
||||
|
||||
// Impostazione dello zip
|
||||
|
@ -9,11 +9,11 @@ if (Auth::check()) {
|
||||
</aside><!-- /.content-wrapper -->
|
||||
|
||||
<footer class="main-footer">
|
||||
<a class="hidden-xs" href="https://www.openstamanager.com" title="'.tr("Il gestionale open source per l'assistenza tecnica e la fatturazione").'." target="_blank"><strong>'.tr('OpenSTAManager').'</strong></a>
|
||||
<span class="pull-right hidden-xs">
|
||||
<strong>'.tr('Versione').' '.$version.'</strong>
|
||||
<strong>'.tr('Versione').'</strong> '.$version.'
|
||||
<small class="text-muted">('.(!empty($revision) ? $revision : tr('In sviluppo')).')</small>
|
||||
</span>
|
||||
'.tr('OpenSTAManager').'
|
||||
</footer>
|
||||
|
||||
<div class="modal fade" id="bs-popup" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static" data-keyboard="true"></div>
|
||||
@ -28,12 +28,14 @@ if (Auth::check()) {
|
||||
<script> setInterval("session_keep_alive()", 5*60*1000); </script>';
|
||||
}
|
||||
|
||||
if (!empty($debug)) {
|
||||
if (App::debug()) {
|
||||
echo '
|
||||
<!-- Fix per le icone di debug -->
|
||||
<style>div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-copy-clipboard:before, div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-database:before, div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-duration:before, div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-memory:before, div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-row-count:before, div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-stmt-id:before {
|
||||
font-family: FontAwesome;
|
||||
}</style>';
|
||||
|
||||
echo $debugbarRenderer->render();
|
||||
}
|
||||
|
||||
$custom_css = get_var('CSS Personalizzato');
|
||||
@ -42,10 +44,6 @@ if (Auth::check()) {
|
||||
<style>'.$custom_css.'</style>';
|
||||
}
|
||||
|
||||
if (!empty($debugbarRenderer)) {
|
||||
echo $debugbarRenderer->render();
|
||||
}
|
||||
|
||||
// Rimozione del messaggio automatico riguardante la modifica di valori nella pagina
|
||||
echo '
|
||||
<script>
|
||||
|
@ -1,5 +1,7 @@
|
||||
<?php
|
||||
|
||||
$result['idarticolo'] = isset($result['idarticolo']) ? $result['idarticolo'] : null;
|
||||
|
||||
// Articolo
|
||||
if (!isset($options['edit_articolo']) || !empty($options['edit_articolo'])) {
|
||||
echo '
|
||||
|
@ -1,5 +1,7 @@
|
||||
<?php
|
||||
|
||||
$result['id'] = isset($result['id']) ? $result['id'] : null;
|
||||
|
||||
/*
|
||||
Form di inserimento riga documento
|
||||
*/
|
||||
|
@ -12,66 +12,93 @@ $calcolo_ritenutaacconto = 0;
|
||||
|
||||
// Informazioni aggiuntive per Fatture
|
||||
if ($module['name'] == 'Fatture di acquisto' || $module['name'] == 'Fatture di vendita') {
|
||||
|
||||
// Percentuale rivalsa INPS e Percentuale ritenuta d'acconto
|
||||
if ($options['action'] == 'edit'){
|
||||
|
||||
if($options['dir'] == 'uscita'){
|
||||
if ($options['action'] == 'edit') {
|
||||
if ($options['dir'] == 'uscita') {
|
||||
$show_idrivalsainps = 1;
|
||||
$show_idritenutaacconto = 1;
|
||||
$show_calcolo_ritenutaacconto = 1;
|
||||
} elseif (($options['dir'] == 'entrata' && (get_var('Percentuale rivalsa INPS') != '' || get_var("Percentuale ritenuta d'acconto") != ''))) {
|
||||
if (get_var('Percentuale rivalsa INPS') != '') {
|
||||
$show_idrivalsainps = 1;
|
||||
} else {
|
||||
$show_idrivalsainps = 0;
|
||||
}
|
||||
if (get_var("Percentuale ritenuta d'acconto") != '') {
|
||||
$show_idritenutaacconto = 1;
|
||||
} else {
|
||||
$show_idritenutaacconto = 0;
|
||||
}
|
||||
if (get_var("Percentuale ritenuta d'acconto") != '') {
|
||||
$show_calcolo_ritenutaacconto = 1;
|
||||
} else {
|
||||
$show_calcolo_ritenutaacconto = 0;
|
||||
}
|
||||
}
|
||||
else if (($options['dir'] == 'entrata' && ( get_var('Percentuale rivalsa INPS') != '' || get_var("Percentuale ritenuta d'acconto") != ''))) {
|
||||
if( get_var('Percentuale rivalsa INPS') != '' ){ $show_idrivalsainps = 1; }else{ $show_idrivalsainps = 0; }
|
||||
if( get_var("Percentuale ritenuta d'acconto") != '' ){ $show_idritenutaacconto = 1; }else{ $show_idritenutaacconto = 0; }
|
||||
if( get_var("Percentuale ritenuta d'acconto") != '' ){ $show_calcolo_ritenutaacconto = 1; }else{ $show_calcolo_ritenutaacconto = 0; }
|
||||
}
|
||||
|
||||
|
||||
$idrivalsainps = $result['idrivalsainps'];
|
||||
$idritenutaacconto = $result['idritenutaacconto'];
|
||||
$calcolo_ritenutaacconto = $result['calcolo_ritenutaacconto'];
|
||||
|
||||
}
|
||||
|
||||
else if ($options['action'] == 'add'){
|
||||
|
||||
if($options['dir'] == 'uscita'){
|
||||
} elseif ($options['action'] == 'add') {
|
||||
if ($options['dir'] == 'uscita') {
|
||||
$show_idrivalsainps = 1;
|
||||
$show_idritenutaacconto = 1;
|
||||
$show_calcolo_ritenutaacconto = 1;
|
||||
|
||||
$idrivalsainps = "";
|
||||
$idritenutaacconto = "";
|
||||
|
||||
$idrivalsainps = '';
|
||||
$idritenutaacconto = '';
|
||||
$calcolo_ritenutaacconto = get_var("Metodologia calcolo ritenuta d'acconto predefinito");
|
||||
}
|
||||
else if ($options['dir'] == 'entrata' && $options['op']=='addriga' && ( get_var('Percentuale rivalsa INPS') != '' || get_var("Percentuale ritenuta d'acconto") != '')) {
|
||||
if( get_var('Percentuale rivalsa INPS') != '' ){ $show_idrivalsainps = 1; }else{ $show_idrivalsainps = 0; }
|
||||
if( get_var("Percentuale ritenuta d'acconto") != '' ){ $show_idritenutaacconto = 1; }else{ $show_idritenutaacconto = 0; }
|
||||
if( get_var("Percentuale ritenuta d'acconto") != '' ){ $show_calcolo_ritenutaacconto = 1; }else{ $show_calcolo_ritenutaacconto = 0; }
|
||||
|
||||
} elseif ($options['dir'] == 'entrata' && $options['op'] == 'addriga' && (get_var('Percentuale rivalsa INPS') != '' || get_var("Percentuale ritenuta d'acconto") != '')) {
|
||||
if (get_var('Percentuale rivalsa INPS') != '') {
|
||||
$show_idrivalsainps = 1;
|
||||
} else {
|
||||
$show_idrivalsainps = 0;
|
||||
}
|
||||
if (get_var("Percentuale ritenuta d'acconto") != '') {
|
||||
$show_idritenutaacconto = 1;
|
||||
} else {
|
||||
$show_idritenutaacconto = 0;
|
||||
}
|
||||
if (get_var("Percentuale ritenuta d'acconto") != '') {
|
||||
$show_calcolo_ritenutaacconto = 1;
|
||||
} else {
|
||||
$show_calcolo_ritenutaacconto = 0;
|
||||
}
|
||||
|
||||
$idrivalsainps = get_var('Percentuale rivalsa INPS');
|
||||
$idritenutaacconto = get_var("Percentuale ritenuta d'acconto");
|
||||
$calcolo_ritenutaacconto = get_var("Metodologia calcolo ritenuta d'acconto predefinito");
|
||||
}
|
||||
//Caso particolare per aggiunta articolo in fatture di vendita
|
||||
else if($options['dir'] == 'entrata' && $options['op']=='addarticolo' && ( get_var('Percentuale rivalsa INPS') != '' || get_var("Percentuale ritenuta d'acconto") != '')){
|
||||
if( get_var('Percentuale rivalsa INPS') != '' ){ $show_idrivalsainps = 1; }else{ $show_idrivalsainps = 0; }
|
||||
if( get_var("Percentuale ritenuta d'acconto") != '' ){ $show_idritenutaacconto = 1; }else{ $show_idritenutaacconto = 0; }
|
||||
if( get_var("Percentuale ritenuta d'acconto") != '' ){ $show_calcolo_ritenutaacconto = 1; }else{ $show_calcolo_ritenutaacconto = 0; }
|
||||
|
||||
$idrivalsainps = "";
|
||||
// Caso particolare per aggiunta articolo in fatture di vendita
|
||||
elseif ($options['dir'] == 'entrata' && $options['op'] == 'addarticolo' && (get_var('Percentuale rivalsa INPS') != '' || get_var("Percentuale ritenuta d'acconto") != '')) {
|
||||
if (get_var('Percentuale rivalsa INPS') != '') {
|
||||
$show_idrivalsainps = 1;
|
||||
} else {
|
||||
$show_idrivalsainps = 0;
|
||||
}
|
||||
if (get_var("Percentuale ritenuta d'acconto") != '') {
|
||||
$show_idritenutaacconto = 1;
|
||||
} else {
|
||||
$show_idritenutaacconto = 0;
|
||||
}
|
||||
if (get_var("Percentuale ritenuta d'acconto") != '') {
|
||||
$show_calcolo_ritenutaacconto = 1;
|
||||
} else {
|
||||
$show_calcolo_ritenutaacconto = 0;
|
||||
}
|
||||
|
||||
$idrivalsainps = '';
|
||||
$idritenutaacconto = get_var("Percentuale ritenuta d'acconto");
|
||||
$calcolo_ritenutaacconto = get_var("Metodologia calcolo ritenuta d'acconto predefinito");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if($show_idrivalsainps==1 || $show_idritenutaacconto==1){
|
||||
|
||||
if ($show_idrivalsainps == 1 || $show_idritenutaacconto == 1) {
|
||||
echo '
|
||||
<div class="row">';
|
||||
|
||||
// Rivalsa INPS
|
||||
if ( $show_idrivalsainps == 1 ) {
|
||||
if ($show_idrivalsainps == 1) {
|
||||
echo '
|
||||
<div class="col-md-4">
|
||||
{[ "type": "select", "label": "'.tr('Rivalsa INPS').'", "name": "idrivalsainps", "value": "'.$idrivalsainps.'", "values": "query=SELECT * FROM co_rivalsainps" ]}
|
||||
@ -79,21 +106,21 @@ if ($module['name'] == 'Fatture di acquisto' || $module['name'] == 'Fatture di v
|
||||
}
|
||||
|
||||
// Ritenuta d'acconto
|
||||
if ( $show_idritenutaacconto == 1 ) {
|
||||
if ($show_idritenutaacconto == 1) {
|
||||
echo '
|
||||
<div class="col-md-4">
|
||||
{[ "type": "select", "label": "'.tr("Ritenuta d'acconto").'", "name": "idritenutaacconto", "value": "'.$idritenutaacconto.'", "values": "query=SELECT * FROM co_ritenutaacconto" ]}
|
||||
</div>';
|
||||
}
|
||||
|
||||
//Calcola ritenuta d'acconto su
|
||||
if ( $show_calcolo_ritenutaacconto == 1 ) {
|
||||
|
||||
// Calcola ritenuta d'acconto su
|
||||
if ($show_calcolo_ritenutaacconto == 1) {
|
||||
echo '
|
||||
<div class="col-md-4">
|
||||
{[ "type": "select", "label": "'.tr("Calcola ritenuta d'acconto su").'", "name": "calcolo_ritenutaacconto", "value": "'.$calcolo_ritenutaacconto.'", "values": "list=\"Imponibile\":\"Imponibile\", \"Imponibile + rivalsa inps\":\"Imponibile + rivalsa inps\"", "required": "1" ]}
|
||||
</div>';
|
||||
}
|
||||
|
||||
|
||||
echo '
|
||||
</div>';
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
include_once __DIR__.'/../core.php';
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
$valid_config = isset($db_host) && isset($db_name) && isset($db_username) && isset($db_password);
|
||||
|
||||
@ -11,11 +11,7 @@ if (file_exists('config.inc.php') && $valid_config && $dbo->isConnected()) {
|
||||
|
||||
$pageTitle = tr('Configurazione');
|
||||
|
||||
if (file_exists($docroot.'/include/custom/top.php')) {
|
||||
include_once $docroot.'/include/custom/top.php';
|
||||
} else {
|
||||
include_once $docroot.'/include/top.php';
|
||||
}
|
||||
include_once App::filepath('include|custom|', 'top.php');
|
||||
|
||||
// Controllo sull'esistenza di nuovi parametri di configurazione
|
||||
if (post('db_host') !== null) {
|
||||
@ -239,27 +235,42 @@ if (empty($creation) && (!file_exists('config.inc.php') || !$valid_config)) {
|
||||
return result;
|
||||
});
|
||||
|
||||
$("#install").on("click", function(){
|
||||
|
||||
if($(this).closest("form").parsley().validate()){
|
||||
prev_html = $("#install").html();
|
||||
$("#install").html("<i class=\'fa fa-spinner fa-pulse fa-fw\'></i> '.tr('Attendere').'...");
|
||||
$("#install").prop(\'disabled\', true);
|
||||
$("#test").prop(\'disabled\', true);
|
||||
|
||||
$("#config-form").submit();
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
$("#test").on("click", function(){
|
||||
if($(this).closest("form").parsley().validate()){
|
||||
prev_html = $("#test").html();
|
||||
$("#test").html("<i class=\'fa fa-spinner fa-pulse fa-fw\'></i> '.tr("Attendere").'...");
|
||||
$("#test").prop(\'disabled\', true);
|
||||
$("#test").html("<i class=\'fa fa-spinner fa-pulse fa-fw\'></i> '.tr('Attendere').'...");
|
||||
$("#test").prop(\'disabled\', true);
|
||||
$("#install").prop(\'disabled\', true);
|
||||
$(this).closest("form").ajaxSubmit({
|
||||
url: "'.$rootdir.'/index.php",
|
||||
data: {
|
||||
test: 1,
|
||||
},
|
||||
type: "post",
|
||||
type: "post",
|
||||
success: function(data){
|
||||
data = parseFloat(data.trim());
|
||||
|
||||
|
||||
$("#test").html(prev_html);
|
||||
$("#test").prop(\'disabled\', false);
|
||||
|
||||
$("#test").prop(\'disabled\', false);
|
||||
$("#install").prop(\'disabled\', false);
|
||||
|
||||
if(data == 0){
|
||||
swal("'.tr('Errore della configurazione').'", "'.tr('La configurazione non è corretta').'.", "error");
|
||||
} else if(data == 1){
|
||||
swal("'.tr('Permessi insufficienti').'", "'.tr("L'utente non possiede permessi sufficienti per il corretto funzionamento del software").'.", "error");
|
||||
swal("'.tr('Permessi insufficienti').'", "'.tr("L'utente non possiede permessi sufficienti per il testing della connessione. Potresti rilevare problemi in fase di installazione.").'.", "error");
|
||||
} else {
|
||||
swal("'.tr('Configurazione corretta').'", "'.tr('Ti sei connesso con successo al database').'. '.tr("Clicca su 'Installa' per proseguire").'.", "success");
|
||||
}
|
||||
@ -282,7 +293,6 @@ if (empty($creation) && (!file_exists('config.inc.php') || !$valid_config)) {
|
||||
|
||||
<div class="box-body" id="smartwizard">';
|
||||
|
||||
// REQUISITI PER IL CORRETTO FUNZIONAMENTO
|
||||
echo '
|
||||
<ul>
|
||||
<li><a href="#step-1">
|
||||
@ -300,154 +310,12 @@ if (empty($creation) && (!file_exists('config.inc.php') || !$valid_config)) {
|
||||
|
||||
<div id="steps">
|
||||
|
||||
<div id="step-1">
|
||||
<p>'.tr('Benvenuto in <strong>OpenSTAManager</strong>!').'</p>
|
||||
<p>'.tr("Prima di procedere alla configurazione e all'installazione del software, sono necessari alcuni accorgimenti per garantire il corretto funzionamento del gestionale").'. '.tr('Stai utilizzando la versione PHP _PHP_', [
|
||||
'_PHP_' => phpversion(),
|
||||
]).'.</p>
|
||||
<hr>';
|
||||
<div id="step-1">';
|
||||
|
||||
// REQUISITI PER IL CORRETTO FUNZIONAMENTO
|
||||
include __DIR__.'/requirements.php';
|
||||
|
||||
// Estensioni di PHP
|
||||
echo '
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<p>'.tr('Le seguenti estensioni PHP devono essere abilitate dal file di configurazione _FILE_', [
|
||||
'_FILE_' => '<b>php.ini</b>',
|
||||
]).':</p>
|
||||
<div class="list-group">';
|
||||
$extensions = [
|
||||
'zip' => tr("Necessario per l'utilizzo delle funzioni di aggiornamento automatico e backup, oltre che per eventuali moduli aggiuntivi"),
|
||||
'pdo_mysql' => tr('Necessario per la connessione al database'),
|
||||
'openssl' => tr('Utile per la generazione di chiavi complesse (facoltativo)'),
|
||||
'intl' => tr('Utile per la gestione automatizzata della conversione numerica (facoltativo)'),
|
||||
];
|
||||
foreach ($extensions as $key => $value) {
|
||||
$check = extension_loaded($key);
|
||||
echo '
|
||||
<div class="list-group-item">
|
||||
<h4 class="list-group-item-heading">
|
||||
'.$key;
|
||||
if ($check) {
|
||||
echo '
|
||||
<span class="label label-success pull-right">
|
||||
<i class="fa fa-check"></i>
|
||||
</span>';
|
||||
} else {
|
||||
echo '
|
||||
<span class="label label-danger pull-right">
|
||||
<i class="fa fa-times"></i>
|
||||
</span>';
|
||||
}
|
||||
echo '
|
||||
</h4>
|
||||
<p class="list-group-item-text">'.$value.'</p>
|
||||
</div>';
|
||||
}
|
||||
echo '
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
</div>';
|
||||
|
||||
// Impostazione di valore per PHP
|
||||
echo '
|
||||
|
||||
<div class="col-md-6">
|
||||
<p>'.tr('Le seguenti impostazioni PHP devono essere modificate nel file di configurazione _FILE_', [
|
||||
'_FILE_' => '<b>php.ini</b>',
|
||||
]).':</p>
|
||||
<div class="list-group">';
|
||||
$values = [
|
||||
'display_errors' => true,
|
||||
'upload_max_filesize' => '>16M',
|
||||
'post_max_size' => '>16M',
|
||||
];
|
||||
foreach ($values as $key => $value) {
|
||||
$ini = str_replace(['k', 'M'], ['000', '000000'], ini_get($key));
|
||||
$real = str_replace(['k', 'M'], ['000', '000000'], $value);
|
||||
|
||||
if (starts_with($real, '>')) {
|
||||
$check = $ini >= substr($real, 1);
|
||||
} elseif (starts_with($real, '<')) {
|
||||
$check = $ini <= substr($real, 1);
|
||||
} else {
|
||||
$check = ($real == $ini);
|
||||
}
|
||||
|
||||
if (is_bool($value)) {
|
||||
$value = !empty($value) ? 'On' : 'Off';
|
||||
} else {
|
||||
$value = str_replace(['>', '<'], '', $value);
|
||||
}
|
||||
|
||||
echo '
|
||||
<div class="list-group-item">
|
||||
<h4 class="list-group-item-heading">
|
||||
'.$key;
|
||||
if ($check) {
|
||||
echo '
|
||||
<span class="label label-success pull-right">
|
||||
<i class="fa fa-check"></i>
|
||||
</span>';
|
||||
} else {
|
||||
echo '
|
||||
<span class="label label-danger pull-right">
|
||||
<i class="fa fa-times"></i>
|
||||
</span>';
|
||||
}
|
||||
echo '
|
||||
</h4>
|
||||
<p class="list-group-item-text">'.tr('Valore consigliato').': '.$value.'</p>
|
||||
</div>';
|
||||
}
|
||||
echo '
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
// Percorsi necessari
|
||||
echo '
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<p>'.tr('Le seguenti cartelle devono risultare scrivibili da parte del gestionale').':</p>
|
||||
<div class="list-group">';
|
||||
$dirs = [
|
||||
'backup' => tr('Necessario per il salvataggio dei backup'),
|
||||
'files' => tr('Necessario per il salvataggio di file inseriti dagli utenti'),
|
||||
'logs' => tr('Necessario per la gestione dei file di log'),
|
||||
];
|
||||
foreach ($dirs as $key => $value) {
|
||||
$check = is_writable($docroot.DIRECTORY_SEPARATOR.$key);
|
||||
echo '
|
||||
<div class="list-group-item">
|
||||
<h4 class="list-group-item-heading">
|
||||
'.$key;
|
||||
if ($check) {
|
||||
echo '
|
||||
<span class="label label-success pull-right">
|
||||
<i class="fa fa-check"></i>
|
||||
</span>';
|
||||
} else {
|
||||
echo '
|
||||
<span class="label label-danger pull-right">
|
||||
<i class="fa fa-times"></i>
|
||||
</span>';
|
||||
}
|
||||
echo '
|
||||
</h4>
|
||||
<p class="list-group-item-text">'.$value.'</p>
|
||||
</div>';
|
||||
}
|
||||
echo '
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
</div>
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
// LICENZA
|
||||
@ -477,13 +345,11 @@ if (empty($creation) && (!file_exists('config.inc.php') || !$valid_config)) {
|
||||
$username = !empty($db_username) ? $db_username : '';
|
||||
$password = !empty($db_password) ? $db_password : '';
|
||||
$name = !empty($db_name) ? $db_name : '';
|
||||
$osm_password = !empty($_SESSION['osm_password']) ? $_SESSION['osm_password'] : '';
|
||||
$osm_email = !empty($_SESSION['osm_email']) ? $_SESSION['osm_email'] : '';
|
||||
|
||||
// PARAMETRI
|
||||
echo '
|
||||
<div id="step-3">
|
||||
<a href="http://www.openstamanager.com/contattaci/?subject=Assistenza%20installazione%20OSM" target="_blank" ><img class="pull-right" width="32" src="'.$img.'/help.png" alt="'.tr('Aiuto').'" title="'.tr('Contatta il nostro help-desk').'"/></a>
|
||||
<a href="https://www.openstamanager.com/contattaci/?subject=Assistenza%20installazione%20OSM" target="_blank" ><img class="pull-right" width="32" src="'.$img.'/help.png" alt="'.tr('Aiuto').'" title="'.tr('Contatta il nostro help-desk').'"/></a>
|
||||
|
||||
<p>'.tr('Non hai ancora configurato OpenSTAManager').'.</p>
|
||||
<p><small class="help-block">'.tr('Configura correttamente il software con i seguenti parametri (modificabili successivamente dal file _FILE_)', [
|
||||
@ -492,13 +358,13 @@ if (empty($creation) && (!file_exists('config.inc.php') || !$valid_config)) {
|
||||
|
||||
// Form dei parametri
|
||||
echo '
|
||||
<form action="?action=updateconfig&firstuse=true" method="post" id="config_form">
|
||||
<form action="?action=updateconfig&firstuse=true" method="post" id="config-form">
|
||||
<div class="row">';
|
||||
|
||||
// db_host
|
||||
echo '
|
||||
<div class="col-md-12">
|
||||
{[ "type": "text", "label": "'.tr('Host del database').'", "name": "db_host", "placeholder": "'.tr("Indirizzo dell'host del database").'", "value": "'.$host.'", "help": "'.tr('Esempio').': localhost", "show-help": 1, "required": 1 ]}
|
||||
{[ "type": "text", "label": "'.tr('Host del database').'", "name": "db_host", "placeholder": "'.tr("Indirizzo dell'host del database").'", "value": "'.$host.'", "help": "'.tr('Esempio').': localhost", "show-help": 0, "required": 1 ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -507,40 +373,22 @@ if (empty($creation) && (!file_exists('config.inc.php') || !$valid_config)) {
|
||||
// db_username
|
||||
echo '
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "'.tr("Username dell'utente MySQL").'", "name": "db_username", "placeholder": "'.tr("Username dell'utente MySQL").'", "value": "'.$username.'", "help": "'.tr('Esempio').': root", "show-help": 1, "required": 1 ]}
|
||||
{[ "type": "text", "label": "'.tr("Username dell'utente MySQL").'", "name": "db_username", "placeholder": "'.tr("Username dell'utente MySQL").'", "value": "'.$username.'", "help": "'.tr('Esempio').': root", "show-help": 0, "required": 1 ]}
|
||||
</div>';
|
||||
|
||||
// db_password
|
||||
echo '
|
||||
<div class="col-md-4">
|
||||
{[ "type": "password", "label": "'.tr("Password dell'utente MySQL").'", "name": "db_password", "placeholder": "'.tr("Password dell'utente MySQL").'", "value": "'.$password.'", "help": "'.tr('Esempio').': mysql", "show-help": 1 ]}
|
||||
{[ "type": "password", "label": "'.tr("Password dell'utente MySQL").'", "name": "db_password", "placeholder": "'.tr("Password dell'utente MySQL").'", "value": "'.$password.'", "help": "'.tr('Esempio').': mysql", "show-help": 0 ]}
|
||||
</div>';
|
||||
|
||||
// db_name
|
||||
echo '
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "'.tr('Nome del database').'", "name": "db_name", "placeholder": "'.tr('Nome del database').'", "value": "'.$name.'", "help": "'.tr('Esempio').': openstamanager", "show-help": 1, "required": 1 ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">';
|
||||
|
||||
// Password utente admin
|
||||
echo '
|
||||
<div class="col-md-6">
|
||||
{[ "type": "password", "label": "'.tr("Password dell'amministratore").'", "name": "osm_password", "placeholder": "'.tr('Scegli la password di amministratore').'", "value": "'.$osm_password.'", "help": "'.tr('Valore di default').': admin", "show-help": 1 ]}
|
||||
</div>';
|
||||
|
||||
// Email utente admin
|
||||
echo '
|
||||
<div class="col-md-6">
|
||||
{[ "type": "email", "label": "'.tr("Email dell'amministratore").'", "name": "osm_email", "placeholder": "'.tr("Digita l'indirizzo email dell'amministratore").'", "value": "'.$osm_email.'" ]}
|
||||
{[ "type": "text", "label": "'.tr('Nome del database').'", "name": "db_name", "placeholder": "'.tr('Nome del database').'", "value": "'.$name.'", "help": "'.tr('Esempio').': openstamanager", "show-help": 0, "required": 1 ]}
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
echo '
|
||||
';
|
||||
|
||||
echo '
|
||||
<!-- PULSANTI -->
|
||||
<div class="row">
|
||||
@ -553,13 +401,12 @@ if (empty($creation) && (!file_exists('config.inc.php') || !$valid_config)) {
|
||||
</button>
|
||||
</div>
|
||||
<div class="col-md-4 text-right">
|
||||
<button type="submit" class="btn btn-success btn-block">
|
||||
<button type="submit" id="install" class="btn btn-success btn-block">
|
||||
<i class="fa fa-check"></i> '.tr('Installa').'
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@ -568,10 +415,6 @@ if (empty($creation) && (!file_exists('config.inc.php') || !$valid_config)) {
|
||||
</div>';
|
||||
}
|
||||
|
||||
if (file_exists($docroot.'/include/custom/bottom.php')) {
|
||||
include_once $docroot.'/include/custom/bottom.php';
|
||||
} else {
|
||||
include_once $docroot.'/include/bottom.php';
|
||||
}
|
||||
include_once App::filepath('include|custom|', 'bottom.php');
|
||||
|
||||
exit();
|
174
include/init/init.php
Normal file
174
include/init/init.php
Normal file
@ -0,0 +1,174 @@
|
||||
<?php
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
if (Update::isUpdateAvailable() || !$dbo->isInstalled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
$has_azienda = $dbo->fetchNum("SELECT `an_anagrafiche`.`idanagrafica` FROM `an_anagrafiche`
|
||||
LEFT JOIN `an_tipianagrafiche_anagrafiche` ON `an_anagrafiche`.`idanagrafica`=`an_tipianagrafiche_anagrafiche`.`idanagrafica`
|
||||
LEFT JOIN `an_tipianagrafiche` ON `an_tipianagrafiche`.`idtipoanagrafica`=`an_tipianagrafiche_anagrafiche`.`idtipoanagrafica`
|
||||
WHERE `an_tipianagrafiche`.`descrizione` = 'Azienda' AND `an_anagrafiche`.`deleted` = 0") != 0;
|
||||
$has_user = $dbo->fetchNum('SELECT `id` FROM `zz_users`') != 0;
|
||||
|
||||
if ($has_azienda && $has_user) {
|
||||
return;
|
||||
}
|
||||
|
||||
$pageTitle = tr('Inizializzazione');
|
||||
|
||||
include_once App::filepath('include|custom|', 'top.php');
|
||||
|
||||
// Controllo sull'esistenza di nuovi parametri di configurazione
|
||||
if (post('action') == 'init') {
|
||||
// Azienda predefinita
|
||||
if (!$has_azienda) {
|
||||
Filter::set('post', 'op', 'add');
|
||||
$id_module = Modules::get('Anagrafiche')['id'];
|
||||
include DOCROOT.'/modules/anagrafiche/actions.php';
|
||||
|
||||
// Logo stampe
|
||||
if (!empty($_FILES) && !empty($_FILES['blob']['name'])) {
|
||||
$file = Uploads::upload($_FILES['blob'], [
|
||||
'name' => 'Logo stampe',
|
||||
'id_module' => $id_module,
|
||||
'id_record' => $id_record,
|
||||
]);
|
||||
|
||||
Settings::set('Logo stampe', $file);
|
||||
}
|
||||
}
|
||||
|
||||
// Utente amministratore
|
||||
if (!$has_user) {
|
||||
$admin = $dbo->selectOne('zz_groups', ['id'], [
|
||||
'nome' => 'Amministratori',
|
||||
]);
|
||||
|
||||
$dbo->insert('zz_users', [
|
||||
'username' => post('admin_username'),
|
||||
'password' => Auth::hashPassword(post('admin_password')),
|
||||
'email' => post('admin_email'),
|
||||
'idgruppo' => $admin['id'],
|
||||
'idanagrafica' => isset($id_record) ? $id_record : 0,
|
||||
'enabled' => 1,
|
||||
]);
|
||||
}
|
||||
|
||||
redirect(ROOTDIR, 'js');
|
||||
exit();
|
||||
}
|
||||
|
||||
$img = App::getPaths()['img'];
|
||||
|
||||
// Visualizzazione dell'interfaccia di impostazione iniziale, nel caso il file di configurazione sia mancante oppure i paramentri non siano sufficienti
|
||||
echo '
|
||||
<div class="box box-center-large box-warning">
|
||||
<div class="box-header with-border text-center">
|
||||
<img src="'.$img.'/logo.png" alt="'.tr('OSM Logo').'">
|
||||
<h3 class="box-title">'.tr('OpenSTAManager').'</h3>
|
||||
</div>
|
||||
|
||||
<div class="box-body">
|
||||
<form action="" method="post" id="init-form" enctype="multipart/form-data">
|
||||
<input type="hidden" name="action" value="init">';
|
||||
|
||||
if (!$has_user) {
|
||||
echo '
|
||||
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">'.tr('Amministrazione').'</h3>
|
||||
</div>
|
||||
|
||||
<div class="panel-body">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
{[ "type": "text", "label": "'.tr('Username').'", "name": "admin_username", "value": "'.$osm_password.'", "placeholder": "'.tr("Digita l'username dell'amministratore").'", "required": 1 ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "password", "label": "'.tr('Password').'", "name": "admin_password", "value": "'.$osm_password.'", "placeholder": "'.tr("Digita la password dell'amministratore").'", "required": 1 ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "email", "label": "'.tr('Email').'", "name": "admin_email", "value": "'.$osm_email.'", "placeholder": "'.tr("Digita l'indirizzo email dell'amministratore").'" ]}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
if (!$has_azienda) {
|
||||
echo '
|
||||
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">'.tr('Azienda predefinita').'</h3>
|
||||
</div>
|
||||
|
||||
<div class="panel-body">';
|
||||
|
||||
$idtipoanagrafica = $dbo->fetchArray("SELECT idtipoanagrafica FROM an_tipianagrafiche WHERE descrizione='Azienda'")[0]['idtipoanagrafica'];
|
||||
$readonly_tipo = true;
|
||||
|
||||
ob_start();
|
||||
include DOCROOT.'/modules/anagrafiche/add.php';
|
||||
$anagrafica = ob_get_clean();
|
||||
|
||||
echo str_replace('</form>', '', $anagrafica);
|
||||
|
||||
echo '
|
||||
<div class="box box-success collapsed-box">
|
||||
<div class="box-header with-border">
|
||||
<h3 class="box-title">'.tr('Logo stampe').'</h3>
|
||||
<div class="box-tools pull-right">
|
||||
<button type="button" class="btn btn-box-tool" data-widget="collapse">
|
||||
<i class="fa fa-plus"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box-body collapse">
|
||||
|
||||
<div class="col-md-12">
|
||||
{[ "type": "file", "placeholder": "'.tr('File').'", "name": "blob" ]}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
echo '
|
||||
</div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
echo '
|
||||
<!-- PULSANTI -->
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<span>*<small><small>'.tr('Campi obbligatori').'</small></small></span>
|
||||
</div>
|
||||
<div class="col-md-4 text-right">
|
||||
<button type="submit" id="config" class="btn btn-success btn-block">
|
||||
<i class="fa fa-cog"></i> '.tr('Configura').'
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
echo '
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
$("button[type=submit]").not("#config").remove();
|
||||
});
|
||||
</script>
|
||||
<script src="'.$rootdir.'/lib/functions.js"></script>
|
||||
<script src="'.$rootdir.'/lib/init.js"></script>';
|
||||
|
||||
include_once App::filepath('include|custom|', 'bottom.php');
|
||||
|
||||
exit();
|
187
include/init/requirements.php
Normal file
187
include/init/requirements.php
Normal file
@ -0,0 +1,187 @@
|
||||
<?php
|
||||
|
||||
// Apache
|
||||
$modules = [
|
||||
'mod_rewrite' => tr('Fornisce un sistema di riscrittura URL basato su regole predefinite'),
|
||||
];
|
||||
|
||||
$available_modules = apache_get_modules();
|
||||
|
||||
$apache = [];
|
||||
foreach ($modules as $name => $description) {
|
||||
$status = in_array($name, $available_modules);
|
||||
|
||||
$apache[] = [
|
||||
'name' => $name,
|
||||
'description' => $description,
|
||||
'status' => $status,
|
||||
'type' => tr('Modulo'),
|
||||
];
|
||||
}
|
||||
|
||||
// PHP
|
||||
$settings = [
|
||||
'zip' => [
|
||||
'type' => 'ext',
|
||||
'description' => tr('Permette di leggere e scrivere gli archivi compressi ZIP e i file al loro interno'),
|
||||
],
|
||||
'mbstring' => [
|
||||
'type' => 'ext',
|
||||
'description' => tr('Permette di gestire i caratteri dello standard UTF-8'),
|
||||
],
|
||||
'pdo_mysql' => [
|
||||
'type' => 'ext',
|
||||
'description' => tr('Permette di effettuare la connessione al database MySQL'),
|
||||
],
|
||||
'openssl' => [
|
||||
'type' => 'ext',
|
||||
'description' => tr("Permette l'utilizzo di funzioni crittografiche simmetriche e asimmetriche (facoltativo)"),
|
||||
],
|
||||
'intl' => [
|
||||
'type' => 'ext',
|
||||
'description' => tr("Permette l'automazione della conversione dei numeri (facoltativo)"),
|
||||
],
|
||||
'soap' => [
|
||||
'type' => 'ext',
|
||||
'description' => tr('Permette la comunicazione con servizi esterni, quali il database europeo delle Partite IVA (facoltativo)'),
|
||||
],
|
||||
'curl' => [
|
||||
'type' => 'ext',
|
||||
'description' => tr('Permette la comunicazione con servizi esterni, quali APILayer (facoltativo)'),
|
||||
],
|
||||
|
||||
'display_errors' => [
|
||||
'type' => 'value',
|
||||
'description' => true,
|
||||
],
|
||||
'upload_max_filesize' => [
|
||||
'type' => 'value',
|
||||
'description' => '>16M',
|
||||
],
|
||||
'post_max_size' => [
|
||||
'type' => 'value',
|
||||
'description' => '>16M',
|
||||
],
|
||||
];
|
||||
|
||||
$php = [];
|
||||
foreach ($settings as $name => $values) {
|
||||
$description = $values['description'];
|
||||
|
||||
if ($values['type'] == 'ext') {
|
||||
$status = extension_loaded($name);
|
||||
} else {
|
||||
$ini = str_replace(['k', 'M'], ['000', '000000'], ini_get($name));
|
||||
$real = str_replace(['k', 'M'], ['000', '000000'], $description);
|
||||
|
||||
if (starts_with($real, '>')) {
|
||||
$status = $ini >= substr($real, 1);
|
||||
} elseif (starts_with($real, '<')) {
|
||||
$status = $ini <= substr($real, 1);
|
||||
} else {
|
||||
$status = ($real == $ini);
|
||||
}
|
||||
|
||||
if (is_bool($description)) {
|
||||
$description = !empty($description) ? 'On' : 'Off';
|
||||
} else {
|
||||
$description = str_replace(['>', '<'], '', $description);
|
||||
}
|
||||
|
||||
$description = tr('Valore consigliato: _VALUE_', [
|
||||
'_VALUE_' => $description,
|
||||
]);
|
||||
}
|
||||
|
||||
$type = ($values['type'] == 'ext') ? tr('Estensione') : tr('Impostazione');
|
||||
|
||||
$php[] = [
|
||||
'name' => $name,
|
||||
'description' => $description,
|
||||
'status' => $status,
|
||||
'type' => $type,
|
||||
];
|
||||
}
|
||||
|
||||
// Percorsi di servizio
|
||||
$dirs = [
|
||||
'backup' => tr('Necessario per il salvataggio dei backup'),
|
||||
'files' => tr('Necessario per il salvataggio di file inseriti dagli utenti'),
|
||||
'logs' => tr('Necessario per la gestione dei file di log'),
|
||||
];
|
||||
|
||||
$directories = [];
|
||||
foreach ($dirs as $name => $description) {
|
||||
$status = is_writable($docroot.DIRECTORY_SEPARATOR.$name);
|
||||
|
||||
$directories[] = [
|
||||
'name' => $name,
|
||||
'description' => $description,
|
||||
'status' => $status,
|
||||
'type' => tr('Cartella'),
|
||||
];
|
||||
}
|
||||
|
||||
$requirements = [
|
||||
tr('Apache') => $apache,
|
||||
tr('PHP (_VERSION_)', [
|
||||
'_VERSION_' => phpversion(),
|
||||
]) => $php,
|
||||
tr('Percorsi di servizio') => $directories,
|
||||
];
|
||||
|
||||
// Introduzione
|
||||
echo '
|
||||
<p>'.tr('Benvenuto in _NAME_!', [
|
||||
'_NAME_' => '<strong>OpenSTAManager</strong>',
|
||||
]).'</p>
|
||||
<p>'.tr("Prima di procedere alla configurazione e all'installazione del software, sono necessari alcuni accorgimenti per garantire il corretto funzionamento del gestionale").'.</p>
|
||||
<br>
|
||||
|
||||
<p>'.tr('Le estensioni e impostazioni PHP possono essere personalizzate nel file di configurazione _FILE_', [
|
||||
'_FILE_' => '<b>php.ini</b>',
|
||||
]).'.</p>
|
||||
<hr>';
|
||||
|
||||
// Tabelle di riepilogo
|
||||
foreach ($requirements as $key => $values) {
|
||||
$statuses = array_column($values, 'status');
|
||||
$general_status = true;
|
||||
foreach ($statuses as $status) {
|
||||
$general_status &= $status;
|
||||
}
|
||||
|
||||
echo '
|
||||
<div class="box box-'.($general_status ? 'success collapsed-box' : 'danger').'">
|
||||
<div class="box-header with-border">
|
||||
<h3 class="box-title">'.$key.'</h3>';
|
||||
|
||||
if ($general_status) {
|
||||
echo '
|
||||
<div class="box-tools pull-right">
|
||||
<button type="button" class="btn btn-box-tool" data-widget="collapse">
|
||||
<i class="fa fa-plus"></i>
|
||||
</button>
|
||||
</div>';
|
||||
}
|
||||
|
||||
echo '
|
||||
</div>
|
||||
<div class="box-body no-padding">
|
||||
<table class="table">';
|
||||
|
||||
foreach ($values as $value) {
|
||||
echo '
|
||||
<tr class="'.($value['status'] ? 'success' : 'danger').'">
|
||||
<td style="width: 10px"><i class="fa fa-'.($value['status'] ? 'check' : 'times').'"></i></td>
|
||||
<td>'.$value['type'].'</td>
|
||||
<td>'.$value['name'].'</td>
|
||||
<td>'.$value['description'].'</td>
|
||||
</tr>';
|
||||
}
|
||||
|
||||
echo '
|
||||
</table>
|
||||
</div>
|
||||
</div>';
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
include_once __DIR__.'/../core.php';
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
$updateRate = 20;
|
||||
$scriptValue = $updateRate * 5;
|
||||
@ -73,43 +73,24 @@ if (filter('action') == 'do_update') {
|
||||
Update::updateCleanup();
|
||||
|
||||
echo '
|
||||
<p><strong>'.tr('Aggiornamento completato!!!').'</strong> <i class="fa fa-smile-o"></i></p>';
|
||||
|
||||
// Rimostro la finestra di login
|
||||
echo '
|
||||
<script>
|
||||
$(".login-box").fadeIn();
|
||||
</script>';
|
||||
<p><strong>'.tr('Aggiornamento completato').'</strong> <i class="fa fa-smile-o"></i></p>';
|
||||
|
||||
// Istruzioni per la prima installazione
|
||||
if ($_GET['firstuse'] == 'true') {
|
||||
if (!empty($_SESSION['osm_password'])) {
|
||||
$password = $_SESSION['osm_password'];
|
||||
} else {
|
||||
$password = 'admin';
|
||||
}
|
||||
|
||||
echo '
|
||||
<p>'.tr('Puoi procedere al login con i seguenti dati').':</p>
|
||||
<p>'.tr('Username').': <i>admin</i></p>
|
||||
<p>'.tr('Password').': <i> '.$password.'</i></p>
|
||||
<p class="text-danger">'.tr("E' fortemente consigliato rimuovere i permessi di scrittura dal file _FILE_", [
|
||||
'_FILE_' => '<b>config.inc.php</b>',
|
||||
]).'.</p>';
|
||||
]).'.</p>
|
||||
|
||||
// Imposto la password di admin che l'utente ha selezionato all'inizio
|
||||
if (isset($_SESSION['osm_password'])) {
|
||||
$dbo->query('UPDATE `zz_users` SET `password`='.prepare(Auth::hashPassword($password))." WHERE `username`='admin'");
|
||||
|
||||
unset($_SESSION['osm_password']);
|
||||
}
|
||||
|
||||
if (isset($_SESSION['osm_email'])) {
|
||||
if (!empty($_SESSION['osm_email'])) {
|
||||
$dbo->query('UPDATE `zz_users` SET `email`='.prepare($_SESSION['osm_email'])." WHERE `username`='admin' ");
|
||||
}
|
||||
unset($_SESSION['osm_email']);
|
||||
}
|
||||
<a class="btn btn-success btn-block" href="'.ROOTDIR.'">
|
||||
<i class="fa fa-check"></i> '.tr('Continua').'
|
||||
</a>';
|
||||
} else {
|
||||
// Rimostro la finestra di login
|
||||
echo '
|
||||
<script>
|
||||
$(".login-box").fadeIn();
|
||||
</script>';
|
||||
}
|
||||
}
|
||||
|
||||
@ -119,11 +100,7 @@ if (filter('action') == 'do_update') {
|
||||
if (Update::isUpdateLocked() && filter('force') === null) {
|
||||
$pageTitle = tr('Aggiornamento in corso!');
|
||||
|
||||
if (file_exists($docroot.'/include/custom/top.php')) {
|
||||
include_once $docroot.'/include/custom/top.php';
|
||||
} else {
|
||||
include_once $docroot.'/include/top.php';
|
||||
}
|
||||
include_once App::filepath('include|custom|', 'top.php');
|
||||
|
||||
echo '
|
||||
<div class="box box-center box-danger box-solid text-center">
|
||||
@ -137,11 +114,7 @@ if (filter('action') == 'do_update') {
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
if (file_exists($docroot.'/include/custom/bottom.php')) {
|
||||
include_once $docroot.'/include/custom/bottom.php';
|
||||
} else {
|
||||
include_once $docroot.'/include/bottom.php';
|
||||
}
|
||||
include_once App::filepath('include|custom|', 'bottom.php');
|
||||
|
||||
exit();
|
||||
}
|
||||
@ -151,11 +124,7 @@ if (filter('action') == 'do_update') {
|
||||
$button = !$dbo->isInstalled() ? tr('Installa!') : tr('Aggiorna!');
|
||||
$pageTitle = !$dbo->isInstalled() ? tr('Installazione') : tr('Aggiornamento');
|
||||
|
||||
if (file_exists($docroot.'/include/custom/top.php')) {
|
||||
include_once $docroot.'/include/custom/top.php';
|
||||
} else {
|
||||
include_once $docroot.'/include/top.php';
|
||||
}
|
||||
include_once App::filepath('include|custom|', 'top.php');
|
||||
|
||||
echo '
|
||||
<div class="box box-center-large box-warning text-center">
|
@ -6,20 +6,17 @@ include_once __DIR__.'/../core.php';
|
||||
if (!empty($id_plugin)) {
|
||||
$element = Plugins::get($id_plugin);
|
||||
|
||||
// Inclusione di eventuale plugin personalizzato
|
||||
if (!empty($element['script'])) {
|
||||
// Inclusione di eventuale plugin personalizzato
|
||||
if (file_exists($docroot.'/modules/'.$element['module_dir'].'/plugins/custom/'.$element['script'])) {
|
||||
include $docroot.'/modules/'.$element['module_dir'].'/plugins/custom/'.$element['script'];
|
||||
} elseif (file_exists($docroot.'/modules/'.$element['module_dir'].'/plugins/'.$element['script'])) {
|
||||
include $docroot.'/modules/'.$element['module_dir'].'/plugins/'.$element['script'];
|
||||
}
|
||||
include App::filepath('modules/'.$element['module_dir'].'/plugins|custom|', $element['script']);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
echo '
|
||||
<h4>
|
||||
'.$element['name'];
|
||||
<span class="'.(!empty($element['help']) ? ' tip' : '').'"'.(!empty($element['help']) ? ' title="'.prepareToField($element['help']).'" data-position="bottom"' : '').' >
|
||||
'.$element['title'].(!empty($element['help']) ? ' <i class="fa fa-question-circle-o"></i>' : '').'</span>';
|
||||
|
||||
if (file_exists($docroot.'/plugins/'.$element['directory'].'/add.php')) {
|
||||
echo '
|
||||
@ -40,43 +37,27 @@ $total = App::readQuery($element);
|
||||
$module_options = (!empty($element['options2'])) ? $element['options2'] : $element['options'];
|
||||
|
||||
// Caricamento file aggiuntivo su elenco record
|
||||
if (file_exists($docroot.$directory.'/custom/controller_before.php')) {
|
||||
include $docroot.$directory.'/custom/controller_before.php';
|
||||
} elseif (file_exists($docroot.$directory.'/controller_before.php')) {
|
||||
include $docroot.$directory.'/controller_before.php';
|
||||
}
|
||||
|
||||
// Segmenti
|
||||
/*deve sempre essere impostato almeno un sezionale*/
|
||||
if (empty($_SESSION['m'.$id_module]['id_segment'])) {
|
||||
$rs = $dbo->fetchArray('SELECT id FROM zz_segments WHERE predefined = 1 AND id_module = '.prepare($id_module).'LIMIT 0,1');
|
||||
$_SESSION['m'.$id_module]['id_segment'] = $rs[0]['id'];
|
||||
}
|
||||
|
||||
if (count($dbo->fetchArray("SELECT id FROM zz_segments WHERE id_module = \"$id_module\"")) > 1) {
|
||||
?>
|
||||
include App::filepath($directory.'|custom|', 'controller_before.php');
|
||||
|
||||
if (count(Modules::getSegments($id_module)) > 1) {
|
||||
?>
|
||||
<div class="row">
|
||||
<div class="col-md-4 pull-right">
|
||||
{[ "type": "select", "label": "", "name": "id_segment_", "required": 0, "class": "", "values": "query=SELECT id, name AS descrizione FROM zz_segments WHERE id_module = '<?php echo $id_module; ?>'", "value": "<?php echo $_SESSION['m'.$id_module]['id_segment']; ?>", "extra": "" ]}
|
||||
{[ "type": "select", "name": "id_segment_", "required": 0, "values": "query=SELECT id, name AS descrizione FROM zz_segments WHERE id_module = '<?php echo $id_module; ?>'", "value": "<?php echo $_SESSION['m'.$id_module]['id_segment']; ?>" ]}
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
|
||||
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
|
||||
$("#id_segment_").on("change", function(){
|
||||
|
||||
if ($(this).val()<1){
|
||||
session_set('<?php echo 'm'.$id_module; ?>,id_segment', '', 1, 1);
|
||||
}else{
|
||||
session_set('<?php echo 'm'.$id_module; ?>,id_segment', $(this).val(), 0, 1);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
@ -141,6 +122,8 @@ if (!empty($module_options) && $module_options != 'menu' && $module_options != '
|
||||
|
||||
<tfoot>
|
||||
<tr>';
|
||||
echo '
|
||||
<td></td>';
|
||||
foreach ($total['fields'] as $key => $field) {
|
||||
echo '
|
||||
<td></td>';
|
||||
@ -187,10 +170,34 @@ if (!empty($module_options) && $module_options != 'menu' && $module_options != '
|
||||
</div>
|
||||
|
||||
<div class="col-md-5 text-right">
|
||||
<div class="btn-group" role="group">
|
||||
<button type="button" class="btn btn-primary btn-csv disabled" disabled>'.tr('Esporta').'</button>
|
||||
<button type="button" class="btn btn-default btn-copy disabled" disabled>'.tr('Copia').'</button>
|
||||
<button type="button" class="btn btn-default btn-print disabled" disabled>'.tr('Stampa').'</button>
|
||||
<div class="btn-group" role="group">';
|
||||
|
||||
if (Settings::get('Abilita esportazione Excel e PDF')) {
|
||||
echo '
|
||||
<div class="btn-group">
|
||||
<button type="button" class="btn btn-primary table-btn btn-csv disabled" disabled>'.tr('Esporta').'</button>
|
||||
|
||||
<button type="button" class="btn btn-primary table-btn disabled dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
<span class="caret"></span>
|
||||
<span class="sr-only">Toggle Dropdown</span>
|
||||
</button>
|
||||
|
||||
<ul class="dropdown-menu">
|
||||
<li><a class="table-btn btn-pdf disabled" disabled>'.tr('PDF').'</a></li>
|
||||
|
||||
<li><a class="table-btn btn-excel disabled" disabled>'.tr('Excel').'</a></li>
|
||||
</ul>
|
||||
</div>';
|
||||
} else {
|
||||
echo '
|
||||
<button type="button" class="btn btn-primary table-btn btn-csv disabled" disabled>'.tr('Esporta').'</button>';
|
||||
}
|
||||
|
||||
echo '
|
||||
|
||||
<button type="button" class="btn btn-default table-btn btn-copy disabled" disabled>'.tr('Copia').'</button>
|
||||
|
||||
<button type="button" class="btn btn-default table-btn btn-print disabled" disabled>'.tr('Stampa').'</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>';
|
||||
@ -213,8 +220,4 @@ elseif ($module_options == 'custom') {
|
||||
}
|
||||
|
||||
// Caricamento file aggiuntivo su elenco record
|
||||
if (file_exists($docroot.$directory.'/custom/controller_after.php')) {
|
||||
include $docroot.$directory.'/custom/controller_after.php';
|
||||
} elseif (file_exists($docroot.$directory.'/controller_after.php')) {
|
||||
include $docroot.$directory.'/controller_after.php';
|
||||
}
|
||||
include App::filepath($directory.'|custom|', 'controller_after.php');
|
||||
|
@ -5,24 +5,6 @@ include_once __DIR__.'/../core.php';
|
||||
$paths = App::getPaths();
|
||||
$user = Auth::user();
|
||||
|
||||
// Istanziamento della barra di debug
|
||||
if (!empty($debug)) {
|
||||
$debugbar = new DebugBar\DebugBar();
|
||||
|
||||
$debugbar->addCollector(new DebugBar\DataCollector\MemoryCollector());
|
||||
$debugbar->addCollector(new DebugBar\DataCollector\PhpInfoCollector());
|
||||
|
||||
$debugbar->addCollector(new DebugBar\DataCollector\RequestDataCollector());
|
||||
$debugbar->addCollector(new DebugBar\DataCollector\TimeDataCollector());
|
||||
|
||||
$debugbar->addCollector(new DebugBar\Bridge\MonologCollector($logger));
|
||||
$debugbar->addCollector(new DebugBar\DataCollector\PDO\PDOCollector($dbo->getPDO()));
|
||||
|
||||
$debugbarRenderer = $debugbar->getJavascriptRenderer();
|
||||
$debugbarRenderer->setIncludeVendors(false);
|
||||
$debugbarRenderer->setBaseUrl($paths['assets'].'/php-debugbar');
|
||||
}
|
||||
|
||||
echo '<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
@ -31,13 +13,20 @@ echo '<!DOCTYPE html>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
||||
|
||||
<meta name="robots" content="noindex,nofollow">
|
||||
|
||||
<link href="'.$paths['img'].'/favicon.png" rel="icon" type="image/x-icon" />';
|
||||
|
||||
foreach ($css_modules as $style) {
|
||||
$style = (is_array($style)) ? $style : ['href' => $style, 'media' => 'all'];
|
||||
|
||||
// CSS
|
||||
foreach (App::getAssets()['css'] as $style) {
|
||||
echo '
|
||||
<link rel="stylesheet" type="text/css" media="'.$style['media'].'" href="'.$style['href'].'"/>';
|
||||
<link rel="stylesheet" type="text/css" media="all" href="'.$style.'"/>';
|
||||
}
|
||||
|
||||
// Print CSS
|
||||
foreach (App::getAssets()['print'] as $style) {
|
||||
echo '
|
||||
<link rel="stylesheet" type="text/css" media="print" href="'.$style.'"/>';
|
||||
}
|
||||
|
||||
if (Auth::check()) {
|
||||
@ -124,11 +113,22 @@ if (Auth::check()) {
|
||||
ckeditorToolbar: [
|
||||
["Undo","Redo","-","Cut","Copy","Paste","PasteText","PasteFromWord","-","Scayt", "-","Link","Unlink","-","Bold","Italic","Underline","Superscript","SpecialChar","HorizontalRule","-","NumberedList","BulletedList","Outdent","Indent","Blockquote","-","Styles","Format","Image","Table", "TextColor", "BGColor" ],
|
||||
],
|
||||
|
||||
tempo_attesa_ricerche: '.get_var('Tempo di attesa ricerche in secondi').',
|
||||
};
|
||||
</script>';
|
||||
} else {
|
||||
echo '
|
||||
<script>
|
||||
globals = {
|
||||
locale: \''.$lang.'\',
|
||||
full_locale: \''.$lang.'_'.strtoupper($lang).'\',
|
||||
};
|
||||
</script>';
|
||||
}
|
||||
|
||||
foreach ($jscript_modules as $js) {
|
||||
// JS
|
||||
foreach (App::getAssets()['js'] as $js) {
|
||||
echo '
|
||||
<script type="text/javascript" charset="utf-8" src="'.$js.'"></script>';
|
||||
}
|
||||
@ -144,8 +144,33 @@ echo '
|
||||
});
|
||||
</script>';
|
||||
|
||||
if (!empty($debugbarRenderer) && Auth::check()) {
|
||||
echo $debugbarRenderer->renderHead();
|
||||
if (Auth::check()) {
|
||||
// Barra di debug
|
||||
if (App::debug()) {
|
||||
$debugbar = new DebugBar\DebugBar();
|
||||
|
||||
$debugbar->addCollector(new DebugBar\DataCollector\MemoryCollector());
|
||||
$debugbar->addCollector(new DebugBar\DataCollector\PhpInfoCollector());
|
||||
|
||||
$debugbar->addCollector(new DebugBar\DataCollector\RequestDataCollector());
|
||||
$debugbar->addCollector(new DebugBar\DataCollector\TimeDataCollector());
|
||||
|
||||
$debugbar->addCollector(new DebugBar\Bridge\MonologCollector($logger));
|
||||
$debugbar->addCollector(new DebugBar\DataCollector\PDO\PDOCollector($dbo->getPDO()));
|
||||
|
||||
$debugbarRenderer = $debugbar->getJavascriptRenderer();
|
||||
$debugbarRenderer->setIncludeVendors(false);
|
||||
$debugbarRenderer->setBaseUrl($paths['assets'].'/php-debugbar');
|
||||
|
||||
echo $debugbarRenderer->renderHead();
|
||||
}
|
||||
|
||||
if (Settings::get('Abilita esportazione Excel e PDF')) {
|
||||
echo '
|
||||
<script type="text/javascript" charset="utf-8" src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.3/jszip.min.js"></script>
|
||||
<script type="text/javascript" charset="utf-8" src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.36/pdfmake.min.js"></script>
|
||||
<script type="text/javascript" charset="utf-8" src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.36/vfs_fonts.js"></script>';
|
||||
}
|
||||
}
|
||||
|
||||
$hide_sidebar = get_var('Nascondere la barra sinistra di default');
|
||||
@ -154,7 +179,7 @@ echo '
|
||||
</head>
|
||||
|
||||
<body class="skin-'.$theme.(!empty($hide_sidebar) ? ' sidebar-collapse' : '').(!Auth::check() ? ' hold-transition login-page' : '').'">
|
||||
<div class="wrapper">';
|
||||
<div class="'.(!Auth::check() ? '' : 'wrapper').'">';
|
||||
|
||||
if (Auth::check()) {
|
||||
$calendar = ($_SESSION['period_start'] != date('Y').'-01-01' || $_SESSION['period_end'] != date('Y').'-12-31') ? 'red' : 'white';
|
||||
@ -176,7 +201,7 @@ if (Auth::check()) {
|
||||
<div id="tiny-loader" style="display:none;"></div>
|
||||
|
||||
<header class="main-header">
|
||||
<a href="https://www.openstamanager.com" class="logo" target="_blank">
|
||||
<a href="https://www.openstamanager.com" class="logo" title="'.tr('Il gestionale open source per l\'assistenza tecnica e la fatturazione').'" target="_blank">
|
||||
<!-- mini logo for sidebar mini 50x50 pixels -->
|
||||
<span class="logo-mini">'.tr('OSM').'</span>
|
||||
<!-- logo for regular state and mobile devices -->
|
||||
@ -185,7 +210,7 @@ if (Auth::check()) {
|
||||
<!-- Header Navbar: style can be found in header.less -->
|
||||
<nav class="navbar navbar-static-top" role="navigation">
|
||||
<!-- Sidebar toggle button-->
|
||||
<a href="#" class="sidebar-toggle" data-toggle="offcanvas" role="button">
|
||||
<a href="#" class="sidebar-toggle" data-toggle="push-menu" role="button">
|
||||
<span class="sr-only">'.tr('Mostra/nascondi menu').'</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
@ -193,8 +218,8 @@ if (Auth::check()) {
|
||||
</a>
|
||||
|
||||
<div class="input-group btn-calendar pull-left">
|
||||
<button id="daterange" class="btn"><i class="fa fa-calendar" style="color:'.$calendar.'"></i> <i class="fa fa-caret-down"></i></button>
|
||||
<span class="hidden-xs" style="vertical-align:middle">
|
||||
<button id="daterange" class="btn"><i class="fa fa-calendar" style="color:'.$calendar.'"></i> <i class="fa fa-caret-down" style="color:'.$calendar.';" ></i></button>
|
||||
<span class="hidden-xs" style="vertical-align:middle; color:'.$calendar.';">
|
||||
'.Translator::dateToLocale($_SESSION['period_start']).' - '.Translator::dateToLocale($_SESSION['period_end']).'
|
||||
</span>
|
||||
</div>
|
||||
|
19
index.php
19
index.php
@ -52,18 +52,17 @@ if (Auth::check() && isset($dbo) && $dbo->isConnected() && $dbo->isInstalled())
|
||||
}
|
||||
|
||||
// Procedura di installazione
|
||||
include_once $docroot.'/include/configuration.php';
|
||||
include_once $docroot.'/include/init/configuration.php';
|
||||
|
||||
// Procedura di aggiornamento
|
||||
include_once $docroot.'/include/update.php';
|
||||
include_once $docroot.'/include/init/update.php';
|
||||
|
||||
// Procedura di inizializzazione
|
||||
include_once $docroot.'/include/init/init.php';
|
||||
|
||||
$pageTitle = tr('Login');
|
||||
|
||||
if (file_exists($docroot.'/include/custom/top.php')) {
|
||||
include_once $docroot.'/include/custom/top.php';
|
||||
} else {
|
||||
include_once $docroot.'/include/top.php';
|
||||
}
|
||||
include_once App::filepath('include|custom|', 'top.php');
|
||||
|
||||
// Controllo se è una beta e in caso mostro un warning
|
||||
if (str_contains($version, 'beta')) {
|
||||
@ -175,8 +174,4 @@ echo '/> '.tr('Mantieni attiva la sessione').'
|
||||
});
|
||||
</script>';
|
||||
|
||||
if (file_exists($docroot.'/include/custom/bottom.php')) {
|
||||
include_once $docroot.'/include/custom/bottom.php';
|
||||
} else {
|
||||
include_once $docroot.'/include/bottom.php';
|
||||
}
|
||||
include_once App::filepath('include|custom|', 'bottom.php');
|
||||
|
12
info.php
12
info.php
@ -6,11 +6,7 @@ $pageTitle = tr('Informazioni');
|
||||
|
||||
$paths = App::getPaths();
|
||||
|
||||
if (file_exists($docroot.'/include/custom/top.php')) {
|
||||
include $docroot.'/include/custom/top.php';
|
||||
} else {
|
||||
include $docroot.'/include/top.php';
|
||||
}
|
||||
include_once App::filepath('include|custom|', 'top.php');
|
||||
|
||||
echo '
|
||||
<div class="box">
|
||||
@ -168,8 +164,4 @@ echo '
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
if (file_exists($docroot.'/include/custom/bottom.php')) {
|
||||
include $docroot.'/include/custom/bottom.php';
|
||||
} else {
|
||||
include $docroot.'/include/bottom.php';
|
||||
}
|
||||
include_once App::filepath('include|custom|', 'bottom.php');
|
||||
|
@ -336,12 +336,12 @@ function readDate($data)
|
||||
/**
|
||||
* Genera una porzione di codice html a partire da una stringa nei seguenti formati:
|
||||
* campo <input> generico:
|
||||
* {[ "type": "text", "required": 1, "value": "$idintervento$", "extra": "" ]}.
|
||||
* {[ "type": "text", "required": 1, "value": "$idintervento$" ]}.
|
||||
*
|
||||
* campo di testo normale e non modificabile
|
||||
* {[ "type": "span", "value": "$testo$" ]}
|
||||
*
|
||||
* {[ "type": "select", "required": 1, "values": "query='SELECT id, descrizione FROM co_contratti WHERE idanagrafica=$idanagrafica$"', "value": "$idcontratto$", "extra": "" ]}
|
||||
* {[ "type": "select", "required": 1, "values": "query='SELECT id, descrizione FROM co_contratti WHERE idanagrafica=$idanagrafica$"', "value": "$idcontratto$" ]}
|
||||
*
|
||||
* Il parametro $records contiene il risultato della query di selezione record per fare i vari replace delle variabili racchiuse tra $$ nel template
|
||||
*
|
||||
@ -622,7 +622,7 @@ function build_html_element($string)
|
||||
|
||||
// Generazione <select> da JSON
|
||||
// esempio creazione select con opzioni: Maschio, Femmina, Unisex
|
||||
// {[ "type": "select", "label": "Sesso", "name": "sesso", "values": "list=\"\": \"\", \"M\": \"Maschio\", \"F\": \"Femmina\", \"U\": \"Unisex\"", "value": "$sesso$", "extra": "" ]}
|
||||
// {[ "type": "select", "label": "Sesso", "name": "sesso", "values": "list=\"\": \"\", \"M\": \"Maschio\", \"F\": \"Femmina\", \"U\": \"Unisex\"", "value": "$sesso$" ]}
|
||||
elseif (preg_match_all('/^list=(.+?)$/', $values, $m)) {
|
||||
$data = json_decode('{'.$m[1][0].'}');
|
||||
foreach ($data as $id => $etichetta) {
|
||||
@ -1030,6 +1030,7 @@ function filelist_and_upload($id_module, $id_record, $label = 'Nuovo allegato:',
|
||||
* @param unknown $path
|
||||
*
|
||||
* @deprecated 2.3
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
function deltree($path)
|
||||
@ -1060,6 +1061,7 @@ function deltree($path)
|
||||
* Carica gli script JavaScript inclusi nell'array indicato.
|
||||
*
|
||||
* @deprecated 2.3
|
||||
*
|
||||
* @param array $jscript_modules_array
|
||||
*/
|
||||
function loadJscriptModules($array)
|
||||
@ -1080,6 +1082,7 @@ function loadJscriptModules($array)
|
||||
* Carica i file di stile CSS inclusi nell'array indicato.
|
||||
*
|
||||
* @deprecated 2.3
|
||||
*
|
||||
* @param array $css_modules_array
|
||||
*/
|
||||
function loadCSSModules($array)
|
||||
@ -1107,7 +1110,7 @@ function loadCSSModules($array)
|
||||
* @deprecated 2.4
|
||||
*
|
||||
* @param string $str
|
||||
* @param int $qty
|
||||
* @param int $qty
|
||||
* @param string $mask
|
||||
*/
|
||||
function get_next_code($str, $qty = 1, $mask = '')
|
||||
|
140
lib/functions.js
140
lib/functions.js
@ -108,19 +108,31 @@ $(document).ready(function () {
|
||||
|
||||
// Pulsanti di Datatables
|
||||
$(".btn-csv").click(function (e) {
|
||||
var table = $(document).find("#" + $(this).parent().parent().parent().data("target")).DataTable();
|
||||
var table = $(document).find("#" + $(this).closest("[data-target]").data("target")).DataTable();
|
||||
|
||||
table.buttons(0).trigger();
|
||||
});
|
||||
|
||||
$(".btn-excel").click(function (e) {
|
||||
var table = $(document).find("#" + $(this).closest("[data-target]").data("target")).DataTable();
|
||||
|
||||
table.buttons(3).trigger();
|
||||
});
|
||||
|
||||
$(".btn-pdf").click(function (e) {
|
||||
var table = $(document).find("#" + $(this).closest("[data-target]").data("target")).DataTable();
|
||||
|
||||
table.buttons(4).trigger();
|
||||
});
|
||||
|
||||
$(".btn-copy").click(function (e) {
|
||||
var table = $(document).find("#" + $(this).parent().parent().parent().data("target")).DataTable();
|
||||
var table = $(document).find("#" + $(this).closest("[data-target]").data("target")).DataTable();
|
||||
|
||||
table.buttons(1).trigger();
|
||||
});
|
||||
|
||||
$(".btn-print").click(function (e) {
|
||||
var table = $(document).find("#" + $(this).parent().parent().parent().data("target")).DataTable();
|
||||
var table = $(document).find("#" + $(this).closest("[data-target]").data("target")).DataTable();
|
||||
|
||||
table.buttons(2).trigger();
|
||||
});
|
||||
@ -534,6 +546,9 @@ function start_datatables() {
|
||||
});
|
||||
|
||||
var sum;
|
||||
var tempo;
|
||||
var tempo_attesa_ricerche = (globals.tempo_attesa_ricerche*1000);
|
||||
|
||||
var table = $this.DataTable({
|
||||
language: {
|
||||
url: globals.js + '/i18n/datatables/' + globals.locale + '.min.json'
|
||||
@ -567,7 +582,8 @@ function start_datatables() {
|
||||
style: 'multi',
|
||||
selector: 'td:first-child'
|
||||
},
|
||||
buttons: [{
|
||||
buttons: [
|
||||
{
|
||||
extend: 'csv',
|
||||
fieldSeparator: ";",
|
||||
exportOptions: {
|
||||
@ -586,6 +602,37 @@ function start_datatables() {
|
||||
},
|
||||
{
|
||||
extend: 'print',
|
||||
autoPrint: true,
|
||||
customize: function ( win ) {
|
||||
$(win.document.body)
|
||||
.css( 'font-size', '10pt' )
|
||||
.append(
|
||||
'<table class="main-records table table-condensed table-bordered dataTable" ><tfoot><tr><td></td><td class="pull-right" >'+$('#summable').text()+'</td><td></td></tr></tfoot></table>',
|
||||
);
|
||||
$(win.document.body).find( 'table' )
|
||||
.addClass( 'compact' )
|
||||
.css( 'font-size', 'inherit' );
|
||||
$(win.document.body).find( 'td:first-child' )
|
||||
.addClass( 'hide' );
|
||||
$(win.document.body).find( 'th:first-child' )
|
||||
.addClass( 'hide' );
|
||||
},
|
||||
exportOptions: {
|
||||
modifier: {
|
||||
selected: true
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
extend: 'excel',
|
||||
exportOptions: {
|
||||
modifier: {
|
||||
selected: true
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
extend: 'pdf',
|
||||
exportOptions: {
|
||||
modifier: {
|
||||
selected: true
|
||||
@ -611,6 +658,9 @@ function start_datatables() {
|
||||
$('<br><input type="text" style="width:100%" class="form-control" placeholder="' + globals.translations.filter + '..."><i class="deleteicon fa fa-times fa-2x hide"></i>')
|
||||
.appendTo(column.header())
|
||||
.on('keyup', function (e) {
|
||||
|
||||
clearInterval(tempo);
|
||||
|
||||
if (e.which != 9) {
|
||||
if (!$(this).val()) {
|
||||
if ($(this).parent().data("slow") != undefined) $("#slow").remove();
|
||||
@ -628,13 +678,25 @@ function start_datatables() {
|
||||
idx1 = 'module_' + $this.data('idmodule'); //+ "-" + $this.data('idplugin');
|
||||
idx2 = 'search_' + $(this).parent().attr('id').replace('th_', '');
|
||||
|
||||
// Imposto delle sessioni per le ricerche del modulo e del campo specificatsi
|
||||
session_set(idx1 + ',' + idx2, $(this).val(), 0);
|
||||
function start_search(search_value){
|
||||
session_set(idx1 + ',' + idx2, search_value, 0);
|
||||
column.search(search_value).draw();
|
||||
}
|
||||
|
||||
column.search(this.value).draw();
|
||||
// Imposto delle sessioni per le ricerche del modulo e del campo specificatsi
|
||||
if(e.keyCode == 13 || $(this).val()==''){
|
||||
start_search($(this).val());
|
||||
}else{
|
||||
tempo = window.setTimeout(start_search, tempo_attesa_ricerche, $(this).val());
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Disabilito l'ordinamento alla pressione del tasto invio sull'<input>
|
||||
$("thead input, .search").on('keypress', function (e) {
|
||||
stopTableSorting(e);
|
||||
});
|
||||
|
||||
// Disabilito l'ordinamento al click sull'<input>
|
||||
$("thead input, .deleteicon").click(function (e) {
|
||||
stopTableSorting(e);
|
||||
@ -691,19 +753,9 @@ function start_datatables() {
|
||||
if (api.rows({
|
||||
selected: true
|
||||
}).count() > 0) {
|
||||
container.find('.btn-csv').removeClass('disabled');
|
||||
container.find('.btn-print').removeClass('disabled');
|
||||
container.find('.btn-copy').removeClass('disabled');
|
||||
container.find('.btn-csv').attr('disabled', false);
|
||||
container.find('.btn-print').attr('disabled', false);
|
||||
container.find('.btn-copy').attr('disabled', false);
|
||||
container.find('.table-btn').removeClass('disabled').attr('disabled', false);
|
||||
} else {
|
||||
container.find('.btn-csv').addClass('disabled');
|
||||
container.find('.btn-print').addClass('disabled');
|
||||
container.find('.btn-copy').addClass('disabled');
|
||||
container.find('.btn-csv').attr('disabled', true);
|
||||
container.find('.btn-print').attr('disabled', true);
|
||||
container.find('.btn-copy').attr('disabled', true);
|
||||
container.find('.table-btn').addClass('disabled').attr('disabled', true);
|
||||
}
|
||||
|
||||
// Seleziona tutto
|
||||
@ -720,10 +772,11 @@ function start_datatables() {
|
||||
}
|
||||
},
|
||||
footerCallback: function (row, data, start, end, display) {
|
||||
var i = 0;
|
||||
var i = -1;
|
||||
this.api().columns().every(function () {
|
||||
if (sum.summable[i] != undefined) {
|
||||
$(this.footer()).addClass("text-right");
|
||||
$(this.footer()).attr("id", "summable");
|
||||
$(this.footer()).html(sum.summable[i]);
|
||||
} else $(this.footer()).html(" ");
|
||||
i++;
|
||||
@ -735,6 +788,10 @@ function start_datatables() {
|
||||
if (type === 'row') {
|
||||
var selected = $this.data('selected').split(';');
|
||||
|
||||
selected = selected.filter(function (value, index, self) {
|
||||
return value != '' && self.indexOf(value) === index;
|
||||
})
|
||||
|
||||
var data = table.rows(indexes).data();
|
||||
|
||||
data.each(function (item) {
|
||||
@ -752,9 +809,9 @@ function start_datatables() {
|
||||
}
|
||||
});
|
||||
|
||||
selected = selected.filter(function (entry) {
|
||||
return entry != '';
|
||||
});
|
||||
selected = selected.filter(function (value, index, self) {
|
||||
return value != '' && self.indexOf(value) === index;
|
||||
})
|
||||
|
||||
$this.data('selected', selected.join(';'));
|
||||
|
||||
@ -771,19 +828,9 @@ function start_datatables() {
|
||||
if (table.rows({
|
||||
selected: true
|
||||
}).count() > 0) {
|
||||
container.find('.btn-csv').removeClass('disabled');
|
||||
container.find('.btn-print').removeClass('disabled');
|
||||
container.find('.btn-copy').removeClass('disabled');
|
||||
container.find('.btn-csv').attr('disabled', false);
|
||||
container.find('.btn-print').attr('disabled', false);
|
||||
container.find('.btn-copy').attr('disabled', false);
|
||||
container.find('.table-btn').removeClass('disabled').attr('disabled', false);
|
||||
} else {
|
||||
container.find('.btn-csv').addClass('disabled');
|
||||
container.find('.btn-print').addClass('disabled');
|
||||
container.find('.btn-copy').addClass('disabled');
|
||||
container.find('.btn-csv').attr('disabled', true);
|
||||
container.find('.btn-print').attr('disabled', true);
|
||||
container.find('.btn-copy').attr('disabled', true);
|
||||
container.find('.table-btn').addClass('disabled').attr('disabled', true);
|
||||
}
|
||||
}
|
||||
});
|
||||
@ -1005,8 +1052,7 @@ function start_inputmask(element) {
|
||||
});
|
||||
|
||||
$(element+'.alphanumeric-mask').inputmask('Regex', {
|
||||
regex: "[A-Za-z0-9#_|\/\\-]*",
|
||||
casing: "upper",
|
||||
regex: "[A-Za-z0-9#_|\/\\-.]*",
|
||||
});
|
||||
|
||||
if (isMobile.any()) {
|
||||
@ -1021,7 +1067,7 @@ function start_inputmask(element) {
|
||||
if (min == 'undefined') {
|
||||
min = false;
|
||||
}
|
||||
|
||||
|
||||
var max = $this.attr('max-value');
|
||||
if (max == 'undefined') {
|
||||
max = false;
|
||||
@ -1117,10 +1163,10 @@ function session_set(session_array, value, clear, reload) {
|
||||
}
|
||||
|
||||
return $.get(globals.rootdir + "/ajax.php?op=session_set&session=" + session_array + "&value=" + value + "&clear=" + clear, function(data, status){
|
||||
|
||||
|
||||
if (reload==1)
|
||||
location.reload();
|
||||
|
||||
location.reload();
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
@ -1318,3 +1364,15 @@ function getCookie(cname) {
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* Funzione per controllare se un file esiste
|
||||
*/
|
||||
|
||||
function UrlExists(url)
|
||||
{
|
||||
var http = new XMLHttpRequest();
|
||||
http.open('HEAD', url, false);
|
||||
http.send();
|
||||
return http.status!=404;
|
||||
}
|
||||
|
@ -407,7 +407,7 @@ function create_thumbnails($tmp, $filename, $dir)
|
||||
function get_client_ip()
|
||||
{
|
||||
$ipaddress = '';
|
||||
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
|
||||
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
|
||||
$ipaddress = $_SERVER['HTTP_CLIENT_IP'];
|
||||
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
|
||||
$ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
|
||||
@ -417,10 +417,10 @@ function get_client_ip()
|
||||
$ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
|
||||
} elseif (!empty($_SERVER['HTTP_FORWARDED'])) {
|
||||
$ipaddress = $_SERVER['HTTP_FORWARDED'];
|
||||
} elseif (!empty($_SERVER['REMOTE_ADDR']) AND $_SERVER['REMOTE_ADDR']!='127.0.0.1' ) {
|
||||
} elseif (!empty($_SERVER['REMOTE_ADDR']) and $_SERVER['REMOTE_ADDR'] != '127.0.0.1') {
|
||||
$ipaddress = $_SERVER['REMOTE_ADDR'];
|
||||
} elseif (!empty(getHostByName(getHostName()))){
|
||||
$ipaddress = getHostByName(getHostName());
|
||||
} elseif (!empty(gethostbyname(gethostname()))) {
|
||||
$ipaddress = gethostbyname(gethostname());
|
||||
} else {
|
||||
$ipaddress = 'UNKNOWN';
|
||||
}
|
||||
@ -514,7 +514,7 @@ function slashes($string)
|
||||
*
|
||||
* @since 2.3
|
||||
*
|
||||
* @return string
|
||||
* @return mixed
|
||||
*/
|
||||
function prepare($parameter)
|
||||
{
|
||||
@ -529,7 +529,7 @@ function prepare($parameter)
|
||||
*
|
||||
* @since 2.3
|
||||
*
|
||||
* @return string
|
||||
* @return mixed
|
||||
*/
|
||||
function p($parameter)
|
||||
{
|
||||
@ -587,9 +587,9 @@ function get_var($nome, $sezione = null, $descrizione = false, $again = false)
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function filter($param, $method = null)
|
||||
function filter($param, $method = null, $raw = false)
|
||||
{
|
||||
return Filter::getValue($param, $method = null);
|
||||
return Filter::getValue($param, $method, $raw);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -602,9 +602,9 @@ function filter($param, $method = null)
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function post($param, $rule = 'text')
|
||||
function post($param, $raw = false)
|
||||
{
|
||||
return Filter::getValue($param, 'post');
|
||||
return Filter::getValue($param, 'post', $raw);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -617,9 +617,9 @@ function post($param, $rule = 'text')
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function get($param, $rule = 'text')
|
||||
function get($param, $raw = false)
|
||||
{
|
||||
return Filter::getValue($param, 'get');
|
||||
return Filter::getValue($param, 'get', $raw);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -645,7 +645,7 @@ function isAjaxRequest()
|
||||
*
|
||||
* @return float
|
||||
*/
|
||||
function sum($first, $second = null, $decimals = null)
|
||||
function sum($first, $second = null, $decimals = 4)
|
||||
{
|
||||
$first = (array) $first;
|
||||
$second = (array) $second;
|
||||
@ -654,9 +654,7 @@ function sum($first, $second = null, $decimals = null)
|
||||
|
||||
$result = 0;
|
||||
|
||||
if (!is_numeric($decimals)) {
|
||||
$decimals = is_numeric($decimals) ? $decimals : Translator::getFormatter()->getPrecision();
|
||||
}
|
||||
$decimals = is_numeric($decimals) ? $decimals : Translator::getFormatter()->getPrecision();
|
||||
|
||||
$bcadd = function_exists('bcadd');
|
||||
|
||||
|
20
lib/init.js
20
lib/init.js
@ -1,4 +1,7 @@
|
||||
$(document).ready(function () {
|
||||
// Inizializzazzione dei box AdminLTE
|
||||
$('.box').boxWidget();
|
||||
|
||||
// Modal di default
|
||||
$('[data-href]').not('.ask, .bound').click(function () {
|
||||
launch_modal($(this).data('title'), $(this).data('href'), 1, $(this).data('target'));
|
||||
@ -51,11 +54,26 @@ $(document).ready(function () {
|
||||
collapse: false,
|
||||
sideBySide: true,
|
||||
useCurrent: false,
|
||||
stepping: 5,
|
||||
stepping: 5,
|
||||
widgetPositioning: {
|
||||
horizontal: 'left',
|
||||
vertical: 'bottom'
|
||||
},
|
||||
minDate: moment($this.attr('min-date')).isValid() ? $this.attr('min-date') : false,
|
||||
maxDate: moment($this.attr('max-date')).isValid() ? $this.attr('max-date') : false,
|
||||
});
|
||||
});
|
||||
|
||||
//fix per timestamp-picker non visibile con la classe table-responsive
|
||||
$('.timestamp-picker').each(function () {
|
||||
$this = $(this)
|
||||
$this.on("dp.show", function (e) {
|
||||
$('#tecnici > div').removeClass('table-responsive');
|
||||
})
|
||||
$this.on("dp.hide", function (e) {
|
||||
$('#tecnici > div').addClass('table-responsive');
|
||||
})
|
||||
});
|
||||
|
||||
$('.datepicker').each(function () {
|
||||
$this = $(this);
|
||||
|
4819
locale/catalog.pot
4819
locale/catalog.pot
File diff suppressed because it is too large
Load Diff
12
log.php
12
log.php
@ -4,11 +4,7 @@ include_once __DIR__.'/core.php';
|
||||
|
||||
$pageTitle = tr('Log');
|
||||
|
||||
if (file_exists($docroot.'/include/custom/top.php')) {
|
||||
include $docroot.'/include/custom/top.php';
|
||||
} else {
|
||||
include $docroot.'/include/top.php';
|
||||
}
|
||||
include_once App::filepath('include|custom|', 'top.php');
|
||||
|
||||
echo '
|
||||
<div class="box">
|
||||
@ -81,8 +77,4 @@ echo '
|
||||
</div>
|
||||
<!-- /.box -->';
|
||||
|
||||
if (file_exists($docroot.'/include/custom/bottom.php')) {
|
||||
include $docroot.'/include/custom/bottom.php';
|
||||
} else {
|
||||
include $docroot.'/include/bottom.php';
|
||||
}
|
||||
include_once App::filepath('include|custom|', 'bottom.php');
|
||||
|
12
mail.php
12
mail.php
@ -88,7 +88,7 @@ echo '
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "multiple": "1", "label": "'.tr('Stampe').'", "name": "prints[]", "value": "'.implode(',', $selected).'", "values": "query=SELECT id, title AS text FROM zz_prints WHERE id_module = '.prepare($id_module).'" ]}
|
||||
{[ "type": "select", "multiple": "1", "label": "'.tr('Stampe').'", "name": "prints[]", "value": "'.implode(',', $selected).'", "values": "query=SELECT id, title AS text FROM zz_prints WHERE id_module = '.prepare($id_module).' AND enabled=1" ]}
|
||||
</div>';
|
||||
|
||||
// Allegati
|
||||
@ -131,8 +131,11 @@ echo '
|
||||
<script>
|
||||
var emails = [];
|
||||
|
||||
$(document).ready(function(){
|
||||
$(document).ready(function(){';
|
||||
|
||||
// Autocompletamento destinatario
|
||||
if (!empty($variables['id_anagrafica'])) {
|
||||
echo '
|
||||
$(document).load(globals.rootdir + "/ajax_complete.php?module=Anagrafiche&op=get_email&id_anagrafica='.$variables['id_anagrafica'].'", function(response) {
|
||||
emails = JSON.parse(response);
|
||||
|
||||
@ -144,7 +147,10 @@ echo '
|
||||
$(this).autocomplete("search", $(this).val())
|
||||
});;
|
||||
});
|
||||
});
|
||||
});';
|
||||
}
|
||||
|
||||
echo '
|
||||
|
||||
CKEDITOR.replace("body", {
|
||||
toolbar: globals.ckeditorToolbar,
|
||||
|
@ -14,7 +14,7 @@ switch (post('op')) {
|
||||
if (!empty($id)) {
|
||||
// Leggo l'id del modulo
|
||||
$rs = $dbo->fetchArray('SELECT id, name, directory FROM zz_modules WHERE id='.prepare($id).' AND `default`=0');
|
||||
$modulo = $rs[0]['name'];
|
||||
$modulo = $rs[0]['title'];
|
||||
$module_dir = $rs[0]['directory'];
|
||||
|
||||
if (count($rs) == 1) {
|
||||
@ -38,31 +38,25 @@ switch (post('op')) {
|
||||
break;
|
||||
|
||||
case 'disable':
|
||||
$dbo->query('UPDATE zz_modules SET enabled=0 WHERE id='.prepare($id));
|
||||
|
||||
$rs = $dbo->fetchArray('SELECT id, name FROM zz_modules WHERE id='.prepare($id));
|
||||
$modulo = $rs[0]['name'];
|
||||
$dbo->query('UPDATE `zz_modules` SET `enabled` = 0 WHERE (`id` = '.prepare($id).' OR `parent` = '.prepare($id).') AND `id` != '.prepare(Modules::get('Aggiornamenti')['id']));
|
||||
|
||||
$_SESSION['infos'][] = tr('Modulo _MODULE_ disabilitato!', [
|
||||
'_MODULE_' => '"'.$modulo.'"',
|
||||
'_MODULE_' => '"'.Modules::get($id)['title'].'"',
|
||||
]);
|
||||
|
||||
break;
|
||||
|
||||
case 'enable':
|
||||
$dbo->query('UPDATE zz_modules SET enabled=1 WHERE id='.prepare($id));
|
||||
|
||||
$rs = $dbo->fetchArray('SELECT id, name FROM zz_modules WHERE id='.prepare($id));
|
||||
$modulo = $rs[0]['name'];
|
||||
$dbo->query('UPDATE `zz_modules` SET `enabled` = 1 WHERE `id` = '.prepare($id).' OR `parent` = '.prepare($id));
|
||||
|
||||
$_SESSION['infos'][] = tr('Modulo _MODULE_ abilitato!', [
|
||||
'_MODULE_' => '"'.$modulo.'"',
|
||||
'_MODULE_' => '"'.Modules::get($id)['title'].'"',
|
||||
]);
|
||||
|
||||
break;
|
||||
|
||||
case 'disable_widget':
|
||||
$dbo->query('UPDATE zz_widgets SET enabled=0 WHERE id='.prepare($id));
|
||||
$dbo->query('UPDATE zz_widgets SET enabled = 0 WHERE id = '.prepare($id));
|
||||
|
||||
$rs = $dbo->fetchArray('SELECT id, name FROM zz_widgets WHERE id='.prepare($id));
|
||||
$widget = $rs[0]['name'];
|
||||
|
@ -39,51 +39,22 @@ if (get_var('Attiva aggiornamenti')) {
|
||||
}
|
||||
|
||||
echo '
|
||||
<div class="row">';
|
||||
// Aggiornamento
|
||||
echo '
|
||||
<div class="col-md-6">
|
||||
<div class="box box-success">
|
||||
<div class="box-header with-border">
|
||||
<h3 class="box-title">'.tr('Carica un aggiornamento').'</h3>
|
||||
</div>
|
||||
<div class="box-body">
|
||||
<form action="'.$rootdir.'/controller.php?id_module='.$id_module.'" method="post" enctype="multipart/form-data" class="form-inline" id="update">
|
||||
<input type="hidden" name="op" value="upload">
|
||||
<input type="hidden" name="type" value="update">
|
||||
<div class="box box-success">
|
||||
<div class="box-header with-border">
|
||||
<h3 class="box-title">'.tr('Carica un aggiornamento').' <span class="tip" title="'.tr('Form di caricamento per aggiornamenti del gestionale e innesti di moduli e plugin').'"><i class="fa fa-question-circle-o"></i></span></h3>
|
||||
</div>
|
||||
<div class="box-body">
|
||||
<form action="'.ROOTDIR.'/controller.php?id_module='.$id_module.'" method="post" enctype="multipart/form-data" class="form-inline" id="update">
|
||||
<input type="hidden" name="op" value="upload">
|
||||
|
||||
<label><input type="file" name="blob"></label>
|
||||
<label><input type="file" name="blob"></label>
|
||||
|
||||
<button type="button" class="btn btn-primary" onclick="if( confirm(\''.tr('Avviare la procedura?').'\') ){ $(\'#update\').submit(); }">
|
||||
<i class="fa fa-upload"></i> '.tr('Carica').'...
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
// Nuovo modulo
|
||||
echo '
|
||||
<div class="col-md-6">
|
||||
<div class="box box-info">
|
||||
<div class="box-header with-border">
|
||||
<h3 class="box-title">'.tr('Carica un nuovo modulo').'</h3>
|
||||
</div>
|
||||
<div class="box-body">
|
||||
<form action="'.$rootdir.'/controller.php?id_module='.$id_module.'" method="post" enctype="multipart/form-data" class="form-inline" id="module">
|
||||
<input type="hidden" name="op" value="upload">
|
||||
<input type="hidden" name="type" value="new">
|
||||
|
||||
<label><input type="file" name="blob"></label>
|
||||
<button type="button" class="btn btn-primary" onclick="if( confirm(\''.tr('Avviare la procedura?').'\') ){ $(\'#module\').submit(); }">
|
||||
<i class="fa fa-upload"></i> '.tr('Carica').'...
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>';
|
||||
echo '
|
||||
</div>';
|
||||
<button type="button" class="btn btn-primary pull-right" onclick="if( confirm(\''.tr('Avviare la procedura?').'\') ){ $(\'#update\').submit(); }">
|
||||
<i class="fa fa-upload"></i> '.tr('Carica').'...
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
// Elenco moduli installati
|
||||
@ -100,7 +71,7 @@ echo '
|
||||
<th width="20">'.tr('Opzioni').'</th>
|
||||
</tr>';
|
||||
|
||||
$modules = $dbo->fetchArray('SELECT * FROM zz_modules WHERE parent IS NULL ORDER BY `order` ASC');
|
||||
$modules = Modules::getHierarchy();
|
||||
|
||||
$osm_version = Update::getVersion();
|
||||
|
||||
@ -118,9 +89,9 @@ foreach ($modules as $module) {
|
||||
// Possibilità di disabilitare o abilitare i moduli tranne quello degli aggiornamenti
|
||||
if ($module['id'] != $id_module) {
|
||||
if ($module['enabled']) {
|
||||
$stato = "<a href='javascript:;' onclick=\"if( confirm('".tr('Disabilitare questo modulo?')."') ){ $.post( '".$rootdir.'/actions.php?id_module='.$id_module."', { op: 'disable', id: '".$module['id']."' }, function(response){ location.href='".$rootdir.'/controller.php?id_module='.$id_module."'; }); }\">".$stato."</a>\n";
|
||||
$stato = "<a href='javascript:;' onclick=\"if( confirm('".tr('Disabilitare questo modulo?')."') ){ $.post( '".ROOTDIR.'/actions.php?id_module='.$id_module."', { op: 'disable', id: '".$module['id']."' }, function(response){ location.href='".ROOTDIR.'/controller.php?id_module='.$id_module."'; }); }\">".$stato."</a>\n";
|
||||
} else {
|
||||
$stato = "<a href='javascript:;' onclick=\"if( confirm('".tr('Abilitare questo modulo?')."') ){ $.post( '".$rootdir.'/actions.php?id_module='.$id_module."', { op: 'enable', id: '".$module['id']."' }, function(response){ location.href='".$rootdir.'/controller.php?id_module='.$id_module."'; }); }\"\">".$stato."</a>\n";
|
||||
$stato = "<a href='javascript:;' onclick=\"if( confirm('".tr('Abilitare questo modulo?')."') ){ $.post( '".ROOTDIR.'/actions.php?id_module='.$id_module."', { op: 'enable', id: '".$module['id']."' }, function(response){ location.href='".ROOTDIR.'/controller.php?id_module='.$id_module."'; }); }\"\">".$stato."</a>\n";
|
||||
}
|
||||
}
|
||||
|
||||
@ -134,7 +105,7 @@ foreach ($modules as $module) {
|
||||
|
||||
if ($comp) {
|
||||
$compatible = '<i class="fa fa-check-circle text-success" data-toggle="tooltip" title="'.tr('Compatibile').'"></i>';
|
||||
($module['enabled']) ? $class = 'success': $class = 'warning';
|
||||
($module['enabled']) ? $class = 'success' : $class = 'warning';
|
||||
} else {
|
||||
$compatible = '<i class="fa fa-warning text-danger" data-toggle="tooltip" title="'.tr('Non compatibile!').tr('Questo modulo è compatibile solo con le versioni').': '.$module['compatibility'].'"></i>';
|
||||
$class = 'danger';
|
||||
@ -142,7 +113,7 @@ foreach ($modules as $module) {
|
||||
|
||||
echo '
|
||||
<tr class="'.$class.'">
|
||||
<td>'.$module['name'].'</td>
|
||||
<td>'.$module['title'].'</td>
|
||||
<td align="right">'.$module['version'].'</td>
|
||||
<td align="center">'.$stato.'</td>
|
||||
<td align="center">'.$compatible.'</td>';
|
||||
@ -153,7 +124,7 @@ foreach ($modules as $module) {
|
||||
// Possibilità di disinstallare solo se il modulo non è tra quelli predefiniti
|
||||
if (empty($module['default'])) {
|
||||
echo "
|
||||
<a href=\"javascript:;\" data-toggle='tooltip' title=\"".tr('Disinstalla')."...\" onclick=\"if( confirm('".tr('Vuoi disinstallare questo modulo?').' '.tr('Tutti i dati salvati andranno persi!')."') ){ if( confirm('".tr('Sei veramente sicuro?')."') ){ $.post( '".$rootdir.'/actions.php?id_module='.$id_module."', { op: 'uninstall', id: '".$module['id']."' }, function(response){ location.href='".$rootdir.'/controller.php?id_module='.$id_module."'; }); } }\"><i class='fa fa-trash'></i></a>";
|
||||
<a href=\"javascript:;\" data-toggle='tooltip' title=\"".tr('Disinstalla')."...\" onclick=\"if( confirm('".tr('Vuoi disinstallare questo modulo?').' '.tr('Tutti i dati salvati andranno persi!')."') ){ if( confirm('".tr('Sei veramente sicuro?')."') ){ $.post( '".ROOTDIR.'/actions.php?id_module='.$id_module."', { op: 'uninstall', id: '".$module['id']."' }, function(response){ location.href='".ROOTDIR.'/controller.php?id_module='.$id_module."'; }); } }\"><i class='fa fa-trash'></i></a>";
|
||||
} else {
|
||||
echo "
|
||||
<a class='disabled text-muted'>
|
||||
@ -166,71 +137,7 @@ foreach ($modules as $module) {
|
||||
</tr>';
|
||||
|
||||
// Prima di cambiare modulo verifico se ci sono sottomoduli
|
||||
$submodules = $dbo->fetchArray('SELECT * FROM zz_modules WHERE parent='.prepare($module['id']).' ORDER BY `order` ASC');
|
||||
foreach ($submodules as $sub) {
|
||||
// STATO
|
||||
if (!empty($sub['enabled'])) {
|
||||
$text = tr('Abilitato');
|
||||
$text .= ($sub['id'] != $id_module) ? '. '.tr('Clicca per disabilitarlo').'...' : '';
|
||||
$stato = '<i class="fa fa-cog fa-spin text-success" data-toggle="tooltip" title="'.$text.'"></i>';
|
||||
} else {
|
||||
$stato = '<i class="fa fa-cog text-warning" data-toggle="tooltip" title="'.tr('Non abilitato').'"></i>';
|
||||
$class = 'warning';
|
||||
}
|
||||
|
||||
// Possibilità di disabilitare o abilitare i moduli tranne quello degli aggiornamenti
|
||||
if ($sub['id'] != $id_module) {
|
||||
if ($sub['enabled']) {
|
||||
$stato = "<a href='javascript:;' onclick=\"if( confirm('".tr('Disabilitare questo modulo?')."') ){ $.post( '".$rootdir.'/actions.php?id_module='.$id_module."', { op: 'disable', id: '".$sub['id']."' }, function(response){ location.href='".$rootdir.'/controller.php?id_module='.$id_module."'; }); }\">".$stato."</a>\n";
|
||||
} else {
|
||||
$stato = "<a href='javascript:;' onclick=\"if( confirm('".tr('Abilitare questo modulo?')."') ){ $.post( '".$rootdir.'/actions.php?id_module='.$id_module."', { op: 'enable', id: '".$sub['id']."' }, function(response){ location.href='".$rootdir.'/controller.php?id_module='.$id_module."'; }); }\"\">".$stato."</a>\n";
|
||||
}
|
||||
}
|
||||
|
||||
// COMPATIBILITA'
|
||||
$compatibilities = explode(',', $sub['compatibility']);
|
||||
// Controllo per ogni versione se la regexp combacia per dire che è compatibile o meno
|
||||
$comp = false;
|
||||
|
||||
foreach ($compatibilities as $compatibility) {
|
||||
$comp = (preg_match('/'.$compatibility.'/', $osm_version)) ? true : $comp;
|
||||
}
|
||||
|
||||
if ($comp) {
|
||||
$compatible = '<i class="fa fa-check-circle text-success" data-toggle="tooltip" title="'.tr('Compatibile').'"></i>';
|
||||
($sub['enabled']) ? $class = 'success': $class = 'warning';
|
||||
} else {
|
||||
$compatible = '<i class="fa fa-warning text-danger" data-toggle="tooltip" title="'.tr('Non compatibile!').tr('Questo modulo è compatibile solo con le versioni').': '.$sub['compatibility'].'"></i>';
|
||||
$class = 'danger';
|
||||
}
|
||||
|
||||
echo '
|
||||
<tr class="'.$class.'">
|
||||
<td><small> - '.$sub['name'].'</small></td>
|
||||
<td align="right">'.$sub['version'].'</td>
|
||||
<td align="center">'.$stato.'</td>
|
||||
<td align="center">'.$compatible.'</td>';
|
||||
|
||||
echo '
|
||||
<td>';
|
||||
|
||||
// Possibilità di disinstallare solo se il modulo non è tra quelli predefiniti
|
||||
if (empty($sub['default'])) {
|
||||
echo "
|
||||
<a href=\"javascript:;\" data-toggle='tooltip' title=\"".tr('Disinstalla')."...\" onclick=\"if( confirm('".tr('Vuoi disinstallare questo modulo?').' '.tr('Tutti i dati salvati andranno persi!')."') ){ if( confirm('".tr('Sei veramente sicuro?')."') ){ $.post( '".$rootdir.'/actions.php?id_module='.$id_module."', { op: 'uninstall', id: '".$sub['id']."' }, function(response){ location.href='".$rootdir.'/controller.php?id_module='.$id_module."'; }); } }\">
|
||||
<i class='fa fa-trash'></i>
|
||||
</a>";
|
||||
} else {
|
||||
echo "
|
||||
<a class='disabled text-muted'>
|
||||
<i class='fa fa-trash'></i>
|
||||
</a>";
|
||||
}
|
||||
|
||||
echo '
|
||||
</td>
|
||||
</tr>';
|
||||
}
|
||||
echo submodules($module['children']);
|
||||
}
|
||||
|
||||
echo '
|
||||
@ -273,9 +180,9 @@ foreach ($widgets as $widget) {
|
||||
|
||||
// Possibilità di disabilitare o abilitare i moduli tranne quello degli aggiornamenti
|
||||
if ($widget['enabled']) {
|
||||
$stato = "<a href='javascript:;' onclick=\"if( confirm('".tr('Disabilitare questo widget?')."') ){ $.post( '".$rootdir.'/actions.php?id_module='.$id_module."', { op: 'disable_widget', id: '".$widget['id']."' }, function(response){ location.href='".$rootdir.'/controller.php?id_module='.$id_module."'; }); }\">".$stato."</a>\n";
|
||||
$stato = "<a href='javascript:;' onclick=\"if( confirm('".tr('Disabilitare questo widget?')."') ){ $.post( '".ROOTDIR.'/actions.php?id_module='.$id_module."', { op: 'disable_widget', id: '".$widget['id']."' }, function(response){ location.href='".ROOTDIR.'/controller.php?id_module='.$id_module."'; }); }\">".$stato."</a>\n";
|
||||
} else {
|
||||
$stato = "<a href='javascript:;' onclick=\"if( confirm('".tr('Abilitare questo widget?')."') ){ $.post( '".$rootdir.'/actions.php?id_module='.$id_module."', { op: 'enable_widget', id: '".$widget['id']."' }, function(response){ location.href='".$rootdir.'/controller.php?id_module='.$id_module."'; }); }\"\">".$stato."</a>\n";
|
||||
$stato = "<a href='javascript:;' onclick=\"if( confirm('".tr('Abilitare questo widget?')."') ){ $.post( '".ROOTDIR.'/actions.php?id_module='.$id_module."', { op: 'enable_widget', id: '".$widget['id']."' }, function(response){ location.href='".ROOTDIR.'/controller.php?id_module='.$id_module."'; }); }\"\">".$stato."</a>\n";
|
||||
}
|
||||
|
||||
// POSIZIONE
|
||||
@ -287,10 +194,10 @@ foreach ($widgets as $widget) {
|
||||
|
||||
if ($widget['location'] == 'controller_right') {
|
||||
$posizione = "<i class='fa fa-arrow-up text-warning' data-toggle='tooltip' title=\"".tr('Clicca per cambiare la posizione...')."\"></i> <i class='fa fa-arrow-right text-success' data-toggle='tooltip' title=\"\"></i>";
|
||||
$posizione = "<a href='javascript:;' onclick=\"if( confirm('".tr('Cambiare la posizione di questo widget?')."') ){ $.post( '".$rootdir.'/actions.php?id_module='.$id_module."', { op: 'change_position_widget_top', id: '".$widget['id']."' }, function(response){ location.href='".$rootdir.'/controller.php?id_module='.$id_module."'; }); }\"\">".$posizione."</a>\n";
|
||||
$posizione = "<a href='javascript:;' onclick=\"if( confirm('".tr('Cambiare la posizione di questo widget?')."') ){ $.post( '".ROOTDIR.'/actions.php?id_module='.$id_module."', { op: 'change_position_widget_top', id: '".$widget['id']."' }, function(response){ location.href='".ROOTDIR.'/controller.php?id_module='.$id_module."'; }); }\"\">".$posizione."</a>\n";
|
||||
} elseif ($widget['location'] == 'controller_top') {
|
||||
$posizione = "<i class='fa fa-arrow-up text-success' data-toggle='tooltip' title=\"\"></i> <i class='fa fa-arrow-right text-warning' data-toggle='tooltip' title=\"".tr('Clicca per cambiare la posizione...').'"></i></i>';
|
||||
$posizione = "<a href='javascript:;' onclick=\"if( confirm('".tr('Cambiare la posizione di questo widget?')."') ){ $.post( '".$rootdir.'/actions.php?id_module='.$id_module."', { op: 'change_position_widget_right', id: '".$widget['id']."' }, function(response){ location.href='".$rootdir.'/controller.php?id_module='.$id_module."'; }); }\"\">".$posizione."</a>\n";
|
||||
$posizione = "<a href='javascript:;' onclick=\"if( confirm('".tr('Cambiare la posizione di questo widget?')."') ){ $.post( '".ROOTDIR.'/actions.php?id_module='.$id_module."', { op: 'change_position_widget_right', id: '".$widget['id']."' }, function(response){ location.href='".ROOTDIR.'/controller.php?id_module='.$id_module."'; }); }\"\">".$posizione."</a>\n";
|
||||
}
|
||||
|
||||
echo '
|
||||
|
77
modules/aggiornamenti/modutil.php
Normal file
77
modules/aggiornamenti/modutil.php
Normal file
@ -0,0 +1,77 @@
|
||||
<?php
|
||||
|
||||
function submodules($list, $depth = 1)
|
||||
{
|
||||
$osm_version = Update::getVersion();
|
||||
|
||||
$id_module = App::getCurrentModule()['id'];
|
||||
|
||||
foreach ($list as $sub) {
|
||||
// STATO
|
||||
if (!empty($sub['enabled'])) {
|
||||
$text = tr('Abilitato');
|
||||
$text .= ($sub['id'] != $id_module) ? '. '.tr('Clicca per disabilitarlo').'...' : '';
|
||||
$stato = '<i class="fa fa-cog fa-spin text-success" data-toggle="tooltip" title="'.$text.'"></i>';
|
||||
} else {
|
||||
$stato = '<i class="fa fa-cog text-warning" data-toggle="tooltip" title="'.tr('Non abilitato').'"></i>';
|
||||
$class = 'warning';
|
||||
}
|
||||
|
||||
// Possibilità di disabilitare o abilitare i moduli tranne quello degli aggiornamenti
|
||||
if ($sub['id'] != $id_module) {
|
||||
if ($sub['enabled']) {
|
||||
$stato = "<a href='javascript:;' onclick=\"if( confirm('".tr('Disabilitare questo modulo?')."') ){ $.post( '".ROOTDIR.'/actions.php?id_module='.$id_module."', { op: 'disable', id: '".$sub['id']."' }, function(response){ location.href='".ROOTDIR.'/controller.php?id_module='.$id_module."'; }); }\">".$stato."</a>\n";
|
||||
} else {
|
||||
$stato = "<a href='javascript:;' onclick=\"if( confirm('".tr('Abilitare questo modulo?')."') ){ $.post( '".ROOTDIR.'/actions.php?id_module='.$id_module."', { op: 'enable', id: '".$sub['id']."' }, function(response){ location.href='".ROOTDIR.'/controller.php?id_module='.$id_module."'; }); }\"\">".$stato."</a>\n";
|
||||
}
|
||||
}
|
||||
|
||||
// COMPATIBILITA'
|
||||
// Controllo per ogni versione se la regexp combacia per dire che è compatibile o meno
|
||||
$compatibilities = explode(',', $sub['compatibility']);
|
||||
|
||||
$comp = false;
|
||||
foreach ($compatibilities as $compatibility) {
|
||||
$comp = (preg_match('/'.$compatibility.'/', $osm_version)) ? true : $comp;
|
||||
}
|
||||
|
||||
if ($comp) {
|
||||
$compatible = '<i class="fa fa-check-circle text-success" data-toggle="tooltip" title="'.tr('Compatibile').'"></i>';
|
||||
($sub['enabled']) ? $class = 'success' : $class = 'warning';
|
||||
} else {
|
||||
$compatible = '<i class="fa fa-warning text-danger" data-toggle="tooltip" title="'.tr('Non compatibile!').tr('Questo modulo è compatibile solo con le versioni').': '.$sub['compatibility'].'"></i>';
|
||||
$class = 'danger';
|
||||
}
|
||||
|
||||
$result .= '
|
||||
<tr class="'.$class.'">
|
||||
<td><small>'.str_repeat(' ', $depth * 4).'- '.$sub['title'].'</small></td>
|
||||
<td align="right">'.$sub['version'].'</td>
|
||||
<td align="center">'.$stato.'</td>
|
||||
<td align="center">'.$compatible.'</td>';
|
||||
|
||||
$result .= '
|
||||
<td>';
|
||||
|
||||
// Possibilità di disinstallare solo se il modulo non è tra quelli predefiniti
|
||||
if (empty($sub['default'])) {
|
||||
$result .= "
|
||||
<a href=\"javascript:;\" data-toggle='tooltip' title=\"".tr('Disinstalla')."...\" onclick=\"if( confirm('".tr('Vuoi disinstallare questo modulo?').' '.tr('Tutti i dati salvati andranno persi!')."') ){ if( confirm('".tr('Sei veramente sicuro?')."') ){ $.post( '".ROOTDIR.'/actions.php?id_module='.$id_module."', { op: 'uninstall', id: '".$sub['id']."' }, function(response){ location.href='".ROOTDIR.'/controller.php?id_module='.$id_module."'; }); } }\">
|
||||
<i class='fa fa-trash'></i>
|
||||
</a>";
|
||||
} else {
|
||||
$result .= "
|
||||
<a class='disabled text-muted'>
|
||||
<i class='fa fa-trash'></i>
|
||||
</a>";
|
||||
}
|
||||
|
||||
$result .= '
|
||||
</td>
|
||||
</tr>';
|
||||
|
||||
$result .= submodules($sub['children'], $depth + 1);
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
@ -6,113 +6,106 @@ if (!get_var('Attiva aggiornamenti')) {
|
||||
die(tr('Accesso negato'));
|
||||
}
|
||||
|
||||
$tmp = $_FILES['blob']['tmp_name'];
|
||||
$filename = $_FILES['blob']['name'];
|
||||
$filetype = $_FILES['blob']['type'];
|
||||
$size = $_FILES['blob']['size'];
|
||||
$type = $_POST['type'];
|
||||
|
||||
if (!extension_loaded('zip')) {
|
||||
$_SESSION['errors'][] = tr('Estensione zip non supportata!').'<br>'.tr('Verifica e attivala sul tuo file _FILE_', [
|
||||
'_FILE_' => '<b>php.ini</b>',
|
||||
]);
|
||||
} elseif (!ends_with($filename, '.zip')) {
|
||||
$_SESSION['errors'][] = tr('Il file non è un archivio zip!');
|
||||
} elseif (!empty($tmp) && is_file($tmp)) {
|
||||
$zip = new ZipArchive();
|
||||
|
||||
if ($zip->open($tmp)) {
|
||||
$tmp_dir = $docroot.'/tmp';
|
||||
|
||||
// Controllo sulla cartella
|
||||
directory($tmp_dir);
|
||||
|
||||
$zip->extractTo($tmp_dir);
|
||||
|
||||
// AGGIORNAMENTO
|
||||
if ('update' == $type) {
|
||||
// Salvo i file di configurazione e versione attuale
|
||||
$old_config = file_get_contents($docroot.'/config.inc.php');
|
||||
|
||||
// Aggiornamento del CORE
|
||||
if (file_exists($tmp_dir.'/VERSION')) {
|
||||
//rename($docroot.'/VERSION', $docroot.'/VERSION.old');
|
||||
|
||||
// Copia i file dalla cartella temporanea alla root
|
||||
copyr($tmp_dir, $docroot);
|
||||
|
||||
// Scollego l'utente per eventuali aggiornamenti del db
|
||||
Auth::logout();
|
||||
}
|
||||
|
||||
// Aggiornamento di un MODULO
|
||||
elseif (file_exists($tmp_dir.'/MODULE')) {
|
||||
$module_info = parse_ini_file($tmp_dir.'/MODULE', true);
|
||||
$module_name = $module_info['module_name'];
|
||||
$module_dir = $module_info['module_directory'];
|
||||
|
||||
// Copio i file nella cartella "modules/<nomemodulo>/"
|
||||
copyr($tmp_dir, $docroot.'/modules/'.$module_dir.'/');
|
||||
|
||||
// Rinomino il file di versione per forzare l'aggiornamento
|
||||
//rename($docroot.'/VERSION_'.$module, $docroot.'/VERSION_'.$module.'.old');
|
||||
|
||||
// Scollego l'utente per eventuali aggiornamenti del db
|
||||
Auth::logout();
|
||||
} else {
|
||||
$_SESSION['errors'][] = tr('File di aggiornamento non riconosciuto!');
|
||||
}
|
||||
|
||||
// Ripristino il file di configurazione dell'utente
|
||||
file_put_contents($docroot.'/config.inc.php', $old_config);
|
||||
}
|
||||
|
||||
// NUOVO MODULO
|
||||
elseif ('new' == $type) {
|
||||
// Se non c'è il file MODULE non é un modulo
|
||||
if (is_file($tmp_dir.'/MODULE')) {
|
||||
// Leggo le info dal file di configurazione del modulo
|
||||
$module_info = parse_ini_file($tmp_dir.'/MODULE', true);
|
||||
$module_name = $module_info['module_name'];
|
||||
$module_version = $module_info['module_version'];
|
||||
$module_dir = $module_info['module_directory'];
|
||||
|
||||
// Copio i file nella cartella "modules/<nomemodulo>/"
|
||||
copyr($tmp_dir, $docroot.'/modules/'.$module_dir.'/');
|
||||
|
||||
// Scollego l'utente per eventuali aggiornamenti del db
|
||||
Auth::logout();
|
||||
|
||||
// Sposto i file della cartella "files/" nella root
|
||||
$files_dir = $docroot.'/modules/'.$module_dir.'/files/';
|
||||
if (is_dir($files_dir)) {
|
||||
copyr($files_dir, $docroot.'/files');
|
||||
delete($files_dir);
|
||||
}
|
||||
|
||||
// Inserimento delle voci del modulo nel db per ogni sezione [sezione]
|
||||
// Verifico che il modulo non esista già
|
||||
$n = $dbo->fetchNum('SELECT name FROM zz_modules WHERE name='.prepare($module_name));
|
||||
|
||||
if (0 == $n) {
|
||||
$module_info['module_parent'] = $dbo->fetchNum('SELECT name FROM zz_modules WHERE id='.prepare($module_info['module_parent'])) ? prepare($module_info['module_parent']) : 'NULL';
|
||||
|
||||
$query = 'INSERT INTO zz_modules(`name`, `title`, `directory`, `options`, `icon`, `version`, `compatibility`, `order`, `parent`, `default`, `enabled`) VALUES('.prepare($module_name).', '.prepare($module_name).', '.prepare($module_dir).', '.prepare($module_info['module_options']).', '.prepare($module_info['module_icon']).', '.prepare($module_version).', '.prepare($module_info['module_compatibility']).', "100", '.$module_info['module_parent'].', 0, 1)';
|
||||
$dbo->query($query);
|
||||
}
|
||||
}
|
||||
|
||||
// File zip non contiene il file MODULE
|
||||
else {
|
||||
$_SESSION['errors'][] = tr('File di installazione non valido!');
|
||||
}
|
||||
}
|
||||
|
||||
delete($tmp_dir);
|
||||
redirect($rootdir);
|
||||
} else {
|
||||
$_SESSION['errors'][] = checkZip($tmp);
|
||||
}
|
||||
|
||||
$zip->close();
|
||||
return;
|
||||
}
|
||||
|
||||
$file = $_FILES['blob'];
|
||||
$type = $_POST['type'];
|
||||
|
||||
// Lettura dell'archivio
|
||||
$zip = new ZipArchive();
|
||||
if (!$zip->open($file['tmp_name'])) {
|
||||
$_SESSION['errors'][] = tr('File di installazione non valido!');
|
||||
$_SESSION['errors'][] = checkZip($file['tmp_name']);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Percorso di estrazione
|
||||
$extraction_dir = $docroot.'/tmp';
|
||||
directory($extraction_dir);
|
||||
|
||||
// Estrazione dell'archivio
|
||||
$zip->extractTo($extraction_dir);
|
||||
|
||||
// Aggiornamento del progetto
|
||||
if (file_exists($extraction_dir.'/VERSION')) {
|
||||
// Salva il file di configurazione
|
||||
$config = file_get_contents($docroot.'/config.inc.php');
|
||||
|
||||
// Copia i file dalla cartella temporanea alla root
|
||||
copyr($extraction_dir, $docroot);
|
||||
|
||||
// Ripristina il file di configurazione dell'installazione
|
||||
file_put_contents($docroot.'/config.inc.php', $config);
|
||||
} else {
|
||||
$finder = Symfony\Component\Finder\Finder::create()
|
||||
->files()
|
||||
->ignoreDotFiles(true)
|
||||
->ignoreVCS(true)
|
||||
->in($extraction_dir);
|
||||
|
||||
$files = $finder->name('MODULE')->name('PLUGIN');
|
||||
|
||||
foreach ($files as $file) {
|
||||
// Informazioni dal file di configurazione
|
||||
$info = Util\Ini::readFile($file->getRealPath());
|
||||
|
||||
// Informazioni aggiuntive per il database
|
||||
$insert = [];
|
||||
|
||||
// Modulo
|
||||
if (basename($file->getRealPath()) == 'MODULE') {
|
||||
$directory = 'modules';
|
||||
$table = 'zz_modules';
|
||||
|
||||
$installed = Modules::get($info['name']);
|
||||
$insert['parent'] = Modules::get($info['parent']);
|
||||
}
|
||||
|
||||
// Plugin
|
||||
elseif (basename($file->getRealPath()) == 'PLUGIN') {
|
||||
$directory = 'plugins';
|
||||
$table = 'zz_plugins';
|
||||
|
||||
$installed = Plugins::get($info['name']);
|
||||
$insert['idmodule_from'] = Modules::get($info['module_from'])['id'];
|
||||
$insert['idmodule_to'] = Modules::get($info['module_to'])['id'];
|
||||
$insert['position'] = $info['position'];
|
||||
}
|
||||
|
||||
// Copia dei file nella cartella relativa
|
||||
copyr(dirname($file->getRealPath()), $docroot.'/'.$directory.'/'.$info['directory']);
|
||||
|
||||
// Eventuale registrazione nel database
|
||||
if (empty($installed)) {
|
||||
$dbo->insert($table, array_merge($insert, [
|
||||
'name' => $info['name'],
|
||||
'title' => !empty($info['title']) ? $info['title'] : $info['name'],
|
||||
'directory' => $info['directory'],
|
||||
'options' => $info['options'],
|
||||
'version' => $info['version'],
|
||||
'compatibility' => $info['compatibility'],
|
||||
'order' => 100,
|
||||
'default' => 0,
|
||||
'enabled' => 1,
|
||||
]));
|
||||
|
||||
$_SESSION['errors'][] = tr('Installazione completata!');
|
||||
} else {
|
||||
$_SESSION['errors'][] = tr('Aggiornamento completato!');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Rimozione delle risorse inutilizzate
|
||||
delete($extraction_dir);
|
||||
$zip->close();
|
||||
|
||||
// Redirect
|
||||
redirect(ROOTDIR.'/editor.php?id_module='.$id_module);
|
||||
|
@ -49,7 +49,7 @@ switch (post('op')) {
|
||||
'idlistino_vendite' => $post['idlistino_vendite'],
|
||||
'idiva_acquisti' => $post['idiva_acquisti'],
|
||||
'idiva_vendite' => $post['idiva_vendite'],
|
||||
'idbanca_acquisti' => $post['idbanca_acquisti'],
|
||||
'idbanca_acquisti' => $post['idbanca_acquisti'],
|
||||
'idbanca_vendite' => $post['idbanca_vendite'],
|
||||
'settore' => $post['settore'],
|
||||
'marche' => $post['marche'],
|
||||
@ -76,15 +76,10 @@ switch (post('op')) {
|
||||
|
||||
// Validazione della Partita IVA
|
||||
$check_vat_number = Validate::isValidVatNumber(strtoupper($post['piva']));
|
||||
// Se $check_vat_number non è null e la riposta è negativa --> mostro il messaggio di avviso.
|
||||
if ((!is_null($check_vat_number)) && (!$check_vat_number->valid)) {
|
||||
if (!empty($check_vat_number->error->info)) {
|
||||
$_SESSION['errors'][] = $check_vat_number->error->info;
|
||||
} else {
|
||||
$_SESSION['errors'][] = tr('Attenzione: la partita IVA _IVA_ sembra non essere valida', [
|
||||
'_IVA_' => $post['piva'],
|
||||
]);
|
||||
}
|
||||
if (empty($check_vat_number)) {
|
||||
$_SESSION['errors'][] = tr('Attenzione: la partita IVA _IVA_ sembra non essere valida', [
|
||||
'_IVA_' => $post['piva'],
|
||||
]);
|
||||
}
|
||||
|
||||
// Aggiorno il codice anagrafica se non è già presente, altrimenti lo ignoro
|
||||
@ -107,7 +102,7 @@ switch (post('op')) {
|
||||
|
||||
// Aggiorno le tipologie di anagrafica
|
||||
$post['idtipoanagrafica'] = (array) $post['idtipoanagrafica'];
|
||||
if (str_contains($records[0]['idtipianagrafica'], $id_azienda)) {
|
||||
if (in_array($id_azienda, $tipi_anagrafica)) {
|
||||
$post['idtipoanagrafica'][] = $id_azienda;
|
||||
}
|
||||
|
||||
@ -193,8 +188,9 @@ switch (post('op')) {
|
||||
// Inserisco il rapporto dell'anagrafica (cliente, tecnico, ecc)
|
||||
$dbo->sync('an_tipianagrafiche_anagrafiche', ['idanagrafica' => $new_id], ['idtipoanagrafica' => (array) $idtipoanagrafica]);
|
||||
|
||||
if (in_array($id_azienda, $post['idtipoanagrafica'])) {
|
||||
$dbo->query('UPDATE zz_settings SET valore='.prepare($new_id)." WHERE nome='Azienda predefinita'");
|
||||
if (in_array($id_azienda, $idtipoanagrafica)) {
|
||||
Settings::set('Azienda predefinita', $new_id);
|
||||
|
||||
$_SESSION['infos'][] = tr('Anagrafica Azienda impostata come predefinita. Per ulteriori informazionioni, visitare "Strumenti -> Impostazioni -> Generali".');
|
||||
}
|
||||
|
||||
@ -262,11 +258,23 @@ switch (post('op')) {
|
||||
|
||||
case 'delete':
|
||||
// Se l'anagrafica non è l'azienda principale, la disattivo
|
||||
if (!str_contains($records[0]['idtipianagrafica'], $id_azienda)) {
|
||||
if (!in_array($id_azienda, $tipi_anagrafica)) {
|
||||
$dbo->query('UPDATE an_anagrafiche SET deleted = 1 WHERE idanagrafica = '.prepare($id_record).Modules::getAdditionalsQuery($id_module));
|
||||
|
||||
// Se l'anagrafica è collegata ad un utente lo disabilito
|
||||
$dbo->query('UPDATE zz_users SET enabled = 0 WHERE idanagrafica = '.prepare($id_record).Modules::getAdditionalsQuery($id_module));
|
||||
|
||||
$_SESSION['infos'][] = tr('Anagrafica eliminata!');
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
// Operazioni aggiuntive per il logo
|
||||
if (filter('op') == 'link_file') {
|
||||
$nome = 'Logo stampe';
|
||||
|
||||
if (Settings::get('Azienda predefinita') == $id_record && filter('nome_allegato') == $nome) {
|
||||
Settings::set($nome, $upload);
|
||||
}
|
||||
}
|
||||
|
@ -5,8 +5,6 @@ include_once __DIR__.'/../../core.php';
|
||||
if (get('tipoanagrafica') != '') {
|
||||
$rs = $dbo->fetchArray('SELECT idtipoanagrafica FROM an_tipianagrafiche WHERE descrizione='.prepare(get('tipoanagrafica')));
|
||||
$idtipoanagrafica = $rs[0]['idtipoanagrafica'];
|
||||
} else {
|
||||
$idtipoanagrafica = '';
|
||||
}
|
||||
|
||||
echo '
|
||||
@ -20,14 +18,12 @@ echo '
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "'.tr('Tipo di anagrafica').'", "name": "idtipoanagrafica[]", "multiple": "1", "required": 1, "values": "query=SELECT idtipoanagrafica AS id, descrizione FROM an_tipianagrafiche WHERE idtipoanagrafica NOT IN (SELECT DISTINCT(x.idtipoanagrafica) FROM an_tipianagrafiche_anagrafiche x INNER JOIN an_tipianagrafiche t ON x.idtipoanagrafica = t.idtipoanagrafica INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = x.idanagrafica WHERE t.descrizione = \'Azienda\' AND deleted = 0) ORDER BY descrizione", "value": "'.$idtipoanagrafica.'" ]}
|
||||
{[ "type": "select", "label": "'.tr('Tipo di anagrafica').'", "name": "idtipoanagrafica[]", "multiple": "1", "required": 1, "values": "query=SELECT idtipoanagrafica AS id, descrizione FROM an_tipianagrafiche WHERE idtipoanagrafica NOT IN (SELECT DISTINCT(x.idtipoanagrafica) FROM an_tipianagrafiche_anagrafiche x INNER JOIN an_tipianagrafiche t ON x.idtipoanagrafica = t.idtipoanagrafica INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = x.idanagrafica WHERE t.descrizione = \'Azienda\' AND deleted = 0) ORDER BY descrizione", "value": "'.(isset($idtipoanagrafica) ? $idtipoanagrafica : null).'", "readonly": '.(!empty($readonly_tipo) ? 1 : 0).' ]}
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
|
||||
|
||||
echo
|
||||
'<div class="box box-info collapsed-box">
|
||||
echo '
|
||||
<div class="box box-info collapsed-box">
|
||||
<div class="box-header with-border">
|
||||
<h3 class="box-title">'.tr('Dati anagrafici').'</h3>
|
||||
<div class="box-tools pull-right">
|
||||
@ -39,46 +35,46 @@ echo
|
||||
<div class="box-body collapse">
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "'.tr('Partita IVA').'", "maxlength": 13, "name": "piva", "class": "text-center alphanumeric-mask", "value": "" ]}
|
||||
{[ "type": "text", "label": "'.tr('Partita IVA').'", "maxlength": 13, "name": "piva", "class": "text-center alphanumeric-mask" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "'.tr('Codice fiscale').'", "maxlength": 16, "name": "codice_fiscale", "class": "text-center alphanumeric-mask", "value": "" ]}
|
||||
{[ "type": "text", "label": "'.tr('Codice fiscale').'", "maxlength": 16, "name": "codice_fiscale", "class": "text-center alphanumeric-mask" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "select", "label": "'.tr('Relazione').'", "name": "idrelazione", "values": "query=SELECT id, descrizione, colore AS _bgcolor_ FROM an_relazioni ORDER BY descrizione", "value": "" ]}
|
||||
{[ "type": "select", "label": "'.tr('Relazione').'", "name": "idrelazione", "values": "query=SELECT id, descrizione, colore AS _bgcolor_ FROM an_relazioni ORDER BY descrizione" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "'.tr('Indirizzo').'", "name": "indirizzo", "value": "" ]}
|
||||
{[ "type": "text", "label": "'.tr('Indirizzo').'", "name": "indirizzo" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-2">
|
||||
{[ "type": "text", "label": "'.tr('C.A.P.').'", "name": "cap", "maxlength": 5, "class": "text-center", "value": "" ]}
|
||||
{[ "type": "text", "label": "'.tr('C.A.P.').'", "name": "cap", "maxlength": 5, "class": "text-center" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "'.tr('Città').'", "name": "citta", "class": "text-center", "value": "" ]}
|
||||
{[ "type": "text", "label": "'.tr('Città').'", "name": "citta", "class": "text-center" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-2">
|
||||
{[ "type": "text", "label": "'.tr('Provincia').'", "name": "provincia", "maxlength": 2, "class": "text-center", "value": "" ]}
|
||||
{[ "type": "text", "label": "'.tr('Provincia').'", "name": "provincia", "maxlength": 2, "class": "text-center" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "'.tr('Telefono').'", "name": "telefono", "class": "text-center", "value": "", "icon-before": "<i class=\"fa fa-phone\"></i>" ]}
|
||||
{[ "type": "text", "label": "'.tr('Telefono').'", "name": "telefono", "class": "text-center", "icon-before": "<i class=\"fa fa-phone\"></i>" ]}
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "'.tr('Cellulare').'", "name": "cellulare", "class": "text-center", "value": "", "icon-before": "<i class=\"fa fa-mobile\"></i>" ]}
|
||||
{[ "type": "text", "label": "'.tr('Cellulare').'", "name": "cellulare", "class": "text-center", "icon-before": "<i class=\"fa fa-mobile\"></i>" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "'.tr('Email').'", "name": "email", "class": "email-mask", "placeholder":"casella@dominio.ext", "value": "", "icon-before": "<i class=\"fa fa-envelope\"></i>" ]}
|
||||
{[ "type": "text", "label": "'.tr('Email').'", "name": "email", "class": "email-mask", "placeholder":"casella@dominio.ext", "icon-before": "<i class=\"fa fa-envelope\"></i>" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -86,11 +82,8 @@ echo
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
|
||||
|
||||
|
||||
echo
|
||||
'<div class="row">
|
||||
echo
|
||||
'<div class="row">
|
||||
<div class="col-md-12 text-right">
|
||||
<button type="submit" class="btn btn-primary"><i class="fa fa-plus"></i> '.tr('Aggiungi').'</button>
|
||||
</div>
|
||||
|
@ -52,6 +52,7 @@ foreach ($rs as $r) {
|
||||
|
||||
$result['link'] = ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$r['id'];
|
||||
$result['title'] = $r['ragione_sociale'];
|
||||
$result['title'] .= ($r['deleted']) ? ' <small class="text-danger"><em>('.tr('Eliminato').')</em></small>': '';
|
||||
$result['category'] = 'Anagrafiche';
|
||||
|
||||
// Campi da evidenziare
|
||||
|
@ -4,16 +4,14 @@ include_once __DIR__.'/../../../core.php';
|
||||
|
||||
switch ($resource) {
|
||||
case 'clienti':
|
||||
//$citta_cliente = ", IF(citta IS NULL OR citta = '', '', CONCAT(' (', citta, ')'))";
|
||||
|
||||
$query = "SELECT an_anagrafiche.idanagrafica AS id, CONCAT(ragione_sociale $citta_cliente) AS descrizione, idtipointervento_default 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 |where| ORDER BY ragione_sociale";
|
||||
$query = 'SELECT an_anagrafiche.idanagrafica AS id, CONCAT(ragione_sociale) AS descrizione, idtipointervento_default 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 |where| ORDER BY ragione_sociale';
|
||||
|
||||
foreach ($elements as $element) {
|
||||
$filter[] = 'an_anagrafiche.idanagrafica='.prepare($element);
|
||||
}
|
||||
|
||||
$where[] = "descrizione='Cliente'";
|
||||
if (empty($filter)) {
|
||||
$where[] = "descrizione='Cliente'";
|
||||
$where[] = 'deleted=0';
|
||||
}
|
||||
|
||||
@ -34,8 +32,8 @@ switch ($resource) {
|
||||
$filter[] = 'an_anagrafiche.idanagrafica='.prepare($element);
|
||||
}
|
||||
|
||||
$where[] = "descrizione='Fornitore'";
|
||||
if (empty($filter)) {
|
||||
$where[] = "descrizione='Fornitore'";
|
||||
$where[] = 'deleted=0';
|
||||
}
|
||||
|
||||
@ -56,8 +54,8 @@ switch ($resource) {
|
||||
$filter[] = 'an_anagrafiche.idanagrafica='.prepare($element);
|
||||
}
|
||||
|
||||
$where[] = "descrizione='Agente'";
|
||||
if (empty($filter)) {
|
||||
$where[] = "descrizione='Agente'";
|
||||
$where[] = 'deleted=0';
|
||||
}
|
||||
|
||||
@ -77,7 +75,7 @@ switch ($resource) {
|
||||
$idagente_default = 0;
|
||||
}
|
||||
|
||||
$ids = array_column($results, $id);
|
||||
$ids = array_column($results, 'idanagrafica');
|
||||
$pos = array_search($idagente_default, $ids);
|
||||
if ($pos !== false) {
|
||||
$results[$pos]['_bgcolor_'] = '#ff0';
|
||||
@ -91,9 +89,15 @@ switch ($resource) {
|
||||
$filter[] = 'an_anagrafiche.idanagrafica='.prepare($element);
|
||||
}
|
||||
|
||||
$where[] = "descrizione='Tecnico'";
|
||||
if (empty($filter)) {
|
||||
$where[] = "descrizione='Tecnico'";
|
||||
$where[] = 'deleted=0';
|
||||
|
||||
//come tecnico posso aprire attività solo a mio nome
|
||||
$user = Auth::user();
|
||||
if ($user['gruppo'] == 'Tecnici' and !empty($user['idanagrafica'])) {
|
||||
$where[] = 'an_anagrafiche.idanagrafica='.$user['idanagrafica'];
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($search)) {
|
||||
|
@ -13,8 +13,42 @@ switch ($resource) {
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 'clienti':
|
||||
$q = 'SELECT AN.idanagrafica,
|
||||
AN.ragione_sociale,
|
||||
AN.piva,
|
||||
AN.codice_fiscale,
|
||||
AN.indirizzo,
|
||||
AN.indirizzo2,
|
||||
AN.citta,
|
||||
AN.cap,
|
||||
AN.provincia,
|
||||
AN.km,
|
||||
IFNULL(AN.lat, 0.00) AS latitudine,
|
||||
IFNULL(AN.lng, 0.00) AS longitudine,
|
||||
NAZIONE.nome AS nazione,
|
||||
AN.telefono,
|
||||
AN.fax,
|
||||
AN.cellulare,
|
||||
AN.email,
|
||||
AN.sitoweb,
|
||||
AN.note,
|
||||
AN.idzona,
|
||||
AN.deleted
|
||||
FROM (an_anagrafiche AS AN
|
||||
LEFT OUTER JOIN an_nazioni NAZIONE ON AN.id_nazione=NAZIONE.id)
|
||||
HAVING 1=1 AND
|
||||
AN.deleted=0 AND
|
||||
AN.idanagrafica IN (SELECT idanagrafica FROM an_tipianagrafiche_anagrafiche WHERE idtipoanagrafica=1)
|
||||
ORDER BY AN.ragione_sociale';
|
||||
|
||||
$results = $dbo->fetchArray($q);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return [
|
||||
'an_anagrafiche',
|
||||
'clienti',
|
||||
];
|
||||
|
@ -4,19 +4,24 @@ include_once __DIR__.'/../../core.php';
|
||||
|
||||
switch (post('op')) {
|
||||
case 'delete-bulk':
|
||||
$id_azienda = $dbo->fetchArray("SELECT idtipoanagrafica FROM an_tipianagrafiche WHERE descrizione='Azienda'")[0]['idtipoanagrafica'];
|
||||
|
||||
foreach ($id_records as $id) {
|
||||
$records = $dbo->fetchArray('SELECT an_tipianagrafiche.idtipoanagrafica FROM an_tipianagrafiche INNER JOIN an_tipianagrafiche_anagrafiche ON an_tipianagrafiche.idtipoanagrafica=an_tipianagrafiche_anagrafiche.idtipoanagrafica WHERE idanagrafica='.prepare($id));
|
||||
$tipi = array_column($records, 'idtipoanagrafica');
|
||||
if ($debug) {
|
||||
$id_azienda = $dbo->fetchArray("SELECT idtipoanagrafica FROM an_tipianagrafiche WHERE descrizione='Azienda'")[0]['idtipoanagrafica'];
|
||||
|
||||
// Se l'anagrafica non è l'azienda principale, la disattivo
|
||||
if (!in_array($id_azienda, $tipi)) {
|
||||
$dbo->query('UPDATE an_anagrafiche SET deleted = 1 WHERE idanagrafica = '.prepare($id).Modules::getAdditionalsQuery($id_module));
|
||||
foreach ($id_records as $id) {
|
||||
$records = $dbo->fetchArray('SELECT an_tipianagrafiche.idtipoanagrafica FROM an_tipianagrafiche INNER JOIN an_tipianagrafiche_anagrafiche ON an_tipianagrafiche.idtipoanagrafica=an_tipianagrafiche_anagrafiche.idtipoanagrafica WHERE idanagrafica='.prepare($id));
|
||||
$tipi = array_column($records, 'idtipoanagrafica');
|
||||
|
||||
// Se l'anagrafica non è l'azienda principale, la disattivo
|
||||
if (!in_array($id_azienda, $tipi)) {
|
||||
$dbo->query('UPDATE an_anagrafiche SET deleted = 1 WHERE idanagrafica = '.prepare($id).Modules::getAdditionalsQuery($id_module));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$_SESSION['infos'][] = tr('Anagrafiche eliminate!');
|
||||
$_SESSION['infos'][] = tr('Anagrafiche eliminate!');
|
||||
} else {
|
||||
$_SESSION['warnings'][] = tr('Procedura in fase di sviluppo. Nessuna modifica apportata.');
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
38
modules/anagrafiche/buttons.php
Normal file
38
modules/anagrafiche/buttons.php
Normal file
@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
if (in_array($id_cliente, $tipi_anagrafica)) {
|
||||
echo '
|
||||
<div class="btn-group">
|
||||
<button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
'.tr('Nuovo').' <span class="caret"></span>
|
||||
<span class="sr-only">Toggle Dropdown</span>
|
||||
</button>
|
||||
|
||||
<ul class="dropdown-menu dropdown-menu-right">
|
||||
<li><a data-toggle="modal" data-title="'.tr('Aggiungi intervento').'" data-target="#bs-popup" data-href="add.php?id_module='.Modules::get('Interventi')['id'].'&idanagrafica='.$records[0]['idanagrafica'].'">
|
||||
'.tr('Nuovo intervento').'
|
||||
</a></li>
|
||||
|
||||
<li><a data-toggle="modal" data-title="'.tr('Aggiungi preventivo').'" data-target="#bs-popup" data-href="add.php?id_module='.Modules::get('Preventivi')['id'].'&idanagrafica='.$records[0]['idanagrafica'].'">
|
||||
'.tr('Nuovo preventivo').'
|
||||
</a></li>
|
||||
|
||||
<li><a data-toggle="modal" data-title="'.tr('Aggiungi contratto').'" data-target="#bs-popup" data-href="add.php?id_module='.Modules::get('Contratti')['id'].'&idanagrafica='.$records[0]['idanagrafica'].'">
|
||||
'.tr('Nuovo contratto').'
|
||||
</a></li>
|
||||
|
||||
<li><a data-toggle="modal" data-title="'.tr('Aggiungi ddt').'" data-target="#bs-popup" data-href="add.php?id_module='.Modules::get('Ddt di vendita')['id'].'&idanagrafica='.$records[0]['idanagrafica'].'">
|
||||
'.tr('Nuovo ddt').'
|
||||
</a></li>
|
||||
|
||||
<li><a data-toggle="modal" data-title="'.tr('Aggiungi ordine').'" data-target="#bs-popup" data-href="add.php?id_module='.Modules::get('Ordini cliente')['id'].'&idanagrafica='.$records[0]['idanagrafica'].'">
|
||||
'.tr('Nuovo ordine').'
|
||||
</a></li>
|
||||
|
||||
<li><a data-toggle="modal" data-title="'.tr('Aggiungi fattura').'" data-target="#bs-popup" data-href="add.php?id_module='.Modules::get('Fatture di vendita')['id'].'&idanagrafica='.$records[0]['idanagrafica'].'">
|
||||
'.tr('Nuova fattura').'
|
||||
</a></li>
|
||||
|
||||
</ul>
|
||||
</div>';
|
||||
}
|
@ -2,8 +2,8 @@
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
$fornitore = in_array('Fornitore', explode(',', $records[0]['tipianagrafica']));
|
||||
$cliente = in_array('Cliente', explode(',', $records[0]['tipianagrafica']));
|
||||
$fornitore = in_array($id_fornitore, $tipi_anagrafica);
|
||||
$cliente = in_array($id_cliente, $tipi_anagrafica);
|
||||
|
||||
$google = Settings::get('Google Maps API key');
|
||||
|
||||
@ -24,354 +24,356 @@ if (!$cliente) {
|
||||
}
|
||||
|
||||
?>
|
||||
<form action="" method="post" id="edit-form">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
<input type="hidden" name="op" value="update">
|
||||
|
||||
<!-- DATI ANAGRAFICI -->
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title"><?php echo tr('Dati anagrafici'); ?></h3>
|
||||
</div>
|
||||
<form action="" method="post" id="edit-form" >
|
||||
<fieldset <?php echo (!$records[0]['deleted']) ? '' : 'disabled'; ?> >
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
<input type="hidden" name="op" value="update">
|
||||
|
||||
<div class="panel-body">
|
||||
<div class="row">
|
||||
<div class="col-md-8">
|
||||
{[ "type": "text", "label": "<?php echo tr('Ragione sociale'); ?>", "name": "ragione_sociale", "required": 1, "value": "$ragione_sociale$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "select", "label": "<?php echo tr('Tipologia'); ?>", "name": "tipo", "values": "list=\"\": \"<?php echo tr('Non specificato'); ?>\", \"Azienda\": \"<?php echo tr('Azienda'); ?>\", \"Privato\": \"<?php echo tr('Privato'); ?>\", \"Ente pubblico\": \"<?php echo tr('Ente pubblico'); ?>\"", "value": "$tipo$" ]}
|
||||
</div>
|
||||
<!-- DATI ANAGRAFICI -->
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title"><?php echo tr('Dati anagrafici'); ?></h3>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "<?php echo tr('Partita IVA'); ?>", "maxlength": 13, "name": "piva", "class": "text-center alphanumeric-mask", "value": "$piva$" ]}
|
||||
<div class="panel-body">
|
||||
<div class="row">
|
||||
<div class="col-md-8">
|
||||
{[ "type": "text", "label": "<?php echo tr('Ragione sociale'); ?>", "name": "ragione_sociale", "required": 1, "value": "$ragione_sociale$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "select", "label": "<?php echo tr('Tipologia'); ?>", "name": "tipo", "values": "list=\"\": \"<?php echo tr('Non specificato'); ?>\", \"Azienda\": \"<?php echo tr('Azienda'); ?>\", \"Privato\": \"<?php echo tr('Privato'); ?>\", \"Ente pubblico\": \"<?php echo tr('Ente pubblico'); ?>\"", "value": "$tipo$" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "<?php echo tr('Codice fiscale'); ?>", "maxlength": 16, "name": "codice_fiscale", "class": "text-center alphanumeric-mask", "value": "$codice_fiscale$" ]}
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "<?php echo tr('Partita IVA'); ?>", "maxlength": 13, "name": "piva", "class": "text-center alphanumeric-mask", "value": "$piva$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "<?php echo tr('Codice fiscale'); ?>", "maxlength": 16, "name": "codice_fiscale", "class": "text-center alphanumeric-mask", "value": "$codice_fiscale$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "<?php echo tr('Codice anagrafica'); ?>", "name": "codice", "required": 1, "class": "text-center", "value": "$codice$" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "<?php echo tr('Codice anagrafica'); ?>", "name": "codice", "required": 1, "class": "text-center", "value": "$codice$" ]}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "<?php echo tr('Luogo di nascita'); ?>", "name": "luogo_nascita", "value": "$luogo_nascita$" ]}
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "<?php echo tr('Luogo di nascita'); ?>", "name": "luogo_nascita", "value": "$luogo_nascita$" ]}
|
||||
<div class="col-md-4">
|
||||
{[ "type": "date", "label": "<?php echo tr('Data di nascita'); ?>", "maxlength": 10, "name": "data_nascita", "value": "$data_nascita$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "select", "label": "<?php echo tr('Sesso'); ?>", "name": "sesso", "values": "list=\"\": \"Non specificato\", \"M\": \"<?php echo tr('Uomo'); ?>\", \"F\": \"<?php echo tr('Donna'); ?>\"", "value": "$sesso$" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "date", "label": "<?php echo tr('Data di nascita'); ?>", "maxlength": 10, "name": "data_nascita", "value": "$data_nascita$" ]}
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "<?php echo tr('Indirizzo'); ?>", "name": "indirizzo", "value": "$indirizzo$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "<?php echo tr('Indirizzo2'); ?>", "name": "indirizzo2", "value": "$indirizzo2$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "select", "label": "<?php echo tr('Zona'); ?>", "name": "idzona", "values": "query=SELECT id, CONCAT_WS( ' - ', nome, descrizione) AS descrizione FROM an_zone ORDER BY descrizione ASC", "value": "$idzona$", "placeholder": "<?php echo tr('Nessuna zona'); ?>", "icon-after": "add|<?php echo Modules::get('Zone')['id']; ?>" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "select", "label": "<?php echo tr('Sesso'); ?>", "name": "sesso", "values": "list=\"\": \"Non specificato\", \"M\": \"<?php echo tr('Uomo'); ?>\", \"F\": \"<?php echo tr('Donna'); ?>\"", "value": "$sesso$" ]}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
{[ "type": "select", "label": "<?php echo tr('Nazione'); ?>", "name": "id_nazione", "values": "query=SELECT id AS id, nome AS descrizione FROM an_nazioni ORDER BY nome ASC", "value": "$id_nazione$" ]}
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "<?php echo tr('Indirizzo'); ?>", "name": "indirizzo", "value": "$indirizzo$" ]}
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
{[ "type": "text", "label": "<?php echo tr('C.A.P.'); ?>", "name": "cap", "maxlength": 5, "class": "text-center", "value": "$cap$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "<?php echo tr('Indirizzo2'); ?>", "name": "indirizzo2", "value": "$indirizzo2$" ]}
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "<?php echo tr('Città'); ?>", "name": "citta", "class": "text-center", "value": "$citta$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "select", "label": "<?php echo tr('Zona'); ?>", "name": "idzona", "values": "query=SELECT id, CONCAT_WS( ' - ', nome, descrizione) AS descrizione FROM an_zone ORDER BY descrizione ASC", "value": "$idzona$", "placeholder": "<?php echo tr('Nessuna zona'); ?>", "icon-after": "add|<?php echo Modules::get('Zone')['id']; ?>" ]}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
{[ "type": "text", "label": "<?php echo tr('Provincia'); ?>", "name": "provincia", "maxlength": 2, "class": "text-center", "value": "$provincia$" ]}
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
{[ "type": "select", "label": "<?php echo tr('Nazione'); ?>", "name": "id_nazione", "values": "query=SELECT id AS id, nome AS descrizione FROM an_nazioni ORDER BY nome ASC", "value": "$id_nazione$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-2">
|
||||
{[ "type": "text", "label": "<?php echo tr('C.A.P.'); ?>", "name": "cap", "maxlength": 5, "class": "text-center", "value": "$cap$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "<?php echo tr('Città'); ?>", "name": "citta", "class": "text-center", "value": "$citta$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-2">
|
||||
{[ "type": "text", "label": "<?php echo tr('Provincia'); ?>", "name": "provincia", "maxlength": 2, "class": "text-center", "value": "$provincia$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-2">
|
||||
{[ "type": "number", "label": "<?php echo tr('Km'); ?>", "name": "km", "maxlength": 4, "class": "text-center", "value": "$km$" ]}
|
||||
<div class="col-md-2">
|
||||
{[ "type": "number", "label": "<?php echo tr('Distanza'); ?>", "name": "km", "decimals":"1", "class": "text-center", "value": "$km$", "icon-after": "Km" ]}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<!-- CONTATTI -->
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title"><?php echo tr('Contatti'); ?></h3>
|
||||
</div>
|
||||
|
||||
<div class="panel-body">
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "<?php echo tr('Telefono'); ?>", "name": "telefono", "class": "text-center", "value": "$telefono$", "icon-before": "<i class='fa fa-phone'></i>" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "<?php echo tr('Fax'); ?>", "name": "fax", "class": "text-center", "value": "$fax$", "icon-before": "<i class='fa fa-fax'></i>" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "<?php echo tr('Cellulare'); ?>", "name": "cellulare", "class": "text-center", "value": "$cellulare$", "icon-before": "<i class='fa fa-mobile'></i>" ]}
|
||||
</div>
|
||||
<!-- CONTATTI -->
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title"><?php echo tr('Contatti'); ?></h3>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "<?php echo tr('Email'); ?>", "name": "email", "class": "email-mask", "placeholder":"casella@dominio.ext", "value": "$email$", "icon-before": "<i class='fa fa-envelope'></i>" ]}
|
||||
<div class="panel-body">
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "<?php echo tr('Telefono'); ?>", "name": "telefono", "class": "text-center", "value": "$telefono$", "icon-before": "<i class='fa fa-phone'></i>" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "<?php echo tr('Fax'); ?>", "name": "fax", "class": "text-center", "value": "$fax$", "icon-before": "<i class='fa fa-fax'></i>" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "<?php echo tr('Cellulare'); ?>", "name": "cellulare", "class": "text-center", "value": "$cellulare$", "icon-before": "<i class='fa fa-mobile'></i>" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "<?php echo tr('PEC'); ?>", "name": "pec", "class": "email-mask", "placeholder":"pec@dominio.ext", "value": "$pec$", "icon-before": "<i class='fa fa-envelope-o'></i>" ]}
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "<?php echo tr('Email'); ?>", "name": "email", "class": "email-mask", "placeholder":"casella@dominio.ext", "value": "$email$", "icon-before": "<i class='fa fa-envelope'></i>" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "<?php echo tr('Sito web'); ?>", "name": "sitoweb", "placeholder":"www.dominio.ext", "value": "$sitoweb$", "icon-before": "<i class='fa fa-globe'></i>" ]}
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "<?php echo tr('PEC'); ?>", "name": "pec", "class": "email-mask", "placeholder":"pec@dominio.ext", "value": "$pec$", "icon-before": "<i class='fa fa-envelope-o'></i>" ]}
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "<?php echo tr('Sito web'); ?>", "name": "sitoweb", "placeholder":"www.dominio.ext", "value": "$sitoweb$", "icon-before": "<i class='fa fa-globe'></i>" ]}
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
<?php
|
||||
|
||||
if ($cliente || $fornitore) {
|
||||
?>
|
||||
|
||||
|
||||
<!-- ACQUISTI -->
|
||||
<div class = "row">
|
||||
<div class="col-md-6">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title"><?php echo tr('Acquisti'); ?></h3>
|
||||
</div>
|
||||
if ($cliente || $fornitore) {
|
||||
?>
|
||||
|
||||
<div class="panel-body">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "<?php echo tr('Pagamento predefinito'); ?>", "name": "idpagamento_acquisti", "values": "query=SELECT id, descrizione FROM co_pagamenti GROUP BY descrizione ORDER BY descrizione ASC", "value": "$idpagamento_acquisti$", "extra": "<?php echo ($fornitore) ? '' : 'readonly'; ?>" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "<?php echo tr('Banca predefinita'); ?>", "name": "idbanca_acquisti", "values": "query=SELECT id, nome AS descrizione FROM co_banche ORDER BY nome ASC", "value": "$idbanca_acquisti$", "extra": "<?php echo ($fornitore) ? '' : 'readonly'; ?>", "icon-after": "add|<?php echo Modules::get('Banche')['id']; ?>|||<?php echo ($fornitore) ? '' : 'disabled'; ?>" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "<?php echo tr('Iva predefinita'); ?>", "name": "idiva_acquisti", "values": "query=SELECT id, descrizione FROM co_iva ORDER BY descrizione ASC", "value": "$idiva_acquisti$", "extra": "<?php echo ($fornitore) ? '' : 'readonly'; ?>" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "<?php echo tr('Listino articoli'); ?>", "name": "idlistino_acquisti", "values": "query=SELECT id, nome AS descrizione FROM mg_listini ORDER BY nome ASC", "value": "$idlistino_acquisti$", "extra": "<?php echo ($fornitore) ? '' : 'readonly'; ?>" ]}
|
||||
</div>
|
||||
|
||||
<!-- ACQUISTI -->
|
||||
<div class = "row">
|
||||
<div class="col-md-6">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title"><?php echo tr('Acquisti'); ?></h3>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<!-- VENDITE -->
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title"><?php echo tr('Vendite'); ?></h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
|
||||
<div class="panel-body">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "<?php echo tr('Pagamento predefinito'); ?>", "name": "idpagamento_vendite", "values": "query=SELECT id, descrizione FROM co_pagamenti GROUP BY descrizione ORDER BY descrizione ASC", "value": "$idpagamento_vendite$", "extra": "<?php echo ($cliente) ? '' : 'readonly'; ?>" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "<?php echo tr('Banca predefinita'); ?>", "name": "idbanca_vendite", "values": "query=SELECT id, nome AS descrizione FROM co_banche ORDER BY nome ASC", "value": "$idbanca_vendite$", "extra": "<?php echo ($cliente) ? '' : 'readonly'; ?>", "icon-after": "add|<?php echo Modules::get('Banche')['id']; ?>|||<?php echo ($cliente) ? '' : 'disabled'; ?>" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "<?php echo tr('Iva predefinita'); ?>", "name": "idiva_vendite", "values": "query=SELECT id, descrizione FROM co_iva ORDER BY descrizione ASC", "value": "$idiva_vendite$", "extra": "<?php echo ($cliente) ? '' : 'readonly'; ?>" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "<?php echo tr('Listino articoli'); ?>", "name": "idlistino_vendite", "values": "query=SELECT id, nome AS descrizione FROM mg_listini ORDER BY nome ASC", "value": "$idlistino_vendite$", "extra": "<?php echo ($cliente) ? '' : 'readonly'; ?>" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "<?php echo tr('Indirizzo di fatturazione'); ?>", "name": "idsede_fatturazione", "values": "query=SELECT id, IF(citta = '', nomesede, CONCAT_WS(', ', nomesede, citta)) AS descrizione FROM an_sedi WHERE idanagrafica='<?php echo $id_record; ?>' UNION SELECT '0' AS id, 'Sede legale' AS descrizione ORDER BY descrizione", "value": "$idsede_fatturazione$" , "extra": "<?php echo ($cliente) ? '' : 'readonly'; ?>" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "<?php echo tr('Tipo attività'); ?>", "name": "idtipointervento_default", "values": "query=SELECT idtipointervento AS id, descrizione FROM in_tipiintervento ORDER BY descrizione ASC", "value": "$idtipointervento_default$", "extra": "<?php echo ($cliente) ? '' : 'readonly'; ?>" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "Agente principale", "name": "idagente", "values": "query=SELECT an_anagrafiche.idanagrafica AS id, IF(deleted=1, CONCAT(ragione_sociale, ' (Eliminato)'), ragione_sociale ) AS descrizione 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 WHERE (descrizione='Agente' AND deleted=0)<?php echo isset($records[0]['idagente']) ? 'OR (an_anagrafiche.idanagrafica = '.prepare($records[0]['idagente']).'AND deleted=1) ' : ''; ?>ORDER BY ragione_sociale", "value": "$idagente$", "extra": "<?php echo ($cliente) ? '' : 'readonly'; ?>" ]}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearfix" ></div>
|
||||
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title"><?php echo tr('Informazioni aggiuntive'); ?></h3>
|
||||
</div>
|
||||
|
||||
<div class="panel-body">
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
{[ "type": "text", "label": "<?php echo tr('Codice registro imprese'); ?>", "name": "codiceri", "value": "$codiceri$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "text", "label": "<?php echo tr('Codice R.E.A.').'<small>('.tr('provincia/C.C.I.A.A.').')</small>'; ?>", "name": "codicerea", "value": "$codicerea$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "text", "label": "<?php echo tr('Num. iscr. C.C.I.A.A.'); ?>", "name": "cciaa", "value": "$cciaa$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "text", "label": "<?php echo tr('Città iscr. C.C.I.A.A.'); ?>", "name": "cciaa_citta", "value": "$cciaa_citta$" ]}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
{[ "type": "text", "label": "<?php echo tr('Num. iscr. tribunale'); ?>", "name": "iscrizione_tribunale", "value": "$iscrizione_tribunale$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "text", "label": "<?php echo tr('Num. iscr. albo artigiani'); ?>", "name": "n_alboartigiani", "value": "$n_alboartigiani$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "text", "label": "<?php echo tr('Foro di competenza'); ?>", "name": "foro_competenza", "value": "$foro_competenza$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "text", "label": "<?php echo tr('Capitale sociale'); ?>", "name": "capitale_sociale", "value": "$capitale_sociale$" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
//se non è l'anagrafica azienda, ma cliente o fornitore
|
||||
if ((!str_contains($records[0]['idtipianagrafica'], $id_azienda)) or (($cliente or $fornitore))) {
|
||||
?>
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
{[ "type": "text", "label": "<?php echo tr('Appoggio bancario'); ?>", "name": "appoggiobancario", "value": "$appoggiobancario$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "text", "label": "<?php echo tr('Filiale banca'); ?>", "name": "filiale", "value": "$filiale$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "text", "label": "<?php echo tr('Codice IBAN'); ?>", "name": "codiceiban", "value": "$codiceiban$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "text", "label": "<?php echo tr('Codice BIC'); ?>", "name": "bic", "value": "$bic$" ]}
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "text", "label": "<?php echo tr('Dicitura fissa in fattura'); ?>", "name": "diciturafissafattura", "value": "$diciturafissafattura$" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
{[ "type": "text", "label": "<?php echo tr('Settore merceologico'); ?>", "name": "settore", "value": "$settore$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "text", "label": "<?php echo tr('Marche trattate'); ?>", "name": "marche", "value": "$marche$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "number", "label": "<?php echo tr('Num. dipendenti'); ?>", "name": "dipendenti", "decimals": 0, "value": "$dipendenti$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "number", "label": "<?php echo tr('Num. macchine'); ?>", "name": "macchine", "decimals": 0, "value": "$macchine$" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "select", "multiple": "1", "label": "<?php echo tr('Tipo di anagrafica'); ?>", "name": "idtipoanagrafica[]", "values": "query=SELECT idtipoanagrafica AS id, descrizione FROM an_tipianagrafiche WHERE idtipoanagrafica NOT IN (SELECT DISTINCT(x.idtipoanagrafica) FROM an_tipianagrafiche_anagrafiche x INNER JOIN an_tipianagrafiche t ON x.idtipoanagrafica = t.idtipoanagrafica INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = x.idanagrafica WHERE t.descrizione = 'Azienda' AND deleted = 0) ORDER BY descrizione", "value": "$idtipianagrafica$" ]}
|
||||
<?php
|
||||
if (str_contains($records[0]['idtipianagrafica'], $id_azienda)) {
|
||||
echo '
|
||||
<p class=\'badge badge-info\' >'.tr('Questa anagrafica appartiene alla tipologia "Azienda"').'.</p>';
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<?php
|
||||
if (in_array('Tecnico', explode(',', $records[0]['tipianagrafica']))) {
|
||||
?>
|
||||
<div class="col-md-3">
|
||||
{[ "type": "text", "label": "<?php echo tr('Colore'); ?>", "name": "colore", "class": "colorpicker text-center", "value": "$colore$", "extra": "maxlength='7'", "icon-after": "<div class='img-circle square'></div>" ]}
|
||||
</div>
|
||||
<?php
|
||||
} ?>
|
||||
<?php
|
||||
if (in_array('Cliente', explode(',', $records[0]['tipianagrafica']))) {
|
||||
?>
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "Agenti secondari", "multiple": "1", "name": "idagenti[]", "values": "query=SELECT an_anagrafiche.idanagrafica AS id, IF(deleted=1, CONCAT(ragione_sociale, ' (Eliminato)'), ragione_sociale ) AS descrizione 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 WHERE (descrizione='Agente' AND deleted=0 AND an_anagrafiche.idanagrafica NOT IN (SELECT idagente FROM an_anagrafiche WHERE idanagrafica = <?php echo prepare($records[0]['idanagrafica']); ?> )) OR (an_anagrafiche.idanagrafica IN (SELECT idagente FROM an_anagrafiche_agenti WHERE idanagrafica = <?php echo prepare($records[0]['idanagrafica']); ?> ) ) ORDER BY ragione_sociale", "value": "$idagenti$" ]}
|
||||
{[ "type": "select", "label": "<?php echo tr('Pagamento predefinito'); ?>", "name": "idpagamento_acquisti", "values": "query=SELECT id, descrizione FROM co_pagamenti GROUP BY descrizione ORDER BY descrizione ASC", "value": "$idpagamento_acquisti$", "extra": "<?php echo ($fornitore) ? '' : 'readonly'; ?>" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "<?php echo tr('Banca predefinita'); ?>", "name": "idbanca_acquisti", "values": "query=SELECT id, nome AS descrizione FROM co_banche ORDER BY nome ASC", "value": "$idbanca_acquisti$", "extra": "<?php echo ($fornitore) ? '' : 'readonly'; ?>", "icon-after": "add|<?php echo Modules::get('Banche')['id']; ?>|||<?php echo ($fornitore) ? '' : 'disabled'; ?>" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "<?php echo tr('Iva predefinita'); ?>", "name": "idiva_acquisti", "values": "query=SELECT id, descrizione FROM co_iva ORDER BY descrizione ASC", "value": "$idiva_acquisti$", "extra": "<?php echo ($fornitore) ? '' : 'readonly'; ?>" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "<?php echo tr('Listino articoli'); ?>", "name": "idlistino_acquisti", "values": "query=SELECT id, nome AS descrizione FROM mg_listini ORDER BY nome ASC", "value": "$idlistino_acquisti$", "extra": "<?php echo ($fornitore) ? '' : 'readonly'; ?>" ]}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<!-- VENDITE -->
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title"><?php echo tr('Vendite'); ?></h3>
|
||||
</div>
|
||||
|
||||
<div class="panel-body">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "<?php echo tr('Pagamento predefinito'); ?>", "name": "idpagamento_vendite", "values": "query=SELECT id, descrizione FROM co_pagamenti GROUP BY descrizione ORDER BY descrizione ASC", "value": "$idpagamento_vendite$", "extra": "<?php echo ($cliente) ? '' : 'readonly'; ?>" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "<?php echo tr('Banca predefinita'); ?>", "name": "idbanca_vendite", "values": "query=SELECT id, nome AS descrizione FROM co_banche ORDER BY nome ASC", "value": "$idbanca_vendite$", "extra": "<?php echo ($cliente) ? '' : 'readonly'; ?>", "icon-after": "add|<?php echo Modules::get('Banche')['id']; ?>|||<?php echo ($cliente) ? '' : 'disabled'; ?>" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "<?php echo tr('Iva predefinita'); ?>", "name": "idiva_vendite", "values": "query=SELECT id, descrizione FROM co_iva ORDER BY descrizione ASC", "value": "$idiva_vendite$", "extra": "<?php echo ($cliente) ? '' : 'readonly'; ?>" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "<?php echo tr('Listino articoli'); ?>", "name": "idlistino_vendite", "values": "query=SELECT id, nome AS descrizione FROM mg_listini ORDER BY nome ASC", "value": "$idlistino_vendite$", "extra": "<?php echo ($cliente) ? '' : 'readonly'; ?>" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "<?php echo tr('Indirizzo di fatturazione'); ?>", "name": "idsede_fatturazione", "values": "query=SELECT id, IF(citta = '', nomesede, CONCAT_WS(', ', nomesede, citta)) AS descrizione FROM an_sedi WHERE idanagrafica='<?php echo $id_record; ?>' UNION SELECT '0' AS id, 'Sede legale' AS descrizione ORDER BY descrizione", "value": "$idsede_fatturazione$" , "extra": "<?php echo ($cliente) ? '' : 'readonly'; ?>" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "<?php echo tr('Tipo attività'); ?>", "name": "idtipointervento_default", "values": "query=SELECT idtipointervento AS id, descrizione FROM in_tipiintervento ORDER BY descrizione ASC", "value": "$idtipointervento_default$", "extra": "<?php echo ($cliente) ? '' : 'readonly'; ?>" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "Agente principale", "name": "idagente", "values": "query=SELECT an_anagrafiche.idanagrafica AS id, IF(deleted=1, CONCAT(ragione_sociale, ' (Eliminato)'), ragione_sociale ) AS descrizione 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 WHERE (descrizione='Agente' AND deleted=0)<?php echo isset($records[0]['idagente']) ? 'OR (an_anagrafiche.idanagrafica = '.prepare($records[0]['idagente']).'AND deleted=1) ' : ''; ?>ORDER BY ragione_sociale", "value": "$idagente$", "extra": "<?php echo ($cliente) ? '' : 'readonly'; ?>" ]}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearfix" ></div>
|
||||
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title"><?php echo tr('Informazioni aggiuntive'); ?></h3>
|
||||
</div>
|
||||
|
||||
<div class="panel-body">
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
{[ "type": "text", "label": "<?php echo tr('Codice registro imprese'); ?>", "name": "codiceri", "value": "$codiceri$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "select", "label": "<?php echo tr('Relazione con il cliente'); ?>", "name": "idrelazione", "values": "query=SELECT id, descrizione, colore AS _bgcolor_ FROM an_relazioni ORDER BY descrizione", "value": "$idrelazione$" ]}
|
||||
{[ "type": "text", "label": "<?php echo tr('Codice R.E.A.').'<small>('.tr('provincia/C.C.I.A.A.').')</small>'; ?>", "name": "codicerea", "value": "$codicerea$" ]}
|
||||
</div>
|
||||
<?php
|
||||
} ?>
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "text", "label": "<?php echo tr('Num. iscr. C.C.I.A.A.'); ?>", "name": "cciaa", "value": "$cciaa$" ]}
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "textarea", "label": "<?php echo tr('Note'); ?>", "name": "note", "value": "$note$" ]}
|
||||
<div class="col-md-3">
|
||||
{[ "type": "text", "label": "<?php echo tr('Città iscr. C.C.I.A.A.'); ?>", "name": "cciaa_citta", "value": "$cciaa_citta$" ]}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
{[ "type": "text", "label": "<?php echo tr('Num. iscr. tribunale'); ?>", "name": "iscrizione_tribunale", "value": "$iscrizione_tribunale$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "text", "label": "<?php echo tr('Num. iscr. albo artigiani'); ?>", "name": "n_alboartigiani", "value": "$n_alboartigiani$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "text", "label": "<?php echo tr('Foro di competenza'); ?>", "name": "foro_competenza", "value": "$foro_competenza$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "text", "label": "<?php echo tr('Capitale sociale'); ?>", "name": "capitale_sociale", "value": "$capitale_sociale$" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
//se non è l'anagrafica azienda, ma cliente o fornitore
|
||||
if (!in_array($id_azienda, $tipi_anagrafica) || (($cliente or $fornitore))) {
|
||||
?>
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
{[ "type": "text", "label": "<?php echo tr('Appoggio bancario'); ?>", "name": "appoggiobancario", "value": "$appoggiobancario$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "text", "label": "<?php echo tr('Filiale banca'); ?>", "name": "filiale", "value": "$filiale$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "text", "label": "<?php echo tr('Codice IBAN'); ?>", "name": "codiceiban", "value": "$codiceiban$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "text", "label": "<?php echo tr('Codice BIC'); ?>", "name": "bic", "value": "$bic$" ]}
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "text", "label": "<?php echo tr('Dicitura fissa in fattura'); ?>", "name": "diciturafissafattura", "value": "$diciturafissafattura$" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
{[ "type": "text", "label": "<?php echo tr('Settore merceologico'); ?>", "name": "settore", "value": "$settore$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "text", "label": "<?php echo tr('Marche trattate'); ?>", "name": "marche", "value": "$marche$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "number", "label": "<?php echo tr('Num. dipendenti'); ?>", "name": "dipendenti", "decimals": 0, "value": "$dipendenti$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "number", "label": "<?php echo tr('Num. macchine'); ?>", "name": "macchine", "decimals": 0, "value": "$macchine$" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "select", "multiple": "1", "label": "<?php echo tr('Tipo di anagrafica'); ?>", "name": "idtipoanagrafica[]", "values": "query=SELECT idtipoanagrafica AS id, descrizione FROM an_tipianagrafiche WHERE idtipoanagrafica NOT IN (SELECT DISTINCT(x.idtipoanagrafica) FROM an_tipianagrafiche_anagrafiche x INNER JOIN an_tipianagrafiche t ON x.idtipoanagrafica = t.idtipoanagrafica INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = x.idanagrafica WHERE t.descrizione = 'Azienda' AND deleted = 0) ORDER BY descrizione", "value": "$idtipianagrafica$" ]}
|
||||
<?php
|
||||
if (in_array($id_azienda, $tipi_anagrafica)) {
|
||||
echo '
|
||||
<p class=\'badge badge-info\' >'.tr('Questa anagrafica appartiene alla tipologia "Azienda"').'.</p>';
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<?php
|
||||
if (in_array('Tecnico', explode(',', $records[0]['tipianagrafica']))) {
|
||||
?>
|
||||
<div class="col-md-3">
|
||||
{[ "type": "text", "label": "<?php echo tr('Colore'); ?>", "name": "colore", "class": "colorpicker text-center", "value": "$colore$", "extra": "maxlength='7'", "icon-after": "<div class='img-circle square'></div>" ]}
|
||||
</div>
|
||||
<?php
|
||||
} ?>
|
||||
<?php
|
||||
if (in_array('Cliente', explode(',', $records[0]['tipianagrafica']))) {
|
||||
?>
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "Agenti secondari", "multiple": "1", "name": "idagenti[]", "values": "query=SELECT an_anagrafiche.idanagrafica AS id, IF(deleted=1, CONCAT(ragione_sociale, ' (Eliminato)'), ragione_sociale ) AS descrizione 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 WHERE (descrizione='Agente' AND deleted=0 AND an_anagrafiche.idanagrafica NOT IN (SELECT idagente FROM an_anagrafiche WHERE idanagrafica = <?php echo prepare($records[0]['idanagrafica']); ?> )) OR (an_anagrafiche.idanagrafica IN (SELECT idagente FROM an_anagrafiche_agenti WHERE idanagrafica = <?php echo prepare($records[0]['idanagrafica']); ?> ) ) ORDER BY ragione_sociale", "value": "$idagenti$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "select", "label": "<?php echo tr('Relazione con il cliente'); ?>", "name": "idrelazione", "values": "query=SELECT id, descrizione, colore AS _bgcolor_ FROM an_relazioni ORDER BY descrizione", "value": "$idrelazione$" ]}
|
||||
</div>
|
||||
<?php
|
||||
} ?>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "textarea", "label": "<?php echo tr('Note'); ?>", "name": "note", "value": "$note$" ]}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
|
||||
if (!empty($google)) {
|
||||
@ -417,23 +419,102 @@ if (!empty($google)) {
|
||||
}
|
||||
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
{( "name": "filelist_and_upload", "id_module": "<?php echo $id_module; ?>", "id_record": "<?php echo $id_record; ?>" )}
|
||||
|
||||
<?php
|
||||
if (!str_contains($records[0]['idtipianagrafica'], $id_azienda)) {
|
||||
echo '
|
||||
<a class="btn btn-danger ask" data-backto="record-list">
|
||||
<i class="fa fa-trash"></i> '.tr('Elimina').'
|
||||
</a>';
|
||||
}else{
|
||||
|
||||
echo '
|
||||
<div class=\'alert alert-warning\' >'.tr('Questa è l\'anagrafica "Azienda" e non è possibile eliminarla').'.</div>';
|
||||
if (Settings::get('Azienda predefinita') == $id_record) {
|
||||
echo '
|
||||
<div class="alert alert-info text-center">'.tr('Per impostare il logo delle stampe, caricare un file con nome "Logo stampe"').'.</div>';
|
||||
}
|
||||
|
||||
if (!$records[0]['deleted']) {
|
||||
//fatture, ddt, preventivi, contratti, ordini, interventi, utenti collegati a questa anagrafica
|
||||
$elementi = $dbo->fetchArray('SELECT `co_documenti`.`id`, `co_documenti`.`data`, `co_documenti`.`numero`, `co_documenti`.`numero_esterno`, `co_tipidocumento`.`descrizione` AS tipo_documento, `co_tipidocumento`.`dir` FROM `co_documenti` JOIN `co_tipidocumento` ON `co_tipidocumento`.`id` = `co_documenti`.`idtipodocumento` WHERE `co_documenti`.`idanagrafica` = '.prepare($id_record).'
|
||||
|
||||
UNION
|
||||
SELECT `zz_users`.`id`, `zz_users`.`created_at` AS data, `zz_users`.`username` AS numero, 0 AS `numero_esterno`, "Utente" AS tipo_documento, 0 AS `dir` FROM `zz_users` WHERE `zz_users`.`idanagrafica` = '.prepare($id_record).'
|
||||
|
||||
UNION
|
||||
SELECT `or_ordini`.`id`, `or_ordini`.`data`, `or_ordini`.`numero`, `or_ordini`.`numero_esterno`, `or_tipiordine`.`descrizione` AS tipo_documento, `or_tipiordine`.`dir` FROM `or_ordini` JOIN `or_tipiordine` ON `or_tipiordine`.`id` = `or_ordini`.`idtipoordine` WHERE `or_ordini`.`idanagrafica` = '.prepare($id_record).'
|
||||
|
||||
UNION
|
||||
SELECT `dt_ddt`.`id`, `dt_ddt`.`data`, `dt_ddt`.`numero`, `dt_ddt`.`numero_esterno`, `dt_tipiddt`.`descrizione` AS tipo_documento, `dt_tipiddt`.`dir` FROM `dt_ddt` JOIN `dt_tipiddt` ON `dt_tipiddt`.`id` = `dt_ddt`.`idtipoddt` WHERE `dt_ddt`.`idanagrafica` = '.prepare($id_record).'
|
||||
|
||||
UNION
|
||||
SELECT `in_interventi`.`id`, `in_interventi`.`data_richiesta`, `in_interventi`.`codice` AS numero, 0 AS numero_esterno, "Intervento" AS tipo_documento, 0 AS dir FROM `in_interventi` JOIN `in_interventi_tecnici` ON `in_interventi`.`id` = `in_interventi_tecnici`.`idintervento` WHERE `in_interventi`.`id` IN (SELECT `idintervento` FROM `in_interventi_tecnici` WHERE `idtecnico` = '.prepare($id_record).' OR `in_interventi`.`idanagrafica` = '.prepare($id_record).' )
|
||||
|
||||
UNION
|
||||
SELECT `co_contratti`.`id`, `co_contratti`.`data_bozza`, `co_contratti`.`numero`, 0 AS numero_esterno , "Contratto" AS tipo_documento, 0 AS dir FROM `co_contratti` WHERE `co_contratti`.`id` IN (SELECT `idcontratto` FROM `co_contratti_promemoria` WHERE `idanagrafica` = '.prepare($id_record).')
|
||||
|
||||
UNION
|
||||
SELECT `co_preventivi`.`id`, `co_preventivi`.`data_bozza`, `co_preventivi`.`numero`, 0 AS numero_esterno , "Preventivo" AS tipo_documento, 0 AS dir FROM `co_preventivi` WHERE `co_preventivi`.`id` IN (SELECT `idpreventivo` FROM `co_righe_preventivi` WHERE `idanagrafica` = '.prepare($id_record).') ORDER BY `data`');
|
||||
|
||||
if (!empty($elementi)) {
|
||||
echo '
|
||||
<div class="alert alert-warning">
|
||||
<p>'.tr('_NUM_ altr_I_ document_I_ collegat_I_', [
|
||||
'_NUM_' => count($elementi),
|
||||
'_I_' => (count($elementi) > 1) ? tr('i') : tr('o'),
|
||||
]).':</p>
|
||||
<ul>';
|
||||
|
||||
foreach ($elementi as $elemento) {
|
||||
$descrizione = tr('_DOC_ _NUM_ del _DATE_', [
|
||||
'_DOC_' => $elemento['tipo_documento'],
|
||||
'_NUM_' => !empty($elemento['numero_esterno']) ? $elemento['numero_esterno'] : $elemento['numero'],
|
||||
'_DATE_' => Translator::dateToLocale($elemento['data']),
|
||||
]);
|
||||
|
||||
//se non è un preventivo è un ddt o una fattura
|
||||
//se non è un ddt è una fattura.
|
||||
if (in_array($elemento['tipo_documento'], ['Utente'])) {
|
||||
$modulo = 'Utenti e permessi';
|
||||
} elseif (in_array($elemento['tipo_documento'], ['Intervento'])) {
|
||||
$modulo = 'Interventi';
|
||||
} elseif (in_array($elemento['tipo_documento'], ['Preventivo'])) {
|
||||
$modulo = 'Preventivi';
|
||||
} elseif (in_array($elemento['tipo_documento'], ['Contratto'])) {
|
||||
$modulo = 'Contratti';
|
||||
} elseif (in_array($elemento['tipo_documento'], ['Ordine cliente', 'Ordine fornitore'])) {
|
||||
$modulo = ($elemento['dir'] == 'entrata') ? 'Ordini cliente' : 'Ordini fornitore';
|
||||
} elseif (in_array($elemento['tipo_documento'], ['Ddt di vendita', 'Ddt di acquisto'])) {
|
||||
$modulo = ($elemento['dir'] == 'entrata') ? 'Ddt di vendita' : 'Ddt di acquisto';
|
||||
} else {
|
||||
$modulo = ($elemento['dir'] == 'entrata') ? 'Fatture di vendita' : 'Fatture di acquisto';
|
||||
}
|
||||
|
||||
$id = $elemento['id'];
|
||||
|
||||
echo '
|
||||
<li>'.Modules::link($modulo, $id, $descrizione).'</li>';
|
||||
}
|
||||
|
||||
echo '
|
||||
</ul>
|
||||
<p>'.tr('Eliminando questo documento si potrebbero verificare problemi nelle altre sezioni del gestionale.').'</p>
|
||||
</div>';
|
||||
}
|
||||
|
||||
if (!in_array($id_azienda, $tipi_anagrafica)) {
|
||||
echo '
|
||||
<a class="btn btn-danger ask" data-backto="record-list">
|
||||
<i class="fa fa-trash"></i> '.tr('Elimina').'
|
||||
</a>';
|
||||
} else {
|
||||
echo '
|
||||
<div class=\'alert alert-warning\' >'.tr('Questa è l\'anagrafica "Azienda" e non è possibile eliminarla').'.</div>';
|
||||
}
|
||||
} else {
|
||||
echo '
|
||||
<div class=\'alert alert-danger\'>'.tr('Questa anagrafica è stata eliminata').'.</div>';
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
<script>
|
||||
|
@ -3,6 +3,28 @@
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
switch (post('op')) {
|
||||
case 'example':
|
||||
|
||||
$module = filter('module');
|
||||
|
||||
$list = [
|
||||
['Codice', 'Ragione sociale', 'Partita IVA', 'Nazione', 'Indirizzo', 'CAP', 'Città', 'Provincia', 'Telefono', 'Fax', 'Cellulare', 'Email', 'IBAN', 'Note', 'Tipologia'],
|
||||
['00001', 'Cliente', '12345678910', 'ITALIA', 'Via Giuseppe Mazzini, 123', '12345', 'Este', 'PD', '786 543 21', '123 456 78', '321 123 456 78', 'email@cliente.it', 'IT60 X054 2811 1010 0000 0123 456', 'Anagrafica di esempio', 'Cliente'],
|
||||
];
|
||||
|
||||
directory('../../files/'.$module);
|
||||
|
||||
$fp = fopen('../../files/'.$module.'/'.$module.'.csv', 'w');
|
||||
|
||||
foreach ($list as $fields) {
|
||||
fputcsv($fp, $fields, ';');
|
||||
}
|
||||
|
||||
fclose($fp);
|
||||
exit;
|
||||
|
||||
break;
|
||||
|
||||
case 'import':
|
||||
|
||||
foreach ($data as $key => $value) {
|
||||
|
@ -10,4 +10,7 @@ if (isset($id_record)) {
|
||||
$records[0]['lat'] = floatval($records[0]['lat']);
|
||||
$records[0]['lng'] = floatval($records[0]['lng']);
|
||||
}
|
||||
|
||||
$tipi_anagrafica = $dbo->fetchArray('SELECT an_tipianagrafiche.idtipoanagrafica FROM an_tipianagrafiche INNER JOIN an_tipianagrafiche_anagrafiche ON an_tipianagrafiche.idtipoanagrafica=an_tipianagrafiche_anagrafiche.idtipoanagrafica WHERE idanagrafica='.prepare($id_record));
|
||||
$tipi_anagrafica = array_column($tipi_anagrafica, 'idtipoanagrafica');
|
||||
}
|
||||
|
@ -2,9 +2,17 @@
|
||||
|
||||
include_once __DIR__.'/../../../core.php';
|
||||
|
||||
// Interventi
|
||||
$rsi = $dbo->fetchArray('SELECT ragione_sociale, (SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS data, (SELECT SUM(prezzo_ore_consuntivo+prezzo_km_consuntivo+prezzo_dirittochiamata) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS totale FROM in_interventi INNER JOIN an_anagrafiche ON in_interventi.idanagrafica=an_anagrafiche.idanagrafica WHERE in_interventi.idanagrafica='.prepare($id_record));
|
||||
include_once Modules::filepath('Preventivi', 'modutil.php');
|
||||
|
||||
// Interventi
|
||||
$rsi = [];
|
||||
if (in_array('Cliente', explode(',', $records[0]['tipianagrafica']))) {
|
||||
//Clienti
|
||||
$rsi = $dbo->fetchArray('SELECT ragione_sociale, (SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS data, (SELECT SUM(prezzo_ore_consuntivo+prezzo_km_consuntivo+prezzo_dirittochiamata) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS totale FROM in_interventi INNER JOIN an_anagrafiche ON in_interventi.idanagrafica=an_anagrafiche.idanagrafica WHERE in_interventi.idanagrafica='.prepare($id_record));
|
||||
} elseif (in_array('Tecnico', explode(',', $records[0]['tipianagrafica']))) {
|
||||
//Tecnici
|
||||
$rsi = $dbo->fetchArray('SELECT ragione_sociale, (SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS data, (SELECT SUM(prezzo_ore_consuntivo+prezzo_km_consuntivo+prezzo_dirittochiamata) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id AND in_interventi_tecnici.idtecnico = '.prepare($id_record).' ) AS totale FROM in_interventi INNER JOIN an_anagrafiche ON in_interventi.idanagrafica=an_anagrafiche.idanagrafica INNER JOIN in_interventi_tecnici ON in_interventi.id = in_interventi_tecnici.idintervento WHERE in_interventi_tecnici.idtecnico='.prepare($id_record));
|
||||
}
|
||||
$totale_interventi = 0;
|
||||
$data_start = strtotime('now');
|
||||
|
||||
@ -42,19 +50,19 @@ echo '
|
||||
</div>';
|
||||
|
||||
// Preventivi
|
||||
$rsi = $dbo->fetchArray('SELECT data_accettazione AS data, ragione_sociale, budget FROM co_preventivi INNER JOIN an_anagrafiche ON co_preventivi.idanagrafica=an_anagrafiche.idanagrafica WHERE co_preventivi.idanagrafica='.prepare($id_record));
|
||||
|
||||
$rsi = $dbo->fetchArray('SELECT co_preventivi.id AS idpreventivo, data_accettazione AS data, ragione_sociale, budget FROM co_preventivi INNER JOIN an_anagrafiche ON co_preventivi.idanagrafica=an_anagrafiche.idanagrafica WHERE co_preventivi.idanagrafica='.prepare($id_record));
|
||||
$totale_preventivi = 0;
|
||||
$data_start = strtotime('now');
|
||||
|
||||
for ($i = 0; $i < count($rsi); ++$i) {
|
||||
$totale_preventivi += $rsi[$i]['budget'];
|
||||
|
||||
//$totale_preventivi += $rsi[$i]['budget'];
|
||||
$totale_preventivi += get_imponibile_preventivo($rsi[$i]['idpreventivo']);
|
||||
// Calcolo data più bassa per la ricerca
|
||||
if (strtotime($rsi[$i]['data']) < $data_start) {
|
||||
$data_start = strtotime($rsi[$i]['data']);
|
||||
}
|
||||
}
|
||||
|
||||
echo '
|
||||
<div class="col-md-6">
|
||||
<div class="box box-info">
|
||||
@ -64,7 +72,7 @@ echo '
|
||||
<div class="box-body">';
|
||||
if (count($rsi) > 0) {
|
||||
echo '
|
||||
<p>'.tr('Si è lavorato per <strong>_NUMBER_ preventivi</strong> per un totale di _EUR_ €', [
|
||||
<p>'.tr('Sono stati fatti <strong>_NUMBER_ preventivi</strong> per un totale di _EUR_ €', [
|
||||
'_NUMBER_' => count($rsi),
|
||||
'_EUR_' => Translator::numberToLocale($totale_preventivi),
|
||||
]).'</p>
|
||||
@ -81,7 +89,7 @@ echo '
|
||||
</div>';
|
||||
|
||||
// Contratti
|
||||
$rsi = $dbo->fetchArray('SELECT data_accettazione AS data, ragione_sociale, budget FROM co_contratti INNER JOIN an_anagrafiche ON co_contratti.idanagrafica=an_anagrafiche.idanagrafica WHERE co_contratti.idanagrafica='.prepare($id_record));
|
||||
$rsi = $dbo->fetchArray('SELECT data_accettazione AS data, ragione_sociale, (SELECT SUM(co_righe_contratti.subtotale - co_righe_contratti.sconto) FROM co_righe_contratti WHERE co_righe_contratti.idcontratto = co_contratti.id) AS budget FROM co_contratti INNER JOIN an_anagrafiche ON co_contratti.idanagrafica=an_anagrafiche.idanagrafica WHERE co_contratti.idanagrafica='.prepare($id_record));
|
||||
|
||||
$totale_contratti = 0;
|
||||
$data_start = strtotime(date('Ymd'));
|
||||
@ -104,7 +112,7 @@ echo '
|
||||
<div class="box-body">';
|
||||
if (count($rsi) > 0) {
|
||||
echo '
|
||||
<p>'.tr('Si è lavorato per <strong>_NUMBER_ contratti</strong> per un totale di _EUR_ €', [
|
||||
<p>'.tr('Sono stati stipulati <strong>_NUMBER_ contratti</strong> per un totale di _EUR_ €', [
|
||||
'_NUMBER_' => count($rsi),
|
||||
'_EUR_' => Translator::numberToLocale($totale_contratti),
|
||||
]).'</p>
|
||||
|
@ -2,69 +2,66 @@
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
$upload_dir = $docroot.'/files/'.Modules::get('Articoli')['directory'];
|
||||
|
||||
switch (post('op')) {
|
||||
case 'update':
|
||||
// Aggiunta articolo
|
||||
case 'add':
|
||||
$codice = post('codice');
|
||||
$descrizione = post('descrizione');
|
||||
$um = post('um');
|
||||
$categoria = post('categoria');
|
||||
$subcategoria = post('subcategoria');
|
||||
|
||||
// Inserisco l'articolo solo se non esiste un altro articolo con stesso codice
|
||||
if ($dbo->fetchNum('SELECT * FROM mg_articoli WHERE codice='.prepare($codice)) == 0) {
|
||||
$dbo->insert('mg_articoli', [
|
||||
'codice' => $codice,
|
||||
'descrizione' => post('descrizione'),
|
||||
'id_categoria' => post('categoria'),
|
||||
'id_sottocategoria' => post('subcategoria'),
|
||||
'attivo' => 1,
|
||||
]);
|
||||
$id_record = $dbo->lastInsertedID();
|
||||
|
||||
$_SESSION['infos'][] = tr('Aggiunto un nuovo articolo!');
|
||||
} else {
|
||||
$_SESSION['errors'][] = tr('Esiste già un articolo con questo codice!');
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
// Modifica articolo
|
||||
case 'update':
|
||||
$componente = post('componente_filename');
|
||||
$qta = post('qta');
|
||||
$threshold_qta = post('threshold_qta');
|
||||
|
||||
$abilita_serial = post('abilita_serial');
|
||||
|
||||
$prezzo_vendita = post('prezzo_vendita');
|
||||
$prezzo_acquisto = post('prezzo_acquisto');
|
||||
|
||||
$idiva_vendita = post('idiva_vendita');
|
||||
$gg_garanzia = post('gg_garanzia');
|
||||
$servizio = post('servizio');
|
||||
$componente_filename = post('componente_filename');
|
||||
|
||||
$volume = post('volume');
|
||||
$peso_lordo = post('peso_lordo');
|
||||
|
||||
$attivo = post('attivo');
|
||||
|
||||
$note = post('note');
|
||||
|
||||
$query = 'UPDATE mg_articoli SET '.
|
||||
' codice='.prepare($codice).','.
|
||||
' descrizione='.prepare($descrizione).','.
|
||||
' um='.prepare($um).','.
|
||||
' id_categoria='.prepare($categoria).','.
|
||||
' id_sottocategoria='.prepare($subcategoria).','.
|
||||
' abilita_serial='.prepare($abilita_serial).','.
|
||||
' threshold_qta='.prepare($threshold_qta).','.
|
||||
' prezzo_vendita='.prepare($prezzo_vendita).','.
|
||||
' prezzo_acquisto='.prepare($prezzo_acquisto).','.
|
||||
' idiva_vendita='.prepare($idiva_vendita).','.
|
||||
' gg_garanzia='.prepare($gg_garanzia).','.
|
||||
' servizio='.prepare($servizio).','.
|
||||
' volume='.prepare($volume).','.
|
||||
' peso_lordo='.prepare($peso_lordo).','.
|
||||
' componente_filename='.prepare($componente_filename).','.
|
||||
' attivo='.prepare($attivo).', '.
|
||||
' note='.prepare($note).
|
||||
' WHERE id='.prepare($id_record);
|
||||
$dbo->query($query);
|
||||
$dbo->update('mg_articoli', [
|
||||
'codice' => post('codice'),
|
||||
'descrizione' => post('descrizione'),
|
||||
'um' => post('um'),
|
||||
'id_categoria' => post('categoria'),
|
||||
'id_sottocategoria' => post('subcategoria'),
|
||||
'abilita_serial' => post('abilita_serial'),
|
||||
'threshold_qta' => post('threshold_qta'),
|
||||
'prezzo_vendita' => post('prezzo_vendita'),
|
||||
'prezzo_acquisto' => post('prezzo_acquisto'),
|
||||
'idiva_vendita' => post('idiva_vendita'),
|
||||
'gg_garanzia' => post('gg_garanzia'),
|
||||
'servizio' => post('servizio'),
|
||||
'volume' => post('volume'),
|
||||
'peso_lordo' => post('peso_lordo'),
|
||||
'componente_filename' => $componente,
|
||||
'attivo' => post('attivo'),
|
||||
'note' => post('note'),
|
||||
], ['id' => $id_record]);
|
||||
|
||||
// Leggo la quantità attuale per capire se l'ho modificata
|
||||
$rs = $dbo->fetchArray('SELECT qta FROM mg_articoli WHERE id='.prepare($id_record));
|
||||
$old_qta = $rs[0]['qta'];
|
||||
$old_qta = $records[0]['qta'];
|
||||
$movimento = $qta - $old_qta;
|
||||
|
||||
if ($movimento != 0) {
|
||||
add_movimento_magazzino($id_record, $movimento);
|
||||
$descrizione_movimento = post('descrizione_movimento');
|
||||
$data_movimento = post('data_movimento');
|
||||
|
||||
add_movimento_magazzino($id_record, $movimento, [], $descrizione_movimento, $data_movimento);
|
||||
}
|
||||
|
||||
/*
|
||||
Salvataggio info componente (campo `contenuto`)
|
||||
*/
|
||||
$componente = post('componente_filename');
|
||||
// Salvataggio info componente (campo `contenuto`)
|
||||
if (!empty($componente)) {
|
||||
$contenuto = \Util\Ini::write(file_get_contents($docroot.'/files/my_impianti/'.$componente), $post);
|
||||
|
||||
@ -73,12 +70,15 @@ switch (post('op')) {
|
||||
|
||||
// Upload file
|
||||
if (!empty($_FILES) && !empty($_FILES['immagine01']['name'])) {
|
||||
$tmp = $_FILES['immagine01']['tmp_name'];
|
||||
$filename = Uploads::upload($_FILES['immagine01'], [
|
||||
'name' => 'Immagine',
|
||||
'id_module' => $id_module,
|
||||
'id_record' => $id_record,
|
||||
], [
|
||||
'thumbnails' => true,
|
||||
]);
|
||||
|
||||
$filename = basename($_FILES['immagine01']['name']);
|
||||
$filename = unique_filename($filename, $upload_dir);
|
||||
|
||||
if (create_thumbnails($tmp, $filename, $upload_dir)) {
|
||||
if (!empty($filename)) {
|
||||
$dbo->query('UPDATE mg_articoli SET immagine01='.prepare($filename).' WHERE id='.prepare($id_record));
|
||||
} else {
|
||||
$_SESSION['warnings'][] = tr('Errore durante il caricamento del file in _DIR_!', [
|
||||
@ -89,38 +89,16 @@ switch (post('op')) {
|
||||
|
||||
// Eliminazione file
|
||||
if (post('delete_immagine01') !== null) {
|
||||
$filename = post('immagine01');
|
||||
$f = pathinfo($filename);
|
||||
|
||||
delete($upload_dir.'/'.$f['filename'].'.'.$f['extension']);
|
||||
delete($upload_dir.'/'.$f['filename'].'_thumb100.'.$f['extension']);
|
||||
delete($upload_dir.'/'.$f['filename'].'_thumb250.'.$f['extension']);
|
||||
Uploads::delete($records[0]['immagine01'], [
|
||||
'id_module' => $id_module,
|
||||
'id_record' => $id_record,
|
||||
]);
|
||||
|
||||
$dbo->query("UPDATE mg_articoli SET immagine01 = '' WHERE id=".prepare($id_record));
|
||||
}
|
||||
|
||||
$_SESSION['infos'][] = tr('Informazioni salvate correttamente!');
|
||||
break;
|
||||
|
||||
// Aggiunta articolo
|
||||
case 'add':
|
||||
$codice = post('codice');
|
||||
$descrizione = post('descrizione');
|
||||
$categoria = post('categoria');
|
||||
$subcategoria = post('subcategoria');
|
||||
|
||||
// Inserisco l'articolo solo se non esiste un altro articolo con stesso codice
|
||||
if ($dbo->fetchNum('SELECT * FROM mg_articoli WHERE codice='.prepare($codice)) == 0) {
|
||||
$query = 'INSERT INTO mg_articoli(codice, descrizione, id_categoria, id_sottocategoria, attivo) VALUES ('.prepare($codice).', '.prepare($descrizione).', '.prepare($categoria).', '.prepare($subcategoria).', 1)';
|
||||
$dbo->query($query);
|
||||
$_SESSION['infos'][] = tr('Aggiunto un nuovo articolo!');
|
||||
|
||||
$query = 'SELECT * FROM mg_articoli WHERE codice='.prepare($codice);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$id_record = $rs[0]['id'];
|
||||
} else {
|
||||
$_SESSION['errors'][] = tr('Esiste già un articolo con questo codice!');
|
||||
}
|
||||
break;
|
||||
|
||||
// Aggiunta prodotto
|
||||
@ -246,6 +224,14 @@ switch (post('op')) {
|
||||
case 'delmovimento':
|
||||
$idmovimento = post('idmovimento');
|
||||
|
||||
// Lettura qtà movimento
|
||||
$rs = $dbo->fetchArray('SELECT idarticolo, qta FROM mg_movimenti WHERE id='.prepare($idmovimento));
|
||||
$qta = $rs[0]['qta'];
|
||||
$idarticolo = $rs[0]['idarticolo'];
|
||||
|
||||
// Aggiorno la quantità dell'articolo
|
||||
$dbo->query('UPDATE mg_articoli SET qta=qta-'.$qta.' WHERE id='.prepare($idarticolo));
|
||||
|
||||
$query = 'DELETE FROM mg_movimenti WHERE id='.prepare($idmovimento);
|
||||
if ($dbo->query($query)) {
|
||||
$_SESSION['infos'][] = tr('Movimento rimosso!');
|
||||
@ -264,3 +250,18 @@ switch (post('op')) {
|
||||
$_SESSION['infos'][] = tr('Articolo eliminato!');
|
||||
break;
|
||||
}
|
||||
|
||||
// Operazioni aggiuntive per l'immagine
|
||||
if (filter('op') == 'unlink_file' && filter('filename') == $records[0]['immagine01']) {
|
||||
$dbo->update('mg_articoli', [
|
||||
'immagine01' => '',
|
||||
], [
|
||||
'id' => $id_record,
|
||||
]);
|
||||
} elseif (filter('op') == 'link_file' && filter('nome_allegato') == 'Immagine') {
|
||||
$dbo->update('mg_articoli', [
|
||||
'immagine01' => $upload,
|
||||
], [
|
||||
'id' => $id_record,
|
||||
]);
|
||||
}
|
||||
|
@ -10,19 +10,19 @@ unset($_SESSION['superselect']['id_categoria']);
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
{[ "type": "text", "label": "<?php echo tr('Inserisci il codice:'); ?>", "name": "codice", "class":"alphanumeric-mask", "required": 1, "value": "" ]}
|
||||
{[ "type": "text", "label": "<?php echo tr('Inserisci il codice:'); ?>", "name": "codice", "class":"alphanumeric-mask", "required": 1 ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "text", "label": "<?php echo tr('Inserisci la descrizione:'); ?>", "name": "descrizione", "required": 1, "value": "" ]}
|
||||
{[ "type": "text", "label": "<?php echo tr('Inserisci la descrizione:'); ?>", "name": "descrizione", "required": 1 ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "<?php echo tr('Inserisci la categoria:'); ?>", "name": "categoria", "required": 1, "value": "", "ajax-source": "categorie", "icon-after": "add|<?php echo Modules::get('Categorie')['id']; ?>" ]}
|
||||
{[ "type": "select", "label": "<?php echo tr('Inserisci la categoria:'); ?>", "name": "categoria", "required": 1, "ajax-source": "categorie", "icon-after": "add|<?php echo Modules::get('Categorie')['id']; ?>" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "<?php echo tr('Inserisci la subcategoria:'); ?>", "name": "subcategoria", "id": "subcategoria_add", "value": "", "ajax-source": "sottocategorie", "icon-after": "add|<?php echo Modules::get('Categorie')['id']; ?>||hide" ]}
|
||||
{[ "type": "select", "label": "<?php echo tr('Inserisci la subcategoria:'); ?>", "name": "subcategoria", "id": "subcategoria_add", "ajax-source": "sottocategorie", "icon-after": "add|<?php echo Modules::get('Categorie')['id']; ?>||hide" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -25,7 +25,7 @@ switch ($resource) {
|
||||
($fatture[$i]['n2_fattura'] != '') ? $n_fattura = $fatture[$i]['n2_fattura'] : $n_fattura = $fatture[$i]['n_fattura'];
|
||||
|
||||
$id_module = Modules::get('Fatture di vendita')['id'];
|
||||
echo "<tr><td class='first_cell text-left'><a href='".ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$fatture[$i]['iddocumento']."' target=\"_blank\" title=\"Apri il documento su una nuova finestra\">Fattura num. ".$n_fattura."</a></td>\n";
|
||||
echo "<tr><td class='first_cell text-left'><a href='".ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$fatture[$i]['iddocumento']."' target=\"_blank\" title=\"Apri il documento su una nuova finestra\">Fatt. n. ".$n_fattura."</a></td>\n";
|
||||
|
||||
echo "<td class='table_cell text-left'>".Translator::dateToLocale($fatture[$i]['data_fattura'])."</td>\n";
|
||||
echo "<td class='table_cell text-right'>".Translator::numberToLocale($fatture[$i]['costo_unitario'])." €</td></tr>\n";
|
||||
@ -55,7 +55,7 @@ switch ($resource) {
|
||||
($fatture[$i]['n2_fattura'] != '') ? $n_fattura = $fatture[$i]['n2_fattura'] : $n_fattura = $fatture[$i]['n_fattura'];
|
||||
|
||||
$id_module = Modules::get('Fatture di vendita')['id'];
|
||||
echo "<tr><td class='first_cell text-left'><a href='".ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$fatture[$i]['iddocumento']."' target=\"_blank\" title=\"Apri il documento su una nuova finestra\">Fattura num. ".$n_fattura."</a></td>\n";
|
||||
echo "<tr><td class='first_cell text-left'><a href='".ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$fatture[$i]['iddocumento']."' target=\"_blank\" title=\"Apri il documento su una nuova finestra\">Fatt. n. ".$n_fattura."</a></td>\n";
|
||||
|
||||
echo "<td class='table_cell text-left'>".Translator::dateToLocale($fatture[$i]['data_fattura'])."</td>\n";
|
||||
echo "<td class='table_cell text-right'>".Translator::numberToLocale($fatture[$i]['costo_unitario'])." €</td></tr>\n";
|
||||
@ -85,7 +85,7 @@ switch ($resource) {
|
||||
($fatture[$i]['n2_fattura'] != '') ? $n_fattura = $fatture[$i]['n2_fattura'] : $n_fattura = $fatture[$i]['n_fattura'];
|
||||
|
||||
$id_module = Modules::get('Fatture di acquisto')['id'];
|
||||
echo "<tr><td class='first_cell text-left'><a href='".ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$fatture[$i]['iddocumento']."' target=\"_blank\" title=\"Apri il documento su una nuova finestra\">Fattura num. ".$n_fattura."</a></td>\n";
|
||||
echo "<tr><td class='first_cell text-left'><a href='".ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$fatture[$i]['iddocumento']."' target=\"_blank\" title=\"Apri il documento su una nuova finestra\">Fatt. n. ".$n_fattura."</a></td>\n";
|
||||
|
||||
echo "<td class='table_cell text-left'>".Translator::dateToLocale($fatture[$i]['data_fattura'])."</td>\n";
|
||||
echo "<td class='table_cell text-right'>".Translator::numberToLocale($fatture[$i]['costo_unitario'])." €</td></tr>\n";
|
||||
|
@ -42,9 +42,10 @@ switch ($resource) {
|
||||
$rs = $dbo->fetchArray($query);
|
||||
foreach ($rs as $r) {
|
||||
if ($prev != $r['id_sottocategoria']) {
|
||||
$categoria = $dbo->fetchArray('SELECT `nome` FROM `mg_categorie` WHERE `id`='.prepare($r['id_categoria']))[0]['nome'];
|
||||
$categoria = $dbo->fetchOne('SELECT `nome` FROM `mg_categorie` WHERE `id`='.prepare($r['id_categoria']))['nome'];
|
||||
|
||||
$sottocategoria = $dbo->fetchArray('SELECT `nome` FROM `mg_categorie` WHERE `id`='.prepare($r['id_sottocategoria']))[0]['nome'];
|
||||
$sottocategoria = $dbo->fetchOne('SELECT `nome` FROM `mg_categorie` WHERE `id`='.prepare($r['id_sottocategoria']));
|
||||
$sottocategoria = isset($sottocategoria['nome']) ? $sottocategoria['nome'] : null;
|
||||
|
||||
$prev = $r['id_sottocategoria'];
|
||||
$results[] = ['text' => $categoria.' ('.(!empty($r['id_sottocategoria']) ? $sottocategoria : '-').')', 'children' => []];
|
||||
|
@ -2,8 +2,20 @@
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
// Necesario per funzione \Util\Ini::getList
|
||||
include_once Modules::filepath('MyImpianti', 'modutil.php');
|
||||
|
||||
$_SESSION['superselect']['id_categoria'] = $records[0]['id_categoria'];
|
||||
|
||||
$img = null;
|
||||
if (!empty($records[0]['immagine01'])) {
|
||||
$fileinfo = Uploads::fileInfo($records[0]['immagine01']);
|
||||
|
||||
$default_img = '/'.Uploads::getUploadDirectory($id_module).'/'.$fileinfo['filename'].'_thumb600.'.$fileinfo['extension'];
|
||||
|
||||
$img = file_exists(DOCROOT.$default_img) ? ROOTDIR.$default_img : ROOTDIR.'/'.Uploads::getUploadDirectory($id_module).'/'.$records[0]['immagine01'];
|
||||
}
|
||||
|
||||
?><form action="" method="post" id="edit-form" enctype="multipart/form-data">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
<input type="hidden" name="op" value="update">
|
||||
@ -17,10 +29,7 @@ $_SESSION['superselect']['id_categoria'] = $records[0]['id_categoria'];
|
||||
<div class="panel-body">
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
<?php
|
||||
$immagine01 = ($records[0]['immagine01'] == '') ? '' : $rootdir.'/files/articoli/'.$records[0]['immagine01'];
|
||||
?>
|
||||
{[ "type": "image", "label": "<?php echo tr('Immagine'); ?>", "name": "immagine01", "class": "img-thumbnail", "value": "<?php echo $immagine01; ?>" ]}
|
||||
{[ "type": "image", "label": "<?php echo tr('Immagine'); ?>", "name": "immagine01", "class": "img-thumbnail", "value": "<?php echo $img; ?>" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
@ -30,7 +39,7 @@ $_SESSION['superselect']['id_categoria'] = $records[0]['id_categoria'];
|
||||
</div>
|
||||
|
||||
<div class="col-md-5">
|
||||
{[ "type": "checkbox", "label": "<?php echo tr("Seleziona per rendere attivo l'articolo"); ?>", "name": "attivo", "value": "$attivo$", "help": "", "placeholder": "<?php echo tr('Articolo attivo'); ?>" ]}
|
||||
{[ "type": "checkbox", "label": "<?php echo tr("Seleziona per rendere attivo l'articolo"); ?>", "name": "attivo", "value": "$attivo$", "placeholder": "<?php echo tr('Articolo attivo'); ?>" ]}
|
||||
<br>
|
||||
{[ "type": "select", "label": "<?php echo tr('Subcategoria'); ?>", "name": "subcategoria", "value": "$id_sottocategoria$", "ajax-source": "sottocategorie" ]}
|
||||
</div>
|
||||
@ -44,15 +53,35 @@ $_SESSION['superselect']['id_categoria'] = $records[0]['id_categoria'];
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
{[ "type": "number", "label": "<?php echo tr('Quantità'); ?>", "name": "qta", "required": 1, "value": "$qta$", "readonly": 1, "decimals": "qta", "min-value": "undefined" ]}
|
||||
<input type="hidden" id="old_qta" value="<?php echo $records[0]['qta']; ?>">
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Modifica quantità manualmente'); ?>", "name": "qta_manuale", "value": 0, "help": "<?php echo tr('Seleziona per modificare manualmente la quantità'); ?>", "placeholder": "<?php echo tr('Quantità manuale'); ?>" ]}
|
||||
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Modifica quantità manualmente'); ?>", "name": "qta_manuale", "value": 0, "help": "<?php echo tr('Seleziona per modificare manualmente la quantità'); ?>", "placeholder": "<?php echo tr('Quantità manuale'); ?>", "extra": "<?php echo ($records[0]['servizio']) ? 'disabled' : ''; ?>" ]}
|
||||
<script type="text/javascript">
|
||||
|
||||
$('#qta_manuale').click(function(){
|
||||
$("#qta").attr("readonly", !$('#qta_manuale').is(":checked"));
|
||||
});
|
||||
$(document).ready(function() {
|
||||
|
||||
$('#servizio').click(function(){
|
||||
$("#qta_manuale").attr("disabled", $('#servizio').is(":checked"));
|
||||
});
|
||||
|
||||
|
||||
$('#qta_manuale').click(function(){
|
||||
$("#qta").attr("readonly", !$('#qta_manuale').is(":checked"));
|
||||
if($('#qta_manuale').is(":checked")){
|
||||
$("#div_modifica_manuale").show();
|
||||
$("#div_modifica_manuale").show();
|
||||
$("#descrizione_movimento").attr('required', true);
|
||||
$("#data_movimento").attr('required', true);
|
||||
}else{
|
||||
$("#div_modifica_manuale").hide();
|
||||
$('#qta').val($('#old_qta').val());
|
||||
$("#descrizione_movimento").attr('required', false);
|
||||
$("#data_movimento").attr('required', false);
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
@ -62,10 +91,8 @@ $_SESSION['superselect']['id_categoria'] = $records[0]['id_categoria'];
|
||||
{[ "type": "select", "label": "<?php echo tr('Unità di misura'); ?>", "name": "um", "value": "$um$", "ajax-source": "misure", "icon-after": "add|<?php echo Modules::get('Unità di misura')['id']; ?>" ]}
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<?php
|
||||
($records[0]['serial']>0) ? $records[0]['abilita_serial'] = 1 : $records[0]['abilita_serial'] = $records[0]['abilita_serial'];
|
||||
$records[0]['abilita_serial'] = ($records[0]['serial'] > 0) ? 1 : $records[0]['abilita_serial'];
|
||||
if (empty($records[0]['abilita_serial'])) {
|
||||
$plugin = $dbo->fetchArray("SELECT id FROM zz_plugins WHERE name='Serial'");
|
||||
echo '<script>$("#link-tab_'.$plugin[0]['id'].'").addClass("disabled");</script>';
|
||||
@ -73,12 +100,21 @@ $_SESSION['superselect']['id_categoria'] = $records[0]['id_categoria'];
|
||||
?>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Abilita serial number'); ?>", "name": "abilita_serial", "value": "$abilita_serial$", "help": "<?php echo tr('Abilita serial number in fase di aggiunta articolo in fattura o ddt'); ?>", "placeholder": "<?php echo tr('Serial number'); ?>", "extra": "<?php echo ($records[0]['serial']>0) ? 'readonly' : ''; ?>" ]}
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Abilita serial number'); ?>", "name": "abilita_serial", "value": "$abilita_serial$", "help": "<?php echo tr('Abilita serial number in fase di aggiunta articolo in fattura o ddt'); ?>", "placeholder": "<?php echo tr('Serial number'); ?>", "extra": "<?php echo ($records[0]['serial'] > 0) ? 'readonly' : ''; ?>" ]}
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class='row' id="div_modifica_manuale" style="display:none;">
|
||||
<div class='col-md-3'>
|
||||
{[ "type": "text", "label": "<?php echo tr('Descrizione movimento'); ?>", "name": "descrizione_movimento" ]}
|
||||
</div>
|
||||
<div class='col-md-3'>
|
||||
{[ "type": "date", "label": "<?php echo tr('Data movimento'); ?>", "name": "data_movimento", "value": "-now-" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "textarea", "label": "<?php echo tr('Note'); ?>", "name": "note", "value": "$note$" ]}
|
||||
@ -132,10 +168,10 @@ $_SESSION['superselect']['id_categoria'] = $records[0]['id_categoria'];
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Questo articolo è un servizio'); ?>", "name": "servizio", "value": "$servizio$", "help": "", "placeholder": "<?php echo tr('Servizio'); ?>" ]}
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Questo articolo è un servizio'); ?>", "name": "servizio", "value": "$servizio$", "help": "<?php echo tr('Le quantità non saranno considerate'); ?>", "placeholder": "<?php echo tr('Servizio'); ?>" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
{[ "type": "number", "label": "<?php echo tr('Peso lordo'); ?>", "name": "peso_lordo", "value": "$peso_lordo$", "icon-after": "KG" ]}
|
||||
@ -159,9 +195,6 @@ $_SESSION['superselect']['id_categoria'] = $records[0]['id_categoria'];
|
||||
<div class="panel-body">
|
||||
<?php
|
||||
|
||||
/* necesario per funzione \Util\Ini::getList */
|
||||
include $docroot.'/modules/my_impianti/modutil.php';
|
||||
|
||||
echo '
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
@ -295,6 +328,8 @@ echo '
|
||||
</div>
|
||||
</form>
|
||||
|
||||
{( "name": "filelist_and_upload", "id_module": "<?php echo $id_module; ?>", "id_record": "<?php echo $id_record; ?>" )}
|
||||
|
||||
<script>
|
||||
$("#categoria").change( function(){
|
||||
session_set("superselect,id_categoria", $(this).val(), 0);
|
||||
@ -350,8 +385,6 @@ if (!empty($elementi)) {
|
||||
|
||||
?>
|
||||
|
||||
{( "name": "filelist_and_upload", "id_module": "<?php echo $id_module; ?>", "id_record": "<?php echo $id_record; ?>" )}
|
||||
|
||||
<a class="btn btn-danger ask" data-backto="record-list">
|
||||
<i class="fa fa-trash"></i> <?php echo tr('Elimina'); ?>
|
||||
</a>
|
||||
|
178
modules/articoli/import.php
Normal file
178
modules/articoli/import.php
Normal file
@ -0,0 +1,178 @@
|
||||
<?php
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
include_once Modules::filepath('Articoli', 'modutil.php');
|
||||
|
||||
switch (post('op')) {
|
||||
case 'example':
|
||||
|
||||
$module = filter('module');
|
||||
|
||||
$list = [
|
||||
['Codice', 'Descrizione', 'Quantità', 'Unità di misura', 'Prezzo acquisto', 'Prezzo vendita', 'Peso lordo (KG)', 'Volume (M3)', 'Categoria', 'Note'],
|
||||
['00004', 'Articolo', '10', 'Kg', '5,25', '12,72', '10,2', '500', 'Categoria4', 'Articolo di prova'],
|
||||
];
|
||||
|
||||
directory('../../files/'.$module);
|
||||
|
||||
$fp = fopen('../../files/'.$module.'/'.$module.'.csv', 'w');
|
||||
|
||||
foreach ($list as $fields) {
|
||||
fputcsv($fp, $fields, ';');
|
||||
}
|
||||
|
||||
fclose($fp);
|
||||
exit;
|
||||
|
||||
break;
|
||||
|
||||
case 'import':
|
||||
|
||||
foreach ($data as $key => $value) {
|
||||
if (!empty($value)) {
|
||||
$qta = force_decimal($data[$key]['qta']);
|
||||
unset($data[$key]['qta']);
|
||||
|
||||
$data[$key]['attivo'] = 1;
|
||||
$data[$key]['prezzo_acquisto'] = force_decimal($data[$key]['prezzo_acquisto']);
|
||||
$data[$key]['prezzo_vendita'] = force_decimal($data[$key]['prezzo_vendita']);
|
||||
$data[$key]['peso_lordo'] = force_decimal($data[$key]['peso_lordo']);
|
||||
$data[$key]['volume'] = force_decimal($data[$key]['volume']);
|
||||
|
||||
// Categorie
|
||||
if (!empty($data[$key]['id_categoria'])) {
|
||||
$rs_cat = $dbo->select('mg_categorie', 'id', [
|
||||
'nome' => $data[$key]['id_categoria'],
|
||||
]);
|
||||
|
||||
if (empty($rs_cat[0]['id'])) {
|
||||
$dbo->insert('mg_categorie', [
|
||||
'nome' => $data[$key]['id_categoria'],
|
||||
]);
|
||||
$data[$key]['id_categoria'] = $dbo->lastInsertedID();
|
||||
} else {
|
||||
$data[$key]['id_categoria'] = $rs_cat[0]['id'];
|
||||
}
|
||||
}
|
||||
|
||||
// Um
|
||||
if (!empty($data[$key]['um'])) {
|
||||
$rs_um = $dbo->select('mg_unitamisura', 'id', [
|
||||
'valore' => $data[$key]['um'],
|
||||
]);
|
||||
|
||||
if (empty($rs_um[0]['id'])) {
|
||||
$dbo->insert('mg_unitamisura', [
|
||||
'valore' => $data[$key]['um'],
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
// Insert o update
|
||||
$insert = true;
|
||||
if (!empty($primary_key)) {
|
||||
$rs = $dbo->select('mg_articoli', $primary_key, [
|
||||
$primary_key => $data[$key][$primary_key],
|
||||
]);
|
||||
|
||||
$insert = !in_array($data[$key][$primary_key], $rs[0]);
|
||||
}
|
||||
|
||||
// Insert
|
||||
if ($insert) {
|
||||
$data[$key]['id_categoria'] = (empty($data[$key]['id_categoria'])) ? 0 : $data[$key]['id_categoria'];
|
||||
$dbo->insert('mg_articoli', $data[$key]);
|
||||
add_movimento_magazzino($dbo->lastInsertedID(), $qta, [], 'Movimento da import', date());
|
||||
}
|
||||
// Update
|
||||
else {
|
||||
$dbo->update('mg_articoli', $data[$key], [$primary_key => $data[$key][$primary_key]]);
|
||||
|
||||
$rs = $dbo->select('mg_articoli', 'id', [
|
||||
$primary_key => $data[$key][$primary_key],
|
||||
]);
|
||||
|
||||
add_movimento_magazzino($rs[0]['id'], $qta, [], 'Movimento da import', date());
|
||||
}
|
||||
|
||||
unset($data[$key]);
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return [
|
||||
[
|
||||
'field' => 'codice',
|
||||
'label' => 'Codice',
|
||||
'primary_key' => true,
|
||||
],
|
||||
[
|
||||
'field' => 'descrizione',
|
||||
'label' => 'Descrizione',
|
||||
],
|
||||
[
|
||||
'field' => 'qta',
|
||||
'label' => 'Quantità',
|
||||
],
|
||||
[
|
||||
'field' => 'um',
|
||||
'label' => 'Unità di misura',
|
||||
'names' => [
|
||||
'Unità di misura',
|
||||
'Unità misura',
|
||||
'unità misura',
|
||||
'unità di misura',
|
||||
'Unit` di misura',
|
||||
'um',
|
||||
],
|
||||
],
|
||||
[
|
||||
'field' => 'prezzo_acquisto',
|
||||
'label' => 'Prezzo acquisto',
|
||||
'names' => [
|
||||
'Prezzo Acquisto',
|
||||
'prezzo acquisto',
|
||||
],
|
||||
],
|
||||
[
|
||||
'field' => 'prezzo_vendita',
|
||||
'label' => 'Prezzo vendita',
|
||||
'names' => [
|
||||
'Prezzo Vendita',
|
||||
'prezzo vendita',
|
||||
],
|
||||
],
|
||||
[
|
||||
'field' => 'peso_lordo',
|
||||
'label' => 'Peso lordo (KG)',
|
||||
'names' => [
|
||||
'Peso lordo (KG)',
|
||||
'Peso',
|
||||
],
|
||||
],
|
||||
[
|
||||
'field' => 'volume',
|
||||
'label' => 'Volume (M3)',
|
||||
'names' => [
|
||||
'Volume (M3)',
|
||||
'volume',
|
||||
],
|
||||
],
|
||||
[
|
||||
'field' => 'id_categoria',
|
||||
'label' => 'Categoria',
|
||||
'names' => [
|
||||
'Categoria',
|
||||
'id_categoria',
|
||||
'idcategoria',
|
||||
'categoria',
|
||||
],
|
||||
],
|
||||
[
|
||||
'field' => 'note',
|
||||
'label' => 'Note',
|
||||
],
|
||||
];
|
@ -5,7 +5,7 @@ include_once __DIR__.'/../../core.php';
|
||||
/**
|
||||
* Funzione per inserire i movimenti di magazzino.
|
||||
*/
|
||||
function add_movimento_magazzino($idarticolo, $qta, $array = [], $descrizone = '')
|
||||
function add_movimento_magazzino($id_articolo, $qta, $array = [], $descrizone = '', $data = '')
|
||||
{
|
||||
$dbo = Database::getConnection();
|
||||
|
||||
@ -13,14 +13,22 @@ function add_movimento_magazzino($idarticolo, $qta, $array = [], $descrizone = '
|
||||
return false;
|
||||
}
|
||||
|
||||
//Info Articolo
|
||||
$rs_art = $dbo->fetchArray("SELECT * FROM mg_articoli WHERE id='".$idarticolo."'");
|
||||
$nome = null;
|
||||
$tipo = null;
|
||||
$numero = null;
|
||||
|
||||
// Informazioni articolo
|
||||
$articolo = $dbo->fetchOne('SELECT * FROM mg_articoli WHERE id='.prepare($id_articolo));
|
||||
$manuale = 0;
|
||||
|
||||
// Ddt
|
||||
if (!empty($array['idddt'])) {
|
||||
$rs = $dbo->fetchArray('SELECT numero, numero_esterno, dt_tipiddt.descrizione AS tipo, dt_tipiddt.dir FROM dt_ddt LEFT JOIN dt_tipiddt ON dt_tipiddt.id = dt_ddt.idtipoddt WHERE dt_ddt.id='.prepare($array['idddt']));
|
||||
$numero = (!empty($rs[0]['numero_esterno'])) ? $rs[0]['numero_esterno'] : $rs[0]['numero'];
|
||||
$tipo = strtolower($rs[0]['tipo']);
|
||||
|
||||
$rs_data = $dbo->fetchArray("SELECT data FROM dt_ddt WHERE id='".$array['idddt']."'");
|
||||
$data = $rs_data[0]['data'];
|
||||
}
|
||||
|
||||
// Fattura
|
||||
@ -28,6 +36,9 @@ function add_movimento_magazzino($idarticolo, $qta, $array = [], $descrizone = '
|
||||
$rs = $dbo->fetchArray('SELECT numero, numero_esterno, co_tipidocumento.descrizione AS tipo, co_tipidocumento.dir FROM co_documenti LEFT JOIN co_tipidocumento ON co_tipidocumento.id = co_documenti.idtipodocumento WHERE co_documenti.id='.prepare($array['iddocumento']));
|
||||
$numero = (!empty($rs[0]['numero_esterno'])) ? $rs[0]['numero_esterno'] : $rs[0]['numero'];
|
||||
$tipo = strtolower($rs[0]['tipo']);
|
||||
|
||||
$rs_data = $dbo->fetchArray("SELECT data FROM co_documenti WHERE id='".$array['iddocumento']."'");
|
||||
$data = $rs_data[0]['data'];
|
||||
}
|
||||
|
||||
// Automezzo
|
||||
@ -47,23 +58,33 @@ function add_movimento_magazzino($idarticolo, $qta, $array = [], $descrizone = '
|
||||
|
||||
$new = ($qta < 0 ? '+' : '').-$qta;
|
||||
|
||||
$dbo->query('UPDATE mg_articoli_automezzi SET qta = qta + '.$new.' WHERE idarticolo = '.prepare($idarticolo).' AND idautomezzo = '.prepare($array['idautomezzo']));
|
||||
$dbo->query('UPDATE mg_articoli_automezzi SET qta = qta + '.$new.' WHERE idarticolo = '.prepare($id_articolo).' AND idautomezzo = '.prepare($array['idautomezzo']));
|
||||
$data = date('Y-m-d');
|
||||
}
|
||||
|
||||
// Intervento
|
||||
elseif (!empty($array['idintervento'])) {
|
||||
$rs_data = $dbo->fetchArray('SELECT IFNULL(MAX(orario_fine), data_richiesta) AS data, codice FROM in_interventi LEFT JOIN in_interventi_tecnici ON in_interventi.id=in_interventi_tecnici.idintervento WHERE in_interventi.id = '.prepare($array['idintervento']));
|
||||
$data = $rs_data[0]['data'];
|
||||
$codice_intervento = $rs_data[0]['codice'];
|
||||
|
||||
$movimento = ($qta > 0) ? tr('Ripristino articolo da intervento _NUM_') : tr('Scarico magazzino per intervento _NUM_');
|
||||
$numero = $array['idintervento'];
|
||||
$numero = $codice_intervento;
|
||||
}
|
||||
|
||||
// Manuale
|
||||
else {
|
||||
$manuale = 1;
|
||||
$movimento = !empty($descrizone) ? $descrizone : '';
|
||||
$descrizone = '';
|
||||
|
||||
if (empty($movimento)) {
|
||||
$movimento = ($qta > 0) ? tr('Carico magazzino') : tr('Scarico magazzino');
|
||||
}
|
||||
|
||||
if ($data == '') {
|
||||
$data = date('Y-m-d');
|
||||
}
|
||||
}
|
||||
|
||||
// Descrizione di default
|
||||
@ -80,18 +101,20 @@ function add_movimento_magazzino($idarticolo, $qta, $array = [], $descrizone = '
|
||||
|
||||
$new = ($qta > 0 ? '+' : '').$qta;
|
||||
|
||||
//Movimento il magazzino solo se l'articolo non è un servizio
|
||||
if ($rs_art[0]['servizio'] == 0) {
|
||||
// Movimento il magazzino solo se l'articolo non è un servizio
|
||||
if ($articolo['servizio'] == 0) {
|
||||
// Movimentazione effettiva
|
||||
if (empty($array['idintervento']) || empty($array['idautomezzo'])) {
|
||||
$dbo->query('UPDATE mg_articoli SET qta = qta + '.$new.' WHERE id = '.prepare($idarticolo));
|
||||
$dbo->query('UPDATE mg_articoli SET qta = qta + '.$new.' WHERE id = '.prepare($id_articolo));
|
||||
}
|
||||
|
||||
// Registrazione della movimentazione
|
||||
$dbo->insert('mg_movimenti', array_merge($array, [
|
||||
'idarticolo' => $idarticolo,
|
||||
'idarticolo' => $id_articolo,
|
||||
'qta' => $qta,
|
||||
'movimento' => $movimento,
|
||||
'data' => $data,
|
||||
'manuale' => $manuale,
|
||||
]));
|
||||
}
|
||||
|
||||
|
@ -11,19 +11,15 @@ echo '
|
||||
</div>
|
||||
<div class="panel-body">';
|
||||
|
||||
$search_lotto = $get['search_lotto'];
|
||||
$search_serial = $get['search_serial'];
|
||||
$search_altro = $get['search_altro'];
|
||||
$search_lotto = get('search_lotto');
|
||||
$search_serial = get('search_serial');
|
||||
$search_altro = get('search_altro');
|
||||
|
||||
// Calcolo prossimo lotto e serial number
|
||||
$rs = $dbo->fetchArray('SELECT MAX(lotto) AS max_lotto, MAX(serial) AS max_serial, MAX(altro) AS max_altro FROM mg_prodotti WHERE id_articolo='.prepare($id_record));
|
||||
//$max_lotto = $rs[0]['max_lotto'];
|
||||
$max_serial = $rs[0]['max_serial'];
|
||||
//$max_altro = $rs[0]['max_altro'];
|
||||
$rs = $dbo->fetchArray('SELECT serial FROM mg_prodotti WHERE id_articolo='.prepare($id_record).' ORDER BY id DESC LIMIT 0,1');
|
||||
$max_serial = $rs[0]['serial'];
|
||||
|
||||
//$next_lotto = get_next_code($max_lotto);
|
||||
$next_serial = get_next_code($max_serial);
|
||||
//$next_altro = get_next_code($max_altro);
|
||||
|
||||
echo '
|
||||
<form action="" method="post" role="form">
|
||||
@ -38,90 +34,53 @@ echo '
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
/*
|
||||
// Lotto
|
||||
echo '
|
||||
<div class="row form-group">
|
||||
<label class="col-md-2 control-label" for="lotto_start">'.tr('Lotto da').':</label>
|
||||
<div class="col-md-2">
|
||||
<input type="text" class="form-control input-md" name="lotto_start" onkeyup="$(\'input[name=lotto_end]\').val( $(\'input[name=lotto_start]\').val() ); $(\'#warn_lotto\').hide(); ricalcola_totale_prodotti();" value="'.$next_lotto.'">
|
||||
</div>
|
||||
|
||||
<label class="col-md-1 control-label text-center" for="lotto_end"> <i class="fa fa-arrow-circle-right fa-2x"></i> </label>
|
||||
<div class="col-md-2">
|
||||
<input type="text" class="form-control input-md" name="lotto_end" onkeyup="check_progressivo( $(\'input[name=lotto_start]\'), $(\'input[name=lotto_end]\'), $(\'#warn_lotto\'), $(\'#inserisci\') );" value="'.$next_lotto.'">
|
||||
</div>';
|
||||
if (!empty($max_lotto)) {
|
||||
echo '
|
||||
<div class="col-md-3">
|
||||
<p id="warn_lotto" class="text-danger"><b>'.tr('Ultimo lotto inserito').': </b> '.$max_lotto.'</p>
|
||||
</div>';
|
||||
}
|
||||
echo '
|
||||
</div>';
|
||||
*/
|
||||
// Serial
|
||||
echo '
|
||||
<div class="row form-group">
|
||||
<label class="col-md-2 control-label" for="serial_start">'.tr('Serial number da').':</label>
|
||||
|
||||
<div class="col-md-2">
|
||||
<input type="text" class="form-control input-md" name="serial_start" onkeyup="$(\'input[name=serial_end]\').val( $(\'input[name=serial_start]\').val() ); $(\'#warn_serial\').hide(); ricalcola_totale_prodotti();" value="'.$next_serial.'" />
|
||||
</div>
|
||||
|
||||
<label class="col-md-1 control-label text-center" for="serial_end"> <i class="fa fa-arrow-circle-right fa-2x"></i> </label>
|
||||
<label class="col-md-1 control-label text-center" for="serial_end">
|
||||
<i class="fa fa-arrow-circle-right fa-2x"></i>
|
||||
</label>
|
||||
|
||||
<div class="col-md-2">
|
||||
<input type="text" class="form-control input-md" name="serial_end" onkeyup="check_progressivo( $(\'input[name=serial_start]\'), $(\'input[name=serial_end]\'), $(\'#warn_serial\'), $(\'#inserisci\') );" value="'.$next_serial.'" />
|
||||
</div>';
|
||||
|
||||
if (!empty($max_serial)) {
|
||||
echo '
|
||||
<div class="col-md-3">
|
||||
<div class="col-md-5">
|
||||
<p id="warn_serial" class="text-danger"><b>'.tr('Ultimo serial number inserito').': </b> '.$max_serial.'</p>
|
||||
</div>';
|
||||
}
|
||||
echo '
|
||||
</div>';
|
||||
|
||||
/*
|
||||
// Altro
|
||||
echo '
|
||||
<div class="row form-group">
|
||||
<label class="col-md-2 control-label" for="altro_start">'.tr('Altro codice da').':</label>
|
||||
<div class="col-md-2">
|
||||
<input type="text" class="form-control input-md" name="altro_start" onkeyup="$(\'input[name=altro_end]\').val( $(\'input[name=altro_start]\').val() ); $(\'#warn_altro\').hide(); ricalcola_totale_prodotti();" value="'.$next_altro.'" />
|
||||
</div>
|
||||
|
||||
<label class="col-md-1 control-label text-center" for="altro_end"> <i class="fa fa-arrow-circle-right fa-2x"></i> </label>
|
||||
<div class="col-md-2">
|
||||
<input type="text" class="form-control input-md" name="altro_end" onkeyup="check_progressivo( $(\'input[name=altro_start]\'), $(\'input[name=altro_end]\'), $(\'#warn_altro\'), $(\'#inserisci\') );" value="'.$next_altro.'" />
|
||||
</div>';
|
||||
if (!empty($max_altro)) {
|
||||
echo '
|
||||
<div class="col-md-3">
|
||||
<p id="warn_altro" class="text-danger"><b>'.tr('Ultimo codice aggiuntivo inserito').': </b> '.$max_altro.'</p>
|
||||
</div>';
|
||||
}
|
||||
echo '
|
||||
</div>';
|
||||
*/
|
||||
|
||||
// Totale prodotti da inserire
|
||||
echo '
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<p class="text-danger text-center">'.tr('Totale prodotti da inserire').': <span id="totale_prodotti">0</span></p>
|
||||
<button type="submit" id="inserisci" class="btn btn-success" onclick="if( confirm(\'Confermi l\\\'inserimento di \' + globalsp.n_prodotti + \' prodotti?\') ){ $(\'#insert_form\').submit(); }"><i class="fa fa-check"></i> '.tr('Salva modifiche').'</button>';
|
||||
<p class="text-danger">'.tr('Totale prodotti da inserire').': <span id="totale_prodotti">0</span></p>
|
||||
|
||||
<button type="submit" id="inserisci" class="btn btn-success pull-right" onclick="if( confirm(\'Confermi l\\\'inserimento di \' + globalsp.n_prodotti + \' prodotti?\') ){ $(\'#insert_form\').submit(); }"><i class="fa fa-check"></i> '.tr('Salva modifiche').'</button>
|
||||
<div class="clearfix"></div>
|
||||
<div class="alert alert-info">';
|
||||
|
||||
// Visualizzo, in base alle impostazioni scelte, se il magazzino verrà movimentato
|
||||
if (get_var("Movimenta il magazzino durante l'inserimento o eliminazione dei lotti/serial number") == true) {
|
||||
if (get_var("Movimenta il magazzino durante l'inserimento o eliminazione dei lotti/serial number")) {
|
||||
echo '
|
||||
<small>'.tr("L'inserimento incrementerà la quantità dell'articolo!").'</small>';
|
||||
<small>'.tr("L'inserimento incrementerà la quantità dell'articolo!").'</small>';
|
||||
} else {
|
||||
echo '
|
||||
<small>'.tr("L'inserimento non movimenterà la quantità dell'articolo!").'</small>';
|
||||
<small>'.tr("L'inserimento non movimenterà la quantità dell'articolo!").'</small>';
|
||||
}
|
||||
|
||||
echo '
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
@ -12,11 +12,17 @@ echo '
|
||||
<div class="box-body">';
|
||||
|
||||
// Calcolo la quantità dai movimenti in magazzino
|
||||
$rst = $dbo->fetchArray('SELECT SUM(qta) AS qta_totale FROM mg_movimenti WHERE idarticolo='.prepare($id_record).' AND (idintervento IS NULL OR idautomezzo = 0)');
|
||||
$rst = $dbo->fetchArray('SELECT COUNT(mg_movimenti.id) AS row, SUM(qta) AS qta_totale, ( SELECT SUM(qta) FROM mg_movimenti WHERE idarticolo='.prepare($id_record).' AND (idintervento IS NULL OR idautomezzo = 0) AND data <= CURDATE() ) AS qta_totale_attuale FROM mg_movimenti WHERE idarticolo='.prepare($id_record).' AND (idintervento IS NULL OR idautomezzo = 0)');
|
||||
$qta_totale = $rst[0]['qta_totale'];
|
||||
$qta_totale_attuale = $rst[0]['qta_totale_attuale'];
|
||||
|
||||
echo '
|
||||
<p>'.tr('Quantità calcolata dai movimenti').': '.Translator::numberToLocale($qta_totale).' '.$rs[0]['unita_misura'].'</p>';
|
||||
if ($rst[0]['row'] > 0) {
|
||||
echo '
|
||||
<p>'.tr('Quantità calcolata dai movimenti').': <b>'.Translator::numberToLocale($qta_totale, 'qta').' '.$records[0]['um'].'</b> <span class=\'tip\' title=\''.tr('Quantità calcolata da tutti i movimenti registrati').'.\' ><i class="fa fa-question-circle-o"></i></span></p>';
|
||||
|
||||
echo '
|
||||
<p>'.tr('Quantità calcolata attuale').': <b>'.Translator::numberToLocale($qta_totale_attuale, 'qta').' '.$records[0]['um'].'</b> <span class=\'tip\' title=\''.tr('Quantità calcolata secondo i movimenti registrati con data oggi o date trascorse').'.\' ><i class="fa fa-question-circle-o"></i></span></p>';
|
||||
}
|
||||
|
||||
// Elenco movimenti magazzino
|
||||
$query = 'SELECT * FROM mg_movimenti WHERE idarticolo='.prepare($id_record).' ORDER BY created_at DESC';
|
||||
@ -38,30 +44,41 @@ if (!empty($rs2)) {
|
||||
echo '
|
||||
<table class="table table-striped table-condensed table-bordered">
|
||||
<tr>
|
||||
<th class="text-center" width="100">'.tr('Q.tà').'</th>
|
||||
<th width="720">'.tr('Causale').'</th>
|
||||
<th>'.tr('Data').'</th>
|
||||
<th class="text-center">#</th>
|
||||
<th >'.tr('Q.tà').'</th>
|
||||
<th >'.tr('Causale').'</th>
|
||||
<th >'.tr('Data').'</th>
|
||||
<th class="text-center" width="7%">#</th>
|
||||
</tr>';
|
||||
foreach ($rs2 as $r) {
|
||||
// Quantità
|
||||
echo '
|
||||
<tr>
|
||||
<td class="text-right">'.Translator::numberToLocale($r['qta']).'</td>';
|
||||
<td class="text-right">'.Translator::numberToLocale($r['qta'], 'qta').' '.$records[0]['um'].'</td>';
|
||||
|
||||
// Causale
|
||||
$dir = ($r['qta'] < 0) ? 'vendita' : 'acquisto';
|
||||
|
||||
if (!empty($r['iddocumento'])) {
|
||||
$dir = $dbo->fetchArray('SELECT dir FROM co_tipidocumento WHERE id = (SELECT idtipodocumento FROM co_documenti WHERE id = '.prepare($r['iddocumento']).')')[0]['dir'] == 'entrata' ? 'vendita' : 'acquisto';
|
||||
}
|
||||
|
||||
echo '
|
||||
<td>'.$r['movimento'].'</td>';
|
||||
<td>'.$r['movimento'].'
|
||||
'.((!empty($r['idintervento'])) ? Modules::link('Interventi', $r['idintervento']) : '').'
|
||||
'.((!empty($r['idautomezzo'])) ? Modules::link('Automezzi', $r['idautomezzo']) : '').'
|
||||
'.((!empty($r['iddt'])) ? Modules::link('DDt di '.$dir.'', $r['iddt']) : '').'
|
||||
'.((!empty($r['iddocumento'])) ? Modules::link('Fatture di '.$dir.'', $r['iddocumento']) : '').'
|
||||
</td>';
|
||||
|
||||
// Data
|
||||
echo '
|
||||
<td>'.Translator::timestampToLocale($r['created_at']).'</td>';
|
||||
<td class="text-center" >'.Translator::dateToLocale($r['data']).' <span class=\'tip\' title=\''.tr('Data del movimento: ').Translator::dateToLocale($r['created_at']).'\' ><i class="fa fa-question-circle-o"></i></span> </td>';
|
||||
|
||||
// Operazioni
|
||||
echo '
|
||||
<td class="text-center">';
|
||||
|
||||
if (Auth::admin()) {
|
||||
if (Auth::admin() && $r['manuale'] == '1') {
|
||||
echo '
|
||||
<a class="btn btn-danger btn-sm ask" data-backto="record-edit" data-op="delmovimento" data-idmovimento="'.$r['id'].'">
|
||||
<i class="fa fa-trash"></i>
|
||||
@ -76,7 +93,10 @@ if (!empty($rs2)) {
|
||||
</table>';
|
||||
} else {
|
||||
echo '
|
||||
<p>'.tr('Nessun movimento disponibile').'...</p>';
|
||||
<div class="alert alert-info">
|
||||
<i class="fa fa-info-circle"></i>
|
||||
'.tr('Questo articolo non è ancora stato movimentato', []).'.
|
||||
</div>';
|
||||
}
|
||||
|
||||
echo '
|
||||
|
@ -19,7 +19,7 @@ if (!empty($rs)) {
|
||||
'.Modules::link('Articoli', $r['id'], $r['descrizione']).'
|
||||
</td>
|
||||
<td>
|
||||
'.$r['qta'].' '.$r['unitamisura'].'
|
||||
'.Translator::numberToLocale($r['qta'], 'qta').' '.$r['unitamisura'].'
|
||||
</td>
|
||||
</tr>';
|
||||
}
|
||||
@ -27,5 +27,5 @@ if (!empty($rs)) {
|
||||
echo '
|
||||
</table>';
|
||||
} else {
|
||||
echo '<p>'.tr('Non ci sono articoli in esaurimento').".</p>\n";
|
||||
echo '<div class=\'alert alert-info\' >'.tr('Non ci sono articoli in esaurimento.')."</div>\n";
|
||||
}
|
||||
|
@ -3,7 +3,7 @@
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
// Necessaria per la funzione add_movimento_magazzino
|
||||
include_once $docroot.'/modules/articoli/modutil.php';
|
||||
include_once Modules::filepath('Articoli', 'modutil.php');
|
||||
|
||||
switch (post('op')) {
|
||||
case 'update':
|
||||
|
@ -7,11 +7,11 @@ include_once __DIR__.'/../../core.php';
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
{[ "type": "text", "label": "<?php echo tr('Nome'); ?>", "name": "nome", "required": 1, "value": "" ]}
|
||||
{[ "type": "text", "label": "<?php echo tr('Nome'); ?>", "name": "nome", "required": 1 ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "text", "label": "<?php echo tr('Targa'); ?>", "name": "targa", "required": 1, "maxlength": 10, "class": "alphanumeric-mask", "value": "" ]}
|
||||
{[ "type": "text", "label": "<?php echo tr('Targa'); ?>", "name": "targa", "required": 1, "maxlength": 10, "class": "alphanumeric-mask" ]}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
@ -22,13 +22,13 @@ echo '
|
||||
// Data di partenza
|
||||
echo '
|
||||
<div class="col-md-3">
|
||||
{[ "type": "date", "label": "'.tr('Data dal').'", "name": "data_inizio", "required": 1, "class": "text-center", "value": "-now-" ]}
|
||||
{[ "type": "date", "label": "'.tr('Data dal').'", "name": "data_inizio", "required": 1, "maxlength": 10, "value": "-now-" ]}
|
||||
</div>';
|
||||
|
||||
// Data di fine
|
||||
echo '
|
||||
<div class="col-md-3">
|
||||
{[ "type": "date", "label": "'.tr('Data al').'", "name": "data_fine", "value": "", "min-date": "-now-" ]}
|
||||
{[ "type": "date", "label": "'.tr('Data al').'", "name": "data_fine", "maxlength": 10, "min-date": "-now-" ]}
|
||||
</div>';
|
||||
|
||||
echo '
|
||||
|
@ -32,57 +32,73 @@ include_once __DIR__.'/../../core.php';
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<!-- TECNICI -->
|
||||
<div class="panel panel-primary">
|
||||
<!-- TECNICI + MAGAZZINO AUTOMEZZO -->
|
||||
<div class="row">
|
||||
|
||||
<div class="panel-heading">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<h3 class="panel-title"><?php echo tr('Tecnici responsabili automezzo'); ?></h3>
|
||||
<!--TECNICI -->
|
||||
<div class="col-md-6">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<h3 class="panel-title"><?php echo tr('Tecnici responsabili automezzo'); ?></h3>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<h3 class="panel-title"><?php echo tr('Magazzino automezzo'); ?></h3>
|
||||
|
||||
<div class="panel-body">
|
||||
<div class="row">
|
||||
<div class="col-md-12" >
|
||||
<form action="<?php echo $rootdir; ?>/editor.php?id_module=<?php echo Modules::get('Automezzi')['id']; ?>&id_record=<?php echo $id_record; ?>" id="updatetech-form" method="post" role="form">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
<input type="hidden" name="id_record" value="<?php echo $id_record; ?>">
|
||||
<input type="hidden" name="op" value="">
|
||||
|
||||
<?php
|
||||
include $docroot.'/modules/automezzi/row-list-tecnici.php';
|
||||
?>
|
||||
</form>
|
||||
|
||||
<a href="javascript:;" class="btn btn-sm btn-success pull-right" title="Aggiorna date" onclick="$('#updatetech-form input[name=op]').val('savetech'); $('#updatetech-form').submit();"><i class="fa fa-edit"></i> <?php echo tr('Salva date'); ?></a>
|
||||
|
||||
<div class="pull-left">
|
||||
<a class="btn btn-sm btn-primary" data-href="<?php echo $rootdir; ?>/modules/automezzi/add_tecnico.php?idautomezzo=<?php echo $id_record; ?>" data-toggle="modal" data-title="Aggiungi tecnico" data-target="#bs-popup"><i class="fa fa-plus"></i> <?php echo tr('Aggiungi tecnico'); ?></a><br>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="panel-body">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6" style="border-right:1px solid #DDD;">
|
||||
<form action="<?php echo $rootdir; ?>/editor.php?id_module=<?php echo Modules::get('Automezzi')['id']; ?>&id_record=<?php echo $id_record; ?>" id="updatetech-form" method="post" role="form">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
<input type="hidden" name="id_record" value="<?php echo $id_record; ?>">
|
||||
<input type="hidden" name="op" value="">
|
||||
|
||||
<?php
|
||||
include $docroot.'/modules/automezzi/row-list-tecnici.php';
|
||||
?>
|
||||
</form>
|
||||
|
||||
<a href="javascript:;" class="btn btn-sm btn-success pull-right" title="Aggiorna date" onclick="$('#updatetech-form input[name=op]').val('savetech'); $('#updatetech-form').submit();"><i class="fa fa-edit"></i> <?php echo tr('Salva date'); ?></a>
|
||||
|
||||
<div class="pull-left">
|
||||
<a class="btn btn-sm btn-primary" data-href="<?php echo $rootdir; ?>/modules/automezzi/add_tecnico.php?idautomezzo=<?php echo $id_record; ?>" data-toggle="modal" data-title="Aggiungi tecnico" data-target="#bs-popup"><i class="fa fa-plus"></i> <?php echo tr('Aggiungi tecnico'); ?></a><br>
|
||||
<!-- MAGAZZINO AUTOMEZZO -->
|
||||
<div class="col-md-6">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<h3 class="panel-title"><?php echo tr('Magazzino automezzo'); ?></h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
|
||||
<div class="panel-body">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<?php
|
||||
include $docroot.'/modules/automezzi/row-list-articoli.php';
|
||||
?>
|
||||
|
||||
<div class="col-md-6">
|
||||
<?php
|
||||
include $docroot.'/modules/automezzi/row-list-articoli.php';
|
||||
?>
|
||||
|
||||
<div class="pull-left">
|
||||
<a class="btn btn-sm btn-primary" data-href="<?php echo $rootdir; ?>/modules/automezzi/add_articolo.php?idautomezzo=<?php echo $id_record; ?>" data-toggle="modal" data-title="Aggiungi articoli" data-target="#bs-popup"><i class="fa fa-plus"></i> <?php echo tr('Articolo magazzino'); ?></a><br>
|
||||
<div class="pull-left">
|
||||
<a class="btn btn-sm btn-primary" data-href="<?php echo $rootdir; ?>/modules/automezzi/add_articolo.php?idautomezzo=<?php echo $id_record; ?>" data-toggle="modal" data-title="Aggiungi articoli" data-target="#bs-popup"><i class="fa fa-plus"></i> <?php echo tr('Articolo magazzino'); ?></a><br>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<a class="btn btn-danger ask" data-backto="record-list">
|
||||
|
@ -5,7 +5,7 @@ include_once __DIR__.'/../../core.php';
|
||||
/*
|
||||
TECNICI ASSEGNATI ALL'AUTOMEZZO
|
||||
*/
|
||||
$q_art = "SELECT *, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=dt_automezzi_tecnici.idtecnico) AS nometecnico FROM dt_automezzi_tecnici WHERE idautomezzo='".$id_record."'";
|
||||
$q_art = 'SELECT *, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=dt_automezzi_tecnici.idtecnico) AS nometecnico FROM dt_automezzi_tecnici WHERE idautomezzo='.prepare($id_record);
|
||||
$rs_art = $dbo->fetchArray($q_art);
|
||||
|
||||
if (!empty($rs_art)) {
|
||||
@ -30,13 +30,13 @@ if (!empty($rs_art)) {
|
||||
// Data di inizio
|
||||
echo '
|
||||
<td>
|
||||
{[ "type": "date", "name": "data_inizio['.$r['id'].']", "required": 1, "class": "text-center", "value": "'.$r['data_inizio'].'", "extra": "" ]}
|
||||
{[ "type": "date", "name": "data_inizio['.$r['id'].']", "required": 1, "maxlength": 10, "value": "'.$r['data_inizio'].'" ]}
|
||||
</td>';
|
||||
|
||||
// Data di fine
|
||||
echo '
|
||||
<td>
|
||||
{[ "type": "date", "name": "data_fine['.$r['id'].']", "class": "text-center", "value": "'.$r['data_fine'].'", "min-date": "'.$r['data_inizio'].'", "extra": "" ]}
|
||||
{[ "type": "date", "name": "data_fine['.$r['id'].']", "maxlength": 10, "value": "'.$r['data_fine'].'", "min-date": "'.$r['data_inizio'].'" ]}
|
||||
</td>';
|
||||
|
||||
// Pulsanti per aggiornamento date tecnici
|
||||
|
@ -12,7 +12,6 @@ if (!extension_loaded('zip')) {
|
||||
</div>';
|
||||
}
|
||||
|
||||
|
||||
if (starts_with($backup_dir, $docroot)) {
|
||||
echo '
|
||||
<div class="alert alert-warning">
|
||||
@ -28,7 +27,6 @@ if (!is_writable($backup_dir)) {
|
||||
</div>';
|
||||
}
|
||||
|
||||
|
||||
echo '
|
||||
<div class="callout callout-success">
|
||||
<p>';
|
||||
@ -55,7 +53,6 @@ echo '
|
||||
</div>
|
||||
</div-->';
|
||||
|
||||
|
||||
//Lettura file di backup
|
||||
if (file_exists($backup_dir)) {
|
||||
$backups_zip = [];
|
||||
|
@ -4,24 +4,23 @@ include_once __DIR__.'/../../core.php';
|
||||
|
||||
switch (filter('op')) {
|
||||
case 'update':
|
||||
|
||||
|
||||
$nome = filter('nome');
|
||||
|
||||
if (isset($nome)) {
|
||||
|
||||
$array = [
|
||||
'nome' => $nome,
|
||||
'filiale' => $post['filiale'],
|
||||
'iban' => $post['iban'],
|
||||
'bic' => $post['bic'],
|
||||
'id_pianodeiconti3' => $post['id_pianodeiconti3'],
|
||||
'note' => $post['note'],
|
||||
];
|
||||
$array = [
|
||||
'nome' => $nome,
|
||||
'filiale' => $post['filiale'],
|
||||
'iban' => $post['iban'],
|
||||
'bic' => $post['bic'],
|
||||
'id_pianodeiconti3' => $post['id_pianodeiconti3'],
|
||||
'note' => $post['note'],
|
||||
];
|
||||
|
||||
if (!empty($id_record)) {
|
||||
$dbo->update('co_banche', $array, ['id' => $id_record]);
|
||||
}
|
||||
|
||||
if (!empty($id_record)) {
|
||||
$dbo->update('co_banche', $array, ['id' => $id_record]);
|
||||
}
|
||||
|
||||
$_SESSION['infos'][] = tr('Salvataggio completato!');
|
||||
} else {
|
||||
$_SESSION['errors'][] = tr('Ci sono stati alcuni errori durante il salvataggio!');
|
||||
@ -35,11 +34,11 @@ switch (filter('op')) {
|
||||
if (isset($nome)) {
|
||||
$dbo->query('INSERT INTO `co_banche` (`nome`) VALUES ('.prepare($nome).')');
|
||||
$id_record = $dbo->lastInsertedID();
|
||||
|
||||
if (isAjaxRequest()) {
|
||||
echo json_encode(['id' => $id_record, 'text' => $nome]);
|
||||
}
|
||||
|
||||
|
||||
if (isAjaxRequest()) {
|
||||
echo json_encode(['id' => $id_record, 'text' => $nome]);
|
||||
}
|
||||
|
||||
$_SESSION['infos'][] = tr('Aggiunta nuova _TYPE_', [
|
||||
'_TYPE_' => 'banca',
|
||||
]);
|
||||
@ -47,32 +46,29 @@ switch (filter('op')) {
|
||||
$_SESSION['errors'][] = tr('Ci sono stati alcuni errori durante il salvataggio!');
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
|
||||
case 'delete':
|
||||
|
||||
$documenti = $dbo->fetchNum('SELECT idanagrafica FROM an_anagrafiche WHERE idbanca_vendite='.prepare($id_record).'
|
||||
|
||||
$documenti = $dbo->fetchNum('SELECT idanagrafica FROM an_anagrafiche WHERE idbanca_vendite='.prepare($id_record).'
|
||||
UNION SELECT idanagrafica FROM an_anagrafiche WHERE idbanca_acquisti='.prepare($id_record));
|
||||
|
||||
|
||||
if (isset($id_record) && empty($documenti)) {
|
||||
$dbo->query('DELETE FROM `co_banche` WHERE `id`='.prepare($id_record));
|
||||
$_SESSION['infos'][] = tr('_TYPE_ eliminata con successo!', [
|
||||
'_TYPE_' => 'Banca',
|
||||
]);
|
||||
|
||||
}else{
|
||||
|
||||
$array = [
|
||||
'deleted' => 1,
|
||||
];
|
||||
|
||||
$dbo->update('co_banche', $array, ['id' => $id_record]);
|
||||
|
||||
$_SESSION['infos'][] = tr('_TYPE_ eliminata con successo!', [
|
||||
} else {
|
||||
$array = [
|
||||
'deleted' => 1,
|
||||
];
|
||||
|
||||
$dbo->update('co_banche', $array, ['id' => $id_record]);
|
||||
|
||||
$_SESSION['infos'][] = tr('_TYPE_ eliminata con successo!', [
|
||||
'_TYPE_' => 'Banca',
|
||||
]);
|
||||
}
|
||||
]);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -8,7 +8,7 @@ include_once __DIR__.'/../../core.php';
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "text", "label": "<?php echo tr('Nome'); ?>", "name": "nome", "value": "" ]}
|
||||
{[ "type": "text", "label": "<?php echo tr('Nome'); ?>", "name": "nome", "required": "1" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -2,9 +2,7 @@
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
?>
|
||||
|
||||
<form action="" method="post" id="edit-form">
|
||||
?><form action="" method="post" id="edit-form">
|
||||
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
<input type="hidden" name="op" value="update">
|
||||
@ -18,28 +16,28 @@ include_once __DIR__.'/../../core.php';
|
||||
<div class="panel-body">
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "<?php echo tr('Nome'); ?>", "name": "nome", "value": "$nome$" ]}
|
||||
{[ "type": "text", "label": "<?php echo tr('Nome'); ?>", "name": "nome", "required": "1", "value": "$nome$" ]}
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "<?php echo tr('Filiale'); ?>", "name": "filiale", "value": "$filiale$" ]}
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
{[ "type": "select", "label": "<?php echo tr('Conto predefinito'); ?>", "name": "id_pianodeiconti3", "value": "$id_pianodeiconti3$", "values": "query=SELECT id, descrizione FROM co_pianodeiconti3 WHERE idpianodeiconti2 = 1" ]}
|
||||
{[ "type": "select", "label": "<?php echo tr('Conto predefinito'); ?>", "name": "id_pianodeiconti3", "value": "$id_pianodeiconti3$", "values": "query=SELECT id, descrizione FROM co_pianodeiconti3 WHERE idpianodeiconti2 = 1 AND ( id NOT IN (SELECT id_pianodeiconti3 FROM co_banche) OR id = '<?php echo $records[0]['id_pianodeiconti3'] ?>' )" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-8">
|
||||
{[ "type": "text", "label": "<?php echo tr('IBAN'); ?>", "name": "iban", "class": "alphanumeric-mask", "maxlength": 32, "value": "$iban$" ]}
|
||||
{[ "type": "text", "label": "<?php echo tr('IBAN'); ?>", "name": "iban", "required": "1", "class": "alphanumeric-mask", "maxlength": 32, "value": "$iban$" ]}
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "<?php echo tr('BIC'); ?>", "name": "bic", "class": "alphanumeric-mask", "maxlength": 11, "value": "$bic$" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "textarea", "label": "<?php echo tr('Note'); ?>", "name": "note", "required": 0, "class": "", "value": "$note$", "extra": "" ]}
|
||||
{[ "type": "textarea", "label": "<?php echo tr('Note'); ?>", "name": "note", "required": 0, "value": "$note$" ]}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -51,8 +49,8 @@ include_once __DIR__.'/../../core.php';
|
||||
$documenti = $dbo->fetchNum('SELECT idanagrafica FROM an_anagrafiche WHERE idbanca_vendite='.prepare($id_record).'
|
||||
UNION SELECT idanagrafica FROM an_anagrafiche WHERE idbanca_acquisti='.prepare($id_record));
|
||||
|
||||
if (!empty($documenti)){
|
||||
echo '
|
||||
if (!empty($documenti)) {
|
||||
echo '
|
||||
<div class="alert alert-danger">
|
||||
'.tr('Ci sono _NUM_ documenti collegati', [
|
||||
'_NUM_' => count($documenti),
|
||||
|
@ -40,14 +40,13 @@ switch (post('op')) {
|
||||
|
||||
$documenti = $dbo->fetchNum('SELECT id FROM dt_ddt WHERE idaspettobeni='.prepare($id_record).'
|
||||
UNION SELECT id FROM co_documenti WHERE idaspettobeni='.prepare($id_record));
|
||||
|
||||
|
||||
if (isset($id_record) && empty($documenti)) {
|
||||
$dbo->query('DELETE FROM `dt_aspettobeni` WHERE `id`='.prepare($id_record));
|
||||
$_SESSION['infos'][] = tr('Tipologia di _TYPE_ eliminata con successo.', [
|
||||
'_TYPE_' => 'bene',
|
||||
]);
|
||||
}else{
|
||||
|
||||
} else {
|
||||
$_SESSION['errors'][] = tr('Sono presenti dei documenti collegati a questo aspetto beni.');
|
||||
}
|
||||
|
||||
|
@ -8,7 +8,7 @@ include_once __DIR__.'/../../core.php';
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "text", "label": "<?php echo tr('Descrizione'); ?>", "name": "descrizione", "required": 1, "value": "" ]}
|
||||
{[ "type": "text", "label": "<?php echo tr('Descrizione'); ?>", "name": "descrizione", "required": 1 ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -27,8 +27,8 @@ include_once __DIR__.'/../../core.php';
|
||||
$documenti = $dbo->fetchNum('SELECT id FROM dt_ddt WHERE idaspettobeni='.prepare($id_record).'
|
||||
UNION SELECT id FROM co_documenti WHERE idaspettobeni='.prepare($id_record));
|
||||
|
||||
if (!empty($documenti)){
|
||||
echo '
|
||||
if (!empty($documenti)) {
|
||||
echo '
|
||||
<div class="alert alert-danger">
|
||||
'.tr('Ci sono _NUM_ documenti collegati', [
|
||||
'_NUM_' => count($documenti),
|
||||
|
@ -19,9 +19,11 @@ switch (filter('op')) {
|
||||
|
||||
case 'add':
|
||||
$nome = filter('nome');
|
||||
$nota = filter('nota');
|
||||
$colore = filter('colore');
|
||||
|
||||
if (isset($nome)) {
|
||||
$dbo->query('INSERT INTO `mg_categorie` (`nome`) VALUES ('.prepare($nome).')');
|
||||
$dbo->query('INSERT INTO `mg_categorie` (`nome`, `colore`, `nota`) VALUES ('.prepare($nome).', '.prepare($colore).', '.prepare($nota).')');
|
||||
|
||||
$id_record = $dbo->lastInsertedID();
|
||||
|
||||
@ -44,7 +46,7 @@ switch (filter('op')) {
|
||||
$id = $id_record;
|
||||
}
|
||||
|
||||
if ( $dbo->fetchNum('SELECT * FROM `mg_articoli` WHERE `id_categoria`='.prepare($id).' OR `id_sottocategoria`='.prepare($id).' OR `id_sottocategoria` IN (SELECT id FROM `mg_categorie` WHERE `parent`='.prepare($id).')') == 0 ) {
|
||||
if ($dbo->fetchNum('SELECT * FROM `mg_articoli` WHERE `id_categoria`='.prepare($id).' OR `id_sottocategoria`='.prepare($id).' OR `id_sottocategoria` IN (SELECT id FROM `mg_categorie` WHERE `parent`='.prepare($id).')') == 0) {
|
||||
$dbo->query('DELETE FROM `mg_categorie` WHERE `id`='.prepare($id));
|
||||
$_SESSION['infos'][] = tr('Tipologia di _TYPE_ eliminata con successo!', [
|
||||
'_TYPE_' => 'categoria',
|
||||
|
@ -19,21 +19,18 @@ if (isset($id_record)) {
|
||||
if (!isset($id_original)) {
|
||||
?>
|
||||
<input type="hidden" name="op" value="add">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "text", "label": "<?php echo tr('Nome'); ?>", "name": "nome", "required": 1 ]}
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
} else {
|
||||
?>
|
||||
<input type="hidden" name="op" value="row">
|
||||
<input type="hidden" name="id_original" value="<?php echo $id_original; ?>">
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-8">
|
||||
{[ "type": "text", "label": "<?php echo tr('Nome'); ?>", "name": "nome", "required": 1, "value": "$nome$", "extra": "" ]}
|
||||
{[ "type": "text", "label": "<?php echo tr('Nome'); ?>", "name": "nome", "required": 1, "value": "$nome$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
@ -47,19 +44,6 @@ if (!isset($id_original)) {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
$(document).ready( function(){
|
||||
$('.colorpicker').colorpicker().on('changeColor', function(){
|
||||
$('#colore_').parent().find('.square').css('background', $('#colore_').val());
|
||||
});
|
||||
|
||||
$('#colore_').parent().find('.square').css('background', $('#colore_').val());
|
||||
});
|
||||
</script>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
<!-- PULSANTI -->
|
||||
<div class="row">
|
||||
<div class="col-md-12 text-right">
|
||||
@ -77,3 +61,13 @@ if (isset($id_record)) {
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<script>
|
||||
$(document).ready( function(){
|
||||
$('.colorpicker').colorpicker().on('changeColor', function(){
|
||||
$('#colore_').parent().find('.square').css('background', $('#colore_').val());
|
||||
});
|
||||
|
||||
$('#colore_').parent().find('.square').css('background', $('#colore_').val());
|
||||
});
|
||||
</script>
|
||||
|
@ -79,7 +79,7 @@ $res = $dbo->fetchNum('SELECT * FROM `mg_articoli` WHERE `id_categoria`='.prepar
|
||||
if ($res) {
|
||||
echo '
|
||||
<div class="alert alert-danger">
|
||||
<p>'.tr('Esistono ancora alcuni articoli sotto questa categoria!').'</p>
|
||||
<p>'.tr('Ci sono '.count($res).' articoli collegati questa categoria. Non è possibile eliminarla.').'</p>
|
||||
</div>';
|
||||
} else {
|
||||
echo '
|
||||
|
@ -50,14 +50,11 @@ switch (filter('op')) {
|
||||
UNION SELECT id FROM co_documenti WHERE idcausalet='.prepare($id_record));
|
||||
|
||||
if (isset($id_record) && empty($documenti)) {
|
||||
|
||||
$dbo->query('DELETE FROM `dt_causalet` WHERE `id`='.prepare($id_record));
|
||||
$_SESSION['infos'][] = tr('Tipologia di _TYPE_ eliminata con successo.', [
|
||||
'_TYPE_' => 'causale',
|
||||
]);
|
||||
|
||||
}else{
|
||||
|
||||
} else {
|
||||
$_SESSION['errors'][] = tr('Sono presenti dei documenti collegati a questa causale.');
|
||||
}
|
||||
|
||||
|
@ -7,7 +7,7 @@ include_once __DIR__.'/../../core.php';
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "text", "label": "<?php echo tr('Descrizione'); ?>", "name": "descrizione", "required": 1, "value": "" ]}
|
||||
{[ "type": "text", "label": "<?php echo tr('Descrizione'); ?>", "name": "descrizione", "required": 1 ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -26,8 +26,8 @@ include_once __DIR__.'/../../core.php';
|
||||
$documenti = $dbo->fetchNum('SELECT id FROM dt_ddt WHERE idcausalet='.prepare($id_record).'
|
||||
UNION SELECT id FROM co_documenti WHERE idcausalet='.prepare($id_record));
|
||||
|
||||
if (!empty($documenti)){
|
||||
echo '
|
||||
if (!empty($documenti)) {
|
||||
echo '
|
||||
<div class="alert alert-danger">
|
||||
'.tr('Ci sono _NUM_ documenti collegati', [
|
||||
'_NUM_' => count($documenti),
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
include_once $docroot.'/modules/fatture/modutil.php';
|
||||
include_once Modules::filepath('Fatture di vendita', 'modutil.php');
|
||||
|
||||
switch (post('op')) {
|
||||
case 'add':
|
||||
@ -55,7 +55,7 @@ switch (post('op')) {
|
||||
if ($budget != '') {
|
||||
$budget = post('budget');
|
||||
} else {
|
||||
$q = "SELECT (SELECT SUM(subtotale) FROM co_righe2_contratti GROUP BY idcontratto HAVING idcontratto=co_contratti.id) AS 'budget' FROM co_contratti WHERE id=".prepare($id_record);
|
||||
$q = "SELECT (SELECT SUM(subtotale) FROM co_righe_contratti GROUP BY idcontratto HAVING idcontratto=co_contratti.id) AS 'budget' FROM co_contratti WHERE id=".prepare($id_record);
|
||||
$rs = $dbo->fetchArray($q);
|
||||
$budget = $rs[0]['budget'];
|
||||
}
|
||||
@ -71,14 +71,13 @@ switch (post('op')) {
|
||||
$idreferente = post('idreferente');
|
||||
$esclusioni = post('esclusioni');
|
||||
$descrizione = post('descrizione');
|
||||
$idtipointervento = post('idtipointervento');
|
||||
// $ore_lavoro = post('ore_lavoro');
|
||||
|
||||
$costo_orario = post('costo_orario');
|
||||
$costo_km = post('costo_km');
|
||||
$costo_diritto_chiamata = post('costo_diritto_chiamata');
|
||||
|
||||
$query = 'UPDATE co_contratti SET idanagrafica='.prepare($idanagrafica).', idsede='.prepare($idsede).', idstato='.prepare($idstato).', nome='.prepare($nome).', idagente='.prepare($idagente).', idpagamento='.prepare($idpagamento).', numero='.prepare($numero).', budget='.prepare($budget).', idreferente='.prepare($idreferente).', validita='.prepare($validita).', data_bozza='.prepare($data_bozza).', data_accettazione='.prepare($data_accettazione).', data_rifiuto='.prepare($data_rifiuto).', data_conclusione='.prepare($data_conclusione).', rinnovabile='.prepare($rinnovabile).', giorni_preavviso_rinnovo='.prepare($giorni_preavviso_rinnovo).', esclusioni='.prepare($esclusioni).', descrizione='.prepare($descrizione).', idtipointervento='.prepare($idtipointervento).'WHERE id='.prepare($id_record);
|
||||
$query = 'UPDATE co_contratti SET idanagrafica='.prepare($idanagrafica).', idsede='.prepare($idsede).', idstato='.prepare($idstato).', nome='.prepare($nome).', idagente='.prepare($idagente).', idpagamento='.prepare($idpagamento).', numero='.prepare($numero).', budget='.prepare($budget).', idreferente='.prepare($idreferente).', validita='.prepare($validita).', data_bozza='.prepare($data_bozza).', data_accettazione='.prepare($data_accettazione).', data_rifiuto='.prepare($data_rifiuto).', data_conclusione='.prepare($data_conclusione).', rinnovabile='.prepare($rinnovabile).', giorni_preavviso_rinnovo='.prepare($giorni_preavviso_rinnovo).', esclusioni='.prepare($esclusioni).', descrizione='.prepare($descrizione).' WHERE id='.prepare($id_record);
|
||||
// costo_diritto_chiamata='.prepare($costo_diritto_chiamata).', ore_lavoro='.prepare($ore_lavoro).', costo_orario='.prepare($costo_orario).', costo_km='.prepare($costo_km).'
|
||||
|
||||
$dbo->query($query);
|
||||
@ -94,7 +93,7 @@ switch (post('op')) {
|
||||
|
||||
aggiorna_sconto([
|
||||
'parent' => 'co_contratti',
|
||||
'row' => 'co_righe2_contratti',
|
||||
'row' => 'co_righe_contratti',
|
||||
], [
|
||||
'parent' => 'id',
|
||||
'row' => 'idcontratto',
|
||||
@ -161,7 +160,7 @@ switch (post('op')) {
|
||||
$iva_indetraibile = $iva / 100 * $rs2[0]['indetraibile'];
|
||||
$desc_iva = $rs2[0]['descrizione'];
|
||||
|
||||
$dbo->query('INSERT INTO co_righe2_contratti(idcontratto, idarticolo, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, um, qta, sconto, sconto_unitario, tipo_sconto, is_descrizione, `order`) VALUES ('.prepare($id_record).', '.prepare($idarticolo).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($subtot).', '.prepare($um).', '.prepare($qta).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', '.prepare(empty($qta)).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe2_contratti AS t WHERE idcontratto='.prepare($id_record).'))');
|
||||
$dbo->query('INSERT INTO co_righe_contratti(idcontratto, idarticolo, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, um, qta, sconto, sconto_unitario, tipo_sconto, is_descrizione, `order`) VALUES ('.prepare($id_record).', '.prepare($idarticolo).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($subtot).', '.prepare($um).', '.prepare($qta).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', '.prepare(empty($qta)).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_contratti AS t WHERE idcontratto='.prepare($id_record).'))');
|
||||
|
||||
// Messaggi informativi
|
||||
if (!empty($idarticolo)) {
|
||||
@ -177,7 +176,7 @@ switch (post('op')) {
|
||||
case 'editriga':
|
||||
$idriga = post('idriga');
|
||||
|
||||
$rs = $dbo->fetchArray("SELECT * FROM co_righe2_contratti WHERE id='".$idriga."'");
|
||||
$rs = $dbo->fetchArray("SELECT * FROM co_righe_contratti WHERE id='".$idriga."'");
|
||||
$is_descrizione = $rs[0]['is_descrizione'];
|
||||
|
||||
$idarticolo = post('idarticolo');
|
||||
@ -205,9 +204,9 @@ switch (post('op')) {
|
||||
|
||||
// Modifica riga generica sul documento
|
||||
if ($is_descrizione == 0) {
|
||||
$query = 'UPDATE co_righe2_contratti SET idarticolo='.prepare($idarticolo).', idiva='.prepare($idiva).', desc_iva='.prepare($desc_iva).', iva='.prepare($iva).', iva_indetraibile='.prepare($iva_indetraibile).', descrizione='.prepare($descrizione).', subtotale='.prepare($subtot).', sconto='.prepare($sconto).', sconto_unitario='.prepare($sconto_unitario).', tipo_sconto='.prepare($tipo_sconto).', um='.prepare($um).', qta='.prepare($qta).' WHERE id='.prepare($idriga);
|
||||
$query = 'UPDATE co_righe_contratti SET idarticolo='.prepare($idarticolo).', idiva='.prepare($idiva).', desc_iva='.prepare($desc_iva).', iva='.prepare($iva).', iva_indetraibile='.prepare($iva_indetraibile).', descrizione='.prepare($descrizione).', subtotale='.prepare($subtot).', sconto='.prepare($sconto).', sconto_unitario='.prepare($sconto_unitario).', tipo_sconto='.prepare($tipo_sconto).', um='.prepare($um).', qta='.prepare($qta).' WHERE id='.prepare($idriga);
|
||||
} else {
|
||||
$query = 'UPDATE co_righe2_contratti SET descrizione='.prepare($descrizione).' WHERE id='.prepare($idriga);
|
||||
$query = 'UPDATE co_righe_contratti SET descrizione='.prepare($descrizione).' WHERE id='.prepare($idriga);
|
||||
}
|
||||
$dbo->query($query);
|
||||
|
||||
@ -220,7 +219,7 @@ switch (post('op')) {
|
||||
if (isset($post['idriga'])) {
|
||||
$idriga = post('idriga');
|
||||
|
||||
$query = 'DELETE FROM `co_righe2_contratti` WHERE idcontratto='.prepare($id_record).' AND id='.prepare($idriga);
|
||||
$query = 'DELETE FROM `co_righe_contratti` WHERE idcontratto='.prepare($id_record).' AND id='.prepare($idriga);
|
||||
|
||||
if ($dbo->query($query)) {
|
||||
$_SESSION['infos'][] = tr('Riga eliminata!');
|
||||
@ -228,7 +227,7 @@ switch (post('op')) {
|
||||
}
|
||||
|
||||
// Ricalcolo il budget
|
||||
$dbo->query('UPDATE co_contratti SET budget=( SELECT SUM(subtotale) FROM co_righe2_contratti GROUP BY idcontratto HAVING idcontratto=co_contratti.id ) WHERE id='.prepare($id_record));
|
||||
$dbo->query('UPDATE co_contratti SET budget=( SELECT SUM(subtotale) FROM co_righe_contratti GROUP BY idcontratto HAVING idcontratto=co_contratti.id ) WHERE id='.prepare($id_record));
|
||||
|
||||
break;
|
||||
|
||||
@ -238,7 +237,7 @@ switch (post('op')) {
|
||||
$idcontratto = $get['idcontratto'];
|
||||
$idintervento = $get['idintervento'];
|
||||
|
||||
$query = 'DELETE FROM `co_righe_contratti` WHERE idcontratto='.prepare($idcontratto).' AND idintervento='.prepare($idintervento);
|
||||
$query = 'DELETE FROM `co_contratti_promemoria` WHERE idcontratto='.prepare($idcontratto).' AND idintervento='.prepare($idintervento);
|
||||
$dbo->query($query);
|
||||
|
||||
$_SESSION['infos'][] = tr('Intervento _NUM_ rimosso!', [
|
||||
@ -253,11 +252,11 @@ switch (post('op')) {
|
||||
$id = filter('id');
|
||||
|
||||
if ($start > $end) {
|
||||
$dbo->query('UPDATE `co_righe2_contratti` SET `order`=`order` + 1 WHERE `order`>='.prepare($end).' AND `order`<'.prepare($start).' AND `idcontratto`='.prepare($id_record));
|
||||
$dbo->query('UPDATE `co_righe2_contratti` SET `order`='.prepare($end).' WHERE id='.prepare($id));
|
||||
$dbo->query('UPDATE `co_righe_contratti` SET `order`=`order` + 1 WHERE `order`>='.prepare($end).' AND `order`<'.prepare($start).' AND `idcontratto`='.prepare($id_record));
|
||||
$dbo->query('UPDATE `co_righe_contratti` SET `order`='.prepare($end).' WHERE id='.prepare($id));
|
||||
} elseif ($end != $start) {
|
||||
$dbo->query('UPDATE `co_righe2_contratti` SET `order`=`order` - 1 WHERE `order`>'.prepare($start).' AND `order`<='.prepare($end).' AND `idcontratto`='.prepare($id_record));
|
||||
$dbo->query('UPDATE `co_righe2_contratti` SET `order`='.prepare($end).' WHERE id='.prepare($id));
|
||||
$dbo->query('UPDATE `co_righe_contratti` SET `order`=`order` - 1 WHERE `order`>'.prepare($start).' AND `order`<='.prepare($end).' AND `idcontratto`='.prepare($id_record));
|
||||
$dbo->query('UPDATE `co_righe_contratti` SET `order`='.prepare($end).' WHERE id='.prepare($id));
|
||||
}
|
||||
|
||||
break;
|
||||
@ -265,8 +264,8 @@ switch (post('op')) {
|
||||
// eliminazione contratto
|
||||
case 'delete':
|
||||
$dbo->query('DELETE FROM co_contratti WHERE id='.prepare($id_record));
|
||||
$dbo->query('DELETE FROM co_contratti_promemoria WHERE idcontratto='.prepare($id_record));
|
||||
$dbo->query('DELETE FROM co_righe_contratti WHERE idcontratto='.prepare($id_record));
|
||||
$dbo->query('DELETE FROM co_righe2_contratti WHERE idcontratto='.prepare($id_record));
|
||||
|
||||
$_SESSION['infos'][] = tr('Contratto eliminato!');
|
||||
|
||||
@ -290,16 +289,16 @@ switch (get('op')) {
|
||||
$rs2 = $dbo->fetchArray('SELECT MAX(CAST(numero AS UNSIGNED)) AS maxn FROM co_contratti');
|
||||
$numero = $rs2[0]['maxn'] + 1;
|
||||
|
||||
if ($dbo->query('INSERT INTO co_contratti(numero, nome, idagente, data_bozza, data_accettazione, data_rifiuto, data_conclusione, rinnovabile, giorni_preavviso_rinnovo, budget, descrizione, idstato, idreferente, validita, esclusioni, idanagrafica, idpagamento, idtipointervento, costo_diritto_chiamata, ore_lavoro, costo_orario, costo_km, idcontratto_prev) VALUES('.prepare($numero).', '.prepare($rs[0]['nome']).', '.prepare($rs[0]['idagente']).', NOW(), '.prepare(date('Y-m-d', strtotime($rs[0]['data_conclusione'].' +1 day'))).', "", '.prepare(date('Y-m-d', strtotime($rs[0]['data_conclusione'].' +'.$giorni_add.' day'))).', '.prepare($rs[0]['rinnovabile']).', '.prepare($rs[0]['giorni_preavviso_rinnovo']).', '.prepare($rs[0]['budget']).', '.prepare($rs[0]['descrizione']).', '.prepare($rs[0]['idstato']).', '.prepare($rs[0]['idreferente']).', '.prepare($rs[0]['validita']).', '.prepare($rs[0]['esclusioni']).', '.prepare($rs[0]['idanagrafica']).', '.prepare($rs[0]['idpagamento']).', '.prepare($rs[0]['idintervento']).', '.prepare($rs[0]['costo_diritto_chiamata']).', '.prepare($rs[0]['ore_lavoro']).', '.prepare($rs[0]['costo_orario']).', '.prepare($rs[0]['costo_km']).', '.prepare($id_record).')')) {
|
||||
if ($dbo->query('INSERT INTO co_contratti(numero, nome, idagente, data_bozza, data_accettazione, data_rifiuto, data_conclusione, rinnovabile, giorni_preavviso_rinnovo, budget, descrizione, idstato, idreferente, validita, esclusioni, idanagrafica, idpagamento, costo_diritto_chiamata, ore_lavoro, costo_orario, costo_km, idcontratto_prev) VALUES('.prepare($numero).', '.prepare($rs[0]['nome']).', '.prepare($rs[0]['idagente']).', NOW(), '.prepare(date('Y-m-d', strtotime($rs[0]['data_conclusione'].' +1 day'))).', "", '.prepare(date('Y-m-d', strtotime($rs[0]['data_conclusione'].' +'.$giorni_add.' day'))).', '.prepare($rs[0]['rinnovabile']).', '.prepare($rs[0]['giorni_preavviso_rinnovo']).', '.prepare($rs[0]['budget']).', '.prepare($rs[0]['descrizione']).', '.prepare($rs[0]['idstato']).', '.prepare($rs[0]['idreferente']).', '.prepare($rs[0]['validita']).', '.prepare($rs[0]['esclusioni']).', '.prepare($rs[0]['idanagrafica']).', '.prepare($rs[0]['idpagamento']).', '.prepare($rs[0]['costo_diritto_chiamata']).', '.prepare($rs[0]['ore_lavoro']).', '.prepare($rs[0]['costo_orario']).', '.prepare($rs[0]['costo_km']).', '.prepare($id_record).')')) {
|
||||
$new_idcontratto = $dbo->lastInsertedID();
|
||||
|
||||
$dbo->query('INSERT INTO co_contratti_tipiintervento(idcontratto, idtipointervento, costo_ore, costo_km, costo_dirittochiamata, costo_ore_tecnico, costo_km_tecnico, costo_dirittochiamata_tecnico) SELECT '.prepare($new_idcontratto).', idtipointervento, costo_ore, costo_km, costo_dirittochiamata, costo_ore_tecnico, costo_km_tecnico, costo_dirittochiamata_tecnico FROM co_contratti_tipiintervento AS z WHERE idcontratto='.prepare($id_record));
|
||||
|
||||
// Replico le righe del contratto
|
||||
$rs = $dbo->fetchArray('SELECT * FROM co_righe2_contratti WHERE idcontratto='.prepare($id_record));
|
||||
$rs = $dbo->fetchArray('SELECT * FROM co_righe_contratti WHERE idcontratto='.prepare($id_record));
|
||||
|
||||
for ($i = 0; $i < sizeof($rs); ++$i) {
|
||||
$dbo->query('INSERT INTO co_righe2_contratti(idcontratto, descrizione, subtotale, um, qta) VALUES('.prepare($new_idcontratto).', '.prepare($rs[$i]['descrizione']).', '.prepare($rs[$i]['subtotale']).', '.prepare($rs[$i]['um']).', '.prepare($rs[$i]['qta']).')');
|
||||
$dbo->query('INSERT INTO co_righe_contratti(idcontratto, descrizione, subtotale, um, qta) VALUES('.prepare($new_idcontratto).', '.prepare($rs[$i]['descrizione']).', '.prepare($rs[$i]['subtotale']).', '.prepare($rs[$i]['um']).', '.prepare($rs[$i]['qta']).')');
|
||||
}
|
||||
|
||||
// Replicazione degli impianti
|
||||
@ -320,7 +319,7 @@ switch (get('op')) {
|
||||
if (post('op') !== null && post('op') != 'update') {
|
||||
aggiorna_sconto([
|
||||
'parent' => 'co_contratti',
|
||||
'row' => 'co_righe2_contratti',
|
||||
'row' => 'co_righe_contratti',
|
||||
], [
|
||||
'parent' => 'id',
|
||||
'row' => 'idcontratto',
|
||||
|
@ -2,17 +2,19 @@
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
$id_anagrafica = !empty(get('idanagrafica')) ? get('idanagrafica') : $user['idanagrafica'];
|
||||
|
||||
?><form action="" method="post" id="add-form">
|
||||
<input type="hidden" name="op" value="add">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
{[ "type": "text", "label": "<?php echo tr('Nome'); ?>", "name": "nome", "required": 1, "value": "" ]}
|
||||
{[ "type": "text", "label": "<?php echo tr('Nome'); ?>", "name": "nome", "required": 1 ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "<?php echo tr('Cliente'); ?>", "name": "idanagrafica", "required": 1, "value": "<?php echo $idanagrafica; ?>", "ajax-source": "clienti" ]}
|
||||
{[ "type": "select", "label": "<?php echo tr('Cliente'); ?>", "name": "idanagrafica", "required": 1, "value": "<?php echo $id_anagrafica; ?>", "ajax-source": "clienti" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -4,18 +4,27 @@ include_once __DIR__.'/../../../core.php';
|
||||
|
||||
switch ($resource) {
|
||||
case 'contratti':
|
||||
$query = 'SELECT co_contratti.id AS id, CONCAT(numero, " ", nome) AS descrizione FROM co_contratti INNER JOIN an_anagrafiche ON co_contratti.idanagrafica=an_anagrafiche.idanagrafica |where| ORDER BY id';
|
||||
$query = 'SELECT co_contratti.id AS id, CONCAT("Contratto ", numero, " del ", DATE_FORMAT(data_bozza, "%d/%m/%Y"), " - ", nome, " [", (SELECT `descrizione` FROM `co_staticontratti` WHERE `co_staticontratti`.`id` = `idstato`) , "]") AS descrizione, (SELECT SUM(subtotale) FROM co_righe_contratti WHERE idcontratto=co_contratti.id) AS totale, (SELECT SUM(sconto) FROM co_righe_contratti WHERE idcontratto=co_contratti.id) AS sconto FROM co_contratti INNER JOIN an_anagrafiche ON co_contratti.idanagrafica=an_anagrafiche.idanagrafica |where| ORDER BY id';
|
||||
|
||||
foreach ($elements as $element) {
|
||||
$filter[] = 'id='.prepare($element);
|
||||
}
|
||||
|
||||
$where[] = 'an_anagrafiche.idanagrafica='.prepare($superselect['idanagrafica']);
|
||||
$where[] = 'idstato IN (SELECT `id` FROM co_staticontratti WHERE pianificabile = 1)';
|
||||
|
||||
$stato = !empty($superselect['stato']) ? $superselect['stato'] : 'pianificabile';
|
||||
$where[] = 'idstato IN (SELECT `id` FROM co_staticontratti WHERE '.$stato.' = 1)';
|
||||
|
||||
if (!empty($superselect['non_fatturato'])) {
|
||||
$where[] = 'id NOT IN (SELECT idcontratto FROM co_righe_documenti WHERE idcontratto IS NOT NULL)';
|
||||
}
|
||||
|
||||
if (!empty($search)) {
|
||||
$search_fields[] = 'nome LIKE '.prepare('%'.$search.'%');
|
||||
}
|
||||
|
||||
$custom['totale'] = 'totale';
|
||||
$custom['sconto'] = 'sconto';
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -2,13 +2,13 @@
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
$rs_documento = $dbo->fetchArray("SELECT * FROM co_righe_documenti WHERE idcontratto=".prepare($id_record));
|
||||
if(sizeof($rs_documento)>0){
|
||||
echo "
|
||||
<button type=\"button\" class=\"btn btn-info\" disabled>
|
||||
<i class=\"fa fa-magic\"></i> ".tr('Crea fattura').'...
|
||||
$rs_documento = $dbo->fetchArray('SELECT * FROM co_righe_documenti WHERE idcontratto='.prepare($id_record));
|
||||
if (sizeof($rs_documento) > 0) {
|
||||
echo '
|
||||
<button type="button" class="btn btn-info" disabled>
|
||||
<i class="fa fa-magic"></i> '.tr('Crea fattura').'...
|
||||
</button>';
|
||||
}else{
|
||||
} else {
|
||||
echo "
|
||||
<button type=\"button\" class=\"btn btn-info\" onclick=\"if( confirm('Creare una fattura per questo contratto?') ){fattura_da_contratto();}\">
|
||||
<i class=\"fa fa-magic\"></i> ".tr('Crea fattura').'...
|
||||
|
@ -31,9 +31,9 @@ $_SESSION['superselect']['idanagrafica'] = $records[0]['idanagrafica'];
|
||||
|
||||
{[ "type": "select", "label": "<?php echo tr('Cliente'); ?>", "name": "idanagrafica", "id": "idanagrafica_c", "required": 1, "value": "$idanagrafica$", "ajax-source": "clienti" ]}
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "select", "label": "<?php echo tr('Sede'); ?>", "name": "idsede", "values": "query=SELECT 0 AS id, 'Sede legale' AS descrizione UNION SELECT id, CONCAT_WS( ' - ', nomesede, citta ) AS descrizione FROM an_sedi WHERE idanagrafica='$idanagrafica$'", "value": "$idsede$", "ajax-source": "sedi", "extra": "<?php echo $readonly; ?>" ]}
|
||||
{[ "type": "select", "label": "<?php echo tr('Sede'); ?>", "name": "idsede", "values": "query=SELECT 0 AS id, 'Sede legale' AS descrizione UNION SELECT id, CONCAT_WS( ' - ', nomesede, citta ) AS descrizione FROM an_sedi WHERE idanagrafica='$idanagrafica$'", "value": "$idsede$", "ajax-source": "sedi" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
@ -50,7 +50,7 @@ $_SESSION['superselect']['idanagrafica'] = $records[0]['idanagrafica'];
|
||||
<div class="col-md-3">
|
||||
{[ "type": "select", "label": "<?php echo tr('Referente'); ?>", "name": "idreferente", "value": "$idreferente$", "ajax-source": "referenti" ]}
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "text", "label": "<?php echo tr('Nome'); ?>", "name": "nome", "required": 1, "value": "$nome$" ]}
|
||||
</div>
|
||||
@ -68,7 +68,7 @@ $_SESSION['superselect']['idanagrafica'] = $records[0]['idanagrafica'];
|
||||
<div class="col-md-2">
|
||||
{[ "type": "number", "label": "<?php echo tr('Preavviso per rinnovo'); ?>", "name": "giorni_preavviso_rinnovo", "decimals": "0", "value": "$giorni_preavviso_rinnovo$", "icon-after": "giorni" ]}
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-md-2">
|
||||
{[ "type": "date", "label": "<?php echo tr('Data bozza'); ?>", "maxlength": 10, "name": "data_bozza", "value": "$data_bozza$" ]}
|
||||
</div>
|
||||
@ -96,7 +96,7 @@ $_SESSION['superselect']['idanagrafica'] = $records[0]['idanagrafica'];
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "select", "multiple": "1", "label": "<?php echo tr('Impianti'); ?>", "name": "matricolaimpianto[]", "values": "query=SELECT idanagrafica, id AS id, nome AS descrizione FROM my_impianti WHERE idanagrafica='$idanagrafica$' ORDER BY descrizione", "value": "$matricoleimpianti$" ]}
|
||||
{[ "type": "select", "multiple": "1", "label": "<?php echo tr('Impianti'); ?>", "name": "matricolaimpianto[]", "values": "query=SELECT idanagrafica, id AS id, IF(nome = '', matricola, CONCAT(matricola, ' - ', nome)) AS descrizione FROM my_impianti WHERE idanagrafica='$idanagrafica$' ORDER BY descrizione", "value": "$matricoleimpianti$" ]}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@ -342,7 +342,7 @@ if (!empty($records[0]['idcontratto_prev'])) {
|
||||
}
|
||||
?>
|
||||
|
||||
<form action='<?=$rootdir?>/editor.php?id_module=<?=Modules::get('Fatture di vendita')['id']?>' method='post' id='form_creafattura'>
|
||||
<form action='<?php echo $rootdir; ?>/editor.php?id_module=<?php echo Modules::get('Fatture di vendita')['id']; ?>' method='post' id='form_creafattura'>
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
<input type='hidden' name='op' value='fattura_da_contratto'>
|
||||
<input type="hidden" name="id_record" value="<?php echo $id_record; ?>">
|
||||
@ -370,11 +370,11 @@ if (!empty($records[0]['idcontratto_prev'])) {
|
||||
$("#data_accettazione").trigger("dp.change");
|
||||
$("#data_rifiuto").trigger("dp.change");
|
||||
});
|
||||
|
||||
|
||||
function fattura_da_contratto(){
|
||||
$('#form_creafattura').submit();
|
||||
}
|
||||
|
||||
|
||||
$('#idanagrafica_c').change( function(){
|
||||
session_set('superselect,idanagrafica', $(this).val(), 0);
|
||||
|
||||
@ -418,7 +418,7 @@ if (!empty($fatture)) {
|
||||
|
||||
?>
|
||||
|
||||
{( "name": "filelist_and_upload", "id_module": "<?php echo $id_module; ?>", "id_record": "<?php echo $id_record; ?>" )}
|
||||
{( "name": "filelist_and_upload", "id_module": "<?php echo $id_module; ?>", "id_record": "<?php echo $id_record; ?>", "ajax": "true" )}
|
||||
|
||||
<a class="btn btn-danger ask" data-backto="record-list">
|
||||
<i class="fa fa-trash"></i> <?php echo tr('Elimina'); ?>
|
||||
|
@ -1,137 +0,0 @@
|
||||
<?php
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
/**
|
||||
* Questa funzione rimuove un articolo dal ddt data e lo riporta in magazzino
|
||||
* $idarticolo integer codice dell'articolo da scollegare dall'ordine
|
||||
* $idordine integer codice dell'ordine da cui scollegare l'articolo.
|
||||
*/
|
||||
function rimuovi_articolo_dapreventivo($idarticolo, $idpreventivo, $idriga)
|
||||
{
|
||||
global $dbo;
|
||||
global $dir;
|
||||
|
||||
// Leggo la quantità di questo articolo nell'ordine
|
||||
$query = 'SELECT qta, subtotale FROM co_righe_preventivi WHERE id='.prepare($idriga);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$qta = floatval($rs[0]['qta']);
|
||||
$subtotale = $rs[0]['subtotale'];
|
||||
|
||||
// Elimino la riga dall'ordine
|
||||
$dbo->query('DELETE FROM co_righe_preventivi WHERE id='.prepare($idriga));
|
||||
}
|
||||
|
||||
/**
|
||||
* Ricalcola i costi aggiuntivi in ordine (rivalsa inps, ritenuta d'acconto, marca da bollo)
|
||||
* Deve essere eseguito ogni volta che si aggiunge o toglie una riga
|
||||
* $idordine int ID del ordine
|
||||
* $idrivalsainps int ID della rivalsa inps da applicare. Se omesso viene utilizzata quella impostata di default
|
||||
* $idritenutaacconto int ID della ritenuta d'acconto da applicare. Se omesso viene utilizzata quella impostata di default
|
||||
* $bolli float Costi aggiuntivi delle marche da bollo. Se omesso verrà usata la cifra predefinita.
|
||||
*/
|
||||
function ricalcola_costiagg_preventivo($idpreventivo, $idrivalsainps = '', $idritenutaacconto = '', $bolli = '')
|
||||
{
|
||||
global $dbo;
|
||||
global $dir;
|
||||
|
||||
// Se ci sono righe nel ordine faccio i conteggi, altrimenti azzero gli sconti e le spese aggiuntive (inps, ritenuta, marche da bollo)
|
||||
$query = 'SELECT COUNT(id) AS righe FROM co_righe_preventivi WHERE idpreventivo='.prepare($idpreventivo);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
if ($rs[0]['righe'] > 0) {
|
||||
$totale_imponibile = get_imponibile_preventivo($idpreventivo);
|
||||
$totale_preventivo = get_totale_preventivo($idpreventivo);
|
||||
|
||||
// Leggo la rivalsa inps se c'è (per i ordine di vendita lo leggo dalle impostazioni)
|
||||
if ($dir == 'entrata') {
|
||||
if (!empty($idrivalsainps)) {
|
||||
$idrivalsainps = get_var('Percentuale rivalsa INPS');
|
||||
}
|
||||
}
|
||||
|
||||
$query = 'SELECT percentuale FROM co_rivalsainps WHERE id='.prepare($idrivalsainps);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$rivalsainps = $totale_imponibile / 100 * $rs[0]['percentuale'];
|
||||
|
||||
// Aggiorno la rivalsa inps
|
||||
// $dbo->query("UPDATE or_ordini SET rivalsainps='$rivalsainps' WHERE id='$idordine'");
|
||||
|
||||
// Leggo la ritenuta d'acconto se c'è
|
||||
$totale_ordine = get_totale_ordine($idordine);
|
||||
|
||||
// Leggo la rivalsa inps se c'è (per i ordine di vendita lo leggo dalle impostazioni)
|
||||
if (!empty($idritenutaacconto)) {
|
||||
if ($dir == 'entrata') {
|
||||
$idritenutaacconto = get_var("Percentuale ritenuta d'acconto");
|
||||
}
|
||||
}
|
||||
|
||||
$query = 'SELECT percentuale FROM co_ritenutaacconto WHERE id='.prepare($idritenutaacconto);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$ritenutaacconto = $totale_preventivo / 100 * $rs[0]['percentuale'];
|
||||
$netto_a_pagare = $totale_preventivo - $ritenutaacconto;
|
||||
|
||||
// Leggo la marca da bollo se c'è e se il netto a pagare supera la soglia
|
||||
$bolli = str_replace(',', '.', $bolli);
|
||||
$bolli = floatval($bolli);
|
||||
if ($dir == 'uscita') {
|
||||
} else {
|
||||
$bolli = str_replace(',', '.', get_var('Importo marca da bollo'));
|
||||
if (abs($bolli) > 0 && abs($netto_a_pagare) > abs(get_var("Soglia minima per l'applicazione della marca da bollo"))) {
|
||||
$marca_da_bollo = str_replace(',', '.', $bolli);
|
||||
} else {
|
||||
$marca_da_bollo = 0.00;
|
||||
}
|
||||
|
||||
// Se l'importo è negativo può essere una nota di accredito, quindi cambio segno alla marca da bollo
|
||||
if ($netto_a_pagare < 0) {
|
||||
$marca_da_bollo *= -1;
|
||||
}
|
||||
}
|
||||
|
||||
// $dbo->query("UPDATE or_ordini SET ritenutaacconto='$ritenutaacconto', bollo='$marca_da_bollo' WHERE id='$idordine'");
|
||||
} else {
|
||||
// $dbo->query("UPDATE or_ordini SET ritenutaacconto='0', bollo='0', sconto='0', rivalsainps='0' WHERE id='$idordine'");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce lo stato dell'ordine in base alle righe.
|
||||
*/
|
||||
function get_stato_preventivo($idpreventivo)
|
||||
{
|
||||
global $dbo;
|
||||
|
||||
$rs = $dbo->fetchArray('SELECT SUM(qta) AS qta, SUM(qta_evasa) AS qta_evasa FROM co_righe_preventivi GROUP BY idpreventivo HAVING idpreventivo='.prepare($idpreventivo));
|
||||
|
||||
if ($rs[0]['qta_evasa'] > 0) {
|
||||
if ($rs[0]['qta'] > $rs[0]['qta_evasa']) {
|
||||
return 'Parzialmente evaso';
|
||||
} elseif ($rs[0]['qta'] == $rs[0]['qta_evasa']) {
|
||||
return 'Evaso';
|
||||
}
|
||||
} else {
|
||||
return 'Non evaso';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Aggiorna il budget del preventivo leggendo tutte le righe inserite.
|
||||
*
|
||||
* @deprecated 2.3
|
||||
*/
|
||||
function update_budget_preventivo($idpreventivo)
|
||||
{
|
||||
global $dbo;
|
||||
|
||||
// Totale articoli
|
||||
$rs = $dbo->fetchArray('SELECT SUM(subtotale) AS totale FROM co_righe_preventivi GROUP BY idpreventivo HAVING idpreventivo='.prepare($idpreventivo));
|
||||
$totale_articoli = $rs[0]['totale'];
|
||||
|
||||
// Totale costo ore, km e diritto di chiamata
|
||||
$rs = $dbo->fetchArray('SELECT SUM(costo_orario*ore_lavoro + costo_diritto_chiamata) AS totale FROM co_preventivi GROUP BY id HAVING id='.prepare($idpreventivo));
|
||||
$totale_lavoro = $rs[0]['totale'];
|
||||
|
||||
// Aggiorno il budget su co_preventivi
|
||||
$dbo->query('UPDATE co_preventivi SET budget='.prepare($totale_articoli + $totale_lavoro).' WHERE id='.prepare($idpreventivo));
|
||||
}
|
194
modules/contratti/plugins/actions.php
Normal file
194
modules/contratti/plugins/actions.php
Normal file
@ -0,0 +1,194 @@
|
||||
<?php
|
||||
|
||||
include_once __DIR__.'/../../../core.php';
|
||||
|
||||
include_once Modules::filepath('Fatture di vendita', 'modutil.php');
|
||||
|
||||
switch (post('op')) {
|
||||
/*
|
||||
GESTIONE ARTICOLI
|
||||
*/
|
||||
|
||||
case 'editarticolo':
|
||||
|
||||
$idriga = post('idriga');
|
||||
$idarticolo = post('idarticolo');
|
||||
$idimpianto = post('idimpianto');
|
||||
//$idautomezzo = post('idautomezzo');
|
||||
|
||||
//$idarticolo_originale = post('idarticolo_originale');
|
||||
|
||||
// Leggo la quantità attuale nell'intervento
|
||||
$q = 'SELECT qta, idautomezzo, idimpianto FROM co_righe_contratti_articoli WHERE id='.prepare($idriga);
|
||||
$rs = $dbo->fetchArray($q);
|
||||
$old_qta = $rs[0]['qta'];
|
||||
$idimpianto = $rs[0]['idimpianto'];
|
||||
//$idautomezzo = $rs[0]['idautomezzo'];
|
||||
|
||||
//$serials = array_column($dbo->select('mg_prodotti', 'serial', ['id_riga_intervento' => $idriga]), 'serial');
|
||||
|
||||
//add_movimento_magazzino($idarticolo_originale, $old_qta, ['idautomezzo' => $idautomezzo, 'idintervento' => $id_record]);
|
||||
|
||||
// Elimino questo articolo dall'intervento
|
||||
$dbo->query('DELETE FROM co_righe_contratti_articoli WHERE id='.prepare($idriga));
|
||||
|
||||
// Elimino il collegamento al componente
|
||||
//$dbo->query('DELETE FROM my_impianto_componenti WHERE idimpianto='.prepare($idimpianto).' AND idintervento='.prepare($id_record));
|
||||
|
||||
/* Ricollego l'articolo modificato all'intervento */
|
||||
/* ci può essere il caso in cui cambio idarticolo e anche qta */
|
||||
|
||||
//no break;
|
||||
|
||||
case 'addarticolo':
|
||||
|
||||
$idarticolo = post('idarticolo');
|
||||
//$idautomezzo = post('idautomezzo');
|
||||
$descrizione = post('descrizione');
|
||||
$idimpianto = post('idimpianto');
|
||||
$qta = post('qta');
|
||||
$um = post('um');
|
||||
$prezzo_vendita = post('prezzo_vendita');
|
||||
$idiva = post('idiva');
|
||||
|
||||
$sconto_unitario = $post['sconto'];
|
||||
$tipo_sconto = $post['tipo_sconto'];
|
||||
$sconto = ($tipo_sconto == 'PRC') ? ($prezzo_vendita * $sconto_unitario) / 100 : $sconto_unitario;
|
||||
$sconto = $sconto * $qta;
|
||||
|
||||
$idcontratto_riga = $post['idcontratto_riga'];
|
||||
|
||||
// Decremento la quantità
|
||||
//add_movimento_magazzino($idarticolo, -$qta, ['idautomezzo' => $idautomezzo, 'idintervento' => $id_record]);
|
||||
|
||||
// Aggiorno l'automezzo dell'intervento
|
||||
//$dbo->query('UPDATE in_interventi SET idautomezzo='.prepare($idautomezzo).' WHERE id='.prepare($id_record).' '.Modules::getAdditionalsQuery($id_module));
|
||||
|
||||
//$rsart = $dbo->fetchArray('SELECT abilita_serial, prezzo_acquisto FROM mg_articoli WHERE id='.prepare($idarticolo));
|
||||
//$prezzo_acquisto = $rsart[0]['prezzo_acquisto'];
|
||||
|
||||
//Calcolo iva
|
||||
$rs_iva = $dbo->fetchArray('SELECT * FROM co_iva WHERE id='.prepare($idiva));
|
||||
$desc_iva = $rs_iva[0]['descrizione'];
|
||||
|
||||
$iva = (($prezzo_vendita * $qta) - $sconto) * $rs_iva[0]['percentuale'] / 100;
|
||||
|
||||
// Aggiunto il collegamento fra l'articolo e l'intervento
|
||||
$idriga = $dbo->query('INSERT INTO co_righe_contratti_articoli(idarticolo, id_riga_contratto, idimpianto, idautomezzo, descrizione, prezzo_vendita, prezzo_acquisto, sconto, sconto_unitario, tipo_sconto, idiva, desc_iva, iva, qta, um, abilita_serial) VALUES ('.prepare($idarticolo).', '.prepare($idcontratto_riga).', '.(empty($idimpianto) ? 'NULL' : prepare($idimpianto)).', '.prepare($idautomezzo).', '.prepare($descrizione).', '.prepare($prezzo_vendita).', '.prepare($prezzo_acquisto).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($qta).', '.prepare($um).', '.prepare($rsart[0]['abilita_serial']).')');
|
||||
|
||||
/*if (!empty($serials)) {
|
||||
if ($old_qta > $qta) {
|
||||
$serials = array_slice($serials, 0, $qta);
|
||||
}
|
||||
|
||||
$dbo->sync('mg_prodotti', ['id_riga_intervento' => $idriga, 'dir' => 'entrata', 'id_articolo' => $idarticolo], ['serial' => $serials]);
|
||||
}*/
|
||||
|
||||
//link_componente_to_articolo($id_record, $idimpianto, $idarticolo, $qta);
|
||||
|
||||
break;
|
||||
|
||||
case 'unlink_articolo':
|
||||
|
||||
$idriga = post('idriga');
|
||||
//$idarticolo = post('idarticolo');
|
||||
|
||||
$dbo->query('DELETE FROM co_righe_contratti_articoli WHERE id='.prepare($idriga).' '.Modules::getAdditionalsQuery($id_module));
|
||||
|
||||
// Riporto la merce nel magazzino
|
||||
if (!empty($idriga) && !empty($id_record)) {
|
||||
// Leggo la quantità attuale nell'intervento
|
||||
//$q = 'SELECT qta, idautomezzo, idarticolo, idimpianto FROM co_righe_contratti_articoli WHERE id='.prepare($idriga);
|
||||
//$rs = $dbo->fetchArray($q);
|
||||
//$qta = $rs[0]['qta'];
|
||||
//$idarticolo = $rs[0]['idarticolo'];
|
||||
//$idimpianto = $rs[0]['idimpianto'];
|
||||
//$idautomezzo = $rs[0]['idautomezzo'];
|
||||
|
||||
// add_movimento_magazzino($idarticolo, $qta, ['idautomezzo' => $idautomezzo, 'idintervento' => $id_record]);
|
||||
|
||||
// Elimino questo articolo dall'intervento
|
||||
//$dbo->query('DELETE FROM mg_articoli_interventi WHERE id='.prepare($idriga).' AND idintervento='.prepare($id_record));
|
||||
|
||||
// Elimino il collegamento al componente
|
||||
//$dbo->query('DELETE FROM my_impianto_componenti WHERE idimpianto='.prepare($idimpianto).' AND idintervento='.prepare($id_record));
|
||||
|
||||
// Elimino i seriali utilizzati dalla riga
|
||||
//$dbo->query('DELETE FROM `mg_prodotti` WHERE id_articolo = '.prepare($idarticolo).' AND id_riga_intervento = '.prepare($id_record));
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
/*
|
||||
Gestione righe generiche
|
||||
*/
|
||||
case 'addriga':
|
||||
|
||||
$descrizione = post('descrizione');
|
||||
$qta = post('qta');
|
||||
$um = post('um');
|
||||
$idiva = post('idiva');
|
||||
$prezzo_vendita = post('prezzo_vendita');
|
||||
$prezzo_acquisto = post('prezzo_acquisto');
|
||||
|
||||
$sconto_unitario = $post['sconto'];
|
||||
$tipo_sconto = $post['tipo_sconto'];
|
||||
$sconto = ($tipo_sconto == 'PRC') ? ($prezzo_vendita * $sconto_unitario) / 100 : $sconto_unitario;
|
||||
$sconto = $sconto * $qta;
|
||||
|
||||
//Calcolo iva
|
||||
$rs_iva = $dbo->fetchArray('SELECT * FROM co_iva WHERE id='.prepare($idiva));
|
||||
$desc_iva = $rs_iva[0]['descrizione'];
|
||||
|
||||
$iva = (($prezzo_vendita * $qta) - $sconto) * $rs_iva[0]['percentuale'] / 100;
|
||||
|
||||
$idcontratto_riga = $post['idcontratto_riga'];
|
||||
|
||||
$dbo->query('INSERT INTO co_righe_contratti_materiali(descrizione, qta, um, prezzo_vendita, prezzo_acquisto, idiva, desc_iva, iva, sconto, sconto_unitario, tipo_sconto, id_riga_contratto) VALUES ('.prepare($descrizione).', '.prepare($qta).', '.prepare($um).', '.prepare($prezzo_vendita).', '.prepare($prezzo_acquisto).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', '.prepare($idcontratto_riga).')');
|
||||
|
||||
break;
|
||||
|
||||
case 'editriga':
|
||||
|
||||
$idriga = post('idriga');
|
||||
$descrizione = post('descrizione');
|
||||
$qta = post('qta');
|
||||
$um = post('um');
|
||||
$idiva = post('idiva');
|
||||
$prezzo_vendita = post('prezzo_vendita');
|
||||
$prezzo_acquisto = post('prezzo_acquisto');
|
||||
|
||||
$sconto_unitario = $post['sconto'];
|
||||
$tipo_sconto = $post['tipo_sconto'];
|
||||
$sconto = ($tipo_sconto == 'PRC') ? ($prezzo_vendita * $sconto_unitario) / 100 : $sconto_unitario;
|
||||
$sconto = $sconto * $qta;
|
||||
|
||||
//Calcolo iva
|
||||
$rs_iva = $dbo->fetchArray('SELECT * FROM co_iva WHERE id='.prepare($idiva));
|
||||
$desc_iva = $rs_iva[0]['descrizione'];
|
||||
|
||||
$iva = (($prezzo_vendita * $qta) - $sconto) * $rs_iva[0]['percentuale'] / 100;
|
||||
|
||||
$dbo->query('UPDATE co_righe_contratti_materiali SET '.
|
||||
' descrizione='.prepare($descrizione).','.
|
||||
' qta='.prepare($qta).','.
|
||||
' um='.prepare($um).','.
|
||||
' prezzo_vendita='.prepare($prezzo_vendita).','.
|
||||
' prezzo_acquisto='.prepare($prezzo_acquisto).','.
|
||||
' idiva='.prepare($idiva).','.
|
||||
' desc_iva='.prepare($desc_iva).','.
|
||||
' iva='.prepare($iva).','.
|
||||
' sconto='.prepare($sconto).','.
|
||||
' sconto_unitario='.prepare($sconto_unitario).','.
|
||||
' tipo_sconto='.prepare($tipo_sconto).
|
||||
' WHERE id='.prepare($idriga));
|
||||
|
||||
break;
|
||||
|
||||
case 'delriga':
|
||||
|
||||
$idriga = post('idriga');
|
||||
$dbo->query('DELETE FROM co_righe_contratti_materiali WHERE id='.prepare($idriga).' '.Modules::getAdditionalsQuery($id_module));
|
||||
|
||||
break;
|
||||
}
|
222
modules/contratti/plugins/add_articolo.php
Normal file
222
modules/contratti/plugins/add_articolo.php
Normal file
@ -0,0 +1,222 @@
|
||||
<?php
|
||||
|
||||
include_once __DIR__.'/../../../core.php';
|
||||
|
||||
// Prezzo modificabile solo se l'utente loggato è un tecnico (+ può vedere i prezzi) o se è amministratore
|
||||
$rs = $dbo->fetchArray('SELECT nome FROM zz_groups WHERE id IN(SELECT idgruppo FROM zz_users WHERE id='.prepare($_SESSION['id_utente']).')');
|
||||
for ($i = 0; $i < count($rs); ++$i) {
|
||||
$gruppi[$i] = $rs[$i]['nome'];
|
||||
}
|
||||
|
||||
//$can_edit_prezzi = (in_array('Amministratori', $gruppi)) || (get_var('Mostra i prezzi al tecnico') == 1 && (in_array('Tecnici', $gruppi)));
|
||||
|
||||
$idriga = get('idriga');
|
||||
//$idautomezzo = (get('idautomezzo') == 'undefined') ? '' : get('idautomezzo');
|
||||
|
||||
// Lettura idanagrafica cliente e percentuale di sconto/rincaro in base al listino
|
||||
$rs = $dbo->fetchArray('SELECT idanagrafica FROM co_contratti WHERE id='.prepare($id_record));
|
||||
|
||||
$idanagrafica = $rs[0]['idanagrafica'];
|
||||
|
||||
if (empty($idriga)) {
|
||||
$op = 'addarticolo';
|
||||
$button = '<i class="fa fa-plus"></i> '.tr('Aggiungi');
|
||||
|
||||
// valori default
|
||||
$idarticolo = '';
|
||||
$descrizione = '';
|
||||
$qta = 1;
|
||||
$um = '';
|
||||
|
||||
$prezzo_vendita = '0';
|
||||
$sconto_unitario = 0;
|
||||
|
||||
$idimpianto = 0;
|
||||
|
||||
$listino = $dbo->fetchArray('SELECT prc_guadagno FROM mg_listini WHERE id = (SELECT idlistino_vendite FROM an_anagrafiche WHERE idanagrafica = '.prepare($idanagrafica).')');
|
||||
if (!empty($listino[0]['prc_guadagno'])) {
|
||||
$sconto_unitario = $listino[0]['prc_guadagno'];
|
||||
$tipo_sconto = 'PRC';
|
||||
}
|
||||
|
||||
(empty($idcontratto_riga)) ? $idcontratto_riga = $dbo->fetchArray('SELECT MAX(id) AS max_idcontratto_riga FROM `co_contratti_promemoria`')[0]['max_idcontratto_riga'] : '';
|
||||
} else {
|
||||
$op = 'editarticolo';
|
||||
$button = '<i class="fa fa-edit"></i> '.tr('Modifica');
|
||||
|
||||
// carico record da modificare
|
||||
$q = "SELECT *, (SELECT codice FROM mg_articoli WHERE id=co_righe_contratti_articoli.idarticolo) AS codice_articolo, (SELECT CONCAT(codice, ' - ', descrizione) FROM mg_articoli WHERE id=co_righe_contratti_articoli.idarticolo) AS descrizione_articolo FROM co_righe_contratti_articoli WHERE id=".prepare($idriga);
|
||||
$rsr = $dbo->fetchArray($q);
|
||||
|
||||
$idarticolo = $rsr[0]['idarticolo'];
|
||||
$codice_articolo = $rsr[0]['codice_articolo'];
|
||||
$descrizione = $rsr[0]['descrizione'];
|
||||
$qta = $rsr[0]['qta'];
|
||||
$um = $rsr[0]['um'];
|
||||
$idiva = $rsr[0]['idiva'];
|
||||
|
||||
$prezzo_vendita = $rsr[0]['prezzo_vendita'];
|
||||
|
||||
$sconto_unitario = $rsr[0]['sconto_unitario'];
|
||||
$tipo_sconto = $rsr[0]['tipo_sconto'];
|
||||
|
||||
$idautomezzo = $rsr[0]['idautomezzo'];
|
||||
|
||||
$idimpianto = $rsr[0]['idimpianto'];
|
||||
$idcontratto_riga = $rsr[0]['id_riga_contratto'];
|
||||
}
|
||||
|
||||
/*
|
||||
Form di inserimento
|
||||
*/
|
||||
echo '
|
||||
|
||||
<form id="add-articoli" action="'.$rootdir.'/modules/contratti/plugins/actions.php" method="post">
|
||||
<input type="hidden" name="op" value="'.$op.'">
|
||||
<input type="hidden" name="idriga" value="'.$idriga.'">
|
||||
|
||||
<input type="hidden" name="idcontratto_riga" value="'.$idcontratto_riga.'">';
|
||||
|
||||
if (!empty($idarticolo)) {
|
||||
echo '
|
||||
<input type="hidden" id="idarticolo_originale" name="idarticolo_originale" value="'.$idarticolo.'">';
|
||||
}
|
||||
|
||||
// Articolo
|
||||
echo '
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "select", "label": "'.tr('Articolo').'", "name": "idarticolo", "required": 1, "value": "'.$idarticolo.'", "ajax-source": "articoli" ]}
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
// Descrizione
|
||||
echo '
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "textarea", "label": "'.tr('Descrizione').'", "name": "descrizione", "id": "descrizione_articolo", "required": 1, "value": '.json_encode($descrizione).' ]}
|
||||
</div>
|
||||
</div>
|
||||
<br>';
|
||||
|
||||
// Quantità
|
||||
echo '
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
{[ "type": "number", "label": "'.tr('Q.tà').'", "name": "qta", "required": 1, "value": "'.$qta.'", "decimals": "qta" ]}
|
||||
</div>';
|
||||
|
||||
// Unità di misura
|
||||
echo '
|
||||
<div class="col-md-4">
|
||||
{[ "type": "select", "label": "'.tr('Unità di misura').'", "name": "um", "value": "'.$um.'", "ajax-source": "misure" ]}
|
||||
</div>';
|
||||
|
||||
// Impianto
|
||||
echo '
|
||||
<div class="col-md-4">
|
||||
{[ "type": "select", "multiple": "0", "label": "'.tr('Impianto').'", "name": "idimpianto", "values": "query=SELECT my_impianti.id AS id, my_impianti.nome AS descrizione FROM my_impianti_contratti INNER JOIN my_impianti ON my_impianti_contratti.idimpianto = my_impianti.id WHERE my_impianti_contratti.idcontratto = '.$id_record.' ORDER BY descrizione", "value": "'.$matricoleimpianti.'", "extra":"'.$readonly.'" ]}
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
// Iva
|
||||
echo '
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
{[ "type": "select", "label": "'.tr('Iva').'", "name": "idiva", "required": 1, "value": "'.$idiva.'", "values": "query=SELECT * FROM co_iva ORDER BY descrizione ASC" ]}
|
||||
</div>';
|
||||
|
||||
// Prezzo di vendita
|
||||
echo '
|
||||
<div class="col-md-4">
|
||||
{[ "type": "number", "label": "'.tr('Costo unitario').'", "name": "prezzo_vendita", "required": 1, "value": "'.$prezzo_vendita.'", "icon-after": "€" ]}
|
||||
</div>';
|
||||
|
||||
// Sconto
|
||||
echo '
|
||||
<div class="col-md-4">
|
||||
{[ "type": "number", "label": "'.tr('Sconto unitario').'", "name": "sconto", "icon-after": "choice|untprc|'.$tipo_sconto.'", "value": "'.$sconto_unitario.'" ]}
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
// Informazioni aggiuntive
|
||||
/*echo '
|
||||
<div class="row" id="prezzi_articolo">
|
||||
<div class="col-md-4 text-center">
|
||||
<button type="button" class="btn btn-sm btn-info btn-block disabled" onclick="$(\'#prezzi\').toggleClass(\'hide\'); $(\'#prezzi\').load(\''.$rootdir."/ajax_complete.php?module=Articoli&op=getprezzi&idarticolo=' + $('#idarticolo option:selected').val() + '&idanagrafica=".$idanagrafica.'\');" disabled>
|
||||
<i class="fa fa-search"></i> '.tr('Visualizza ultimi prezzi (cliente)').'
|
||||
</button>
|
||||
<div id="prezzi" class="hide"></div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4 text-center">
|
||||
<button type="button" class="btn btn-sm btn-info btn-block disabled" onclick="$(\'#prezziacquisto\').toggleClass(\'hide\'); $(\'#prezziacquisto\').load(\''.$rootdir."/ajax_complete.php?module=Articoli&op=getprezziacquisto&idarticolo=' + $('#idarticolo option:selected').val() + '&idanagrafica=".$idanagrafica.'\');" disabled>
|
||||
<i class="fa fa-search"></i> '.tr('Visualizza ultimi prezzi (acquisto)').'
|
||||
</button>
|
||||
<div id="prezziacquisto" class="hide"></div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4 text-center">
|
||||
<button type="button" class="btn btn-sm btn-info btn-block disabled" onclick="$(\'#prezzivendita\').toggleClass(\'hide\'); $(\'#prezzivendita\').load(\''.$rootdir."/ajax_complete.php?module=Articoli&op=getprezzivendita&idarticolo=' + $('#idarticolo option:selected').val() + '&idanagrafica=".$idanagrafica.'\');" disabled>
|
||||
<i class="fa fa-search"></i> '.tr('Visualizza ultimi prezzi (vendita)').'
|
||||
</button>
|
||||
<div id="prezzivendita" class="hide"></div>
|
||||
</div>
|
||||
</div>
|
||||
<br>';*/
|
||||
|
||||
echo '
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
$("#idarticolo").on("change", function(){
|
||||
$("#prezzi_articolo button").attr("disabled", !$(this).val());
|
||||
if($(this).val()){
|
||||
$("#prezzi_articolo button").removeClass("disabled");
|
||||
|
||||
session_set("superselect,idarticolo", $(this).val(), 0);
|
||||
$data = $(this).selectData();
|
||||
|
||||
$("#prezzo_vendita").val($data.prezzo_vendita);
|
||||
$("#descrizione_articolo").val($data.descrizione);
|
||||
$("#idiva").selectSet($data.idiva_vendita, $data.iva_vendita);
|
||||
$("#um").selectSetNew($data.um, $data.um);
|
||||
}else{
|
||||
$("#prezzi_articolo button").addClass("disabled");
|
||||
}
|
||||
|
||||
$("#prezzi").html("");
|
||||
$("#prezzivendita").html("");
|
||||
$("#prezziacquisto").html("");
|
||||
});
|
||||
});
|
||||
</script>';
|
||||
|
||||
echo '
|
||||
|
||||
<!-- PULSANTI -->
|
||||
<div class="row">
|
||||
<div class="col-md-12 text-right">
|
||||
<button type="submit" class="btn btn-primary pull-right">'.$button.'</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>';
|
||||
|
||||
echo '
|
||||
<script src="'.$rootdir.'/lib/init.js"></script>';
|
||||
|
||||
?>
|
||||
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() {
|
||||
$('#add-articoli').ajaxForm({
|
||||
success: function(){
|
||||
$('#bs-popup2').modal('hide');
|
||||
|
||||
// Ricarico gli articoli
|
||||
$('#articoli').load(globals.rootdir + '/modules/contratti/plugins/ajax_articoli.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&idcontratto_riga=<?php echo $idcontratto_riga; ?>');
|
||||
|
||||
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
135
modules/contratti/plugins/add_righe.php
Normal file
135
modules/contratti/plugins/add_righe.php
Normal file
@ -0,0 +1,135 @@
|
||||
<?php
|
||||
|
||||
include_once __DIR__.'/../../../core.php';
|
||||
|
||||
$idriga = filter('idriga');
|
||||
|
||||
//Lettura idanagrafica cliente e percentuale di sconto/rincaro in base al listino
|
||||
//$rs = $dbo->fetchArray('SELECT idanagrafica, (SELECT prc_guadagno FROM mg_listini WHERE id=(SELECT idlistino_vendite FROM an_anagrafiche WHERE idanagrafica=.in_interventi.idanagrafica)) AS prc_sconto FROM in_interventi WHERE id='.prepare($id_record));
|
||||
//$idanagrafica = $rs[0]['idanagrafica'];
|
||||
//$prc_sconto = $rs[0]['prc_sconto'];
|
||||
|
||||
if (empty($idriga)) {
|
||||
$op = 'addriga';
|
||||
$button = '<i class="fa fa-plus"></i> '.tr('Aggiungi');
|
||||
|
||||
// valori default
|
||||
$descrizione = '';
|
||||
$qta = 1;
|
||||
$um = '';
|
||||
$prezzo_vendita = '0';
|
||||
$prezzo_acquisto = '0';
|
||||
|
||||
if (!empty($rs[0]['prc_guadagno'])) {
|
||||
$sconto_unitario = $rs[0]['prc_guadagno'];
|
||||
$tipo_sconto = 'PRC';
|
||||
}
|
||||
|
||||
(empty($idcontratto_riga)) ? $idcontratto_riga = $dbo->fetchArray('SELECT MAX(id) AS max_idcontratto_riga FROM `co_contratti_promemoria`')[0]['max_idcontratto_riga'] : '';
|
||||
} else {
|
||||
$op = 'editriga';
|
||||
$button = '<i class="fa fa-edit"></i> '.tr('Modifica');
|
||||
|
||||
// carico record da modificare
|
||||
$q = 'SELECT * FROM co_righe_contratti_materiali WHERE id='.prepare($idriga);
|
||||
$rsr = $dbo->fetchArray($q);
|
||||
|
||||
$descrizione = $rsr[0]['descrizione'];
|
||||
$qta = $rsr[0]['qta'];
|
||||
$um = $rsr[0]['um'];
|
||||
$idiva = $rsr[0]['idiva'];
|
||||
$prezzo_vendita = $rsr[0]['prezzo_vendita'];
|
||||
$prezzo_acquisto = $rsr[0]['prezzo_acquisto'];
|
||||
$idcontratto_riga = $rsr[0]['id_riga_contratto'];
|
||||
|
||||
$sconto_unitario = $rsr[0]['sconto_unitario'];
|
||||
$tipo_sconto = $rsr[0]['tipo_sconto'];
|
||||
}
|
||||
|
||||
/*
|
||||
Form di inserimento
|
||||
<form id="add-righe" action="'.$rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'&idcontratto_riga='.$idcontratto_riga.'" method="post">
|
||||
*/
|
||||
echo '
|
||||
<form id="add-righe" action="'.$rootdir.'/modules/contratti/plugins/actions.php" method="post">
|
||||
<input type="hidden" name="op" value="'.$op.'">
|
||||
<input type="hidden" name="idriga" value="'.$idriga.'">
|
||||
|
||||
|
||||
<input type="hidden" name="idcontratto_riga" value="'.$idcontratto_riga.'">';
|
||||
|
||||
// Descrizione
|
||||
echo '
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "textarea", "label": "'.tr('Descrizione').'", "id": "descrizione_riga", "name": "descrizione", "required": 1, "value": '.json_encode($descrizione).' ]}
|
||||
</div>
|
||||
</div>
|
||||
<br>';
|
||||
|
||||
// Quantità
|
||||
echo '
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
{[ "type": "number", "label": "'.tr('Q.tà').'", "name": "qta", "required": 1, "value": "'.$qta.'", "decimals": "qta" ]}
|
||||
</div>';
|
||||
|
||||
// Unità di misura
|
||||
echo '
|
||||
<div class="col-md-4">
|
||||
{[ "type": "select", "label": "'.tr('Unità di misura').'", "name": "um", "value": "'.$um.'", "ajax-source": "misure" ]}
|
||||
</div>';
|
||||
|
||||
// Iva
|
||||
echo '
|
||||
<div class="col-md-4">
|
||||
{[ "type": "select", "label": "'.tr('Iva').'", "name": "idiva", "required": 1, "value": "'.$idiva.'", "values": "query=SELECT * FROM co_iva ORDER BY descrizione ASC" ]}
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
// Prezzo di acquisto
|
||||
echo '
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
{[ "type": "number", "label": "'.tr('Prezzo di acquisto (un.)').'", "name": "prezzo_acquisto", "required": 1, "value": "'.$prezzo_acquisto.'", "icon-after": "€" ]}
|
||||
</div>';
|
||||
|
||||
// Prezzo di vendita
|
||||
echo '
|
||||
<div class="col-md-4">
|
||||
{[ "type": "number", "label": "'.tr('Prezzo di vendita (un.)').'", "name": "prezzo_vendita", "required": 1, "value": "'.$prezzo_vendita.'", "icon-after": "€" ]}
|
||||
</div>';
|
||||
|
||||
// Sconto unitario
|
||||
echo '
|
||||
<div class="col-md-4">
|
||||
{[ "type": "number", "label": "'.tr('Sconto unitario').'", "name": "sconto", "icon-after": "choice|untprc|'.$tipo_sconto.'", "value": "'.$sconto_unitario.'" ]}
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
echo '
|
||||
<!-- PULSANTI -->
|
||||
<div class="row">
|
||||
<div class="col-md-12 text-right">
|
||||
<button type="submit" class="btn btn-primary pull-right">'.$button.'</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>';
|
||||
|
||||
echo '
|
||||
<script src="'.$rootdir.'/lib/init.js"></script>';
|
||||
|
||||
?>
|
||||
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() {
|
||||
$('#add-righe').ajaxForm({
|
||||
success: function(){
|
||||
$('#bs-popup2').modal('hide');
|
||||
|
||||
// Ricarico le righe
|
||||
$('#righe').load(globals.rootdir + '/modules/contratti/plugins/ajax_righe.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&idcontratto_riga=<?php echo $idcontratto_riga; ?>');
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
@ -19,22 +19,29 @@ echo '
|
||||
// Data
|
||||
echo '
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
{[ "type": "date", "label": "'.tr('Data').'", "name": "data", "required": 1, "class": "text-center", "value": "-now-", "extra": "" ]}
|
||||
<div class="col-md-4">
|
||||
{[ "type": "date", "label": "'.tr('Data').'", "name": "data", "required": 1, "class": "text-center", "value": "-now-" ]}
|
||||
</div>';
|
||||
|
||||
// Tipo di documento
|
||||
echo '
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "'.tr('Tipo di fattura').'", "name": "idtipodocumento", "required": 1, "values": "query=SELECT * FROM co_tipidocumento WHERE dir=\'entrata\'", "extra": "" ]}
|
||||
<div class="col-md-4">
|
||||
{[ "type": "select", "label": "'.tr('Tipo di fattura').'", "name": "idtipodocumento", "required": 1, "values": "query=SELECT * FROM co_tipidocumento WHERE dir=\'entrata\'" ]}
|
||||
</div>';
|
||||
|
||||
// Sezionale
|
||||
echo '
|
||||
<div class="col-md-4">
|
||||
{[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_segment", "required": 1, "values": "query=SELECT id, name AS descrizione FROM zz_segments WHERE id_module='.Modules::get('Fatture di vendita')['id'].' ORDER BY name", "value":"'.$_SESSION['m'.Modules::get('Fatture di vendita')['id']]['id_segment'].'" ]}
|
||||
</div>
|
||||
|
||||
</div>';
|
||||
|
||||
// Note
|
||||
echo '
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "textarea", "label": "'.tr('Descrizione').'", "name": "note", "value": "Rata '.$n_rata.' del contratto numero '.$numero.', zona '.$zona.'", "extra": "" ]}
|
||||
{[ "type": "textarea", "label": "'.tr('Descrizione').'", "name": "note", "value": "Rata '.$n_rata.' del contratto numero '.$numero.', zona '.$zona.'" ]}
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
|
@ -4,59 +4,170 @@ include_once __DIR__.'/../../../core.php';
|
||||
|
||||
//<form action="plugin_editor.php?id_plugin=$id_plugin$&id_module=$id_module$&id_parent=$id_parent$" method="post" role="form">
|
||||
|
||||
$idcontratto_riga = $get['idcontratto_riga'];
|
||||
$qp = 'SELECT *, (SELECT data_conclusione FROM co_contratti WHERE id = '.$id_record.' ) AS data_conclusione, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=co_righe_contratti.idtipointervento) AS tipointervento FROM co_righe_contratti WHERE id = '.$idcontratto_riga;
|
||||
$rsp = $dbo->fetchArray($qp);
|
||||
//nuovo promemoria
|
||||
$data_richiesta = date('d/m/Y');
|
||||
$disabled = '';
|
||||
$hide = 'hide';
|
||||
$op = 'edit-pianifica';
|
||||
|
||||
$data_richiesta = readDate($rsp[0]['data_richiesta']);
|
||||
//mi ricavo informazioni del contratto
|
||||
$data_conclusione = $dbo->fetchArray('SELECT `data_conclusione` FROM `co_contratti` WHERE `id` = '.prepare($id_record))[0]['data_conclusione'];
|
||||
$idanagrafica = $dbo->fetchArray('SELECT `idanagrafica` FROM `co_contratti` WHERE `id` = '.prepare($id_record))[0]['idanagrafica'];
|
||||
|
||||
$list = '\"1\":\"'.tr('Pianificare a partire da oggi ').date('d/m/Y').'\"';
|
||||
|
||||
//promemoria esistente
|
||||
if (!empty($get['idcontratto_riga'])) {
|
||||
$idcontratto_riga = $get['idcontratto_riga'];
|
||||
$qp = 'SELECT *, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=co_contratti_promemoria.idtipointervento) AS tipointervento, (SELECT tempo_standard FROM in_tipiintervento WHERE idtipointervento = co_contratti_promemoria.idtipointervento) AS tempo_standard FROM co_contratti_promemoria WHERE id = '.$idcontratto_riga;
|
||||
$rsp = $dbo->fetchArray($qp);
|
||||
|
||||
$data_richiesta = readDate($rsp[0]['data_richiesta']);
|
||||
$matricoleimpianti = trim($rsp[0]['idimpianti']);
|
||||
$idsede = $rsp[0]['idsede'];
|
||||
$tempo_standard = $rsp[0]['tempo_standard'];
|
||||
|
||||
$readonly = 'readonly';
|
||||
$hide = '';
|
||||
$list .= ', \"0\":\"'.tr('Pianificare a partire da questo promemoria ').$data_richiesta.'\"';
|
||||
|
||||
$op = 'pianificazione';
|
||||
}
|
||||
|
||||
//se non è impostata idcontratto_riga allora sono in fase di inserimento di nuovo promemoria e mi calcolo il prossimo id per co_contratti_promemoria
|
||||
(empty($idcontratto_riga)) ? $idcontratto_riga = $dbo->fetchArray('SELECT MAX(id) AS max_idcontratto_riga FROM `co_contratti_promemoria`')[0]['max_idcontratto_riga'] : '';
|
||||
(empty($idcontratto_riga)) ? $idcontratto_riga = 1 : '';
|
||||
|
||||
//orari inizio fine interventi (8h standard)
|
||||
$orario_inizio = '09:00';
|
||||
$orario_fine = '17:00';
|
||||
$orario_fine = (!empty($tempo_standard)) ? date('H:i', strtotime($orario_inizio) + ((60 * 60) * $tempo_standard)) : '17:00';
|
||||
|
||||
echo '
|
||||
<form id="add_form" action="'.$rootdir.'/editor.php?id_module='.Modules::get('Contratti')['id'].'&id_record='.$id_record.'&idcontratto_riga='.$idcontratto_riga.'" method="post">
|
||||
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
<input type="hidden" name="op" value="pianificazione">
|
||||
<input type="hidden" name="op" value="'.$op.'">';
|
||||
|
||||
<div class="row">
|
||||
|
||||
|
||||
<div class="col-md-7">
|
||||
{[ "type": "select", "label": "'.tr('Tipo intervento').'", "name": "idtipointervento", "id": "idtipointervento_", "values": "query=SELECT idtipointervento AS id, descrizione FROM in_tipiintervento ORDER BY descrizione ASC", "value": "'.$rsp[0]['idtipointervento'].'", "extra": "disabled" ]}
|
||||
echo '
|
||||
<!-- DATI PROMEMORIA? -->
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">'.tr('Dati').'</h3>
|
||||
</div>
|
||||
|
||||
<div class="panel-body">
|
||||
|
||||
<div class="col-md-5">
|
||||
{[ "type": "number", "label": "'.tr('Intervallo').'", "name": "intervallo", "class": "", "decimals": 0, "required": 1, "icon-after": "GG", "min-value": "1" ]}
|
||||
</div>
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "date", "label": "'.tr('Data promemoria').'", "name": "data_richiesta", "required": 1, "value": "'.$data_richiesta.'", "extra":"'.$readonly.'" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "'.tr('Tipo intervento').'", "name": "idtipointervento", "required": 1, "id": "idtipointervento_", "values": "query=SELECT idtipointervento AS id, descrizione FROM in_tipiintervento ORDER BY descrizione ASC", "value": "'.$rsp[0]['idtipointervento'].'", "extra": "'.$readonly.'", "ajax-source": "tipiintervento" ]}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "multiple": "1", "label": "'.tr('Impianti').'", "name": "idimpianti[]", "values": "query=SELECT my_impianti.id AS id, my_impianti.nome AS descrizione FROM my_impianti_contratti INNER JOIN my_impianti ON my_impianti_contratti.idimpianto = my_impianti.id WHERE my_impianti_contratti.idcontratto = '.$id_record.' ORDER BY descrizione", "value": "'.$matricoleimpianti.'", "extra":"'.$readonly.'" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "'.tr('Sede').'", "name": "idsede_c", "values": "query=SELECT 0 AS id, \'Sede legale\' AS descrizione UNION SELECT id, CONCAT( CONCAT_WS( \' (\', CONCAT_WS(\', \', `nomesede`, `citta`), `indirizzo` ), \')\') AS descrizione FROM an_sedi WHERE idanagrafica='.$idanagrafica.'", "value": "'.$idsede.'", "extra":"'.$readonly.'" ]}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-12">
|
||||
{[ "type": "textarea", "label": "'.tr('Descrizione').'", "name": "richiesta", "id": "richiesta_", "extra": "'.$readonly.'", "value": "'.$rsp[0]['richiesta'].'" ]}
|
||||
</div>
|
||||
|
||||
</div>';
|
||||
|
||||
?>
|
||||
|
||||
<!-- ARTICOLI -->
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title"><?php echo tr('Materiale da utilizzare'); ?></h3>
|
||||
</div>
|
||||
|
||||
<div class="panel-body">
|
||||
<div id="articoli">
|
||||
<?php include $docroot.'/modules/contratti/plugins/ajax_articoli.php'; ?>
|
||||
</div>
|
||||
|
||||
<?php if (empty($readonly)) {
|
||||
?>
|
||||
<button type="button" class="btn btn-primary" data-title="<?php echo tr('Aggiungi articolo'); ?>" data-target="#bs-popup2" data-toggle="modal" data-href="<?php echo $rootdir; ?>/modules/contratti/plugins/add_articolo.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&idcontratto_riga=<?php echo $idcontratto_riga; ?>" ><i class="fa fa-plus"></i> <?php echo tr('Aggiungi articolo'); ?>...</button>
|
||||
<?php
|
||||
} ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- SPESE AGGIUNTIVE -->
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title"><?php echo tr('Altre spese previste'); ?></h3>
|
||||
</div>
|
||||
|
||||
<div class="panel-body">
|
||||
<div id="righe">
|
||||
<?php include $docroot.'/modules/contratti/plugins/ajax_righe.php'; ?>
|
||||
</div>
|
||||
|
||||
<?php if (empty($readonly)) {
|
||||
?>
|
||||
<button type="button" class="btn btn-primary" data-title="<?php echo tr('Aggiungi altre spese'); ?>" data-target="#bs-popup2" data-toggle="modal" data-href="<?php echo $rootdir; ?>/modules/contratti/plugins/add_righe.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&idcontratto_riga=<?php echo $idcontratto_riga; ?>"><i class="fa fa-plus"></i> <?php echo tr('Aggiungi altre spese'); ?>...</button>
|
||||
<?php
|
||||
} ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
|
||||
echo '
|
||||
|
||||
{( "name": "filelist_and_upload", "id_record": "'.$idcontratto_riga.'", "id_module": "'.$id_module.'", "id_plugin": "'.$id_plugin.'", '.((!empty($readonly)) ? '"readonly": 1' : '"readonly": 0').' )}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-12">
|
||||
{[ "type": "textarea", "label": "'.tr('Descrizione').'", "placeholder": "'.tr('Descrizione').'", "name": "richiesta", "id": "richiesta_", "extra": "readonly", "value": "'.$rsp[0]['richiesta'].'" ]}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="row">
|
||||
|
||||
|
||||
|
||||
<!--div class="col-md-8">
|
||||
{[ "type": "checkbox", "label": "'.tr('Pianifica anche date passate').'", "name": "date_passate", "value": "0", "help": "", "placeholder": "'.tr('Pianificare promemoria anche con date precedenti ad oggi: ').date('d/m/Y').'" ]}
|
||||
</div-->
|
||||
<!--div class="col-md-8">
|
||||
{[ "type": "checkbox", "label": "'.tr('Pianifica anche date passate').'", "name": "date_passate", "value": "0", "placeholder": "'.tr('Pianificare promemoria anche con date precedenti ad oggi: ').date('d/m/Y').'" ]}
|
||||
</div-->
|
||||
|
||||
';
|
||||
|
||||
echo '
|
||||
<!-- PIANIFICAZIONE CICLICA? -->
|
||||
<div class="panel panel-primary '.$hide.'">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">'.tr('Promemoria ciclico?').'</h3>
|
||||
</div>
|
||||
|
||||
<div class="panel-body">';
|
||||
|
||||
echo '<div class="row">
|
||||
<div class="col-md-2">
|
||||
{[ "type": "number", "label": "'.tr('Intervallo').'", "name": "intervallo", "decimals": 0, "required": 1, "icon-after": "GG", "min-value": "1" ]}
|
||||
</div>';
|
||||
|
||||
?>
|
||||
|
||||
<div class="col-md-7">
|
||||
{[ "type": "select", "label": "<?php echo tr('Inizio pianificazione'); ?>", "name": "parti_da_oggi", "values": "list= \"0\":\"<?php echo tr('Pianificare a partire da questo promemoria ').$data_richiesta; ?>\", \"1\":\"<?php echo tr('Pianificare a partire da oggi ').date('d/m/Y'); ?>\"", "value": "" ]}
|
||||
{[ "type": "select", "label": "<?php echo tr('Inizio pianificazione'); ?>", "name": "parti_da_oggi", "values": "list=<?php echo $list; ?>" ]}
|
||||
</div>
|
||||
|
||||
<?php
|
||||
@ -64,21 +175,35 @@ echo '
|
||||
echo '
|
||||
|
||||
|
||||
<div class="col-md-5">
|
||||
{[ "type": "date", "label": "'.tr('Fine pianificazione <small>(Data conclusione contratto)</small>').'", "name": "data_conclusione", "id": "data_conclusione_", "extra": "readonly", "value": "'.$rsp[0]['data_conclusione'].'" ]}
|
||||
<div class="col-md-3">
|
||||
{[ "type": "date", "label": "'.tr('Fine pianificazione').'", "help": "'.tr('Data conclusione contratto').'", "name": "data_conclusione", "id": "data_conclusione_", "extra": "readonly", "value": "'.$data_conclusione.'" ]}
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
echo '
|
||||
<!-- PIANIFICARE INTERVENTI? -->
|
||||
<div class="panel panel-primary '.$hide.'">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">'.tr('Pianificare interventi?').'</h3>
|
||||
</div>
|
||||
|
||||
<div class="panel-body">
|
||||
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "checkbox", "label": "'.tr('Pianifica anche l\'intervento').'", "name": "pianifica_intervento", "value": "0", "help": "", "placeholder": "'.tr('Pianificare già l\'intervento ').'" ]}
|
||||
{[ "type": "checkbox", "label": "'.tr('Pianifica anche l\'intervento').'", "name": "pianifica_intervento", "value": "0", "placeholder": "'.tr('Pianificare già l\'intervento ').'" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "select", "label": "'.tr('Tecnici').'", "multiple": "1", "name": "idtecnico[]", "required": 0, "ajax-source": "tecnici", "value": "", "extra": "disabled" ]}
|
||||
{[ "type": "select", "label": "'.tr('Tecnici').'", "multiple": "1", "name": "idtecnico[]", "required": 0, "ajax-source": "tecnici", "extra": "disabled" ]}
|
||||
</div>
|
||||
|
||||
|
||||
@ -90,13 +215,10 @@ echo '
|
||||
{[ "type": "time", "label": "'.tr('Orario fine').'", "name": "orario_fine", "required": 0, "value": "'.$orario_fine.'", "extra": "disabled" ]}
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PULSANTI -->
|
||||
<div class="row">
|
||||
@ -113,9 +235,9 @@ echo '
|
||||
|
||||
echo '
|
||||
<script>
|
||||
$( document ).ready(function() {
|
||||
$(document).ready(function() {
|
||||
|
||||
$( "#pianifica_intervento" ).click(function() {
|
||||
$("#pianifica_intervento").click(function() {
|
||||
|
||||
if ($(this).is(":checked")){
|
||||
$("#idtecnico").removeAttr("disabled");
|
||||
|
165
modules/contratti/plugins/ajax_articoli.php
Normal file
165
modules/contratti/plugins/ajax_articoli.php
Normal file
@ -0,0 +1,165 @@
|
||||
<?php
|
||||
|
||||
include_once __DIR__.'/../../../core.php';
|
||||
|
||||
include_once Modules::filepath('Articoli', 'modutil.php');
|
||||
|
||||
//$query = 'SELECT *, (SELECT codice FROM mg_articoli WHERE id=mg_articoli_interventi.idarticolo) AS codice, mg_articoli_interventi.id AS idriga, (SELECT prc_guadagno FROM mg_listini WHERE id=(SELECT idlistino_vendite FROM an_anagrafiche WHERE idanagrafica=(SELECT idanagrafica FROM in_interventi WHERE id=mg_articoli_interventi.idintervento) ) ) AS prc_guadagno FROM mg_articoli_interventi WHERE idintervento='.prepare($id_record).' '.Modules::getAdditionalsQuery('Magazzino');
|
||||
//$rs = $dbo->fetchArray($query);
|
||||
|
||||
if (!empty($get['idcontratto_riga'])) {
|
||||
$idcontratto_riga = $get['idcontratto_riga'];
|
||||
}
|
||||
|
||||
$query = 'SELECT * FROM co_righe_contratti_articoli WHERE id_riga_contratto='.prepare($idcontratto_riga).' '.Modules::getAdditionalsQuery('Magazzino').' ORDER BY id ASC';
|
||||
$rs = $dbo->fetchArray($query);
|
||||
|
||||
if (!empty($rs)) {
|
||||
echo '
|
||||
<table class="table table-striped table-condensed table-hover table-bordered">
|
||||
<tr>
|
||||
<th>'.tr('Articolo').'</th>
|
||||
<th width="8%">'.tr('Q.tà').'</th>';
|
||||
|
||||
if (Auth::admin() || $_SESSION['gruppo'] != 'Tecnici') {
|
||||
echo '
|
||||
<th width="15%">'.tr('Prezzo di acquisto').'</th>';
|
||||
}
|
||||
|
||||
if (Auth::admin() || $_SESSION['gruppo'] != 'Tecnici') {
|
||||
echo '
|
||||
<th width="15%">'.tr('Prezzo di vendita').'</th>
|
||||
<th width="10%">'.tr('Iva').'</th>
|
||||
<th width="15%">'.tr('Imponibile').'</th>';
|
||||
}
|
||||
|
||||
if (!$records[0]['flag_completato']) {
|
||||
echo '
|
||||
<th width="80"></th>';
|
||||
}
|
||||
echo '
|
||||
</tr>';
|
||||
|
||||
foreach ($rs as $r) {
|
||||
$extra = '';
|
||||
$mancanti = 0;
|
||||
|
||||
// Individuazione dei seriali
|
||||
if (!empty($r['idarticolo']) && !empty($r['abilita_serial'])) {
|
||||
$serials = array_column($dbo->fetchArray('SELECT serial FROM mg_prodotti WHERE serial IS NOT NULL AND id_riga_intervento='.prepare($r['id'])), 'serial');
|
||||
$mancanti = $r['qta'] - count($serials);
|
||||
|
||||
if ($mancanti > 0) {
|
||||
$extra = 'class="warning"';
|
||||
} else {
|
||||
$mancanti = 0;
|
||||
}
|
||||
}
|
||||
|
||||
echo '
|
||||
<tr '.$extra.'>
|
||||
<td>
|
||||
<input type="hidden" name="id" value="'.$r['id'].'">
|
||||
'.Modules::link('Articoli', $r['idarticolo'], (!empty($r['codice']) ? $r['codice'].' - ' : '').$r['descrizione']);
|
||||
|
||||
// Info extra (lotto, serial, altro)
|
||||
if (!empty($r['abilita_serial'])) {
|
||||
if (!empty($mancanti)) {
|
||||
echo '
|
||||
<br><b><small class="text-danger">'.tr('_NUM_ serial mancanti', [
|
||||
'_NUM_' => $mancanti,
|
||||
]).'</small></b>';
|
||||
}
|
||||
if (!empty($serials)) {
|
||||
echo '
|
||||
<br>'.tr('SN').': '.implode(', ', $serials);
|
||||
}
|
||||
}
|
||||
|
||||
echo '
|
||||
</td>';
|
||||
|
||||
// Quantità
|
||||
echo '
|
||||
<td class="text-right">
|
||||
'.Translator::numberToLocale($r['qta'], 'qta').' '.$r['um'].'
|
||||
</td>';
|
||||
|
||||
if (Auth::admin() || $_SESSION['gruppo'] != 'Tecnici') {
|
||||
echo '
|
||||
<td class="text-right">
|
||||
'.Translator::numberToLocale($r['prezzo_acquisto']).' €
|
||||
</td>';
|
||||
}
|
||||
|
||||
if (Auth::admin() || $_SESSION['gruppo'] != 'Tecnici') {
|
||||
// Prezzo unitario
|
||||
echo '
|
||||
<td class="text-right">
|
||||
'.Translator::numberToLocale($r['prezzo_vendita']).' €';
|
||||
|
||||
if ($r['sconto_unitario'] > 0) {
|
||||
echo '
|
||||
<br><span class="label label-danger">
|
||||
- '.tr('sconto _TOT_ _TYPE_', [
|
||||
'_TOT_' => Translator::numberToLocale($r['sconto_unitario']),
|
||||
'_TYPE_' => ($r['tipo_sconto'] == 'PRC' ? '%' : '€'),
|
||||
]).'
|
||||
</span>';
|
||||
}
|
||||
|
||||
echo '
|
||||
</td>';
|
||||
|
||||
echo '
|
||||
<td class="text-right">
|
||||
<span>'.Translator::numberToLocale($r['iva']).'</span> €';
|
||||
echo '
|
||||
</td>';
|
||||
|
||||
// Prezzo di vendita
|
||||
echo '
|
||||
<td class="text-right">
|
||||
<span class="prezzo_articolo">'.Translator::numberToLocale(sum($r['prezzo_vendita'] * $r['qta'], -$r['sconto'])).'</span> €
|
||||
</td>';
|
||||
}
|
||||
|
||||
// Pulsante per riportare nel magazzino centrale.
|
||||
// Visibile solo se l'intervento non è stato nè fatturato nè completato.
|
||||
if (!$records[0]['flag_completato']) {
|
||||
echo '
|
||||
<td>';
|
||||
|
||||
/*if ($r['abilita_serial']) {
|
||||
echo '
|
||||
<button type="button" class="btn btn-info btn-xs" data-toggle="tooltip" onclick="launch_modal(\''.tr('Modifica articoli').'\', \''.$rootdir.'/modules/fatture/add_serial.php?id_module='.$id_module.'&id_record='.$id_record.'&idarticolo='.$r['idriga'].'&idriga='.$r['id'].'\', 1);"><i class="fa fa-barcode"></i></button>';
|
||||
}*/
|
||||
|
||||
if (empty($readonly)) {
|
||||
echo '
|
||||
<button type="button" class="btn btn-warning btn-xs" data-title="'.tr('Modifica spesa').'" onclick="launch_modal(\'Modifica spesa\', \''.$rootdir.'/modules/contratti/plugins/add_articolo.php?id_module='.$id_module.'&id_record='.$id_record.'&idriga='.$r['id'].'\', 1, \'#bs-popup2\');" >
|
||||
<i class="fa fa-edit"></i></button>
|
||||
<button type="button" class="btn btn-danger btn-xs" data-toggle="tooltip" title="'.tr('Elimina materiale').'" onclick="if(confirm(\''.tr('Eliminare questo materiale?').'\') ){ ritorna_al_magazzino(\''.$r['id'].'\'); }"><i class="fa fa-angle-double-left"></i> <i class="fa fa-truck"></i></button>';
|
||||
}
|
||||
|
||||
echo '
|
||||
</td>';
|
||||
}
|
||||
echo '
|
||||
</tr>';
|
||||
}
|
||||
|
||||
echo '
|
||||
</table>';
|
||||
}
|
||||
?>
|
||||
<script type="text/javascript">
|
||||
function ritorna_al_magazzino( id ){
|
||||
$.post(globals.rootdir + '/modules/contratti/plugins/actions.php', {op: 'unlink_articolo', idriga: id, id_record: '<?php echo $id_record; ?>', id_module: '<?php echo $id_module; ?>' }, function(data, result){
|
||||
if( result == 'success' ){
|
||||
// ricarico l'elenco degli articoli
|
||||
$('#articoli').load(globals.rootdir + '/modules/contratti/plugins/ajax_articoli.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&idcontratto_riga=<?php echo $idcontratto_riga; ?>');
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
121
modules/contratti/plugins/ajax_righe.php
Normal file
121
modules/contratti/plugins/ajax_righe.php
Normal file
@ -0,0 +1,121 @@
|
||||
<?php
|
||||
|
||||
include_once __DIR__.'/../../../core.php';
|
||||
|
||||
if (!empty($get['idcontratto_riga'])) {
|
||||
$idcontratto_riga = $get['idcontratto_riga'];
|
||||
}
|
||||
|
||||
$query = 'SELECT * FROM co_righe_contratti_materiali WHERE id_riga_contratto='.prepare($idcontratto_riga).' '.Modules::getAdditionalsQuery('Magazzino').' ORDER BY id ASC';
|
||||
$rs2 = $dbo->fetchArray($query);
|
||||
|
||||
if (count($rs2) > 0) {
|
||||
echo '
|
||||
<table class="table table-striped table-condensed table-hover table-bordered">
|
||||
<tr>
|
||||
<th>'.tr('Descrizione').'</th>
|
||||
<th width="8%">'.tr('Q.tà').'</th>
|
||||
<th width="15%">'.tr('Prezzo di acquisto').'</th>';
|
||||
|
||||
if (Auth::admin() || $_SESSION['gruppo'] != 'Tecnici') {
|
||||
echo '
|
||||
<th width="15%">'.tr('Prezzo di vendita').'</th>
|
||||
<th width="10%">'.tr('Iva').'</th>
|
||||
<th width="15%">'.tr('Subtotale').'</th>';
|
||||
}
|
||||
|
||||
if (!$records[0]['flag_completato']) {
|
||||
echo '
|
||||
<th width="80"></th>';
|
||||
}
|
||||
echo '
|
||||
</tr>';
|
||||
|
||||
foreach ($rs2 as $r) {
|
||||
echo '
|
||||
<tr>
|
||||
<td>
|
||||
<input type="hidden" name="id" value="'.$r['id'].'">
|
||||
'.nl2br($r['descrizione']).'
|
||||
</td>';
|
||||
|
||||
// Quantità
|
||||
echo '
|
||||
<td class="text-right">
|
||||
'.Translator::numberToLocale($r['qta'], 'qta').' '.$r['um'].'
|
||||
</td>';
|
||||
|
||||
//Costo unitario
|
||||
echo '
|
||||
<td class="text-right">
|
||||
'.Translator::numberToLocale($r['prezzo_acquisto']).' €
|
||||
</td>';
|
||||
|
||||
if (Auth::admin() || $_SESSION['gruppo'] != 'Tecnici') {
|
||||
// Prezzo unitario
|
||||
$netto = $r['prezzo_vendita'] - $r['sconto_unitario'];
|
||||
|
||||
echo '
|
||||
<td class="text-right">
|
||||
'.Translator::numberToLocale($r['prezzo_vendita']).' €';
|
||||
|
||||
if ($r['sconto_unitario'] > 0) {
|
||||
echo '
|
||||
<br><span class="label label-danger">
|
||||
- '.tr('sconto _TOT_ _TYPE_', [
|
||||
'_TOT_' => Translator::numberToLocale($r['sconto_unitario']),
|
||||
'_TYPE_' => ($r['tipo_sconto'] == 'PRC' ? '%' : '€'),
|
||||
]).'
|
||||
</span>';
|
||||
}
|
||||
|
||||
echo '
|
||||
</td>';
|
||||
|
||||
echo '
|
||||
<td class="text-right">
|
||||
<span>'.Translator::numberToLocale($r['iva']).'</span> €';
|
||||
echo '
|
||||
</td>';
|
||||
|
||||
// Prezzo di vendita
|
||||
echo '
|
||||
<td class="text-right">
|
||||
<span class="prezzo_articolo">'.Translator::numberToLocale(sum($r['prezzo_vendita'] * $r['qta'], -$r['sconto'])).'</span> €
|
||||
</td>';
|
||||
}
|
||||
|
||||
// Pulsante per riportare nel magazzino centrale.
|
||||
// Visibile solo se l'intervento non è stato nè fatturato nè completato.
|
||||
if (empty($readonly)) {
|
||||
echo '
|
||||
<td>
|
||||
|
||||
<button type="button" class="btn btn-warning btn-xs" data-title="'.tr('Modifica spesa').'" onclick="launch_modal(\'Modifica spesa\', \''.$rootdir.'/modules/contratti/plugins/add_righe.php?id_module='.$id_module.'&id_record='.$id_record.'&idriga='.$r['id'].'\', 1, \'#bs-popup2\');" >
|
||||
<i class="fa fa-edit"></i></button>
|
||||
|
||||
|
||||
<button type="button" class="btn btn-danger btn-xs" data-toggle="tooltip" onclick="if(confirm(\''.tr('Eliminare questa spesa?').'\')){ elimina_riga( \''.$r['id'].'\' ); }"><i class="fa fa-trash"></i></button>
|
||||
</td>';
|
||||
}
|
||||
echo '
|
||||
</tr>';
|
||||
}
|
||||
|
||||
echo '
|
||||
</table>';
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
<script type="text/javascript">
|
||||
function elimina_riga( id ){
|
||||
$.post(globals.rootdir + '/modules/contratti/plugins/actions.php', { op: 'delriga', idriga: id }, function(data, result){
|
||||
if( result=='success' ){
|
||||
//ricarico l'elenco delle righe
|
||||
$('#righe').load( globals.rootdir + '/modules/contratti/plugins/ajax_righe.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&idcontratto_riga=<?php echo $idcontratto_riga; ?>');
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
@ -1,7 +1,8 @@
|
||||
<?php
|
||||
|
||||
include_once __DIR__.'/../../../core.php';
|
||||
include_once $docroot.'/modules/interventi/modutil.php';
|
||||
|
||||
include_once Modules::filepath('Interventi', 'modutil.php');
|
||||
|
||||
/*
|
||||
CONSUNTIVO
|
||||
@ -24,7 +25,7 @@ $totale = 0;
|
||||
$totale_stato = [];
|
||||
|
||||
// Tabella con riepilogo interventi
|
||||
$rsi = $dbo->fetchArray('SELECT *, in_interventi.id, (SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS inizio, (SELECT SUM(ore) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS ore, (SELECT MIN(km) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS km FROM co_righe_contratti INNER JOIN in_interventi ON co_righe_contratti.idintervento=in_interventi.id WHERE co_righe_contratti.idcontratto='.prepare($id_record).' ORDER BY co_righe_contratti.idintervento DESC');
|
||||
$rsi = $dbo->fetchArray('SELECT *, in_interventi.id, (SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS inizio, (SELECT SUM(ore) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS ore, (SELECT MIN(km) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS km FROM co_contratti_promemoria INNER JOIN in_interventi ON co_contratti_promemoria.idintervento=in_interventi.id WHERE co_contratti_promemoria.idcontratto='.prepare($id_record).' ORDER BY co_contratti_promemoria.idintervento DESC');
|
||||
if (!empty($rsi)) {
|
||||
echo '
|
||||
<table class="table table-bordered table-condensed">
|
||||
@ -151,7 +152,7 @@ if (!empty($rsi)) {
|
||||
<td>
|
||||
'.Modules::link('Articoli', $r['idarticolo'], $r['descrizione']).(!empty($extra) ? '<small class="help-block">'.implode(', ', $extra).'</small>' : '').'
|
||||
</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($r['qta']).'</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($r['qta'], 'qta').'</td>
|
||||
<td class="text-right danger">'.Translator::numberToLocale($r['prezzo_acquisto'] * $r['qta']).'</td>
|
||||
<td class="text-right success">'.Translator::numberToLocale($r['prezzo_vendita'] * $r['qta']).$sconto.'</td>
|
||||
</tr>';
|
||||
@ -184,7 +185,7 @@ if (!empty($rsi)) {
|
||||
<td>
|
||||
'.$r['descrizione'].'
|
||||
</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($r['qta']).'</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($r['qta'], 'qta').'</td>
|
||||
<td class="text-right danger">'.Translator::numberToLocale($r['prezzo_acquisto'] * $r['qta']).'</td>
|
||||
<td class="text-right success">'.Translator::numberToLocale($r['prezzo_vendita'] * $r['qta']).$sconto.'</td>
|
||||
</tr>';
|
||||
@ -268,13 +269,14 @@ if (!empty($rsi)) {
|
||||
/*
|
||||
Bilancio del contratto
|
||||
*/
|
||||
$rs = $dbo->fetchArray('SELECT SUM(subtotale) AS budget FROM co_righe2_contratti WHERE idcontratto='.prepare($id_record));
|
||||
$rs = $dbo->fetchArray('SELECT SUM(subtotale - sconto) AS budget FROM co_righe_contratti WHERE idcontratto='.prepare($id_record));
|
||||
$budget = $rs[0]['budget'];
|
||||
|
||||
$rs = $dbo->fetchArray("SELECT SUM(qta) AS totale_ore FROM `co_righe2_contratti` WHERE um='ore' AND idcontratto=".prepare($id_record));
|
||||
$rs = $dbo->fetchArray("SELECT SUM(qta) AS totale_ore FROM `co_righe_contratti` WHERE um='ore' AND idcontratto=".prepare($id_record));
|
||||
$contratto_tot_ore = $rs[0]['totale_ore'];
|
||||
|
||||
$diff = floatval($budget) - floatval($totale);
|
||||
$diff = sum($budget, -$totale_addebito);
|
||||
|
||||
if ($diff > 0) {
|
||||
$bilancio = '<span class="text-success"><big>'.Translator::numberToLocale($diff).' €</big></span>';
|
||||
} elseif ($diff < 0) {
|
||||
|
@ -2,6 +2,8 @@
|
||||
|
||||
include_once __DIR__.'/../../../core.php';
|
||||
|
||||
include_once Modules::filepath('Fatture di vendita', 'modutil.php');
|
||||
|
||||
/*
|
||||
GESTIONE ORDINI DI SERVIZIO
|
||||
*/
|
||||
@ -21,7 +23,7 @@ $mesi = [
|
||||
];
|
||||
|
||||
// Pianificazione fatture
|
||||
if ($get['op'] == 'add_fatturazione') {
|
||||
if (get('op') == 'add_fatturazione') {
|
||||
$prev_data = '';
|
||||
|
||||
// Azzero la pianificazione zone se era già stata fatta, per poter sostituire la pianificazione,
|
||||
@ -50,7 +52,7 @@ if ($get['op'] == 'add_fatturazione') {
|
||||
}
|
||||
|
||||
// Eliminazione pianificazione specifica
|
||||
elseif ($get['op'] == 'del_pianificazione') {
|
||||
elseif (get('op') == 'del_pianificazione') {
|
||||
$idpianificazione = $get['idpianificazione'];
|
||||
|
||||
$n = $dbo->fetchNum('SELECT id FROM co_ordiniservizio_pianificazionefatture WHERE id='.prepare($idpianificazione));
|
||||
@ -64,9 +66,7 @@ elseif ($get['op'] == 'del_pianificazione') {
|
||||
}
|
||||
|
||||
// Creazione fattura pianificata
|
||||
elseif ($get['op'] == 'addfattura') {
|
||||
include $docroot.'/modules/fatture/modutil.php';
|
||||
|
||||
elseif (get('op') == 'addfattura') {
|
||||
$idpianificazione = $get['idpianificazione'];
|
||||
$descrizione = post('note');
|
||||
$data = $post['data'];
|
||||
@ -78,20 +78,31 @@ elseif ($get['op'] == 'addfattura') {
|
||||
$idanagrafica = $rs[0]['idanagrafica'];
|
||||
|
||||
$dir = 'entrata';
|
||||
$idconto = get_var('Conto predefinito fatture di vendita');
|
||||
$numero = get_new_numerofattura($data);
|
||||
$id_segment = post('id_segment');
|
||||
$numero_esterno = get_new_numerosecondariofattura($data);
|
||||
|
||||
// Tipo di pagamento predefinito dall'anagrafica
|
||||
$query = 'SELECT id FROM co_pagamenti WHERE id=(SELECT idpagamento_vendite FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica).')';
|
||||
// Tipo di pagamento + banca predefinite dall'anagrafica
|
||||
$query = 'SELECT id, (SELECT idbanca_vendite FROM an_anagrafiche WHERE idanagrafica = '.prepare($idanagrafica).') AS idbanca FROM co_pagamenti WHERE id = (SELECT idpagamento_vendite AS pagamento FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica).')';
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$idpagamento = $rs[0]['id'];
|
||||
$idbanca = $rs[0]['idbanca'];
|
||||
|
||||
// Se non è stato associato un pagamento predefinito al cliente leggo il pagamento dalle impostazioni
|
||||
if ($idpagamento == '') {
|
||||
// Se la fattura è di vendita e non è stato associato un pagamento predefinito al cliente leggo il pagamento dalle impostazioni
|
||||
if ($dir == 'entrata' && $idpagamento == '') {
|
||||
$idpagamento = get_var('Tipo di pagamento predefinito');
|
||||
}
|
||||
|
||||
$query = 'INSERT INTO co_documenti(numero, numero_esterno, idanagrafica, idtipodocumento, idpagamento, data, idstatodocumento, note, idsede) VALUES ('.prepare($numero).', '.prepare($numero_esterno).', '.prepare($idanagrafica).', '.prepare($idtipodocumento).', '.prepare($idpagamento).', '.prepare($data).", (SELECT `id` FROM `co_statidocumento` WHERE `descrizione`='Bozza'), ".prepare($note).', (SELECT idsede_fatturazione FROM an_anagrafiche WHERE idanagrafica='.prpeare($idanagrafica).') )';
|
||||
// Se non è impostata la banca dell'anagrafica, uso quella del pagamento.
|
||||
if (empty($idbanca)) {
|
||||
// Banca predefinita del pagamento
|
||||
$query = 'SELECT id FROM co_banche WHERE id_pianodeiconti3 = (SELECT idconto_vendite FROM co_pagamenti WHERE id = '.prepare($idpagamento).')';
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$idbanca = $rs[0]['id'];
|
||||
}
|
||||
|
||||
$query = 'INSERT INTO co_documenti(numero, numero_esterno, idanagrafica, idtipodocumento, idpagamento, data, idstatodocumento, note, idsede, id_segment, idconto, idbanca) VALUES ('.prepare($numero).', '.prepare($numero_esterno).', '.prepare($idanagrafica).', '.prepare($idtipodocumento).', '.prepare($idpagamento).', '.prepare($data).", (SELECT `id` FROM `co_statidocumento` WHERE `descrizione`='Bozza'), ".prepare($note).', (SELECT idsede_fatturazione FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica).'), '.prepare($id_segment).', '.prepare($idconto).', '.prepare($idbanca).' )';
|
||||
$dbo->query($query);
|
||||
$iddocumento = $dbo->lastInsertedID();
|
||||
|
||||
@ -102,7 +113,7 @@ elseif ($get['op'] == 'addfattura') {
|
||||
$rs = $dbo->fetchArray('SELECT id FROM co_ordiniservizio_pianificazionefatture WHERE idcontratto='.prepare($id_record));
|
||||
|
||||
// L'importo deve essere diviso per il numero di mesi
|
||||
$rs2 = $dbo->fetchArray('SELECT SUM(subtotale) AS totale FROM co_righe2_contratti WHERE idcontratto='.prepare($id_record));
|
||||
$rs2 = $dbo->fetchArray('SELECT SUM(subtotale) AS totale FROM co_righe_contratti WHERE idcontratto='.prepare($id_record));
|
||||
$importo = $rs2[0]['totale'] / sizeof($rs);
|
||||
|
||||
// Lettura iva del cliente o predefinita
|
||||
@ -140,7 +151,7 @@ echo '
|
||||
/*
|
||||
Fatture pianificate
|
||||
*/
|
||||
$rs = $dbo->fetchArray('SELECT *, (SELECT SUM(subtotale) FROM co_righe2_contratti WHERE idcontratto='.prepare($id_record).') AS budget_contratto, (SELECT descrizione FROM an_zone WHERE id=idzona) AS zona FROM co_ordiniservizio_pianificazionefatture WHERE idcontratto='.prepare($id_record).' ORDER BY data_scadenza ASC');
|
||||
$rs = $dbo->fetchArray('SELECT *, (SELECT SUM(subtotale) FROM co_righe_contratti WHERE idcontratto='.prepare($id_record).') AS budget_contratto, (SELECT descrizione FROM an_zone WHERE id=idzona) AS zona FROM co_ordiniservizio_pianificazionefatture WHERE idcontratto='.prepare($id_record).' ORDER BY data_scadenza ASC');
|
||||
|
||||
if (empty($rs)) {
|
||||
echo '
|
||||
@ -322,7 +333,7 @@ else {
|
||||
echo '
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "'.tr('Zone di cui pianificare la fatturazione').'", "name": "idzona[]", "value": "", "values": "query=SELECT id, descrizione FROM an_zone WHERE (id IN (SELECT idzona FROM an_sedi WHERE id IN (SELECT idsede FROM my_impianti WHERE id IN (SELECT idimpianto FROM co_ordiniservizio WHERE idcontratto='.prepare($id_record).')))) OR ( id=(SELECT idzona FROM an_anagrafiche WHERE idanagrafica=(SELECT idanagrafica FROM co_contratti WHERE id='.prepare($id_record).') AND idzona=an_zone.id) ) UNION SELECT 0, \'Altro\'", "multiple": 1, "extra": "onchange=\"$(this).find(\'option\').each( function(){ if( $(this).is(\':selected\') ){ $(\'#zona_\'+$(this).val()).removeClass(\'hide\'); }else{ $(\'#zona_\'+$(this).val()).addClass(\'hide\'); } });\"" ]}
|
||||
{[ "type": "select", "label": "'.tr('Zone per le quali pianificare la fatturazione').'", "name": "idzona[]", "values": "query=SELECT id, descrizione FROM an_zone WHERE (id IN (SELECT idzona FROM an_sedi WHERE id IN (SELECT idsede FROM my_impianti WHERE id IN (SELECT idimpianto FROM co_ordiniservizio WHERE idcontratto='.prepare($id_record).')))) OR ( id=(SELECT idzona FROM an_anagrafiche WHERE idanagrafica=(SELECT idanagrafica FROM co_contratti WHERE id='.prepare($id_record).') AND idzona=an_zone.id) ) UNION SELECT 0, \'Altro\'", "multiple": 1, "extra": "onchange=\"$(this).find(\'option\').each( function(){ if( $(this).is(\':selected\') ){ $(\'#zona_\'+$(this).val()).removeClass(\'hide\'); }else{ $(\'#zona_\'+$(this).val()).addClass(\'hide\'); } });\"" ]}
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
|
@ -21,7 +21,7 @@ $mesi = [
|
||||
];
|
||||
|
||||
// Generazione ordini di servizio
|
||||
if ($get['op'] == 'add_ordineservizio') {
|
||||
if (get('op') == 'add_ordineservizio') {
|
||||
$prev_data = '';
|
||||
|
||||
// Ciclo fra le voci in arrivo dal form
|
||||
@ -49,7 +49,7 @@ if ($get['op'] == 'add_ordineservizio') {
|
||||
}
|
||||
|
||||
// Eliminazione pianificazione specifica
|
||||
elseif ($get['op'] == 'del_ordineservizio') {
|
||||
elseif (get('op') == 'del_ordineservizio') {
|
||||
$idordineservizio = $get['idordineservizio'];
|
||||
|
||||
$n = $dbo->fetchNum('SELECT id FROM co_ordiniservizio WHERE id='.prepare($idordineservizio)." AND stato='aperto'");
|
||||
|
@ -2,30 +2,55 @@
|
||||
|
||||
include_once __DIR__.'/../../../core.php';
|
||||
|
||||
include_once Modules::filepath('Articoli', 'modutil.php');
|
||||
|
||||
// Pianificazione intervento
|
||||
switch (filter('op')) {
|
||||
case 'pianifica':
|
||||
case 'add-pianifica':
|
||||
|
||||
$data_richiesta = filter('data_richiesta');
|
||||
$query = 'INSERT INTO `co_contratti_promemoria` ( `idcontratto`, `data_richiesta` ) VALUES ('.prepare($id_record).', '.prepare($data_richiesta).')';
|
||||
|
||||
if ($dbo->query($query)) {
|
||||
} else {
|
||||
$_SESSION['errors'][] = tr("Errore durante l'aggiunta del promemoria!");
|
||||
}
|
||||
break;
|
||||
|
||||
case 'edit-pianifica':
|
||||
|
||||
$idcontratto_riga = filter('idcontratto_riga');
|
||||
|
||||
$data_richiesta = filter('data_richiesta');
|
||||
|
||||
$idtipointervento = filter('idtipointervento');
|
||||
$richiesta = filter('richiesta');
|
||||
$idsede = filter('idsede_c');
|
||||
$idimpianti = implode(',', $post['idimpianti']);
|
||||
|
||||
$query = 'INSERT INTO `co_righe_contratti`(`idcontratto`, `idtipointervento`, `data_richiesta`, `richiesta`, `idsede`) VALUES('.prepare($id_record).', '.prepare($idtipointervento).', '.prepare($data_richiesta).', '.prepare($richiesta).', '.prepare($idsede).')';
|
||||
$query = 'UPDATE co_contratti_promemoria SET idtipointervento='.prepare($idtipointervento).', data_richiesta='.prepare($data_richiesta).', richiesta='.prepare($richiesta).', idsede='.prepare($idsede).', idimpianti='.prepare($idimpianti).' WHERE id = '.prepare($idcontratto_riga);
|
||||
|
||||
if (isset($id_record)) {
|
||||
if ($dbo->query($query)) {
|
||||
$_SESSION['infos'][] = tr('Intervento pianificato!');
|
||||
$_SESSION['infos'][] = tr('Promemoria inserito!');
|
||||
} else {
|
||||
$_SESSION['errors'][] = tr("Errore durante l'aggiunta dell'intervento!");
|
||||
$_SESSION['errors'][] = tr('Errore durante la modifica del promemoria!');
|
||||
}
|
||||
}
|
||||
|
||||
redirect($rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'#tab_'.$id_plugin);
|
||||
|
||||
break;
|
||||
|
||||
// Eliminazione pianificazione
|
||||
case 'depianifica':
|
||||
|
||||
$id = filter('id');
|
||||
|
||||
$dbo->query('DELETE FROM `co_righe_contratti` WHERE id='.prepare($id));
|
||||
$dbo->query('DELETE FROM `co_contratti_promemoria` WHERE id='.prepare($id));
|
||||
$dbo->query('DELETE FROM `co_righe_contratti_materiali` WHERE id_riga_contratto='.prepare($id));
|
||||
$dbo->query('DELETE FROM `co_righe_contratti_articoli` WHERE id_riga_contratto='.prepare($id));
|
||||
|
||||
$_SESSION['infos'][] = tr('Pianificazione eliminata!');
|
||||
|
||||
redirect($rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'#tab_'.$id_plugin);
|
||||
@ -35,14 +60,17 @@ switch (filter('op')) {
|
||||
//Eliminazione tutti i promemoria di questo contratto con non hanno l'intervento associato
|
||||
case 'delete-promemoria':
|
||||
|
||||
$dbo->query('DELETE FROM `co_righe_contratti` WHERE idcontratto = '.$id_record.' AND idintervento IS NULL');
|
||||
$dbo->query('DELETE FROM `co_contratti_promemoria` WHERE idcontratto = '.$id_record.' AND idintervento IS NULL');
|
||||
$dbo->query('DELETE FROM `co_righe_contratti_materiali` WHERE id_riga_contratto IN (SELECT id FROM `co_contratti_promemoria` WHERE idcontratto = '.$id_record.' AND idintervento IS NULL ) ');
|
||||
$dbo->query('DELETE FROM `co_righe_contratti_articoli` WHERE id_riga_contratto IN (SELECT id FROM `co_contratti_promemoria` WHERE idcontratto = '.$id_record.' AND idintervento IS NULL ) ');
|
||||
|
||||
$_SESSION['errors'][] = tr('Tutti i promemoria non associati sono stati eliminati!');
|
||||
|
||||
redirect($rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'#tab_'.$id_plugin);
|
||||
|
||||
break;
|
||||
|
||||
//pianificazione
|
||||
//pianificazione ciclica
|
||||
case 'pianificazione':
|
||||
|
||||
$idcontratto_riga = filter('idcontratto_riga');
|
||||
@ -50,19 +78,24 @@ switch (filter('op')) {
|
||||
$parti_da_oggi = post('parti_da_oggi');
|
||||
|
||||
if (!empty($idcontratto_riga) && !empty($intervallo)) {
|
||||
$qp = 'SELECT *, (SELECT idanagrafica FROM co_contratti WHERE id = '.$id_record.' ) AS idanagrafica, (SELECT data_conclusione FROM co_contratti WHERE id = '.$id_record.' ) AS data_conclusione, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=co_righe_contratti.idtipointervento) AS tipointervento FROM co_righe_contratti WHERE id = '.$idcontratto_riga;
|
||||
$qp = 'SELECT *, (SELECT idanagrafica FROM co_contratti WHERE id = '.$id_record.' ) AS idanagrafica, (SELECT data_conclusione FROM co_contratti WHERE id = '.$id_record.' ) AS data_conclusione, '.
|
||||
'(SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=co_contratti_promemoria.idtipointervento) AS tipointervento FROM co_contratti_promemoria '.
|
||||
'WHERE co_contratti_promemoria.id = '.$idcontratto_riga;
|
||||
$rsp = $dbo->fetchArray($qp);
|
||||
|
||||
$idtipointervento = $rsp[0]['idtipointervento'];
|
||||
$idsede = $rsp[0]['idsede'];
|
||||
$richiesta = $rsp[0]['richiesta'];
|
||||
|
||||
$data_richiesta = $rsp[0]['data_richiesta'];
|
||||
$idimpianti = $rsp[0]['idimpianti'];
|
||||
|
||||
//mi serve per la pianificazione dei promemoria
|
||||
$data_conclusione = $rsp[0]['data_conclusione'];
|
||||
|
||||
//mi serve per la pianificazione interventi
|
||||
$idanagrafica = $rsp[0]['idanagrafica'];
|
||||
|
||||
$data_conclusione = $rsp[0]['data_conclusione'];
|
||||
$data_richiesta = $rsp[0]['data_richiesta'];
|
||||
|
||||
//se voglio pianificare anche le date precedenti ad oggi (parto da questo promemoria)
|
||||
if ($parti_da_oggi) {
|
||||
//oggi
|
||||
@ -81,12 +114,19 @@ switch (filter('op')) {
|
||||
//controllo nuova data richiesta --> solo date maggiori o uguali di [oggi o data richiesta iniziale] ma che non superano la data di fine del contratto
|
||||
if ((date('Y-m-d', strtotime($data_richiesta)) >= $min_date) && (date('Y-m-d', strtotime($data_richiesta)) <= date('Y-m-d', strtotime($data_conclusione)))) {
|
||||
//Controllo che non esista già un promemoria idcontratto, idtipointervento e data_richiesta.
|
||||
if (count($dbo->fetchArray("SELECT id FROM co_righe_contratti WHERE data_richiesta = '".$data_richiesta."' AND idtipointervento = '".$idtipointervento."' AND idcontratto = '".$id_record."' ")) == 0) {
|
||||
$query = 'INSERT INTO `co_righe_contratti`(`idcontratto`, `idtipointervento`, `data_richiesta`, `richiesta`, `idsede`) VALUES('.prepare($id_record).', '.prepare($idtipointervento).', '.prepare($data_richiesta).', '.prepare($richiesta).', '.prepare($idsede).')';
|
||||
if (count($dbo->fetchArray("SELECT id FROM co_contratti_promemoria WHERE data_richiesta = '".$data_richiesta."' AND idtipointervento = '".$idtipointervento."' AND idcontratto = '".$id_record."' ")) == 0) {
|
||||
//inserisco il nuovo promemoria
|
||||
$query = 'INSERT INTO `co_contratti_promemoria`(`idcontratto`, `idtipointervento`, `data_richiesta`, `richiesta`, `idsede`, `idimpianti` ) VALUES('.prepare($id_record).', '.prepare($idtipointervento).', '.prepare($data_richiesta).', '.prepare($richiesta).', '.prepare($idsede).', '.prepare($idimpianti).')';
|
||||
|
||||
if ($dbo->query($query)) {
|
||||
$idriga = $dbo->lastInsertedID();
|
||||
|
||||
//copio anche righe materiali nel nuovo promemoria
|
||||
$dbo->query('INSERT INTO co_righe_contratti_materiali (descrizione, qta,um,prezzo_vendita,prezzo_acquisto,idiva, desc_iva,iva,id_riga_contratto,sconto,sconto_unitario,tipo_sconto) SELECT descrizione, qta,um,prezzo_vendita,prezzo_acquisto,idiva, desc_iva,iva,'.$idriga.',sconto,sconto_unitario,tipo_sconto FROM co_righe_contratti_materiali WHERE id_riga_contratto = '.$idcontratto_riga.' ');
|
||||
|
||||
//copio righe articoli nel nuovo promemoria
|
||||
$dbo->query('INSERT INTO co_righe_contratti_articoli (idarticolo, id_riga_contratto,descrizione,prezzo_acquisto,prezzo_vendita,sconto, sconto_unitario, tipo_sconto,idiva,desc_iva,iva,idautomezzo, qta, um, abilita_serial, idimpianto) SELECT idarticolo, '.$idriga.',descrizione,prezzo_acquisto,prezzo_vendita,sconto,sconto_unitario,tipo_sconto,idiva,desc_iva,iva,idautomezzo, qta, um, abilita_serial, idimpianto FROM co_righe_contratti_articoli WHERE id_riga_contratto = '.$idcontratto_riga.' ');
|
||||
|
||||
$_SESSION['infos'][] = tr('Promemoria intervento pianificato!');
|
||||
|
||||
//pianificare anche l' intervento?
|
||||
@ -136,7 +176,25 @@ switch (filter('op')) {
|
||||
}
|
||||
|
||||
//collego l'intervento ai promemoria
|
||||
$dbo->query('UPDATE co_righe_contratti SET idintervento='.prepare($idintervento).' WHERE id='.prepare($idriga));
|
||||
$dbo->query('UPDATE co_contratti_promemoria SET idintervento='.prepare($idintervento).' WHERE id='.prepare($idriga));
|
||||
|
||||
//copio le righe dal promemoria all'intervento
|
||||
$dbo->query('INSERT INTO in_righe_interventi (descrizione, qta,um,prezzo_vendita,prezzo_acquisto,idiva,desc_iva,iva,idintervento,sconto,sconto_unitario,tipo_sconto) SELECT descrizione, qta,um,prezzo_vendita,prezzo_acquisto,idiva,desc_iva,iva,'.$idintervento.',sconto,sconto_unitario,tipo_sconto FROM co_righe_contratti_materiali WHERE id_riga_contratto = '.$idcontratto_riga.' ');
|
||||
|
||||
//copio gli articoli dal promemoria all'intervento
|
||||
$dbo->query('INSERT INTO mg_articoli_interventi (idarticolo, idintervento,descrizione,prezzo_acquisto,prezzo_vendita,sconto, sconto_unitario, tipo_sconto,idiva,desc_iva,iva,idautomezzo, qta, um, abilita_serial, idimpianto) SELECT idarticolo, '.$idintervento.',descrizione,prezzo_acquisto,prezzo_vendita,sconto,sconto_unitario,tipo_sconto,idiva,desc_iva,iva,idautomezzo, qta, um, abilita_serial, idimpianto FROM co_righe_contratti_articoli WHERE id_riga_contratto = '.$idcontratto_riga.' ');
|
||||
|
||||
// Decremento la quantità per ogni articolo copiato
|
||||
$rs_articoli = $dbo->fetchArray('SELECT * FROM mg_articoli_interventi WHERE idintervento = '.$idintervento.' ');
|
||||
foreach ($rs_articoli as $rs_articolo) {
|
||||
add_movimento_magazzino($rs_articolo['idarticolo'], -force_decimal($rs_articolo['qta']), ['idautomezzo' => $rs_articolo['idautomezzo'], 'idintervento' => $idintervento]);
|
||||
}
|
||||
|
||||
// Collego gli impianti del promemoria all' intervento appena inserito
|
||||
$rs_idimpianti = explode(',', $idimpianti);
|
||||
foreach ($rs_idimpianti as $idimpianto) {
|
||||
$dbo->query('INSERT INTO my_impianti_interventi (idintervento, idimpianto) VALUES ('.$idintervento.', '.$idimpianto.' )');
|
||||
}
|
||||
|
||||
// $_SESSION['infos'][] = tr('Intervento '.$codice.' pianificato correttamente.');
|
||||
|
||||
@ -154,7 +212,7 @@ switch (filter('op')) {
|
||||
}
|
||||
//fine ciclo while
|
||||
} else {
|
||||
$_SESSION['errors'][] = tr('Nessuna data di conclusione del contratto oppure quest\'ultima è già trascorsa, impossibile pianificare nuovi promemoria.');
|
||||
$_SESSION['errors'][] = tr('Nessuna data di conclusione del contratto oppure quest\'ultima è già trascorsa, impossibile pianificare nuovi promemoria.'.$qp);
|
||||
}
|
||||
//fine controllo data_conclusione
|
||||
} else {
|
||||
@ -166,7 +224,7 @@ switch (filter('op')) {
|
||||
}
|
||||
|
||||
// Righe già inserite
|
||||
$qp = 'SELECT *, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=co_righe_contratti.idtipointervento) AS tipointervento FROM co_righe_contratti WHERE idcontratto='.prepare($id_record).' ORDER BY data_richiesta ASC';
|
||||
$qp = 'SELECT *, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=co_contratti_promemoria.idtipointervento) AS tipointervento FROM co_contratti_promemoria WHERE idcontratto='.prepare($id_record).' ORDER BY data_richiesta ASC';
|
||||
$rsp = $dbo->fetchArray($qp);
|
||||
|
||||
$pianificabile = $dbo->fetchNum('SELECT id FROM co_staticontratti WHERE pianificabile = 1 AND descrizione = '.prepare($records[0]['stato']));
|
||||
@ -186,12 +244,15 @@ if (count($rsp) != 0) {
|
||||
<table class="table table-condensed table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>'.tr('Entro il').'</th>
|
||||
<th>'.tr('Data').'</th>
|
||||
<th>'.tr('Tipo intervento').'</th>
|
||||
<th>'.tr('Descrizione').'</th>
|
||||
<th>'.tr('Intervento collegato').'</th>
|
||||
<th>'.tr('Intervento').'</th>
|
||||
<th>'.tr('Sede').'</th>
|
||||
<th>'.tr('Opzioni').'</th>
|
||||
<th>'.tr('Impianti').'</th>
|
||||
<th>'.tr('Materiali').'</th>
|
||||
<th>'.tr('Allegati').'</th>
|
||||
<th class="text-right" >'.tr('Opzioni').'</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>';
|
||||
@ -224,9 +285,55 @@ if (count($rsp) != 0) {
|
||||
$disabled = '';
|
||||
}
|
||||
|
||||
//data_conclusione contratto
|
||||
if (date('Y', strtotime($records[0]['data_conclusione'])) < 1971) {
|
||||
$records[0]['data_conclusione'] = '';
|
||||
}
|
||||
|
||||
//info impianti
|
||||
$info_impianti = '';
|
||||
if (!empty($rsp[$i]['idimpianti'])) {
|
||||
$rsp3 = $dbo->fetchArray('SELECT id, matricola, nome FROM my_impianti WHERE id IN ('.($rsp[$i]['idimpianti']).')');
|
||||
if (!empty($rsp3)) {
|
||||
for ($a = 0; $a < count($rsp3); ++$a) {
|
||||
$info_impianti .= Modules::link('MyImpianti', $rsp3[$a]['id'], tr('_NOME_ (_MATRICOLA_)', [
|
||||
'_NOME_' => $rsp3[$a]['nome'],
|
||||
'_MATRICOLA_' => $rsp3[$a]['matricola'],
|
||||
])).'<br>';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//info materiali/articoli
|
||||
$rsp4 = $dbo->fetchArray('SELECT id, descrizione,qta,um,prezzo_vendita, \'\' AS idarticolo FROM co_righe_contratti_materiali WHERE id_riga_contratto = '.prepare($rsp[$i]['id']).'
|
||||
UNION SELECT id, descrizione,qta,um,prezzo_vendita, idarticolo FROM co_righe_contratti_articoli WHERE id_riga_contratto = '.prepare($rsp[$i]['id']));
|
||||
|
||||
$info_materiali = '';
|
||||
if (!empty($rsp4)) {
|
||||
for ($b = 0; $b < count($rsp4); ++$b) {
|
||||
$info_materiali .= tr(' _QTA_ _UM_ x _DESC_', [
|
||||
'_DESC_' => ((!empty($rsp4[$b]['idarticolo'])) ? Modules::link('Articoli', $rsp4[$b]['idarticolo'], $rsp4[$b]['descrizione']) : $rsp4[$b]['descrizione']),
|
||||
'_QTA_' => Translator::numberToLocale($rsp4[$b]['qta']),
|
||||
'_UM_' => $rsp4[$b]['um'],
|
||||
'_PREZZO_' => $rsp4[$b]['prezzo_vendita'],
|
||||
]).'<br>';
|
||||
}
|
||||
}
|
||||
|
||||
//info allegati
|
||||
$rsp5 = $dbo->fetchArray('SELECT nome, original FROM zz_files WHERE id_record = '.prepare($rsp[$i]['id']).' AND id_plugin = '.$id_plugin);
|
||||
|
||||
$info_allegati = '';
|
||||
if (!empty($rsp5)) {
|
||||
for ($b = 0; $b < count($rsp5); ++$b) {
|
||||
$info_allegati .= tr(' _NOME_ (_ORIGINAL_)', [
|
||||
'_ORIGINAL_' => $rsp5[$b]['original'],
|
||||
'_NOME_' => $rsp5[$b]['nome'],
|
||||
]).'<br>';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
echo '
|
||||
<tr>
|
||||
<td>'.Translator::dateToLocale($rsp[$i]['data_richiesta']).'<!--br><small>'.Translator::dateToLocale($records[0]['data_conclusione']).'</small--></td>
|
||||
@ -234,6 +341,9 @@ if (count($rsp) != 0) {
|
||||
<td>'.nl2br($rsp[$i]['richiesta']).'</td>
|
||||
<td>'.$info_intervento.'</td>
|
||||
<td>'.$info_sede.'</td>
|
||||
<td>'.$info_impianti.'</td>
|
||||
<td>'.$info_materiali.'</td>
|
||||
<td>'.$info_allegati.'</td>
|
||||
<td align="right">';
|
||||
|
||||
echo '
|
||||
@ -255,17 +365,25 @@ if (count($rsp) != 0) {
|
||||
</tbody>
|
||||
</table>';
|
||||
|
||||
echo '<br><div class="pull-right">';
|
||||
|
||||
if (count($rsp) > 0) {
|
||||
echo '<br><div class="pull-right"><button type="button" title="Elimina tutti i promemoria per questo contratto che non sono associati ad intervento." class="btn btn-danger ask tip" data-op="delete-promemoria" >
|
||||
<i class="fa fa-trash"></i> '.tr('Elimina promemoria').'
|
||||
</button></div>';
|
||||
echo ' <button type="button" title="Elimina tutti i promemoria per questo contratto che non sono associati ad intervento." class="btn btn-danger ask tip" data-op="delete-promemoria" >
|
||||
<i class="fa fa-trash"></i> '.tr('Elimina promemoria').'
|
||||
</button>';
|
||||
}
|
||||
|
||||
echo '</div>';
|
||||
}
|
||||
|
||||
echo ' <button type="button" title="Aggiungi un nuovo promemoria da pianificare." data-toggle="tooltip" class="btn btn-primary" id="add_promemoria">
|
||||
<i class="fa fa-plus"></i> '.tr('Nuovo promemoria').'
|
||||
</button>';
|
||||
|
||||
/*
|
||||
Nuovo intervento
|
||||
*/
|
||||
echo '
|
||||
/*echo '
|
||||
<br><h5>'.tr('Pianifica un nuovo promemoria per un intervento').':</h5>
|
||||
<form action="" method="post">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
@ -283,7 +401,7 @@ echo '
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
{[ "type": "date", "placeholder": "'.tr('Entro il').'", "name": "data_richiesta", "required": 1, "value": "" ]}
|
||||
{[ "type": "date", "placeholder": "'.tr('Entro il').'", "name": "data_richiesta", "required": 1 ]}
|
||||
</td>
|
||||
<td>
|
||||
{[ "type": "select", "placeholder": "'.tr('Tipo intervento').'", "name": "idtipointervento", "required": 1, "values": "query=SELECT idtipointervento AS id, descrizione FROM in_tipiintervento ORDER BY descrizione ASC", "value": "'.$rsp[0]['idtipointervento'].'" ]}
|
||||
@ -302,6 +420,42 @@ echo '
|
||||
<button type="submit" class="btn btn-primary"><i class="fa fa-plus"></i> '.tr('Aggiungi').'</button>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
</form>
|
||||
</form>';*/
|
||||
|
||||
echo '
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
?>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
$( "#add_promemoria" ).click(function() {
|
||||
|
||||
swal({
|
||||
title: '<?php echo tr('Aggiungere un nuovo promemoria?'); ?>',
|
||||
type: "info",
|
||||
showCancelButton: true,
|
||||
confirmButtonText: '<?php echo tr('Aggiungi'); ?>',
|
||||
confirmButtonClass: 'btn btn-lg btn-success',
|
||||
}).then(
|
||||
function (result) {
|
||||
prev_html = $("#add_promemoria").html();
|
||||
$("#add_promemoria").html("<i class='fa fa-spinner fa-pulse fa-fw'></i> <?php echo tr('Attendere...'); ?>");
|
||||
$("#add_promemoria").prop('disabled', true);
|
||||
|
||||
$.post( "<?php echo $rootdir; ?>/editor.php?id_module=<?php echo Modules::get('Contratti')['id']; ?>&id_record=<?php echo $id_record; ?>", { backto: "record-edit", op: "add-pianifica", data_richiesta: '<?php echo date('Y-m-d'); ?>' })
|
||||
.done(function( data ) {
|
||||
launch_modal('Nuovo promemoria', '<?php echo $rootdir; ?>/modules/contratti/plugins/addpianficazione.php?id_module=<?php echo Modules::get('Contratti')['id']; ?>&id_plugin=<?php echo Plugins::get('Pianificazione interventi')['id']; ?>&ref=interventi_contratti&id_record=<?php echo $id_record; ?>', 1, '#bs-popup');
|
||||
|
||||
$("#add_promemoria").html(prev_html);
|
||||
$("#add_promemoria").prop('disabled', false);
|
||||
|
||||
});
|
||||
},
|
||||
function (dismiss) {}
|
||||
);
|
||||
|
||||
|
||||
});
|
||||
</script>
|
||||
|
@ -15,7 +15,7 @@ $options = [
|
||||
];
|
||||
|
||||
// Dati della riga
|
||||
$rsr = $dbo->fetchArray('SELECT * FROM co_righe2_contratti WHERE idcontratto='.prepare($id_record).' AND id='.prepare($get['idriga']));
|
||||
$rsr = $dbo->fetchArray('SELECT * FROM co_righe_contratti WHERE idcontratto='.prepare($id_record).' AND id='.prepare($get['idriga']));
|
||||
|
||||
$result = $rsr[0];
|
||||
$result['prezzo'] = $rsr[0]['subtotale'] / $rsr[0]['qta'];
|
||||
|
@ -2,115 +2,105 @@
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
// Mostro le righe del preventivo
|
||||
$totale_preventivo = 0.00;
|
||||
$totale_imponibile = 0.00;
|
||||
$totale_iva = 0.00;
|
||||
$totale_da_evadere = 0.00;
|
||||
|
||||
/*
|
||||
ARTICOLI
|
||||
ARTICOLI + RIGHE GENERICHE
|
||||
*/
|
||||
$rs_art = $dbo->fetchArray('SELECT *, IFNULL((SELECT codice FROM mg_articoli WHERE id=idarticolo), "") AS codice FROM co_righe2_contratti WHERE idcontratto='.prepare($id_record).' ORDER BY `order`');
|
||||
$imponibile_art = 0.0;
|
||||
$iva_art = 0.0;
|
||||
$rs = $dbo->fetchArray('SELECT *, round(sconto_unitario,'.Settings::get('Cifre decimali per importi').') AS sconto_unitario, round(sconto,'.Settings::get('Cifre decimali per importi').') AS sconto, round(subtotale,'.Settings::get('Cifre decimali per importi').') AS subtotale, IFNULL((SELECT codice FROM mg_articoli WHERE id=idarticolo), "") AS codice FROM co_righe_contratti WHERE idcontratto='.prepare($id_record).' ORDER BY `order`');
|
||||
|
||||
echo '
|
||||
<table class="table table-striped table-hover table-condensed table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>'.tr('Descrizione').'</th>
|
||||
<th width="10%" class="text-center">'.tr('Q.tà').'</th>
|
||||
<th width="10%" class="text-center">'.tr('U.m.').'</th>
|
||||
<th width="12%" class="text-center">'.tr('Costo unitario').'</th>
|
||||
<th width="12%" class="text-center">'.tr('Iva').'</th>
|
||||
<th width="10%" class="text-center">'.tr('Imponibile').'</th>
|
||||
<th width="80"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tr>
|
||||
<th>'.tr('Descrizione').'</th>
|
||||
<th width="120">'.tr('Q.tà').'</th>
|
||||
<th width="80">'.tr('U.m.').'</th>
|
||||
<th width="120">'.tr('Costo unitario').'</th>
|
||||
<th width="120">'.tr('Iva').'</th>
|
||||
<th width="120">'.tr('Imponibile').'</th>
|
||||
<th width="60"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="sortable">';
|
||||
|
||||
// se ho almeno un articolo caricato mostro la riga
|
||||
if (!empty($rs_art)) {
|
||||
foreach ($rs_art as $r) {
|
||||
// descrizione
|
||||
echo '
|
||||
foreach ($rs as $r) {
|
||||
// Descrizione
|
||||
echo '
|
||||
<tr data-id="'.$r['id'].'">
|
||||
<td>';
|
||||
if (!empty($r['idarticolo'])) {
|
||||
echo Modules::link('Articoli', $r['idarticolo'], $r['codice'].' - '.$r['descrizione']);
|
||||
} else {
|
||||
echo nl2br($r['descrizione']);
|
||||
}
|
||||
if (!empty($r['idarticolo'])) {
|
||||
echo Modules::link('Articoli', $r['idarticolo'], $r['codice'].' - '.$r['descrizione']);
|
||||
} else {
|
||||
echo nl2br($r['descrizione']);
|
||||
}
|
||||
|
||||
echo '
|
||||
echo '
|
||||
</td>';
|
||||
|
||||
// q.tà
|
||||
echo '
|
||||
<td class="text-center">';
|
||||
if (empty($r['is_descrizione'])) {
|
||||
echo '
|
||||
'.Translator::numberToLocale($r['qta']);
|
||||
}
|
||||
// Q.tà
|
||||
echo '
|
||||
<td class="text-right">';
|
||||
if (empty($r['is_descrizione'])) {
|
||||
echo '
|
||||
'.Translator::numberToLocale($r['qta'], 'qta');
|
||||
}
|
||||
echo '
|
||||
</td>';
|
||||
|
||||
// um
|
||||
echo '
|
||||
// um
|
||||
echo '
|
||||
<td class="text-center">';
|
||||
if (empty($r['is_descrizione'])) {
|
||||
echo '
|
||||
if (empty($r['is_descrizione'])) {
|
||||
echo '
|
||||
'.$r['um'];
|
||||
}
|
||||
echo '
|
||||
}
|
||||
echo '
|
||||
</td>';
|
||||
|
||||
// costo unitario
|
||||
// Costo unitario
|
||||
echo '
|
||||
<td class="text-right">';
|
||||
if (empty($r['is_descrizione'])) {
|
||||
echo '
|
||||
<td class="text-center">';
|
||||
if (empty($r['is_descrizione'])) {
|
||||
echo '
|
||||
'.Translator::numberToLocale($r['subtotale'] / $r['qta']).' €';
|
||||
}
|
||||
echo'
|
||||
</td>';
|
||||
|
||||
// iva
|
||||
echo '
|
||||
<td class="text-right">';
|
||||
if (empty($r['is_descrizione'])) {
|
||||
if ($r['sconto_unitario'] > 0) {
|
||||
echo '
|
||||
'.Translator::numberToLocale($r['iva'])." €<br>
|
||||
<small class='help-block'>".$r['desc_iva'].'</small>';
|
||||
}
|
||||
echo '
|
||||
</td>';
|
||||
|
||||
// Imponibile
|
||||
echo '
|
||||
<td class="text-right">';
|
||||
if (empty($r['is_descrizione'])) {
|
||||
echo '
|
||||
'.Translator::numberToLocale($r['subtotale']).' €';
|
||||
|
||||
if ($r['sconto_unitario'] > 0) {
|
||||
echo '
|
||||
<br><small class="label label-danger">- '.tr('sconto _TOT_ _TYPE_', [
|
||||
<br><small class="label label-danger">'.tr('sconto _TOT_ _TYPE_', [
|
||||
'_TOT_' => Translator::numberToLocale($r['sconto_unitario']),
|
||||
'_TYPE_' => ($r['tipo_sconto'] == 'PRC' ? '%' : '€'),
|
||||
]).'</small>';
|
||||
}
|
||||
}
|
||||
echo '
|
||||
}
|
||||
echo'
|
||||
</td>';
|
||||
|
||||
// Possibilità di rimuovere una riga solo se il preventivo non è stato pagato
|
||||
// IVA
|
||||
echo '
|
||||
<td class="text-right">';
|
||||
if (empty($r['is_descrizione'])) {
|
||||
echo '
|
||||
'.Translator::numberToLocale($r['iva'])." €<br>
|
||||
<small class='help-block'>".$r['desc_iva'].'</small>';
|
||||
}
|
||||
echo '
|
||||
</td>';
|
||||
|
||||
// Imponibile
|
||||
echo '
|
||||
<td class="text-right">';
|
||||
if (empty($r['is_descrizione'])) {
|
||||
echo '
|
||||
'.Translator::numberToLocale($r['subtotale'] - $r['sconto']).' €';
|
||||
}
|
||||
echo '
|
||||
</td>';
|
||||
|
||||
// Possibilità di rimuovere una riga solo se il preventivo non è stato pagato
|
||||
echo '
|
||||
<td class="text-center">';
|
||||
|
||||
if ($records[0]['stato'] != 'Pagato' && empty($r['sconto_globale'])) {
|
||||
echo '
|
||||
if ($records[0]['stato'] != 'Pagato' && empty($r['sconto_globale'])) {
|
||||
echo '
|
||||
<form action="'.$rootdir.'/editor.php?id_module='.Modules::get('Contratti')['id'].'&id_record='.$id_record.'" method="post" id="delete-form-'.$r['id'].'" role="form">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
<input type="hidden" name="id_record" value="'.$id_record.'">
|
||||
@ -120,38 +110,44 @@ if (!empty($rs_art)) {
|
||||
|
||||
<div class="btn-group">';
|
||||
|
||||
echo "
|
||||
echo "
|
||||
<a class='btn btn-xs btn-warning' onclick=\"launch_modal('Modifica riga', '".$rootdir.'/modules/contratti/row-edit.php?id_module='.$id_module.'&id_record='.$id_record.'&idriga='.$r['id']."', 1 );\"><i class='fa fa-edit'></i></a>
|
||||
|
||||
<a href='javascript:;' class='btn btn-xs btn-danger' title='Rimuovi questa riga' onclick=\"if( confirm('Rimuovere questa riga dal contratto?') ){ $('#delete-form-".$r['id']."').submit(); }\"><i class='fa fa-trash'></i></a>";
|
||||
echo '
|
||||
echo '
|
||||
</div>
|
||||
</form>';
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($r['sconto_globale'])) {
|
||||
echo '
|
||||
if (empty($r['sconto_globale'])) {
|
||||
echo '
|
||||
<div class="handle clickable" style="padding:10px">
|
||||
<i class="fa fa-sort"></i>
|
||||
</div>';
|
||||
}
|
||||
}
|
||||
|
||||
echo '
|
||||
echo '
|
||||
</td>
|
||||
</tr>';
|
||||
|
||||
$iva_art += $r['iva'];
|
||||
$imponibile_art += $r['subtotale'] - $r['sconto'];
|
||||
$imponibile_nosconto += $r['subtotale'];
|
||||
$sconto_art += $r['sconto'];
|
||||
}
|
||||
}
|
||||
|
||||
// Calcoli
|
||||
$imponibile = sum(array_column($rs, 'subtotale'));
|
||||
$sconto = sum(array_column($rs, 'sconto'));
|
||||
$iva = sum(array_column($rs, 'iva'));
|
||||
|
||||
$imponibile_scontato = sum($imponibile, -$sconto);
|
||||
|
||||
$totale = sum([
|
||||
$imponibile_scontato,
|
||||
$iva,
|
||||
]);
|
||||
|
||||
echo '
|
||||
</tbody>';
|
||||
|
||||
// SCONTO
|
||||
if (abs($sconto_art) > 0) {
|
||||
if (abs($sconto) > 0) {
|
||||
// Totale imponibile scontato
|
||||
echo '
|
||||
<tr>
|
||||
@ -159,7 +155,7 @@ if (abs($sconto_art) > 0) {
|
||||
<b>'.tr('Imponibile', [], ['upper' => true]).':</b>
|
||||
</td>
|
||||
<td class="text-right">
|
||||
<span id="budget">'.Translator::numberToLocale($imponibile_nosconto).' €</span>
|
||||
<span id="budget">'.Translator::numberToLocale($imponibile).' €</span>
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>';
|
||||
@ -170,7 +166,7 @@ if (abs($sconto_art) > 0) {
|
||||
<b>'.tr('Sconto', [], ['upper' => true]).':</b>
|
||||
</td>
|
||||
<td class="text-right">
|
||||
'.Translator::numberToLocale($sconto_art).' €
|
||||
'.Translator::numberToLocale($sconto).' €
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>';
|
||||
@ -182,7 +178,7 @@ if (abs($sconto_art) > 0) {
|
||||
<b>'.tr('Imponibile scontato', [], ['upper' => true]).':</b>
|
||||
</td>
|
||||
<td class="text-right">
|
||||
'.Translator::numberToLocale($imponibile_art).' €
|
||||
'.Translator::numberToLocale($imponibile_scontato).' €
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>';
|
||||
@ -194,7 +190,7 @@ if (abs($sconto_art) > 0) {
|
||||
<b>'.tr('Imponibile', [], ['upper' => true]).':</b>
|
||||
</td>
|
||||
<td class="text-right">
|
||||
<span id="budget">'.Translator::numberToLocale($imponibile_art).' €</span>
|
||||
<span id="budget">'.Translator::numberToLocale($imponibile).' €</span>
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>';
|
||||
@ -207,7 +203,7 @@ echo '
|
||||
<b>'.tr('Iva', [], ['upper' => true]).':</b>
|
||||
</td>
|
||||
<td class="text-right">
|
||||
'.Translator::numberToLocale($iva_art).' €
|
||||
'.Translator::numberToLocale($iva).' €
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>';
|
||||
@ -219,7 +215,7 @@ echo '
|
||||
<b>'.tr('Totale', [], ['upper' => true]).':</b>
|
||||
</td>
|
||||
<td class="text-right">
|
||||
'.Translator::numberToLocale($imponibile_art + $iva_art).' €
|
||||
'.Translator::numberToLocale($totale).' €
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>';
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user