In time sheet portal , Task tab only can see InProgress records
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-29-2024 10:03 PM
In time sheet portal , task tab i can see only in progress records
This is OOB function , Please help me which widget can rework.
22 REPLIES 22
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-06-2025 03:10 AM
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
If this information proves useful, kindly mark it as helpful or accepted solution.
Thanks,
BK
Thanks,
BK
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-06-2025 03:21 AM
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')) {
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);
}
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-06-2025 03:31 AM
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);
If this information proves useful, kindly mark it as helpful or accepted solution.
Thanks,
BK
Thanks,
BK

