In time sheet portal , Task tab only can see InProgress records

Anish9515
Tera Contributor

In time sheet portal , task tab i can see only in progress records 
This is OOB function , Please help me which widget can rework.

 

Anish9515_0-1735538320494.png

 

@Ankur Bawiskar

22 REPLIES 22

hi @Anish9515 ,,

 

these two line gives group information logged in user  

var timeCardGroupTaskSelector = new TimeCardGroupTaskSelector();
	data.userGroupIds = timeCardGroupTaskSelector.getGroups(data.userId);

 and getRecords() function to fetch the information and add to list

 

 

Thanks,

BK

can we add  below query here state =2 ?
if
(gr.instanceOf('pm_project') || gr.instanceOf('pm_project_task') || gr.instanceOf('sn_audit_task') || gr.instanceOf('sn_audit_engagement') || gr.instanceOf('sn_audit_advanced_milestone') || gr.instanceOf('sn_audit_advanced_engagement_project') || gr.instanceOf('sn_grc_issue')) {
            var actualDatesQuery = 'work_startISNOTEMPTY^work_start<=' + weekEndsOnDateTime +
                '^work_endISEMPTY^ORwork_end>=' + weekStartsOnDateTime +
                '^assigned_to=' + data.userId + '^ORadditional_assignee_listLIKE' +
                data.userId;
            var plannedDatesQuery = '^NQwork_startISEMPTY^start_date<=' + weekEndsOnDateTime +
                '^end_date>=' + weekStartsOnDateTime + '^assigned_to=' +
                data.userId + '^ORadditional_assignee_listLIKE' +
                data.userId;
               
            var encodedQuery = actualDatesQuery + plannedDatesQuery ;
            gr.addEncodedQuery(encodedQuery);
        } 
 

Hi @Anish9515 ,

 

can you try this

