1<?php 2/** 3 * @package tikiwiki 4 */ 5// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project 6// 7// All Rights Reserved. See copyright.txt for details and a complete list of authors. 8// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details. 9// $Id$ 10 11require_once('tiki-setup.php'); 12$access->check_feature(['feature_time_sheet','feature_trackers']); 13$access->check_permission_either(['tiki_p_view_trackers', 'tiki_p_create_tracker_items']); 14 15global $user, $prefs, $tiki_p_admin; 16$auto_query_args = [ 17 'all', 18 'profile', 19 'page', 20 'list' 21]; 22 23$trackerId = (int)TikiLib::lib('trk')->get_tracker_by_name('Time sheet'); 24$smarty->assign("tiki_p_admin", $tiki_p_admin); 25$smarty->assign("timeSheetProfileLoaded", $trackerId > 0 ? true : false); 26 27$projectList = Tracker_Query::tracker("Project list")->byName()->query(); 28 29if (isset($_REQUEST['all'])) { //all views all sheet items 30 $smarty->assign("all", true); 31 32 $timeSheet = Tracker_Query::tracker("Time sheet") 33 ->byName() 34 ->query(); 35} else {//views only your items 36 $smarty->assign("all", false); 37 38 $timeSheet = Tracker_Query::tracker("Time sheet") 39 ->byName() 40 ->filter(["field" => "Done by", "value" => $user]) 41 ->query(); 42} 43 44if (isset($projectList)) { 45 if (isset($_REQUEST['save'])) { 46 echo json_encode( 47 $timeSheetNewInputs = Tracker_Query::tracker("Time sheet") 48 ->byName() 49 ->queryInput() 50 ); 51 die; 52 } 53 54 $smarty->assign("projectList", $projectList); 55 $smarty->assign("timeSheet", $timeSheet); 56} 57 58TikiLib::lib("sheet")->setup_jquery_sheet(); 59 60$headerlib = TikiLib::lib("header") 61 ->add_cssfile("vendor_bundled/vendor/jquery/jtrack/css/jtrack.css") 62 ->add_jsfile("vendor_bundled/vendor/jquery/jtrack/js/domcached-0.1-jquery.js") 63 ->add_jsfile("vendor_bundled/vendor/jquery/jtrack/js/jtrack.js") 64 ->add_jq_onready( 65 "jTask.init(); 66 67 $.timesheetSpreadsheet = function() { 68 var table = $('<table title=/>').attr('title', tr('Local Cache (Not Committed)')); 69 table.append('<tr><td>Summary</td><td>Estimate</td><td>Time Spent</td></tr>'); 70 71 var rowI = 1; 72 for (var namespace in $.DOMCached.getStorage()) { 73 var row = $('<tr />').appendTo(table); 74 75 row.append('<td>' + namespace + '</td>'); 76 row.append('<td>' + $.DOMCached.get('estimate', namespace) + '</td>'); 77 row.append('<td formula=\'ROUND(' + ($.DOMCached.get('timer', namespace) / 60) + ', 2)\'></td>'); 78 rowI++; 79 } 80 var row = $('<tr />').appendTo(table); 81 row.append('<td>Totals</td>'); 82 row.append('<td formula=\'ROUND(SUM(B2:B' + rowI + '), 2)\'/>'); 83 row.append('<td formula=\'=ROUND(SUM(C2:C' + rowI + '), 2)\' />'); 84 85 $('#timesheetSpreadsheet').siblings().remove(); 86 87 var jS = $('#timesheetSpreadsheet').getSheet(); 88 if (jS) { 89 $('#timesheetSpreadsheet') 90 .off('visible') 91 .visible(function() { 92 jS.openSheet(table); 93 }); 94 } else { 95 $('#timesheetSpreadsheet') 96 .visible(function() { 97 $(this).sheet({ 98 buildSheet: table, 99 editable: false, 100 height: $('#jtrack-holder').height() 101 }); 102 }); 103 } 104 }; 105 106 $('.jtrack-create,.jtrack-update,.jtrack-remove,.jtrack-remove-all,.jtrack-cancel,.jtrack-power,#jtrack-button-remove,#jtrack-button-remove-all,#jtrack-button-create,#jtrack-button-update').on('click', function() { 107 $.timesheetSpreadsheet(); 108 }); 109 110 $.timesheetSpreadsheet(); 111 112 $('#timeSheetSaved').visible(function() { 113 $(this).sheet({ 114 buildSheet: true, 115 editable: false, 116 height: $('#jtrack-holder').height() 117 }); 118 }); 119 120 $('#timeSheetCommit').click(function() { 121 $('#timeSheetTabs').tikiModal(tr('Committing...')); 122 var stack = []; 123 $.getJSON('tiki-timesheet.php?save', function(inputs) { 124 for (var namespace in $.DOMCached.getStorage()) { 125 var summary = namespace + '', 126 time = $.DOMCached.get('timer', summary) / 60; 127 stack.push(summary); 128 129 var form = $('<form />').submit(function() { 130 var fields = ''; 131 132 $.each(form.serializeArray(), function() { 133 fields += '&fields[' + this.name + ']=' + this.value; 134 }); 135 136 $.post('tiki-ajax_services.php?controller=tracker&trackerId=$trackerId&action=insert_item' + fields,function() { 137 $.DOMCached.deleteNamespace(namespace); 138 139 stack.pop(); 140 141 if (stack.length == 0) { 142 document.location = document.location + ''; 143 } 144 }) 145 .error(function() { 146 $('#timeSheetTabs').tikiModal(); 147 alert(tr('Could not save')); 148 }); 149 return false; 150 }); 151 152 var input = { 153 'Summary': $(inputs['Summary']), 154 'Description': $(inputs['Description']), 155 'Amount of time spent': $(inputs['Amount of time spent']), 156 'Done by': $(inputs['Done by']) 157 }; 158 159 input['Summary'].val(summary); 160 input['Amount of time spent'].val(time); 161 input['Done by'].val('" . addslashes($user) . "'); 162 form.append(input['Summary']); 163 form.append(input['Description']); 164 form.append(input['Amount of time spent']); 165 form.append(input['Done by']); 166 form.submit(); 167 } 168 }); 169 170 return false; 171 }); 172 173 $('#timeSheetTabs') 174 .width($('#timeSheetTabs').parent().width()) 175 .tabs();" 176 ); 177 178$smarty->assign('mid', 'tiki-timesheet.tpl'); 179// use tiki_full to include include CSS and JavaScript 180$smarty->display("tiki.tpl"); 181