Initial commit: Kimai TMS

Kimai time management system (PHP 5.6 / MySQL) with custom extensions:
- Budget tracking (ki_budget)
- Change request form (ki_changerequest)
- Invoice generation (ki_invoice)
- Expense tracking (ki_expenses)
- Flexi time (ki_flexitime)
- Export, admin panel, timesheets, tasks, summary

Database: ~900K time entries, 2,000+ users, 439 projects.
Config: includes/autoconf.php — localhost/kimai/kimai
This commit is contained in:
TMS
2026-06-18 21:20:26 +00:00
commit eb299c9131
1099 changed files with 359817 additions and 0 deletions

View File

@@ -0,0 +1,70 @@
#xp_ext_tab_filter {
padding: 10px 0 0 0;
font-size: 20px;
color: #3a3b34;
display: none;
}
#xp_ext_tab_filter input[type=text] {
font-size: 20px;
display: block;
float: left;
width: 100px;
border: none;
height: 25px;
margin-top: 1px;
margin-left: 5px;
padding-left: 3px;
background-color: #ddddcd;
}
#xp_ext_tab_filter span {
margin-left: 10px;
float: left;
display: block;
}
#xp_ext_tab_location {
padding: 10px 0 0 0;
font-size: 20px;
color: #3a3b34;
display: none;
}
#xp_ext_tab_location input[type=text] {
font-size: 20px;
display: block;
float: left;
width: 150px;
border: none;
height: 25px;
margin-top: 1px;
margin-left: 5px;
padding-left: 3px;
background-color: #ddddcd;
}
#xp_ext_tab_location span {
margin-left: 10px;
float: left;
display: block;
}
#xp_ext_tab_timeformat {
padding: 10px 0 0 0;
font-size: 20px;
color: #3a3b34;
display: none;
}
#xp_ext_tab_timeformat input[type=text] {
font-size: 20px;
display: block;
float: left;
width: 100px;
border: none;
height: 25px;
margin-top: 1px;
margin-left: 5px;
padding-left: 3px;
background-color: #ddddcd;
}
#xp_ext_tab_timeformat span {
margin-left: 10px;
float: left;
display: block;
}
#xp_ext_tab_timeformat { display: block; }

View File