(function ($sp) {
	data.userId = $sp.getParameter('sysparm_user_id') || gs.getUserID();
	
	var timesheetId = $sp.getParameter('sysparm_timesheet_id') || input.timesheetId;
	
	if (!timesheetId) {
		timesheetId = new TimeSheetFactory().getTimeSheet(data.userId);
	}
	data.timesheetId = timesheetId;
	
	var timesheet = new GlideRecord('time_sheet');
	
	timesheet.get(data.timesheetId);
	
	var timecardGr = new GlideRecord('time_card');
	
	timecardGr.newRecord();
	data.canCreateTimecards = timecardGr.canCreate();
	
	var dateObj = new GlideDate();
	
	dateObj.setValue(timesheet.getValue('week_starts_on'));
	
	var weekStart = dateObj.toString();
	var weekStartsOnDateTime = TimeCardUtil.getWeekStartsOnDateTimeForUser(weekStart, data.userId);
	
	dateObj.addDaysUTC(6);
	
	var weekEnd = dateObj.toString();
	var weekEndsOnDateTime = new GlideDateTime(weekStartsOnDateTime);
	
	weekEndsOnDateTime.addDaysUTC(7);
	
	//Hard allocated task ids
	var hardAllocatedTaskIds = [];
	var allocations = new GlideAggregate('resource_allocation');
	var sysTableFieldsMap = {};
	
	if (allocations.isValid()) {
		allocations.addQuery('user', data.userId);
		allocations.addQuery('booking_type', '1');
		allocations.addQuery('start_date', '<=', weekEnd);
		allocations.addQuery('end_date', '>=', weekStart);
		allocations.groupBy('task');
		allocations.query();
		
		while (allocations.next()) {
			hardAllocatedTaskIds.push(allocations.getValue('task'));
		}
	}
	
	var defaultTables = 'rm_epic,sn_safe_epic,incident,problem,change_request,rm_story,rm_scrum_task,pm_project,pm_project_task,rm_defect,rm_enhancement,dmn_demand_task,sn_audit_task,sn_audit_engagement,sn_audit_advanced_milestone,sn_audit_advanced_engagement_project,sn_grc_issue';
	var defaultLayout = {
		primary_field: 'short_description',
		secondary_fields: ['state', 'sys_updated_on'],
		tags: [{
			field: 'priority',
			colors: {
				'1': {
					bgColor: 'tomato',
					textColor: 'white'
				},
				'2': {
					bgColor: 'orange',
					textColor: 'white'
				}
			}
		}],
		sn_audit_engagement: { // Default layout for engagement time card
			primary_field: 'name',
			secondary_fields: ['state', 'sys_updated_on'],
			tags: [{
				field: 'priority',
				colors: {
					'1': {
						bgColor: 'tomato',
						textColor: 'white'
					},
					'2': {
						bgColor: 'orange',
						textColor: 'white'
					}
				}
			}]
		}
	};
	data.tables = input.tables || options.tables || defaultTables;
	data.layout = input.layout || options.layout || defaultLayout;
	data.ids = [];
	data.cards = [];
	data.taskFilters = {};
	data.groupTaskFilters = {};
	data.card_layouts = input.card_layouts || {};
	data.defaultLayout = defaultLayout;
	data.defaultFields = _getFieldsForLayout(defaultLayout);
	data.groupCards = [];
	data.userGroupIds = [];
	data.groupTaskIds = [];
	data.tableFieldLabelMap = {};
	data.sysIdMap = {};
	
	var timesheetPolicy = TimeSheetPolicy.getFromUserId(data.userId);
	data.isAllowMultipleRateTypes = timesheetPolicy.allowMultipleRatetypes();
	data.defaultRateType = timesheetPolicy.defaultRateType();
	var defaultRateTypeName;
	if (!gs.nil(data.defaultRateType)) {
		var defaultRateTypeRecord = new GlideRecord('rate_type');
		defaultRateTypeRecord.get(data.defaultRateType);
		defaultRateTypeName = defaultRateTypeRecord.getValue('name');
	}
	//group-start
	var timeCardGroupTaskSelector = new TimeCardGroupTaskSelector();
	data.userGroupIds = timeCardGroupTaskSelector.getGroups(data.userId);

	function getRecords(table) {
		table = table.trim();
		var gr = new GlideRecordSecure(table); //Get records
		if (!gr.isValid()) {
			return;
		}
		if (gr.instanceOf('pm_project') || gr.instanceOf('pm_project_task') || gr.instanceOf('sn_audit_task') || gr.instanceOf('sn_audit_engagement') || gr.instanceOf('sn_audit_advanced_milestone') || gr.instanceOf('sn_audit_advanced_engagement_project') || gr.instanceOf('sn_grc_issue')) {
			var actualDatesQuery = 'work_startISNOTEMPTY^work_start<=' + weekEndsOnDateTime +
				'^work_endISEMPTY^ORwork_end>=' + weekStartsOnDateTime +
				'^assigned_to=' + data.userId + '^ORadditional_assignee_listLIKE' +
				data.userId;
			var plannedDatesQuery = '^NQwork_startISEMPTY^start_date<=' + weekEndsOnDateTime +
				'^end_date>=' + weekStartsOnDateTime + '^assigned_to=' +
				data.userId + '^ORadditional_assignee_listLIKE' +
				data.userId;
			var encodedQuery = actualDatesQuery + plannedDatesQuery;
			gr.addEncodedQuery(encodedQuery);
		} else {
			gr.addEncodedQuery('assigned_to=' + data.userId + '^sys_created_on<=' + weekEndsOnDateTime + '^active=true^state=2');
			var gr_part1 = new GlideRecordSecure(table);
			gr_part1.addEncodedQuery('assigned_to=' + data.userId + '^sys_created_on<=' + weekEndsOnDateTime + '^closed_atBETWEEN' + weekStartsOnDateTime + '@' + weekEndsOnDateTime);
			gr_part1.query();
			_addRecordsToList(gr_part1, false);
			var gr_part2 = new GlideRecordSecure(table);
			gr_part2.addEncodedQuery('state=2^additional_assignee_listLIKE' + data.userId + '^sys_created_on<=' + weekEndsOnDateTime + '^active=true');
			gr_part2.query();
			_addRecordsToList(gr_part2, false);
			var gr_part3 = new GlideRecordSecure(table);
			gr_part3.addEncodedQuery('state=2^additional_assignee_listLIKE' + data.userId + '^sys_created_on<=' + weekEndsOnDateTime + '^closed_atBETWEEN' + weekStartsOnDateTime + '@' + weekEndsOnDateTime);
			gr_part3.query();
			_addRecordsToList(gr_part3, false);
		}
		gr.query();
		_addRecordsToList(gr, false);
	}

	function fetchGroupTasks() {
		for (var j = 0; j < tables.length; j++) {
			var tableForGroupTasks = tables[j].trim();
			var groupTasks = timeCardGroupTaskSelector.getTasksInTwoDatesByUserGroups(tableForGroupTasks, weekStartsOnDateTime, weekEndsOnDateTime, data.userGroupIds);
			_addRecordsToList(groupTasks, true);
		}
	}
	//Get Unassigned Tasks for which timecard has been logged
	var unassignedTaskIds = [];

	function getUnassignedTask() {
		var timecards = new GlideAggregate('time_card');
		timecards.addQuery('time_sheet', timesheetId);
		timecards.addEncodedQuery('taskISNOTEMPTY');
		timecards.addQuery('task', 'NOT IN', data.ids);
		timecards.query();
		while (timecards.next()) {
			unassignedTaskIds.push(timecards.getValue('task'));
		}
	}
	var otherTaskIds = [];
	//Get Hard Allocated Tasks
	function getHardAllocatedTasks() {
		var tasks = new GlideRecordSecure('task');
		tasks.addQuery('sys_id', 'IN', otherTaskIds.join(','));
		tasks.query();
		_addRecordsToList(tasks, false);
	}
	var tables = data.tables.split(',');
	if (input.fetchGroupTasks) {
		fetchGroupTasks();
		data.groupTasksFetched = true;
	} else {
		//group-end
		for (var i = 0; i < tables.length; i++) {
			var table = tables[i];
			//Get records
			getRecords(table);
		}
		getUnassignedTask();
		otherTaskIds = hardAllocatedTaskIds.concat(unassignedTaskIds);
		getHardAllocatedTasks();
		data.tasksFetched = true;
	}
	data.taskFilters.all_tasks = {};
	data.taskFilters.all_tasks.label = gs.getMessage('All Tasks');
	data.taskFilters.all_tasks.value = '';
	data.taskFilters.all_tasks.count = data.cards.length;
	data.groupTaskFilters.all_tasks = {};
	data.groupTaskFilters.all_tasks.label = gs.getMessage('All Tasks');
	data.groupTaskFilters.all_tasks.value = '';
	data.groupTaskFilters.all_tasks.count = data.groupCards.length;
	var timecardGr = new GlideRecord('time_card');
	var choiceList = GlideChoiceList.getChoiceList('time_card', 'category');
	choiceList.removeNone();
	data.categories = JSON.parse(choiceList.toJSON());
	data.categories = data.categories.filter(function (category) {
		return category.value !== 'task_work' && category.value !== 'project_work';
	});
	for (var index in data.categories) {
		var category = data.categories[index];
		category.quickAdd = {};
		category.quickAdd.daySelected = 'all';
		if (data.isAllowMultipleRateTypes && !gs.nil(data.defaultRateType)) {
			category.rateType = {
				displayValue: defaultRateTypeName,
				value: data.defaultRateType
			};
		}
	}

	function _addRecordsToList(gr, isGroupTask) {
		while (gr.next()) {
			var record = {};
			var sysClassName = gr.getValue('sys_class_name') || gr.getTableName();
			record.sys_class_name = sysClassName;
			record.sys_id = gr.getValue('sys_id');
			var fieldsObject = _addLayoutAndGetFieldsForTable(sysClassName);
			record.display_fields = fieldsObject.fields;
			
			/* Include parent to searchable display fields */
			if (sysClassName === 'pm_project_task' || sysClassName === 'dmn_demand_task')
				record.display_fields += ',parent';
			
			record.quickAdd = {};
			record.quickAdd.daySelected = 'all';
			if (gr.instanceOf('pm_project') || gr.instanceOf('pm_project_task')) {
				// gr in this scope is GlideRecordSecure
				// We require to fetch project/project_tasks top value without having project_user role.
				var table = gr.getRecordClassName();	
				var glideRec = new GlideRecord(table);
				
				glideRec.get(gr.sys_id);
				
				// timecardReportingPref will be instance of GlideElement. Hence toString.
				var timecardReportingPref = glideRec.top_task.time_card_preference.toString();
				if (timecardReportingPref == 'no_time_card') {
					record.hideQuickAdd = true;
					record.hideAddToTimesheet = true;
					record.noTimeReporting = true;
				} else if ((timecardReportingPref === 'project_task' && gr.instanceOf('pm_project')) || (timecardReportingPref === 'project' && gr.instanceOf('pm_project_task')))
					continue;
			}
			record.disabled = record.noTimeReporting || !data.canCreateTimecards;
			if (gr.instanceOf('pm_project')) {
				record.quickAdd.showProjectCategory = true;
			}
			if (gr.instanceOf('pm_project_task') || gr.instanceOf('dmn_demand_task')) {
				record.parent = TimeCardUtil.getParentTableData(gr);
			}
			if (data.isAllowMultipleRateTypes && !gs.nil(data.defaultRateType)) {
				record.rateType = {
					displayValue: defaultRateTypeName,
					value: data.defaultRateType
				};
			}
			//$sp.getRecordElements(record, gr, fieldsObject.fields);
			for (var index = 0; index < fieldsObject.fieldsArray.length; index++) {
				var field = fieldsObject.fieldsArray[index];
				record[field] = {
					value: gr.getValue(field),
					display_value: gr.getDisplayValue(field),
					label: getLable(gr, field, sysClassName)
				}
			}
			if (!data.sysIdMap[record.sys_id]) {
				data.sysIdMap[record.sys_id] = record.sys_id;
				data.ids.push(record.sys_id);
				
				var labelGr = new GlideRecord(record.sys_class_name);
				
				if (isGroupTask) {
					data.groupCards.push(record);
					if (!data.groupTaskFilters[sysClassName]) {
						data.groupTaskFilters[sysClassName] = {};
						data.groupTaskFilters[sysClassName].label = labelGr.getPlural();
						data.groupTaskFilters[sysClassName].value = sysClassName;
						data.groupTaskFilters[sysClassName].count = 0;
					}
					data.groupTaskFilters[sysClassName].count++;
				} else {
					data.cards.push(record);
					if (!data.taskFilters[sysClassName]) {
						data.taskFilters[sysClassName] = {};
						data.taskFilters[sysClassName].label = labelGr.getPlural();
						data.taskFilters[sysClassName].value = sysClassName;
						data.taskFilters[sysClassName].count = 0;
					}
					data.taskFilters[sysClassName].count++;
				}
			}
		}
	}

	function getLable(gr, field, table) {
		var key = table + '_' + field;
		if (data.tableFieldLabelMap[key]) {
			return data.tableFieldLabelMap[key];
		}
		var gelm = gr.getElement(field);
		var label = gelm ? gelm.getLabel() : '';
		data.tableFieldLabelMap[key] = label;
		return label;
	}

	function _addLayoutAndGetFieldsForTable(table) {
		if (sysTableFieldsMap[table]) {
			return sysTableFieldsMap[table];
		}
		var layout = data.layout[table];
		var fields = '';
		if (!layout) {
			layout = data.defaultLayout;
			fields = data.defaultFields;
		} else {
			fields = _getFieldsForLayout(layout);
		}
		if (!data.card_layouts[table]) {
			data.card_layouts[table] = layout;
		}
		sysTableFieldsMap[table] = {
			fields: fields,
			fieldsArray: fields.split(',')
		};
		return sysTableFieldsMap[table];
	}

	function _getFieldsForLayout(layout) {
		var fieldsArr = [];
		fieldsArr.push(layout.primary_field || 'short_description');
		if (layout.secondary_fields) {
			fieldsArr = fieldsArr.concat(layout.secondary_fields);
		}
		var tags = layout.tags;
		
		for (var i = 0; i < tags.length; i++) {
			fieldsArr.push(tags[i].field);
		}
		return 'number,' + fieldsArr.join(',');
	}
	if (!input) {
		new TimecardUsageAnalytics().workerPortalLaunch(data.cards.length);
	}
	data.messages = {};
	data.messages.selectProjectCategory = gs.getMessage('Select Project Category');
	data.messages.noMatchesFound = gs.getMessage('No matches found');
	data.messages.loadingFailed = gs.getMessage('Loading failed');
	data.messages.loadingMoreResults = gs.getMessage('Loading more results…');
	data.messages.searching = gs.getMessage('Searching…');
	data.messages.selectDay = gs.getMessage('Select Day');
	data.messages.noTaskAssignments = gs.getMessage('No task assignments found');
	data.maxVisibleTasks = options.maxVisibleTasks || -1;
	data.maxVisibleGroupTasks = options.maxVisibleGroupTasks || -1;
	data.disableTaskSelectorSync = options.disableTaskSelectorSync || false;
	data.showDuplicateCards = options.showDuplicateCards || false;
	
	if (data.cards.length === 0) {
		data.cardsNum = data.messages.noTaskAssignments;
	} else {
		data.cardsNum = data.messages.noMatchesFound;
	}
	if (data.groupCards.length == 0) {
		data.groupCardsNum = data.messages.noTaskAssignments;
	} else {
		data.groupCardsNum = data.messages.noMatchesFound;
	}
})($sp);