Compare commits

..

10 Commits

23 changed files with 6471 additions and 224 deletions
@@ -102,22 +102,6 @@ $noten_obj->getAll();
$sprachen = new sprache();
$sprachen->getAll(true);
$noten_array = array();
$js_noten='';
foreach ($noten_obj->result as $row)
{
$js_noten .= " noten_array['" . $row->note . "']='" . addslashes($row->bezeichnung) . "';\n";
$noten_array[$row->note]['bezeichnung'] = $row->bezeichnung;
$noten_array[$row->note]['positiv'] = $row->positiv;
$noten_array[$row->note]['aktiv'] = $row->aktiv;
$noten_array[$row->note]['lehre'] = $row->lehre;
$noten_array[$row->note]['lkt_ueberschreibbar'] = $row->lkt_ueberschreibbar;
$noten_array[$row->note]['anmerkung'] = $row->anmerkung;
foreach ($sprachen->result as $s)
$noten_array[$row->note]['bezeichnung_mehrsprachig'][$s->sprache] = $row->bezeichnung_mehrsprachig[$s->sprache];
}
$errormsg = '';
// eingetragene lv-gesamtnoten freigeben
@@ -342,7 +326,19 @@ echo '<!DOCTYPE HTML>
var noten_array = Array();
';
echo $js_noten;
$noten_array = array();
foreach ($noten_obj->result as $row)
{
echo " noten_array['" . $row->note . "']='" . addslashes($row->bezeichnung) . "';\n";
$noten_array[$row->note]['bezeichnung'] = $row->bezeichnung;
$noten_array[$row->note]['positiv'] = $row->positiv;
$noten_array[$row->note]['aktiv'] = $row->aktiv;
$noten_array[$row->note]['lehre'] = $row->lehre;
$noten_array[$row->note]['lkt_ueberschreibbar'] = $row->lkt_ueberschreibbar;
$noten_array[$row->note]['anmerkung'] = $row->anmerkung;
foreach ($sprachen->result as $s)
$noten_array[$row->note]['bezeichnung_mehrsprachig'][$s->sprache] = $row->bezeichnung_mehrsprachig[$s->sprache];
}
?>
@@ -810,16 +806,16 @@ echo $js_noten;
for(row in rows)
{
linenumber++;
if( rows[row] == '' )
if( rows[row] == '' )
{
//skip empty lines
continue;
}
zeile = rows[row].split(" ");
if( zeile.length < 2 )
{
alertMsg = alertMsg + "Zeile " + linenumber + ': '
alertMsg = alertMsg + "Zeile " + linenumber + ': '
+ 'Zu wenig Paramter - 2 erforderlich. '
+ 'Die Zeile wurde uebersprungen.' + "\n\n";
continue;
@@ -921,36 +917,36 @@ echo $js_noten;
for(row in rows)
{
linenumber++;
if( rows[row] == '' )
if( rows[row] == '' )
{
//skip empty lines
continue;
}
zeile = rows[row].split(" ");
if( zeile.length < 3 )
{
alertMsg = alertMsg + "Zeile " + linenumber + ': '
alertMsg = alertMsg + "Zeile " + linenumber + ': '
+ 'Zu wenig Paramter - 3 erforderlich. '
+ 'Die Zeile wurde uebersprungen.' + "\n\n";
continue;
}
if( zeile[1] == '' && zeile[2] == '' )
{
// ignore lines just copied from excel
// ignore lines just copied from excel
continue;
}
if( zeile[2] == '' )
if( zeile[2] == '' )
{
alertMsg = alertMsg + "Zeile " + linenumber + ': '
+ "Die Note oder Punkte fehlen. "
+ "Die Zeile wurde uebersprungen. \n\n";
continue;
continue;
}
if (CIS_GESAMTNOTE_PUNKTE == false)
if (CIS_GESAMTNOTE_PUNKTE == false)
{
// check for valid grades
if (validGrades.indexOf(zeile[2]) === -1)
@@ -962,7 +958,7 @@ echo $js_noten;
}
}
if( !zeile[1].match(/[0-9]{2}\.[0-9]{2}\.[0-9]{4}/) )
if( !zeile[1].match(/[0-9]{2}\.[0-9]{2}\.[0-9]{4}/) )
{
alertMsg = alertMsg + "Zeile " + linenumber + ': '
+ "Das Datum "+zeile[1]+" fehlt oder ist nicht zulaessig. "
@@ -251,7 +251,7 @@ else
// deshalb wird hier versucht eine passende Lehreinheit zu ermitteln.
$lehreinheit_id = getLehreinheit($db, $lvid, $student_uid, $stsem);
$response = savePruefung($lvid, $student_uid, $stsem, $lehreinheit_id, $datum, $typ, $note, $punkte);
$response = savePruefung($lvid, $student_uid, $stsem, $lehreinheit_id, $datum, $typ, $note);
echo $response;
}
else
+2
View File
@@ -1222,6 +1222,7 @@ if ($projekt->getProjekteMitarbeiter($user, true))
<td colspan="4"><SELECT name="projekt" id="projekt">
<OPTION value="">-- '.$p->t('zeitaufzeichnung/keineAuswahl').' --</OPTION>';
sort($projekt->result);
$projektfound = false;
foreach ($projekt->result as $row_projekt)
{
@@ -1975,6 +1976,7 @@ function getDataForProjectOverviewCSV($user)
}
}
sort($csvData);
//headers schreiben
$header = array('PROJEKT', 'PROJEKT KURZBEZEICHNUNG', 'PROJEKTPHASE', 'PROJEKTPHASEN ID', 'START', 'PROJEKT ENDE');
@@ -60,7 +60,7 @@ if (isset($_GET['uid']))
$rechte = new benutzerberechtigung();
$rechte->getBerechtigungen($uid);
if ($rechte->isBerechtigt('admin') || $rechte->isBerechtigt('mitarbeiter/zeitsperre') || (in_array($_GET['uid'], $untergebenen_arr)))
if ($rechte->isBerechtigt('admin') || (in_array($_GET['uid'], $untergebenen_arr)))
{
$uid = $_GET['uid'];
}
-2
View File
@@ -413,8 +413,6 @@ class projekt extends basis_db
AND mitarbeiter_uid=" . $this->db_add_param($mitarbeiter_uid);
}
$qry .= ' ORDER BY titel';
if ($result = $this->db_query($qry))
{
while ($row = $this->db_fetch_object($result))
+2 -3
View File
@@ -190,7 +190,7 @@ class projektphase extends basis_db
if(!is_null($foreignkey))
$qry .= " and projektphase_fk is NULL";
$qry .= " ORDER BY tbl_projektphase.start, tbl_projektphase.bezeichnung, projektphase_fk DESC;";
$qry .= " ORDER BY start, projektphase_fk DESC;";
if($this->db_query($qry))
{
@@ -794,8 +794,7 @@ class projektphase extends basis_db
)
)
AND mitarbeiter_uid = ".$this->db_add_param($mitarbeiter_uid)."
AND tbl_projekt.projekt_kurzbz = ".$this->db_add_param($projekt_kurzbz). "
ORDER BY tbl_projektphase.start, tbl_projektphase.bezeichnung";
AND tbl_projekt.projekt_kurzbz = ".$this->db_add_param($projekt_kurzbz);
if($result = $this->db_query($qry))
{
-1
View File
@@ -120,7 +120,6 @@ $menu=array
'name'=>'Mitarbeiter','permissions'=>array('admin','mitarbeiter','support'),
'Übersicht'=>array('name'=>'Übersicht', 'link'=>'personen/lektor_uebersicht.php', 'target'=>'main'),
'Zeitsperren'=>array('name'=>'Zeitsperren/Urlaub', 'link'=>'personen/urlaubsverwaltung.php', 'target'=>'main','permissions'=>array('mitarbeiter/zeitsperre:begrenzt')),
'Projektexport'=>array('name'=>'Projektexport', 'link'=>'personen/projektexport.php', 'target'=>'main','permissions'=>array('mitarbeiter/zeitsperre')),
),
'Betriebsmittel'=>array('name'=>'Betriebsmittel', 'link'=>'stammdaten/betriebsmittel_frameset.php', 'target'=>'main','permissions'=>array('basis/betriebsmittel')),
'AnwesenheitslistenBarcode'=>array('name'=>'Anwesenheitslisten mit Barcodes', 'link'=>'personen/anwesenheitslisten_barcode.php', 'target'=>'main','permissions'=>array('basis/person')),
@@ -71,9 +71,9 @@ class zeitaufzeichnung_import_post extends zeitaufzeichnung_import {
$this->checkPhaseInterval($this->data['projektphase_id'], $this->data['von'], $this->data['bis']);
$this->checkDienstreise($this->data['von'], $this->data['bis'], $this->data['aktivitaet_kurzbz']);
$this->checkTagesgenau($this->data['bis']);
$this->checkIfArbeitspaketZuWaehlen($this->data['projekt_kurzbz'], $this->data['projektphase_id']); // TODO löst check aus
$this->processPause($this->data['von_pause'], $this->data['bis_pause']);
$this->checkPhaseBebuchbar($this->data['projektphase_id']);
$this->checkIfArbeitspaketZuWaehlen($this->data['projekt_kurzbz'], $this->data['projektphase_id']);
$this->saveZeit();
} catch (Exception $ex) {
$this->addError($ex->getMessage());
+6146
View File
File diff suppressed because it is too large Load Diff
+33
View File
@@ -0,0 +1,33 @@
{
"name": "fhc-core",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"build": "rollup -c",
"watch": "rollup --watch -c"
},
"dependencies": {
"@vuepic/vue-datepicker": "^7.2.0",
"axios": "^1.6.8",
"primevue": "^3.29.1",
"tabulator-tables": "^5.5.2",
"vue": "^3.3.8",
"vue-router": "^4.1.3"
},
"devDependencies": {
"@rollup/plugin-alias": "^5.1.0",
"@rollup/plugin-babel": "^6.0.4",
"@rollup/plugin-commonjs": "^25.0.7",
"@rollup/plugin-json": "^6.1.0",
"@rollup/plugin-node-resolve": "^15.2.3",
"@rollup/plugin-replace": "^5.0.5",
"@rollup/plugin-terser": "^0.4.4",
"babel-plugin-transform-class-properties": "^6.24.1",
"glob": "^10.3.10",
"node-sass": "^9.0.0",
"rollup": "^4.13.2",
"rollup-plugin-postcss": "^4.0.2",
"rollup-plugin-vue": "^6.0.0"
}
}
+2 -2
View File
@@ -1,5 +1,5 @@
import {CoreFilterCmpt} from '../components/Filter.js';
import {CoreNavigationCmpt} from '../components/Navigation.js';
import {CoreFilterCmpt} from '../components/filter/Filter.js';
import {CoreNavigationCmpt} from '../components/navigation/Navigation.js';
import verticalsplit from "../components/verticalsplit/verticalsplit.js";
import searchbar from "../components/searchbar/searchbar.js";
import fhcapifactory from "./api/fhcapifactory.js";
+3 -2
View File
@@ -1,3 +1,4 @@
import { markRaw, defineAsyncComponent } from 'vue';
import {CoreRESTClient} from '../RESTClient.js';
import accessibility from "../directives/accessibility.js";
@@ -70,7 +71,7 @@ export default {
return console.error('Component missing for ' + key);
tabs[key] = {
component: Vue.markRaw(Vue.defineAsyncComponent(() => import(item.component))),
component: markRaw(defineAsyncComponent(() => import(item.component))),
title: item.title || key,
config: item.config,
key
@@ -82,7 +83,7 @@ export default {
return console.error('Component missing for ' + key);
tabs[key] = {
component: Vue.markRaw(Vue.defineAsyncComponent(() => import(item.component))),
component: markRaw(defineAsyncComponent(() => import(item.component))),
title: item.title || key,
config: item.config,
key
+1
View File
@@ -15,6 +15,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import { TabulatorFull as Tabulator } from 'tabulator-tables';
import {CoreFilterAPIs} from './API.js';
import {CoreRESTClient} from '../../RESTClient.js';
import {CoreFetchCmpt} from '../../components/Fetch.js';
+7 -5
View File
@@ -1,3 +1,5 @@
import { ref, unref, triggerRef } from 'vue';
const categories = {};
const loadingModules = {};
@@ -12,8 +14,8 @@ function reloadRefs(category) {
while (loadingModules[category].length) {
var v = loadingModules[category].pop();
v[0].value = getValueForLoadedPhrase(category, v[1], v[2]);
Vue.triggerRef(v[0]);
/*Vue.unref(v);*/
triggerRef(v[0]);
/*unref(v);*/
}
}
function loadLazy(category, val, phrase, params) {
@@ -70,16 +72,16 @@ const phrasen = {
if (!categories[category] || Object.keys(categories[category]).length === 0) {
categories[category] = undefined;
let val = Vue.ref(initialval);
let val = ref(initialval);
loadLazy(category, val, phrase, params);
return val;
}
}
var result = getValueForLoadedPhrase(category, phrase, params);
return Vue.ref(result);
return ref(result);
},
t(category, phrase, params) {
return Vue.unref(this.t_ref(category, phrase, params));
return unref(this.t_ref(category, phrase, params));
}
};
+9 -1
View File
@@ -92,16 +92,24 @@
* @param mixed message
* @return void
*/
/*
import PvConfig from "../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js";
import PvToast from "../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js";
import PvConfirm from "../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js";
import PvConfirmationService from "../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js";
*/
import { createApp } from 'vue';
import PvConfig from 'primevue/config';
import PvToast from 'primevue/toast';
import PvConfirm from 'primevue/confirmdialog';
import PvConfirmationService from 'primevue/confirmationservice';
import {CoreRESTClient} from '../RESTClient.js';
const helperAppContainer = document.createElement('div');
const helperApp = Vue.createApp({
const helperApp = createApp({
components: {
PvToast,
PvConfirm
+5 -3
View File
@@ -1,4 +1,6 @@
const categories = Vue.reactive({});
import { reactive, computed } from 'vue';
const categories = reactive({});
const loadingModules = {};
function extractCategory(obj, category) {
@@ -35,7 +37,7 @@ const phrasen = {
},
t_ref(category, phrase, params) {
console.warn('depricated');
return Vue.computed(() => this.t(category, phrase, params));
return computed(() => this.t(category, phrase, params));
},
t(category, phrase, params) {
if (params === undefined && (
@@ -49,7 +51,7 @@ const phrasen = {
console.error('invalid input', category, phrase, params);
return '';
}
let val = Vue.computed(() => {
let val = computed(() => {
if (!categories[category])
return '';
return getValueForLoadedPhrase(category, phrase, params);
+25
View File
@@ -0,0 +1,25 @@
***NVM installieren***
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
oder
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
***Node.js installieren***
nvm install --lts
***package.json***
npm install
***Rollup build***
einmalig:
npm run build
als watch bei Änderungen:
npm run watch
+99
View File
@@ -0,0 +1,99 @@
import babel from '@rollup/plugin-babel';
import nodeResolve from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import vue from "rollup-plugin-vue";
import { globSync } from 'glob';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import postcss from 'rollup-plugin-postcss';
import replace from '@rollup/plugin-replace';
import alias from '@rollup/plugin-alias';
import { existsSync } from 'node:fs';
import terser from '@rollup/plugin-terser';
import json from '@rollup/plugin-json';
function FhcResolver () {
return {
name: 'fhc-resolver', // this name will show up in logs and errors
resolveId ( source, importer, options ) {
if( source.includes('.php') ) {
return false;
}
//console.log('source: ' + source + ' options.isEntry: ' + options.isEntry + ' importer: ' + importer);
if(importer !== undefined && !options.isEntry && !path.isAbsolute(source)) {
let tmp = path.dirname(importer);
if( importer.includes('/application/') ) {
tmp = tmp.replace(/public\/js\//, 'js/').replace(/\/application\//, '/public/');
}
const resolved = path.resolve(tmp, source);
//console.log(resolved);
if( existsSync(resolved) ) {
return resolved
}
}
return null; // other ids should be handled as usually
}
};
}
export default {
input: Object.fromEntries(
globSync('public/**/js/apps/**/*.js', {follow: true, realpath: true}).map(file => {
if( path.dirname(file).includes('/dist/') || path.dirname(file).includes('/apps/vbform') ) {
return null;
}
// This remove `src/` as well as the file extension from each
// file, so e.g. src/nested/foo.js becomes nested/foo
return [path.relative(
'',
file.slice(0, file.length - path.extname(file).length)
).replace(/public\//, 'public/dist/'),
// This expands the relative paths to absolute paths, so e.g.
// src/nested/foo becomes /project/src/nested/foo.js
fileURLToPath(new URL(file, import.meta.url))]
}).filter(Boolean)
),
plugins: [
alias({
entries: {
vue: 'vue/dist/vue.esm-bundler.js'
}
}),
nodeResolve({
preferBuiltins: true,
moduleDirectories: ['node_modules'],
modulePaths: globSync('application/extensions/*/node_modules', {follow: true, realpath: true}).map(file =>
fileURLToPath(new URL(file, import.meta.url))
),
}),
FhcResolver(),
replace({
preventAssignment: true,
'process.env.NODE_ENV': JSON.stringify( 'production' ),
}),
commonjs(),
vue(),
json(),
babel({
babelHelpers: 'bundled',
plugins: ['transform-class-properties']
}),
postcss({
extract: false,
modules: true,
use: ['sass'],
}),
terser()
],
watch: {
buildDelay: 500
},
output: {
preserveModules: false,
sourcemap: true,
format: 'es',
dir: './',
//manualChunks: {}
chunkFileNames: 'public/dist/js/includes/[name]-[hash].js'
}
};
+106
View File
@@ -0,0 +1,106 @@
import babel from '@rollup/plugin-babel';
import nodeResolve from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import vue from "rollup-plugin-vue";
import { globSync } from 'glob';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import postcss from 'rollup-plugin-postcss';
import replace from '@rollup/plugin-replace';
import alias from '@rollup/plugin-alias';
import { existsSync } from 'node:fs';
import terser from '@rollup/plugin-terser';
import json from '@rollup/plugin-json';
function FhcResolver () {
return {
name: 'fhc-resolver', // this name will show up in logs and errors
resolveId ( source, importer, options ) {
if( source.includes('.php') ) {
return false;
}
//console.log('source: ' + source + ' options.isEntry: ' + options.isEntry + ' importer: ' + importer);
if(importer !== undefined && !options.isEntry && !path.isAbsolute(source)) {
let tmp = path.dirname(importer);
if( importer.includes('/application/') ) {
tmp = tmp.replace(/public\/js\//, 'js/').replace(/\/application\//, '/public/');
}
const resolved = path.resolve(tmp, source);
//console.log(resolved);
if( existsSync(resolved) ) {
return resolved
}
}
return null; // other ids should be handled as usually
}
};
}
const useplugins = [
alias({
entries: {
vue: 'vue/dist/vue.esm-bundler.js',
}
}),
commonjs(),
nodeResolve({
module: true,
jsnext: true,
preferBuiltins: true,
browser: true,
moduleDirectories: ['node_modules'],
modulePaths: globSync('application/extensions/*/node_modules', {follow: true, realpath: true}).map(file =>
fileURLToPath(new URL(file, import.meta.url))
),
}),
json({
compact: true
}),
FhcResolver(),
replace({
preventAssignment: true,
'process.env.NODE_ENV': JSON.stringify( 'production' ),
}),
vue(),
babel({
babelHelpers: 'bundled',
plugins: ['transform-class-properties'],
}),
/*
postcss({
extract: false,
modules: true,
use: ['sass'],
}),
*/
terser()
];
export default globSync('public/**/js/apps/**/*.js', {follow: true, realpath: true}).map(file => {
if( path.dirname(file).includes('/dist/') || path.dirname(file).includes('/apps/vbform') ) {
return null;
}
let tmp = fileURLToPath(new URL(file, import.meta.url));
let cssfile = path.basename(tmp.replace(/\.js/, '.css'));
console.log('cssfile: ' + cssfile);
let cssplugin = [
postcss({
extract: cssfile,
minimize: true,
sourceMap: true
})
];
return {
input: tmp,
plugins: [...useplugins, ...cssplugin],
watch: {
buildDelay: 500
},
output: {
preserveModules: false,
sourcemap: true,
format: 'es',
file: tmp.replace(/public\//, 'public/dist/'),
}
}
}).filter(Boolean);
-1
View File
@@ -54,7 +54,6 @@ require_once('dbupdate_3.4/21620_neues_feld_zum_erfassen_des_ESI.php');
require_once('dbupdate_3.4/36530_bis_internationsalisierung_codextabelle_neuerungen.php');
require_once('dbupdate_3.4/34543_ux_template.php');
require_once('dbupdate_3.4/17513_Entwicklungsteam.php');
require_once('dbupdate_3.4/37558_softwarebereitstellung.php');
// *** Pruefung und hinzufuegen der neuen Attribute und Tabellen
echo '<H2>Pruefe Tabellen und Attribute!</H2>';
@@ -1,17 +0,0 @@
<?php
if (! defined('DB_NAME')) exit('No direct script access allowed');
if ($result = @$db->db_query("SELECT 1 FROM system.tbl_app WHERE app='softwarebereitstellung' LIMIT 1"))
{
if ($db->db_num_rows($result) == 0)
{
$qry = "INSERT INTO system.tbl_app(app) VALUES('softwarebereitstellung');";
if(!$db->db_query($qry))
echo '<strong>system.tbl_app: '.$db->db_last_error().'</strong><br>';
else
echo ' system.tbl_app: softwarebereitstellung hinzugefügt<br>';
}
}
+1 -1
View File
@@ -48,7 +48,7 @@ foreach ($cj->result as $cronjob)
if($cronjob->execute())
{
echo "\n".date('d.m.Y H:i:s').' '.$cronjob->titel.'('.$cronjob->cronjob_id.') executed<br>'."\n";
echo implode("\n",$cronjob->output);
echo implode($cronjob->output,"\n");
}
else
{
-152
View File
@@ -1,152 +0,0 @@
<?php
/* Copyright (C) 2024 Technikum-Wien
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* Authors: Andreas Oesterreicher < andreas.oesterreicher@technikum-wien.at >
*/
/**
*
* Export von Projektlisten für HR
*/
require_once('../../config/vilesci.config.inc.php');
require_once('../../include/functions.inc.php');
require_once('../../include/zeitsperre.class.php');
require_once('../../include/person.class.php');
require_once('../../include/benutzer.class.php');
require_once('../../include/mitarbeiter.class.php');
require_once('../../include/datum.class.php');
require_once('../../include/benutzerberechtigung.class.php');
require_once('../../include/benutzerfunktion.class.php');
if (!$db = new basis_db())
die('Es konnte keine Verbindung zum Server aufgebaut werden.');
$user = get_uid();
$datum = new datum();
//Rechte Pruefen
$rechte = new benutzerberechtigung();
$rechte->getBerechtigungen($user);
if(!$rechte->isBerechtigt('mitarbeiter/zeitsperre'))
die($rechte->errormsg);
//Kopfzeile
echo '<html>
<head>
<title>Zeitsperren (Urlaube) der MitarbeiterInnen</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="../../skin/vilesci.css" type="text/css">
<link rel="stylesheet" href="../../skin/jquery-ui-1.9.2.custom.min.css" type="text/css">';
include('../../include/meta/jquery.php');
include('../../include/meta/jquery-tablesorter.php');
echo ' <script type="text/javascript" src="../../include/js/jquery.ui.datepicker.translation.js"></script>
<script type="text/javascript" src="../../vendor/components/jqueryui/jquery-ui.min.js"></script>
<script language="Javascript">
$(document).ready(function()
{
$("#ma_name").autocomplete({
source: "../../cis/private/tools/zeitaufzeichnung_autocomplete.php?autocomplete=kunde",
minLength:2,
response: function(event, ui)
{
//Value und Label fuer die Anzeige setzen
for(i in ui.content)
{
ui.content[i].value=ui.content[i].uid;
ui.content[i].label=ui.content[i].vorname+" "+ui.content[i].nachname+" ("+ui.content[i].uid+")";
}
},
select: function(event, ui)
{
//Ausgeaehlte Ressource zuweisen und Textfeld wieder leeren
$("#ma_name").val(ui.item.uid);
}
});
$("#t1").tablesorter(
{
sortList: [[3,1]],
widgets: [\'zebra\', \'filter\'],
headers : { 3 : { sorter: "shortDate", dateFormat: "ddmmyyyy" },4 : { sorter: "shortDate", dateFormat: "ddmmyyyy" } }
});
$( ".datepicker_datum" ).datepicker({
changeMonth: true,
changeYear: true,
dateFormat: "dd.mm.yy",
});
})
</script>
</head>
<body class="Background_main">
<h2>Projektexport</h2>
Wähle einen Mitarbeiter und einen Zeitraum um die Projektliste für diesen Monat zu erstellen.<br /><br />
';
$redirect = basename($_SERVER['REQUEST_URI'], '?' . $_SERVER['QUERY_STRING']);
echo '<form accept-charset="UTF-8" action="../../cis/private/tools/zeitaufzeichnung_projektliste.php" method="GET" taget="_blank">
<table>
<tr>
<td>
User
</td>
<td>
<input type="text" id="ma_name" name="uid">
</td>
</tr>
<tr>
<td>Monat</td>
<td>
<select name="projexpmonat" >
<option value="1">Jänner</option>
<option value="2">Februar</option>
<option value="3">März</option>
<option value="4">April</option>
<option value="5">Mai</option>
<option value="6">Juni</option>
<option value="7">Juli</option>
<option value="8">August</option>
<option value="9">September</option>
<option value="10">Oktober</option>
<option value="11">November</option>
<option value="12">Dezember</option>
</select>
</td>
</tr>
<tr>
<td>Jahr</td>
<td>
<input type="text" name="projexpjahr" value="'.date('Y').'" size="4"/>
</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Export" name="export">
</td>
</tr>
</table>
</form>';
echo '</body></html>';
?>