@@ -0,0 +1,103 @@
#xp_panel { padding: 10px 10px 10px 10px; }
#xp_panel .r .l,#xp_panel .l .l,
#xp_panel .l .w .c,
#xp_panel .r .w .c,
#xp_panel .w .c .w .c,
#xp_panel .w .c .l,
#xp_panel .w .c .r,
#xp_panel .r .r
{background: url('../grfx/stats_panel.png');}
#xp_panel .l,#xp_panel .r,#xp_panel .w { float: left; }
#xp_panel .l,#xp_panel .r,#xp_panel .c { height: 49px; }
#xp_panel .l .l,#xp_panel .r .l,#xp_panel .r .r {width: 4px;}
#xp_panel .l .w .c,#xp_panel .r .w .c {background-position: 0 98px;}
#xp_panel .l { margin-left: -100%; width: 133px;}
#xp_panel .r { width: 183px; margin-left: -183px;}
#xp_panel .r .r { background-position: -27px 0; margin-left: -4px;}
#xp_panel .w { width: 100%; }
#xp_panel .w .c { margin: 0 183px 0 133px; }
#xp_panel .w .c .w .c { margin: 0 8px 0 15px; background-position: 0 49px;}
#xp_panel .w .c .l { background-position: -4px 0; width: 15px;}
#xp_panel .w .c .r { background-position: -19px 0; width: 8px; margin-left: -10px;}
#xp_panel .l .w .c { margin: 0 0 0 1px;}
#xp_panel .r .w .c { margin: 0 4px 0 2px;}
#xp_panel .select_btn,#xp_panel .output_btn {
position:relative;
text-indent:-999em;
display:block;
width:41px;
height:42px;
background: url('../grfx/select.png');
}
#xp_panel a.helpfloater {
display:block;
float:left;
height:13px;
width:13px;
text-indent:-999em;
background: url('../grfx/help.png');
}
#xp_panel #xp_ext_select_filter { top:3px; }
#xp_panel #xp_ext_select_filter:hover { background-position: 0 -42px; }
#xp_panel #xp_ext_select_filter:active { background-position: 0 -84px; }
#xp_panel #xp_ext_select_filter.pressed { background-position: 0 -84px; }
#xp_panel #xp_ext_select_location
{
left:44px; top:-39px;
background-position: 204px 0;
}
#xp_panel #xp_ext_select_location:hover { background-position: 204px -42px; }
#xp_panel #xp_ext_select_location:active { background-position: 204px -84px; }
#xp_panel #xp_ext_select_location.pressed { background-position: 204px -84px; }
#xp_panel #xp_ext_select_timeformat
{
left:88px; top:-81px;
background-position: 163px 0;
}
#xp_panel #xp_ext_select_timeformat:hover { background-position: 163px -42px; }
#xp_panel #xp_ext_select_timeformat:active { background-position: 163px -84px; }
#xp_panel #xp_ext_select_timeformat.pressed { background-position: 163px -84px; }
#xp_panel #xp_ext_export_pdf
{
top:3px;
background-position: 122px 0;
}
#xp_panel #xp_ext_export_pdf:hover { background-position: 122px -42px; }
#xp_panel #xp_ext_export_pdf.pressed { background-position: 122px -84px; }
#xp_panel #xp_ext_export_xls
{
left:44px; top:-39px;
background-position: 82px 0;
}
#xp_panel #xp_ext_export_xls:hover { background-position: 82px -42px; }
#xp_panel #xp_ext_export_xls.pressed { background-position: 82px -84px; }
#xp_panel #xp_ext_export_csv
{
left:88px; top:-81px;
background-position: -41px 0;
}
#xp_panel #xp_ext_export_csv:hover { background-position: -41px -42px; }
#xp_panel #xp_ext_export_csv.pressed { background-position: -41px -84px; }
#xp_panel #xp_ext_print
{
left:132px; top:-123px;
background-position: 41px 0;
}
#xp_panel #xp_ext_print:hover { background-position: 41px -42px; }
#xp_panel #xp_ext_print.pressed { background-position: 41px -84px; }

View File

@@ -0,0 +1,55 @@
<?php
header('Content-type: text/css');
$table_header = "../../../skins/standard/grfx/g3_table_header.png";
?>
#xp {
border:1px solid black;
margin:0;
padding:0;
background-color:#eee;
position:absolute;
overflow:auto;
left:10px;
}
#xp {
top:200px;
z-index:2;
}
#xp_head {
border:1px solid black;
border-bottom:none;
background-image: url('<?php echo $table_header; ?>');
position:absolute;
height:25px;
text-align:left;
color:#FFF;
left:10px;
font-size:11px;
font-weight:bold;
}
#xp_head { top:175px; }
#xp_head table { border:none; }
#xp_head td {
font-weight:bold;
color:white;
}
.xp_time_help_table {
border-collapse:collapse;
}
.xp_time_description {
border-bottom:1px solid gray;
}
.xp_time_shortcut {
font-weight:bold;
border-bottom:1px solid gray;
padding-right:10px;
}

View File

@@ -0,0 +1,4 @@
@import "setup.css.php";
@import "tables.css.php";
@import "panel.css";
@import "optiontabs.css";

View File

