| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- const request = require('request-promise');
- const humanizeDuration = require('humanize-duration');
- function getTimesheetSummaryTotalsRequest(config, username, date) {
- const options = {
- uri: `${config.synergist.apiUrl}jsonapi/timesheets.json`,
- qs: {
- username,
- password: config.synergist.password,
- date,
- user: config.synergist.superuser,
- version: config.synergist.version,
- company: config.synergist.company,
- action: 'timesheetsummaryresource'
- }
- };
- return request(options);
- }
- function makeGetTimesheetCompleted(config, logger, date) {
- return async shortName => {
- try {
- const response = await getTimesheetSummaryTotalsRequest(config, shortName, date);
- try {
- const data = JSON.parse(response);
- const hoursChargeable = data.resource[0].variable_timesheetsummaryresourcechargeable;
- const hoursNonChargeable = data.resource[0].variable_timesheetsummaryresourcenonchargeable;
- const hoursRequired = data.resource[0].variable_timesheethoursrequired;
- const complete = hoursChargeable + hoursNonChargeable >= hoursRequired;
- return complete;
- } catch (err) {
- logger.warn('Empty timesheet response for user', { shortName, date });
- logger.error(err.stack);
- return null;
- }
- } catch (requestErr) {
- logger.warn('Timesheet request failed for user', { shortName, date });
- logger.error(requestErr.stack);
- return null;
- }
- };
- }
- async function getUsersWithMissingTimesheets(config, logger, range, users) {
- logger.debug('[SYNERGIST] Getting employee timesheet information...');
- const t0 = Date.now();
- const startDate = range.start.format('DD/MM/YYYY');
- const getTimesheetCompleted = makeGetTimesheetCompleted(config, logger, startDate);
- const results = await Promise.all(users.map(user =>
- getTimesheetCompleted(user.shortName)
- ));
- const t1 = Date.now();
- logger.debug(`[SYNERGIST] Took ${humanizeDuration(t1 - t0)} to fetch timesheet information`);
- return users.filter((user, index) => results[index] !== null && !results[index]);
- }
- module.exports = {
- getUsersWithMissingTimesheets
- };
|