1711 delete references
This commit is contained in:
parent
a3159f7dbd
commit
dfd29ced70
|
@ -1,98 +0,0 @@
|
||||||
/*
|
|
||||||
Author : Enrique Blasco BLanquer
|
|
||||||
Date: 28 de mayo de 2019
|
|
||||||
*/
|
|
||||||
module.exports = Self => {
|
|
||||||
Self.remoteMethodCtx('getWorkerInfo', {
|
|
||||||
description: 'Get worker info (name, isWorking, total worked hours ...)',
|
|
||||||
accessType: 'WRITE',
|
|
||||||
returns: [{
|
|
||||||
type: 'Object',
|
|
||||||
root: true
|
|
||||||
}],
|
|
||||||
http: {
|
|
||||||
path: `/getWorkerInfo`,
|
|
||||||
verb: 'GET'
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Self.getWorkerInfo = async(ctx, data) => {
|
|
||||||
let prevHour = new Date(); // default value to start work
|
|
||||||
let diff = 0; // difference of value between two dates
|
|
||||||
let isOdd = true; // determine if timed is odd or not in db
|
|
||||||
const myUserId = ctx.req.accessToken.userId; // get user id
|
|
||||||
|
|
||||||
|
|
||||||
// 1 get name and photo for the user
|
|
||||||
let [user] = await Self.rawSql(`SELECT u.name, t.Foto FROM vn.user u INNER JOIN vn2008.Trabajadores t ON u.id = t.user_id WHERE id = ?;`, [myUserId]);
|
|
||||||
// 2 get all jornaly work time registered
|
|
||||||
let workedHours = await Self.rawSql(`SELECT * FROM vn.workerTimeControl WHERE userFk = ? AND DATE(timed) = CURDATE() ORDER BY timed ASC;`, [myUserId]);
|
|
||||||
let today = new Date();
|
|
||||||
// 3 get the number of hours to work in one day
|
|
||||||
let date = today.getFullYear() + '-' + (today.getMonth() + 1) + '-' + today.getDate();
|
|
||||||
let [hoursForDay] = await Self.rawSql(`SELECT cl.hours_week AS hoursWeek,
|
|
||||||
GROUP_CONCAT(DISTINCT LEFT(j.start,2) ORDER BY j.start ASC SEPARATOR '-') start ,
|
|
||||||
GROUP_CONCAT(DISTINCT LEFT(j.end,2) ORDER BY j.end ASC SEPARATOR '-') end,
|
|
||||||
CAST(IFNULL((SUM(TIME_TO_SEC(j.end))-SUM(TIME_TO_SEC(j.start)))/3600,if(cl.hours_week=40
|
|
||||||
AND DAYOFWEEK(t.dated) IN(2,3,4,5,6),8,0)) AS DECIMAL(10,2)) workingHours
|
|
||||||
FROM vn.time t
|
|
||||||
LEFT JOIN postgresql.business b ON t.dated BETWEEN b.date_start AND ifnull(b.date_end,? )
|
|
||||||
LEFT JOIN postgresql.profile AS pr ON b.client_id = pr.profile_id
|
|
||||||
LEFT JOIN postgresql.person AS p ON pr.person_id = p.person_id
|
|
||||||
LEFT JOIN vn.worker AS w ON p.id_trabajador = w.id
|
|
||||||
LEFT JOIN postgresql.business_labour AS bl ON b.business_id = bl.business_id
|
|
||||||
LEFT JOIN postgresql.calendar_labour_type AS cl ON bl.calendar_labour_type_id = cl.calendar_labour_type_id
|
|
||||||
LEFT JOIN postgresql.journey AS j ON j.business_id = b.business_id and j.day_id=WEEKDAY(t.dated)+1
|
|
||||||
WHERE t.dated BETWEEN ? AND ? AND userFk = ?
|
|
||||||
GROUP BY w.userFk,dated`, [date, date, date, myUserId]);
|
|
||||||
|
|
||||||
// 4 Add all the hours and see the total worked
|
|
||||||
for (hour of workedHours) {
|
|
||||||
if (!isOdd)
|
|
||||||
diff += Math.abs((new Date(hour.timed)).getTime() - prevHour.getTime());
|
|
||||||
else
|
|
||||||
prevHour = new Date(hour.timed);
|
|
||||||
|
|
||||||
isOdd = !isOdd;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 5 calculate hours and minutes from a number value
|
|
||||||
let decimalTime = diff / 1000 / 3600;
|
|
||||||
decimalTime = decimalTime * 60 * 60;
|
|
||||||
let hours = Math.floor((decimalTime / (60 * 60)));
|
|
||||||
decimalTime = decimalTime - (hours * 60 * 60);
|
|
||||||
let minutes = Math.floor((decimalTime / 60));
|
|
||||||
|
|
||||||
// 6 default total hours
|
|
||||||
let totalHours = '7:40';
|
|
||||||
let hoursWeek = 40;
|
|
||||||
|
|
||||||
// 7 Get the hours you have to work today and the hours to work in a week
|
|
||||||
if (hoursForDay != null) {
|
|
||||||
// If it exceeds 5 hours we take 20 minutes of breakfast.
|
|
||||||
if (hoursForDay.workingHours > 5)
|
|
||||||
hoursForDay.workingHours -= 20 * 0.016666;
|
|
||||||
let decimalTime = parseFloat(hoursForDay.workingHours);
|
|
||||||
decimalTime = decimalTime * 60 * 60;
|
|
||||||
let hoursDay = Math.floor((decimalTime / (60 * 60)));
|
|
||||||
decimalTime = decimalTime - (hoursDay * 60 * 60);
|
|
||||||
let minutesDay = Math.floor((decimalTime / 60));
|
|
||||||
totalHours = hoursDay + ':' + minutesDay;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// 8 return value
|
|
||||||
if (hoursForDay != null)
|
|
||||||
hoursWeek = hoursForDay.hoursWeek;
|
|
||||||
return {
|
|
||||||
'name': user.name,
|
|
||||||
'hours': hours,
|
|
||||||
'minutes': minutes,
|
|
||||||
'today': today,
|
|
||||||
'isWorking': !isOdd,
|
|
||||||
'lastDate': prevHour,
|
|
||||||
'totalHours': totalHours,
|
|
||||||
'hoursWeek': hoursWeek
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
|
@ -2,6 +2,5 @@ module.exports = Self => {
|
||||||
require('../methods/worker/filter')(Self);
|
require('../methods/worker/filter')(Self);
|
||||||
require('../methods/worker/mySubordinates')(Self);
|
require('../methods/worker/mySubordinates')(Self);
|
||||||
require('../methods/worker/isSubordinate')(Self);
|
require('../methods/worker/isSubordinate')(Self);
|
||||||
require('../methods/worker/getWorkerInfo')(Self);
|
|
||||||
require('../methods/worker/sendMessage')(Self);
|
require('../methods/worker/sendMessage')(Self);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue