salix/db/routines/vn/procedures/workerTimeControl_sendMailB...

130 lines
5.4 KiB
MySQL
Raw Normal View History

DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`workerTimeControl_sendMailByDepartment`(IN vDatedFrom DATETIME, IN vDatedTo DATETIME, IN vWorkerFk INT)
BEGIN
/**
* Inserta el registro de horario semanalmente de PRODUCCION, CAMARA, REPARTO, TALLER NATURAL y TALLER ARTIFICIAL en vn.mail.
*
* @param vDatedFrom
* @param vDatedTo
* @param vWorkerFk -> En el caso de querer generarlo para todos los empleados deberá de pasarse = NULL
*/
SET session group_concat_max_len = 15000;
DROP TEMPORARY TABLE IF EXISTS tmp.timeControlCalculate;
DROP TEMPORARY TABLE IF EXISTS tmp.timeBusinessCalculate;
DROP TEMPORARY TABLE IF EXISTS tmp.reportHours;
IF vWorkerFk IS NULL THEN
CALL timeControl_calculateAll(vDatedFrom,vDatedTo);
CALL timeBusiness_calculateAll(vDatedFrom,vDatedTo);
ELSE
CALL timeControl_calculateByUser(vWorkerFk,vDatedFrom,vDatedTo);
CALL timeBusiness_calculateByUser(vWorkerFk,vDatedFrom,vDatedTo);
END IF;
CREATE TEMPORARY TABLE tmp.reportHours
SELECT t.dated,
IF (tm.hoursWeek IS NULL,'', GROUP_CONCAT(DATE_FORMAT(wtc.timed,'%H:%i') ORDER BY wtc.timed ASC SEPARATOR ' ') ) timeWorkDay,
SEC_TO_TIME(IFNULL(tm.timeWorkSeconds, 0)) tm,
SEC_TO_TIME(IFNULL(tc.timeWorkSeconds, 0)) tc,
SEC_TO_TIME(IFNULL(tc.timeWorkSeconds, 0) - IFNULL(tm.timeWorkSeconds, 0)) balance,
w.lastName,
w.firstname,
c.fi,
w.id userFk,
MONTHNAME(t.dated) mes,
YEAR(t.dated) año,
w.id,
tm.hoursWeek,
tm.type,
b.started,
b.ended,
d.name,
tm.businessFk
FROM time t
LEFT JOIN tmp.timeBusinessCalculate tm ON tm.dated = t.dated
LEFT JOIN tmp.timeControlCalculate tc ON tc.dated = tm.dated AND tc.userFk = tm.userFk
LEFT JOIN vn.workerTimeControl wtc ON wtc.userFk = tm.userFk AND DATE(wtc.timed) = t.dated
LEFT JOIN business b ON b.workerFk = tm.userFk AND b.id = tm.businessFk
LEFT JOIN workCenter wc ON wc.id = b.workcenterFk
LEFT JOIN department d ON d.id = b.departmentFk
LEFT JOIN worker w ON w.id = tm.userFk
LEFT JOIN client c ON c.id = w.id
WHERE wc.name NOT IN ('VNH')
AND d.hasToSendMail
AND w.businessFk
GROUP BY tm.userFk,t.dated
ORDER BY tm.userFk,t.dated;
INSERT INTO vn.mail (receiver, replyTo, subject, body)
SELECT eu.email, 'laboral@verdnatura.es', CONCAT('Registro de horas semana ', WEEK(vDatedFrom), ' año ', YEAR(vDatedFrom)) ,
CONCAT('
<!DOCTYPE html>
<html>
<head>
<style>
hr { margin-left: 50px;
margin-right: 50px;}
.result {font-weight:bold;
padding-top: 25px;}
</style>
<body>
<div align="center">
<h2>REGISTRO DE LA JORNADA DE LOS TRABAJADORES</h2>
<table cellpadding="5" cellspacing="2" width="60%" style="color: #153643; font-family: " Trebuchet MS"; font-size:18px; line-height: 18px;">
<tr>
<td align="center" colspan="5">
Según la información recogida en el sistema, adjuntamos la tabla con los registros. Cualquier incidencia rogamos la comunique a <b>laboral@verdnatura.es</b>.
<br> De no recibir incidencia por su parte, se entenderá que el registro es correcto. <br>
</td>
</tr>
<tr>
<td> <b>Empresa: </b> Verdnatura Levante SL</td>
</tr>
<tr>
<td> <b>Trabajador: </b> ',rh.firstname,' ',rh.lastName, '</td>
<td> <b> NIF: </b> ',rh.fi, '</td>
</tr>
<tr>
<td> <b> AÑO: </b> ',rh.año, '</td>
<td> <b> MES: </b> ',UPPER(rh.mes), '</td>
<td> <b> Calendario Laboral: </b>',rh.hoursWeek,' horas semanales </td>
</tr>
</table>
<hr>
<table cellpadding="5" cellspacing="2" width="60%" style="color: #153643; font-family: " Trebuchet MS"; font-size:18px; line-height: 18px;">
<tr>
<td bgcolor="#8ebb27" align="center">Fecha:</td>
<td bgcolor="#8ebb27" align="center">Día:</td>
<td bgcolor="#8ebb27" align="center">Fichadas:</td>
<td bgcolor="#8ebb27" align="center">Horas a trabajar:</td>
<td bgcolor="#8ebb27" align="center">Horas trabajadas:</td>
<td bgcolor="#8ebb27" align="center">Balance:</td>
</tr>',
GROUP_CONCAT(DISTINCT '<tr> <td bgcolor="#8ebb27" align="center">', DATE_FORMAT( rh.dated, '%d-%m-%y'),
'</td> <td align="center">', CONCAT(UCASE(LEFT(DAYNAME(rh.dated), 1)), SUBSTRING(DAYNAME(rh.dated), 2)),
'</td> <td align="center"> ', IFNULL(rh.timeWorkDay,' '),' ', IFNULL(rh.type,' '),
'</td> <td align="center">', rh.tm,
'</td> <td align="center">', SUBSTRING_INDEX(rh.tc, '.', 1),
'</td> <td align="center">', SUBSTRING_INDEX(rh.balance, '.', 1), '</td></tr>' ORDER BY rh.dated SEPARATOR ''),
'<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
<td class="result" align="right"><b>Total horas trabajadas: </b></td>
<td class="result" align="center"><b>', SUBSTRING_INDEX(SEC_TO_TIME(SUM(TIME_TO_SEC(rh.tc))), '.', 1),'</b></td>
<td class="result" align="center"><b>', SUBSTRING_INDEX(SEC_TO_TIME(SUM(TIME_TO_SEC(rh.balance))), '.', 1),'</b></td>
</tr>
</table>
</body>')
FROM tmp.reportHours rh
JOIN account.emailUser eu ON rh.id = eu.userFk
GROUP BY rh.id;
DROP TEMPORARY TABLE tmp.timeControlCalculate;
DROP TEMPORARY TABLE tmp.timeBusinessCalculate;
DROP TEMPORARY TABLE tmp.reportHours;
END$$
DELIMITER ;