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