All files / crons/jobs finishUsersTimeTrack.js

0% Statements 0/30
0% Branches 0/13
0% Functions 0/3
0% Lines 0/28

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89                                                                                                                                                                                 
/* eslint-disable no-restricted-syntax */
require('babel-register');
require('babel-polyfill');
const { parentPort, workerData } = require('worker_threads');
const { parse, format, isAfter, isBefore } = require('date-fns');
const databaseConnect = require('../../../config/database');
const {
  default: UserTimeTrackingCtrl,
} = require('../../controllers/userTimeTracking');
const {
  default: UserTimeTrackingUpdate,
} = require('../../source/userTimeTracking/update');
const { default: I18n } = require('../../helpers/i18n');
 
// ########################################################
// JOB EXECUTADO PARA REENVIAR FILA INTEGRAÇÃO COM ERRO
// ########################################################
 
// Funcao de envio de mensagem utilizada para logging
function sendMessage(message = '') {
  if (parentPort) parentPort.postMessage(message);
}
 
const jobExec = async () => {
  sendMessage('Database connecting...');
  const models = await databaseConnect.default();
  await I18n.loadKeys();
 
  const openUsersTimeTracking = await models.UserTimeTracking.findAll({
    where: {
      status: 1,
    },
  });
 
  if (openUsersTimeTracking && openUsersTimeTracking.length > 0) {
    for (const userTimeTracking of openUsersTimeTracking) {
      const now = new Date();
      const endDateTime = parse(
        `${format(userTimeTracking.startedAt, 'yyyy-MM-dd')} ${
          userTimeTracking.endTime
        }`,
        'yyyy-MM-dd HH:mm:ss',
        now
      );
 
      if (
        isAfter(now, endDateTime) &&
        isBefore(userTimeTracking.startedAt, endDateTime)
      ) {
        const totalTime = UserTimeTrackingCtrl.calculateTotalTime(
          userTimeTracking.startedAt,
          endDateTime,
          userTimeTracking.breakStartTime,
          userTimeTracking.breakEndTime
        );
 
        const timeTracking = {
          totalTime,
          finishedAt: endDateTime,
          trackingReasonCode: 'SISTEMA',
          note: I18n.t(
            'BEE4295' /* Apontamento encerrado pelo sistema */,
            undefined,
            workerData.req.appLanguage
          ),
          updatedUser: 1,
        };
 
        await UserTimeTrackingUpdate.finishUserTimeTracking(
          userTimeTracking.id,
          timeTracking
        );
      }
    }
  }
 
  sendMessage('Finished!');
};
 
(async () => {
  sendMessage('jobExec');
  // funcao que executa o job
  await jobExec();
 
  // processo necessario para informar a conclusao do job
  if (parentPort) sendMessage('done');
  else process.exit(0);
})();