@@ -0,0 +1,290 @@
<?php
header('Content-type: text/css');
$table_header = "../../../skins/standard/grfx/g3_table_header.png";
$schraff3 = "../../../skins/standard/grfx/schraff3.png";
?>
div.ki_export table {
border-collapse: collapse;
font-size: 11px;
color: #363636;
border-bottom:1px solid #888;
}
div.ki_export table a.preselect_lnk {
color: #363636;
text-decoration:none;
border-bottom:1px dotted #bbb;
}
div.ki_export table a:hover {
color: #0F9E00;
border-bottom:none;
}
div.ki_export table thead {
height:25px;
text-align:left;
color:#FFF;
}
div.ki_export table thead th {
background-image: url('<?php echo $table_header; ?>');
}
div.ki_export tr.even td,
div.ki_export tr.odd td
{
border-bottom: none;
border-left: none;
border-right: 1px dotted #CCC;
/* border-top: 1px solid #DDD;*/
padding: 3px 4px 4px 5px;
}
#xp_head td {
overflow:hidden;
padding: 3px 4px 4px 6px;
}
div.ki_export tr.hover td {
background: #FFC !important;
/* border-top: 1px solid #666 !important;
border-bottom: 1px solid #666 !important;*/
}
div.ki_export tr.even td {
background: #FFF;
}
div.ki_export tr.odd td {
background: #EEE;
}
div#xptable tr.odd td.comment,
div#xptable tr.odd td.trackingnr,
div#xptable tr.odd td.location {
background: #CFE3F5;
}
div#xptable tr.even td.comment,
div#xptable tr.even td.trackingnr,
div#xptable tr.even td.location {
background: #ECF7FD;
}
div#xptable tr.even.expense td {
background: #E5FFBF;
}
div#xptable tr.odd.expense td {
background: #DCF4B7;
}
div#xptable tr.odd.expense td.comment,
div#xptable tr.odd.expense td.trackingnr,
div#xptable tr.odd.expense td.location {
background: #A3F1A6;
}
div#xptable tr.even.expense td.comment,
div#xptable tr.even.expense td.trackingnr,
div#xptable tr.even.expense td.location {
background: #C8F1CC;
}
div#xptable tr.odd td.cleared {
background: #6E7882;
}
div#xptable tr.even td.cleared {
background: #86939F;
}
div#xptable tr td.time {
border-bottom:1px dotted white;;
}
div#xptable tr.even td.time {
background: #A4E7A5;
}
div#xptable tr.odd td.time {
background: #64BF61;
}
div#xptable tr.active td.time {
background: #F00;
}
div#xptable tr.expense td.time {
background-image:url('<?php echo $schraff3; ?>');
}
div.ki_export tr td.option,
div.ki_export tr td.date,
div.ki_export tr td.from,
div.ki_export tr td.to,
div.ki_export tr td.time,
div.ki_export tr td.wage {
text-align:center;
}
div.ki_export>div#xp>div#xptable>table>tbody>tr>td.cleared {
border-right: none;
}
#xp_head table {
width:100%;
}
#xp_head td.option,
#xp td.option
{
width:70px;
}
#xp_head td.date,
#xp td.date
{
width:50px;
}
#xp_head td.time,
#xp td.time
{
width:40px;
}
#xp_head td.dec_time,
#xp td.dec_time
{
width:40px;
}
#xp_head td.cash
{
width: 90px;
}
#xp td.rate
{
width:40px;
}
#xp td.wage
{
width:40px;
}
#xp_head td { white-space:nowrap; }
#xp_head td.from,
#xp_head td.to,
#xp td.from,
#xp td.to
{
width:50px;
}
#xp td.knd {
min-width:50px;
}
#xp td.pct {
min-width:50px;
}
#xp td.evt {
min-width:60px;
}
#xp td.comment {
width:80px;
}
#xp td.location {
width:30px;
}
#xp td.trackingnr {
width:120px;
}
div.ki_export table tr.odd td.disabled {
background-color:#FFC7BB !important;
}
div.ki_export table tr.even td.disabled {
background-color:#FFE1DB !important;
}
div.ki_export table td.user
{
width:50px;
text-align:left;
}
#xp_head td.user
{
width:100px;
}
div.ki_export table td.cleared
{
width:20px;
}
div.ki_export table td.cleared a
{
width:13px;
height:13px;
display:block;
float:left;
}
div.ki_export table td.cleared a.is_cleared
{
background:url('../grfx/cleared.png') 0 -13px no-repeat;
}
div.ki_export table td.cleared a.isnt_cleared
{
background:url('../grfx/cleared.png') no-repeat;
}
div#xp_head div.right
{
position:absolute;
overflow:hidden;
width:32px;
height:20px;
top:3px;
right:3px;
}
div#xp_head div.right a
{
background-image: url('../grfx/invert.png');
overflow:hidden;
display:block;
width:22px;
height:16px;
text-indent:-500px;
}
div#xp_head td {padding: 3px 4px 4px 6px;}