<?php
namespace App\Controller;
use App\Constants\VacationsConstants;
use App\Entity\HalfDay;
use App\Entity\HalfDayValidation;
use App\Entity\User;
use App\Entity\UserVacationsDescription;
use App\Entity\UserVacationYearDay;
use App\Entity\Vacations;
use App\Entity\VacationsValidation;
use App\Helper\DateHelper;
use App\Helper\VacationsHelper;
use App\Helper\EmailService;
use Exception;
use PhpOffice\PhpSpreadsheet\Exception as PhpSpreadsheetException;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use Symfony\Component\Routing\Annotation\Route;
use Swift_Mailer;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use Psr\Log\LoggerInterface;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Symfony\Contracts\Translation\TranslatorInterface;
class VacationsController extends AbstractController
{
private $translator;
public function __construct(TranslatorInterface $translator) {
$this->translator = $translator;
}
/**
* @Route("/vacations/description/create", name="vacations_create_descripction", methods={"POST"})
*/
public function createVacationDescriptionAction(Request $request)
{
$description = $request->request->get('vacationdescription');
// d($request, $description);
// exit();
if(!empty($description['title']) and !empty($description['days']))
{
try{
$em = $this->getDoctrine()->getManager();
/* Obtengo usuario logueado */
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$vacations = new UserVacationsDescription();
$vacations->setTitle($description['title']);
$vacations->setDays($description['days']);
$vacations->setType($description['type']);
$vacations->setUserId($description['userId']);
$vacations->setYear($description['year']);
$vacations->setCreatedId($user_id);
$vacations->setUpdatedId($user_id);
//Agregar dias al global de dias
if (isset($description['sumar'])){
$vacations->setOperate(1);
$uservacationday = $em->getRepository('App\Entity\UserVacationYearDay')->findOneBy(
array(
'userId' => $description['userId'],
'year' => $description['year'],
)
);
$yearactual = date('Y');
if (!empty($uservacationday)){
$daysdata = $uservacationday->getDays() + $description['days'];
$halfdaydata = $uservacationday->getHalfday() + $description['days'];
if ($description['type'] == "vacations"){
$uservacationday->setDays($daysdata);
}
if ($description['type'] == "afternoon"){
$uservacationday->setHalfday($halfdaydata);
}
$uservacationday->setUpdatedId($user_id);
$em->persist($uservacationday);
if ($description['days'] != "0" AND $yearactual == $description['year'] ){
$user = $em->getRepository(User::class)->findOneById(
array(
"id" => $description['userId'],
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
)
;
if ($description['type'] == "vacations"){
$user->setVacations($daysdata);
}
if ($description['type'] == "afternoon"){
$user->setHalfDays($halfdaydata);
}
$em->persist($user);
}
}else{
$uservacationday = new UserVacationYearDay();
if ($description['type'] == "vacations"){
$uservacationday->setDays($description['days']);
$uservacationday->setHalfday('0');
}
if ($description['type'] == "afternoon"){
$uservacationday->setDays('0');
$uservacationday->setHalfday($description['days']);
}
$uservacationday->setYear($description['year']);
$uservacationday->setCreatedId($user_id);
$uservacationday->setUpdatedId($user_id);
$em->persist($uservacationday);
if ($description['days'] != "0" AND $yearactual == $description['year'] ){
$user = $em->getRepository(User::class)->findOneById(
array(
"id" => $description['userId'],
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
)
;
if ($description['type'] == "vacations"){
$user->setVacations($description['days']);
$user->setHalfDays('0');
}
if ($description['type'] == "afternoon"){
$user->setVacations('0');
$user->setHalfDays($description['days']);
}
$em->persist($user);
}
}
}else{
$vacations->setOperate(0);
}
$em->persist($vacations);
$em->flush();
$event = 'The description of the holidays were created';
$successMessage = $this->translator->trans($event);
$this->addFlash('mensaje', $successMessage);
// if(!empty($returnnew)){
// $client->setReturnInvestment($returnnew);
// $returninvestment = new ReturnInvestment();
// $returninvestment->setName($returnnew);
// $em->persist($returninvestment);
// $em->flush();
// }
} catch (Exception $e){
$event = 'An error occurred: '.$e->getMessage();
/* Para el usuario */
$errorMessage = $this->translator->trans($event);
$this->addFlash('mensajeerror', $errorMessage);
}
}
return $this->redirectToRoute('summary_vacations_view_User', array(
'id'=> $description['userId'],
'year'=> $description['year']
)
);
}
/**
* @Route("/vacations/description/delete/{id}", name="user_vacations_description_deleted")
*
*/
public function userDescriptionDeleteAction($id, Request $request)
{
$em = $this->getDoctrine()->getManager();
$vacationsDay = $em->getRepository('App\Entity\UserVacationsDescription')->findOneById($id);
$userId = $vacationsDay->getUserid();
$year = $vacationsDay->getYear();
if(!empty($vacationsDay)){
try{
if ($vacationsDay->getOperate() == 1){
$uservacationday = $em->getRepository('App\Entity\UserVacationYearDay')->findOneBy(
array(
'userId' => $userId,
'year' => $year,
)
);
$daysdata = $uservacationday->getDays() - $vacationsDay->getDays();
$halfdaydata = $uservacationday->getHalfday() - $vacationsDay->getDays();
if ($vacationsDay->getType() == "vacations"){
$uservacationday->setDays($daysdata);
}
if ($vacationsDay->getType() == "afternoon"){
$uservacationday->setHalfday($halfdaydata);
}
$em->persist($uservacationday);
$user = $em->getRepository(User::class)->findOneBy(
array(
"id" => $userId,
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
)
;
if (!empty($user)){
if ($vacationsDay->getType() == "vacations"){
$user->setVacations($daysdata);
}
if ($vacationsDay->getType() == "afternoon"){
$user->setHalfDays($halfdaydata);
}
}
$em->persist($user);
}
$em->remove($vacationsDay);
$em->flush();
$event = 'The Item has been deleted.';
$successMessage = $this->translator->trans($event);
$this->addFlash('mensaje', $successMessage);
}catch (\Exception $e){
$event = 'An error occurred: '.$e->getMessage();
/* Para el usuario */
$errorMessage = $this->translator->trans($event);
$this->addFlash('mensajeerror', $errorMessage);
}
}
return $this->redirectToRoute('summary_vacations_view_User', array(
'id'=> $userId,
'year'=> $year
)
);
}
/**
* @Route("/vacations/create", name="vacations_create", methods={"POST"})
*
* @param Request $request
* @param LoggerInterface $logger
* @param Swift_Mailer $mailer
* @return RedirectResponse
* @throws Exception
*/
public function createAction(Request $request, LoggerInterface $logger, Swift_Mailer $mailer)
{
$usersActivesVacationsofOthers = $request->request->get('usersActives');
if(!is_null($usersActivesVacationsofOthers)){
$usersActivesVacationsofOthers = $usersActivesVacationsofOthers['users'];
}else{
$usersActivesVacationsofOthers = [$this->getUser()->getId()];
}
if(!empty($usersActivesVacationsofOthers)){
//Se dispone de un administrador solicitando vacaciones para uno o varios empleados
$description = $request->request->get('description');
$requestedDaysUser= $request->request->get('date');
/* Obtengo usuario logueado */
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$em = $this->getDoctrine()->getManager();
$userAdmin = $em->getRepository(User::class)->findOneById($user_id);
$description = 'Creada por: '. $userAdmin->getName().' '. $userAdmin->getLastName().', '. $description;
$requestedDays = explode(',',$requestedDaysUser);
$yearActual = date('Y');
foreach ($usersActivesVacationsofOthers as $loggerUserInID){
$vacations = new Vacations();
$loggerUserIn = $em->getRepository(User::class)->findOneById($loggerUserInID);
if(!empty($requestedDaysUser))
{
// ANTES DE GUARDAR DEBEMOS CONFIRMAR QUE PUEDE SOLICITAR LOS DIAS PRETENDIDOS CALCULANDO LA DIFERENCIA ENTRE DIAS TOTALES Y DIAS YA SOLICITADOS
$vacations->setIdu($loggerUserInID);
$vacations->setDescription($description);
$vacations->setStatus(0);
/* Gestión de eventos en Log */
$user_lastname = $loggerUserIn->getLastname();
$user_name = $loggerUserIn->getName();
$user_email = $loggerUserIn->getEmail();
$user_rol = $loggerUserIn->getRoles();
$event_url = $request->getPathInfo();
$event_complete = $user_name.' '.$user_lastname.' - '.$user_email.' - '.$user_rol[0].' | '.$event_url;
$alreadyRequestedDay = false;
$numRequestedDay = count($requestedDays);
$requestedDay = 0;
while ($requestedDay < $numRequestedDay && !$alreadyRequestedDay) {
$requestedDayDate = new \DateTime($requestedDays[$requestedDay]);
$vacationsDay = $em->getRepository(VacationsValidation::class)->findBy(array(
'idu' => $loggerUserInID,
'date' =>$requestedDayDate
)
);
$alreadyRequestedDay = !empty($vacationsDay);
$requestedDay++;
}
if(!$alreadyRequestedDay){
try
{
$em->persist($vacations);
$em->flush();
$idv = $vacations->getId();
foreach ($requestedDays as $requestedDay ) {
$requestedDayDate = new \DateTime($requestedDay);
$vacationBossValidation = new VacationsValidation();
$vacationBossValidation->setIdv($idv);
$vacationBossValidation->setIdu($loggerUserInID);
$vacationBossValidation->setDate($requestedDayDate);
$vacationBossValidation->setStatus(1); // Pending // Se fija en true
$vacationBossValidation->setStatusBoss(1); // Pending // Se fija en true
$vacationBossValidation->setUpdatedId($loggerUserInID);
$em->persist($vacationBossValidation);
$em->flush();
$event = 'The Vacations has been requested. ';
$successMessage = $this->translator->trans($event);
$this->addFlash('mensajeholidays', $successMessage);
$logger->info($event_complete.' | '.$event);
// Se actualiza el numero de días disponibles (restadole 1)
$numApprovedDays = 1;
$helper = new VacationsHelper($em);
$helper->updateApprovedDaysOfVacations($loggerUserInID, $numApprovedDays);
// Se actualiza el numero de días disponibles (restadole 1)
}
$data = array();
$vacations = $em->getRepository(Vacations::class)->findOneBy(
array('id' => $idv))
;
/**
* @var User $user
*/
$user = $em->getRepository(User::class)->findOneBy(
array(
"id" => $vacations->getIdu(),
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
)
;
/**
* @var User $teamLeader
*/
$teamLeader = $em->getRepository(User::class)->findOneBy(
array(
'team'=>$user->getTeam(),
'teamleader'=>VacationsConstants::IS_TEAM_LEADER,
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
);
if (!empty($teamLeader)){
$idTeamLeader = $teamLeader->getId();
} else {
$idTeamLeader = null;
}
// This token is stored into the 'vacations' table since is linked to the idv
$token = md5(VacationsConstants::CR_JDEF. rand() * time());
$vacations->setToken($token);
$em->persist($vacations);
$em->flush();
// Once we have stored the requested days, an email is sent to the team leader
$emails = array();
if(!empty($teamLeader)){
// $emails = $teamLeader->getEmail();
$emails = null;
}else{
$adminEmails = $em->getRepository(User::class)->findByRole(
array(
"role" => 'ROLE_ADMIN',
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
)
;
$adminEmails = null;
foreach($adminEmails as $adminEmail){
array_push($emails, $adminEmail->getEmail());
}
}
/**
* @var VacationsValidation $vacationsDay
*/
$vacationsDay = $em->getRepository(VacationsValidation::class)->findBy(array('idv'=>$idv));
if (!empty($vacationsDay))
{
$dataB = array();
/**
* @var VacationsValidation $vacationDay
*/
foreach($vacationsDay as $vacationDay) {
$vacationDay->getStatus()?$status='Approved':$status='Rejected';
if(is_null($vacationDay->getStatus())){
$status='Pending';
}
$vacationDay->getStatusBoss()?$statusB='Approved':$statusB='Rejected';
if(is_null($vacationDay->getStatusBoss())){
$statusB='Pending';
}
$dataB[] = array(
'id' => $vacationDay->getId(),
'date' => $vacationDay->getDate(),
'status' => $status,
'statusBoss' => $statusB,
);
}
$data = array(
'idv' => $idv,
'days' =>$dataB,
'fullname'=>$user->getName().' '.$user->getLastName(),
'date'=>$vacations->getCreatedAt(),
'role'=>$user->getRole(),
);
}
$emailService = new EmailService();
$emailsDelivered = $emailService->sendHTMLEmail(
$emails, //TO ADDRESS
'Solicitud de Vacaciones',
$this->renderView(
'vacations/vacations-email-report.html.twig',
array('data' => $data,
'token'=> $token,
'idTeamLeader' => $idTeamLeader,
'isBoss'=> false)
)
)
;
} catch (\Exception $e){
$event = 'An error occurred: '.$e->getMessage();
/* Para el log */
$logger->error($event_complete.' | '.$event);
/* Para el usuario */
$errorMessage = $this->translator->trans($event);
$this->addFlash('mensajeerror', $errorMessage);
}
}else{
$event = 'You can not select a duplicated day for '.$loggerUserIn->getName().' '.$loggerUserIn->getLastName(); // Se debe reflejar que empleado ya tiene uno de los dias seleccionados
/* Para el log */
$logger->error($event_complete.' | '.$event);
/* Para el usuario */
$errorMessage = $this->translator->trans($event);
$this->addFlash('mensajeerror', $errorMessage);
}
// return $this->redirectToRoute('summary_vacations_view_User', array(
// 'id'=> $loggerUserInID,
// 'year'=> $yearActual
// ));
}
}
if(empty($requestedDaysUser)){
$errorMessage = $this->translator->trans('Error, some fields are empty');
$this->addFlash('mensajeerror', $errorMessage);
}
return $this->redirectToRoute('summary_vacations_view_User', array(
'id'=> $userAdmin->getId(),
'year'=> $yearActual
));
}
$description = $request->request->get('description');
$requestedDaysUser= $request->request->get('date');
$requestedDays = explode(',',$requestedDaysUser);
$vacations = new Vacations();
$em = $this->getDoctrine()->getManager();
/* Obtengo usuario logueado */
$loggerUserIn = $this->get('security.token_storage')->getToken()->getUser();
$loggerUserInID = $loggerUserIn->getId();
$yearActual = date('Y');
if(!empty($requestedDaysUser))
{
// ANTES DE GUARDAR DEBEMOS CONDIRMAR QUE PUEDE SOLICITAR LOS DIAS PRETENDIDOS CALCULANDO LA DIFERENCIA ENTRE DIAS TOTALES Y DIAS YA SOLICITADOS
$vacations->setIdu($loggerUserInID);
$vacations->setDescription($description);
$vacations->setStatus(0);
/* Gestión de eventos en Log */
$user_lastname = $loggerUserIn->getLastname();
$user_name = $loggerUserIn->getName();
$user_email = $loggerUserIn->getEmail();
$user_rol = $loggerUserIn->getRoles();
$event_url = $request->getPathInfo();
$event_complete = $user_name.' '.$user_lastname.' - '.$user_email.' - '.$user_rol[0].' | '.$event_url;
$alreadyRequestedDay = false;
$numRequestedDay = count($requestedDays);
$requestedDay = 0;
while ($requestedDay < $numRequestedDay && !$alreadyRequestedDay) {
$requestedDayDate= new \DateTime($requestedDays[$requestedDay]);
$vacationsDay = $em->getRepository(VacationsValidation::class)->findBy(array(
'idu' => $loggerUserInID,
'date' =>$requestedDayDate
)
);
$alreadyRequestedDay = !empty($vacationsDay);
$requestedDay++;
}
if(!$alreadyRequestedDay){
try
{
$em->persist($vacations);
$em->flush();
$idv=$vacations->getId();
foreach ($requestedDays as $requestedDay ) {
$requestedDayDate = new \DateTime($requestedDay);
$vacationBossValidation=new VacationsValidation();
$vacationBossValidation->setIdv($idv);
$vacationBossValidation->setIdu($loggerUserInID);
$vacationBossValidation->setDate($requestedDayDate);
$vacationBossValidation->setStatus(null); // Pending
$vacationBossValidation->setStatusBoss(null); // Pending
$vacationBossValidation->setUpdatedId($loggerUserInID);
$em->persist($vacationBossValidation);
$em->flush();
$event = 'The Vacations has been requested. ';
$successMessage = $this->translator->trans($event);
$this->addFlash('mensajeholidays', $successMessage);
$logger->info($event_complete.' | '.$event);
}
// Se guarda la descripción en la tabla 'user_vacations_description'
// $userVacationDescription = new UserVacationsDescription();
// $userVacationDescription->setTitle($description);
// $userVacationDescription->setDays(count($requestedDays));
// $userVacationDescription->setType("vacations");
// $userVacationDescription->setUserId($loggerUserInID);
// $userVacationDescription->setOperate(0);
// $userVacationDescription->setYear($yearActual);
// $userVacationDescription->setCreatedId($loggerUserInID);
// $userVacationDescription->setCreatedAt(new \DateTime('now'));
// $userVacationDescription->setUpdatedId($loggerUserInID);
// $userVacationDescription->setUpdatedAt(new \DateTime('now'));
// $em->persist($userVacationDescription);
// $em->flush();
$data=array();
$vacations=$em->getRepository(Vacations::class)->findOneBy(
array('id' => $idv))
;
/**
* @var User $user
*/
$user=$em->getRepository(User::class)->findOneBy(
array(
"id" => $vacations->getIdu(),
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
)
;
/**
* @var User $teamLeader
*/
$teamLeader=$em->getRepository(User::class)->findOneBy(
array(
'team'=>$user->getTeam(),
'teamleader'=>VacationsConstants::IS_TEAM_LEADER,
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
);
$idTeamLeader = $teamLeader->getId();
// This token is stored into the 'vacations' table since is linked to the idv
$token = md5(VacationsConstants::CR_JDEF. rand() * time());
$vacations->setToken($token);
$em->persist($vacations);
$em->flush();
// Once we have stored the requested days, an email is sent to the team leader
$emails = array();
if(!empty($teamLeader)){
$emails=$teamLeader->getEmail();
}else{
$adminEmails = $em->getRepository(User::class)->findByRole(
array(
"role" => 'ROLE_ADMIN',
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
)
;
foreach($adminEmails as $adminEmail){
array_push($emails, $adminEmail->getEmail());
}
}
/**
* @var VacationsValidation $vacationsDay
*/
$vacationsDay = $em->getRepository(VacationsValidation::class)->findBy(array('idv'=>$idv));
if (!empty($vacationsDay))
{
$dataB = array();
/**
* @var VacationsValidation $vacationDay
*/
foreach($vacationsDay as $vacationDay) {
$vacationDay->getStatus()?$status='Approved':$status='Rejected';
if(is_null($vacationDay->getStatus())){
$status='Pending';
}
$vacationDay->getStatusBoss()?$statusB='Approved':$statusB='Rejected';
if(is_null($vacationDay->getStatusBoss())){
$statusB='Pending';
}
$dataB[] = array(
'id' => $vacationDay->getId(),
'date' => $vacationDay->getDate(),
'status' => $status,
'statusBoss' => $statusB,
);
}
$data = array(
'idv' => $idv,
'days' =>$dataB,
'fullname'=>$user->getName().' '.$user->getLastName(),
'date'=>$vacations->getCreatedAt(),
'role'=>$user->getRole(),
);
}
$emailService = new EmailService();
$emailsDelivered = $emailService->sendHTMLEmail(
$emails, //TO ADDRESS
'Solicitud de Vacaciones',
$this->renderView(
'vacations/vacations-email-report.html.twig',
array('data' => $data,
'token'=> $token,
'idTeamLeader' => $idTeamLeader,
'isBoss'=> false)
)
)
;
} catch (\Exception $e){
$event = 'An error occurred: '.$e->getMessage();
/* Para el log */
$logger->error($event_complete.' | '.$event);
/* Para el usuario */
$errorMessage = $this->translator->trans($event);
$this->addFlash('mensajeerror', $errorMessage);
}
}else{
$event = 'You can not select a duplicated day';
/* Para el log */
$logger->error($event_complete.' | '.$event);
/* Para el usuario */
$errorMessage = $this->translator->trans($event);
$this->addFlash('mensajeerror', $errorMessage);
}
/* Fin Gestión de eventos en Log */
return $this->redirectToRoute('summary_vacations_view_User', array(
'id'=> $loggerUserInID,
'year'=> $yearActual
));
}else{
$errorMessage = $this->translator->trans('Error, some fields are empty');
$this->addFlash('mensajeerror', $errorMessage);
}
//exit();
//return $this->render('holidays/add-holidays.html.twig', array('form' => $form->createView()));
return $this->redirectToRoute('summary_vacations_view_User', array(
'id'=> $loggerUserInID,
'year'=> $yearActual
));
}
/**
* @Route("/vacations/email/{idv}", name="vacations_email")
*
*/
public function vacationsEmailAction($idv, Request $request, LoggerInterface $logger)
{
$em = $this->getDoctrine()->getManager();
$data=array();
$vacations=$em->getRepository(Vacations::class)->findOneById($idv);
$vacationsDay = $em->getRepository(VacationsValidation::class)->findBy(array('idv'=>$idv));
$user=$em->getRepository(User::class)->findOneBy(
array(
"id" => $vacations->getIdu(),
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
)
;
$vac_num=$user->getVacations();
if (!empty($vacationsDay))
{
foreach($vacationsDay as $itemB) {
$itemB->getStatus()?$status='Approved':$status='Rejected';
if(is_null($itemB->getStatus())){
$status='Pending';
}
$itemB->getStatusBoss()?$statusB='Approved':$statusB='Rejected';
if(is_null($itemB->getStatusBoss())){
$statusB='Pending';
}
$dataB[] = array(
'id' => $itemB->getId(),
'date' => $itemB->getDate(),
'status' => $status,
'statusBoss' => $statusB,
);
}
$data = array(
'idv' => $idv,
'days' =>$dataB,
'fullname'=>$user->getName().' '.$user->getLastName(),
'date'=>$vacations->getCreatedAt(),
'role'=>$user->getRole()
);
}
return $this->render('vacations/vacations-email-report.html.twig',
array(
'data'=>$data,
)
);
}
/**
* @Route("/vacations/userEmail/{idv}", name="vacations_user_email")
*
*/
public function vacationsUserEmailAction($idv, Request $request, LoggerInterface $logger)
{
$em = $this->getDoctrine()->getManager();
$data=array();
$vacations=$em->getRepository(Vacations::class)->findOneById($idv);
$vacationsDay = $em->getRepository(VacationsValidation::class)->findBy(array('idv'=>$idv));
$user=$em->getRepository(User::class)->findOneById(
array(
"id" => $vacations->getIdu(),
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
)
;
$vac_num=$user->getVacations();
if (!empty($vacationsDay))
{
foreach($vacationsDay as $itemB) {
$itemB->getStatus()?$status='Approved':$status='Rejected';
if(is_null($itemB->getStatus())){
$status='Pending';
}
$itemB->getStatusBoss()?$statusB='Approved':$statusB='Rejected';
if(is_null($itemB->getStatusBoss())){
$statusB='Pending';
}
$dataB[] = array(
'id' => $itemB->getId(),
'date' => $itemB->getDate(),
'status' => $status,
'statusBoss' => $statusB,
);
}
$data = array(
'idv' => $idv,
'days' =>$dataB,
'fullname'=>$user->getName().' '.$user->getLastName(),
'date'=>$vacations->getCreatedAt(),
'role'=>$user->getRole()
);
}
//d($data);
return $this->render('vacations/vacations-email-user-report.html.twig',
array(
'data'=>$data,
)
);
}
/**
* @Route("/vacations/deleteBossEdit/{id}/{idu}", name="vacations_deleted_edit")
*
*/
public function deleteBossAction($id, $idu, Request $request, LoggerInterface $logger)
{
$em = $this->getDoctrine()->getManager();
$vacationsDay = $em->getRepository(VacationsValidation::class)->findOneById($id);
if (!empty($vacationsDay))
{
try{
$em->remove($vacationsDay);
$em->flush();
}
catch (\Exception $e){
$event = 'An error occurred: '.$e->getMessage();
/* Para el log */
$logger->error($event);
/* Para el usuario */
$errorMessage = $this->translator->trans($event);
$this->addFlash('mensajeholidayserror', $errorMessage);
}
}
$event = 'The Item has been deleted.';
$successMessage = $this->translator->trans($event);
$this->addFlash('mensajeholidays', $successMessage);
/* Fin Gestión de eventos en Log */
return $this->redirect('/vacations/edit/'.$idu.'/'.$vacationsDay->getIdv());
}
/**
* @Route("/vacations/deleteBoss/{id}/{idv}", name="vacations_deleted")
*
*/
// public function deleteAction($id, Request $request, LoggerInterface $logger)
public function deleteAction($id,$idv, Request $request, LoggerInterface $logger)
{
$em = $this->getDoctrine()->getManager();
$vacationsDay = $em->getRepository(VacationsValidation::class)->findOneById($id);
if (!empty($vacationsDay))
{
try{
$em->remove($vacationsDay);
$em->flush();
}
catch (\Exception $e){
$event = 'An error occurred: '.$e->getMessage();
/* Para el log */
$logger->error($event);
/* Para el usuario */
$errorMessage = $this->translator->trans($event);
$this->addFlash('mensajeholidayserror', $errorMessage);
}
}
$event = 'The Item has been deleted.';
$successMessage = $this->translator->trans($event);
$this->addFlash('mensajeholidays', $successMessage);
/* Fin Gestión de eventos en Log */
return $this->redirect('/vacations/check/'.$idv);
}
/**
* @Route("/vacations/delete/{id}", name="user_vacations_deleted")
*
*/
public function userDeleteAction($id, Request $request, LoggerInterface $logger)
{
$em = $this->getDoctrine()->getManager();
$vacationsDay = $em->getRepository(VacationsValidation::class)->findOneById($id);
if(!empty($vacationsDay)){
try{
$em->remove($vacationsDay);
$em->flush();
}catch (\Exception $e){
$event = 'An error occurred: '.$e->getMessage();
/* Para el log */
$logger->error($event);
/* Para el usuario */
$errorMessage = $this->translator->trans($event);
$this->addFlash('mensajeholidayserror', $errorMessage);
}
}
$event = 'The Item has been deleted.';
$successMessage = $this->translator->trans($event);
$this->addFlash('mensajeholidays', $successMessage);
/* Fin Gestión de eventos en Log */
return $this->redirect('/vacations/request');
}
// /**
// * @Route("/vacations/request/{id}", defaults={"id" = 0}, name="get_vacations_select")
// */
// public function vacationsRequestAction($id, Request $request)
// {
//
// $approvedH=0;
// $pendingH=0;
// $rejectedH=0;
// $totalH=0;
// $em = $this->getDoctrine()->getManager();
//
// $user_logueado = $this->get('security.token_storage')->getToken()->getUser();
// $user_role = $user_logueado->getRole();
// if ($user_role == "ROLE_ADMIN" && $id != 0){
// $user_id = $id;
// }else{
// $user_id = $user_logueado->getId();
// }
// $query_user = $em->getRepository(User::class)->findOneById($user_id);
//
// $uservacationday = $em->getRepository('App\Entity\UserVacationYearDay')->findBy(
// array(
// 'userId' => $user_id
// )
// );
// $datafull = array();
// foreach($uservacationday as $datos) {
// $vacations_total = $datos->getDays();
// $halfDays_total = $datos->getHalfday();
//
// $emConfig = $em->getConfiguration();
// $emConfig->addCustomDatetimeFunction('YEAR', 'DoctrineExtensions\Query\Mysql\Year');
//
// $yearActual = $datos->getYear();
// $yearSiguiente = $yearActual +1;
//
// $parameters = array(
// 'idu' => $user_id,
// 'dateActual'=>$yearActual,
//
// );
// $dql = 'SELECT p
// FROM App:Vacations p
// WHERE p.idu = :idu AND YEAR(p.createdAt) = :dateActual
// ORDER BY p.createdAt DESC
// ';
// $query = $em->createQuery($dql)->setParameters($parameters);
// $vacations= $query->getResult();
//
//
// $approved=0;
// $pending=0;
// $rejected=0;
// $total=0;
// $data = array();
// if(!empty($vacations)){
// foreach($vacations as $item) {
//
// $dataB = array();
// $bossVal = $em->getRepository(VacationsValidation::class)->findBy(
// array(
// 'idv'=>$item->getId()
// )
// );
// if(!empty($bossVal)){
// foreach($bossVal as $itemB) {
// $total = $total + 1;
// if(is_null($itemB->getStatus())){
// $status='Pending';
// }else{
// if($itemB->getStatus() == true){
// $status='Approved';
// }elseif($itemB->getStatus() == false){
// $status='Rejected';
// }
// }
// if(is_null($itemB->getStatusBoss())){
// $statusB='Pending';
// $pending = $pending + 1;
// }else{
// if($itemB->getStatusBoss() == true){
// $statusB='Approved';
// $approved = $approved + 1;
// }elseif($itemB->getStatusBoss() == false){
// $statusB='Rejected';
// $rejected = $rejected + 1;
// }
// }
//
// $dataB[$yearActual] = array(
// 'id' => $itemB->getId(),
// 'idv' => $itemB->getIdv(),
// 'date' => $itemB->getDate(),
// 'status' => $status,
// 'statusBoss' => $statusB,
// );
// }
// $data[$yearActual] = array(
// 'idv' => $item->getId(),
// 'bossVal' =>$dataB,
// );
// }
//
// }
// }
//
// $parametershd = array(
// 'idu' => $user_id,
// 'dateActual'=>$yearActual,
// );
//
// $dqlhd = 'SELECT p
// FROM App:HalfDay p
// WHERE p.idu = :idu AND YEAR(p.createdAt) = :dateActual
// ORDER BY p.createdAt DESC
// ';
// $queryhd = $em->createQuery($dqlhd)->setParameters($parametershd);
// $halfDay= $queryhd->getResult();
//
//
// $approvedH=0;
// $pending=0;
// $rejectedH=0;
// $pendingH=0;
// $totalH=0;
// $dataH=array();
// if(!empty($halfDay)){
// foreach($halfDay as $item) {
//
// $em = $this->getDoctrine()->getManager();
// $bossVal = $em->getRepository(HalfDayValidation::class)->findBy(
// array(
// 'idv'=>$item->getId()
//
// )
// );
//
// $dataBH=array();
// foreach($bossVal as $itemB) {
//
// $itemB->getStatus()?$status='Approved':$status='Rejected';
// if(is_null($itemB->getStatus())){
// $status='Pending';
// }
// $itemB->getStatusBoss()?$statusB='Approved':$statusB='Rejected';
// if(is_null($itemB->getStatusBoss())){
// $statusB='Pending';
// }
//
// if($itemB->getStatusBoss()==1){
// $approvedH++;
// }else{
// is_null($itemB->getStatusBoss())?$pendingH++:$rejectedH++;
// }
//
// $dataBH[$yearActual] = array(
// 'id' => $itemB->getId(),
// 'idv' => $itemB->getIdv(),
// 'date' => $itemB->getDate(),
// 'status' => $status,
// 'statusBoss' => $statusB,
// 'horario'=>$itemB->getHorario(),
// );
// }
//
//
// $dataH[$yearActual] = array(
// 'idv' => $item->getId(),
// 'bossVal' =>$dataBH,
// );
// }
//
// }
//
// $totalH=$approvedH+$rejectedH+$pendingH;
//
// $remaining = $vacations_total - $total;
// $remainingH = $halfDays_total - $approvedH;
// $datafull[$yearActual] = array(
// 'year' => $yearActual,
// 'data' => $data,
// 'dataHalfDay'=>$dataH,
// 'vacations'=>$vacations_total,
// 'approved'=>$approved,
// 'rejected'=>$rejected,
// 'remaining'=>$remaining,
// 'pending'=>$pending,
// 'total'=>$total,
// 'halfDays'=>$halfDays_total,
// 'approvedH'=>$approvedH,
// 'rejectedH'=>$rejectedH,
// 'remainingH'=>$remainingH,
// 'pendingH'=>$pendingH,
// 'totalH'=>$totalH,
// );
// }
//
//
//
//
//
//// $query_user = $em->getRepository(User::class)->findOneById($user_id);
//// $vacations_total = $query_user->getVacations();
//// $halfDays_total = $query_user->getHalfDays();
//
//// $emConfig = $em->getConfiguration();
//// $emConfig->addCustomDatetimeFunction('YEAR', 'DoctrineExtensions\Query\Mysql\Year');
//// $emConfig->addCustomDatetimeFunction('MONTH', 'DoctrineExtensions\Query\Mysql\Month');
//// $emConfig->addCustomDatetimeFunction('DAY', 'DoctrineExtensions\Query\Mysql\Day');
//// $parameters = array(
//// 'idu' => $user_id,
//// 'dateActual'=>date("Y"),
//// );
//// $dql = 'SELECT p
//// FROM App:Vacations p
//// WHERE p.idu = :idu
//// AND YEAR(p.createdAt) = :dateActual
//// ORDER BY p.createdAt DESC
//// ';
//
//
//
//// d($data,$dataH,$approvedH,$rejectedH,$pendingH,$totalH);
// return $this->render('vacations/add-vacations.html.twig', array(
// 'userName' => $query_user->getName() . ' ' . $query_user->getLastName(),
//// 'data' => $data,
// 'datafull' => $datafull,
// 'idu'=>$user_id
// ));
// }
/**
* @Route("/vacations/request/{id}/{year}", defaults={"year" = 0}, name="summary_vacations_view_User")
*/
public function vacationsRequestAdminAction($id, $year, Request $request)
{
if ($year=='0'){
$yearActual = date('Y');
}else{
$yearActual = $year;
}
// exit();
$approvedH=0;
$pendingH=0;
$rejectedH=0;
$totalH=0;
$em = $this->getDoctrine()->getManager();
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_role = $user_logueado->getRole();
if ($user_role == "ROLE_ADMIN" && $id != 0){
$user_id = $id;
}else{
$user_id = $user_logueado->getId();
}
$query_user = $em->getRepository(User::class)->findOneBy(
array(
"id" => $user_id,
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
)
;
$uservacationday = $em->getRepository('App\Entity\UserVacationYearDay')->findBy(
array(
'userId' => $user_id,
'year' => $yearActual,
)
);
$datafull = array();
$descriptionday = array();
foreach($uservacationday as $datos) {
$vacations_total = $datos->getDays();
$halfDays_total = $datos->getHalfday();
$emConfig = $em->getConfiguration();
$emConfig->addCustomDatetimeFunction('YEAR', 'DoctrineExtensions\Query\Mysql\Year');
$yearSiguiente = $yearActual +1;
$parameters = array(
'idu' => $user_id,
'dateActual'=>$yearActual,
);
$dql = 'SELECT p
FROM App:Vacations p
WHERE p.idu = :idu AND YEAR(p.createdAt) = :dateActual
ORDER BY p.createdAt DESC
';
$query = $em->createQuery($dql)->setParameters($parameters);
$vacations= $query->getResult();
$approved=0;
$pending=0;
$rejected=0;
$total=0;
$data = array();
if(!empty($vacations)){
foreach($vacations as $item) {
$dataB = array();
$bossVal = $em->getRepository(VacationsValidation::class)->findBy(
array(
'idv'=>$item->getId()
)
);
// d($bossVal);
if(!empty($bossVal)){
foreach($bossVal as $itemB) {
$total = $total + 1;
if(is_null($itemB->getStatus())){
$status='Pending';
}else{
if($itemB->getStatus() == true){
$status='Approved';
}elseif($itemB->getStatus() == false){
$status='Rejected';
}
}
if(is_null($itemB->getStatusBoss())){
$statusB='Pending';
$pending = $pending + 1;
}else{
if($itemB->getStatusBoss() == true){
$statusB='Approved';
$approved = $approved + 1;
}elseif($itemB->getStatusBoss() == false){
$statusB='Rejected';
$rejected = $rejected + 1;
}
}
$dataB[] = array(
'id' => $itemB->getId(),
'idv' => $itemB->getIdv(),
'date' => $itemB->getDate(),
'status' => $status,
'statusBoss' => $statusB,
);
}
$data[] = array(
'idv' => $item->getId(),
'descripction' => $item->getDescription(),
'bossVal' =>$dataB,
);
}
}
}
$parametershd = array(
'idu' => $user_id,
'dateActual'=>$yearActual,
);
$dqlhd = 'SELECT p
FROM App:HalfDay p
WHERE p.idu = :idu AND YEAR(p.createdAt) = :dateActual
ORDER BY p.createdAt DESC
';
$queryhd = $em->createQuery($dqlhd)->setParameters($parametershd);
$halfDay= $queryhd->getResult();
$approvedH=0;
$pending=0;
$rejectedH=0;
$pendingH=0;
$totalH=0;
$dataH=array();
if(!empty($halfDay)){
foreach($halfDay as $item) {
$em = $this->getDoctrine()->getManager();
$bossVal = $em->getRepository(HalfDayValidation::class)->findBy(
array(
'idv'=>$item->getId()
)
);
$dataBH=array();
foreach($bossVal as $itemB) {
$itemB->getStatus()?$status='Approved':$status='Rejected';
if(is_null($itemB->getStatus())){
$status='Pending';
}
$itemB->getStatusBoss()?$statusB='Approved':$statusB='Rejected';
if(is_null($itemB->getStatusBoss())){
$statusB='Pending';
}
if($itemB->getStatusBoss()==1){
$approvedH++;
}else{
is_null($itemB->getStatusBoss())?$pendingH++:$rejectedH++;
}
$dataBH[] = array(
'id' => $itemB->getId(),
'idv' => $itemB->getIdv(),
'date' => $itemB->getDate(),
'status' => $status,
'statusBoss' => $statusB,
'horario'=>$itemB->getHorario(),
);
}
$dataH[] = array(
'idv' => $item->getId(),
'descripction' => $item->getDescription(),
'bossVal' =>$dataBH,
);
}
}
$uservacationdescripctionday = $em->getRepository('App\Entity\UserVacationsDescription')->findBy(
array(
'userId' => $user_id,
'year' => $yearActual,
)
);
foreach($uservacationdescripctionday as $descvacauser) {
$descriptionday[$descvacauser->getType()][] = $descvacauser;
}
$totalH=$approvedH+$rejectedH+$pendingH;
$remaining = $vacations_total - $approved;
$remainingH = $halfDays_total - $approvedH;
$datafull[$yearActual] = array(
'year' => $yearActual,
'data' => $data,
'dataHalfDay'=>$dataH,
'vacations'=>$vacations_total,
'approved'=>$approved,
'rejected'=>$rejected,
'remaining'=>$remaining,
'pending'=>$pending,
'total'=>$total,
'halfDays'=>$halfDays_total,
'approvedH'=>$approvedH,
'rejectedH'=>$rejectedH,
'remainingH'=>$remainingH,
'pendingH'=>$pendingH,
'totalH'=>$totalH,
'descriptionday'=>$descriptionday,
);
}
$allActiveUsers = $em->getRepository(User::class)->findBy(
array(
'status' => 1
)
);
return $this->render('vacations/view-user-vacations.html.twig', array(
'userName' => $query_user->getName() . ' ' . $query_user->getLastName(),
'datafull' => $datafull,
'idu'=>$user_id,
'year'=>$yearActual,
'allActiveUsers'=>$allActiveUsers,
));
}
/**
* @Route("/vacations/activeusers", name="get_active_users")
*/
public function activeUsersAction(Request $request) {
$type = $_POST['type'];
$id = $_POST['id'];
$em = $this->getDoctrine()->getManager();
// $allActiveUsers = $em->getRepository(User::class)->findBy(
// array(
// 'status' => 1
// )
// );
$parameters = array(
'status' => 1
);
$dql = 'SELECT p
FROM App\Entity\User p
WHERE p.status = :status
ORDER BY p.name ASC';
$query = $em->createQuery($dql)->setParameters($parameters);
$allActiveUsers = $query->getResult();
foreach($allActiveUsers as $user){
$datos[] = array(
"name" => $user->getName().' '.$user->getLastName(),
"selected" => '',
"id" => $user->getId(),
);
}
$return = array(
'users' => $datos,
);
$response = new JsonResponse($return);
return $response;
}
/**
* @Route("/vacations/vacationsofotehrs/{id}/{year}", defaults={"year" = 0}, name="vacations_of_otehrs")
*/
public function vacationsOfOtehrsAction($id, $year, Request $request)
{
if ($year=='0'){
$yearActual = date('Y');
}else{
$yearActual = $year;
}
// exit();
$approvedH=0;
$pendingH=0;
$rejectedH=0;
$totalH=0;
$em = $this->getDoctrine()->getManager();
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_role = $user_logueado->getRole();
if ($user_role == "ROLE_ADMIN" && $id != 0){
$user_id = $id;
}else{
$user_id = $user_logueado->getId();
}
$query_user = $em->getRepository(User::class)->findOneBy(
array(
"id" => $user_id,
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
)
;
$uservacationday = $em->getRepository('App\Entity\UserVacationYearDay')->findBy(
array(
'userId' => $user_id,
'year' => $yearActual,
)
);
$datafull = array();
$descriptionday = array();
foreach($uservacationday as $datos) {
$vacations_total = $datos->getDays();
$halfDays_total = $datos->getHalfday();
$emConfig = $em->getConfiguration();
$emConfig->addCustomDatetimeFunction('YEAR', 'DoctrineExtensions\Query\Mysql\Year');
$yearSiguiente = $yearActual +1;
$parameters = array(
'idu' => $user_id,
'dateActual'=>$yearActual,
);
$dql = 'SELECT p
FROM App:Vacations p
WHERE p.idu = :idu AND YEAR(p.createdAt) = :dateActual
ORDER BY p.createdAt DESC
';
$query = $em->createQuery($dql)->setParameters($parameters);
$vacations= $query->getResult();
$approved=0;
$pending=0;
$rejected=0;
$total=0;
$data = array();
if(!empty($vacations)){
foreach($vacations as $item) {
$dataB = array();
$bossVal = $em->getRepository(VacationsValidation::class)->findBy(
array(
'idv'=>$item->getId()
)
);
// d($bossVal);
if(!empty($bossVal)){
foreach($bossVal as $itemB) {
$total = $total + 1;
if(is_null($itemB->getStatus())){
$status='Pending';
}else{
if($itemB->getStatus() == true){
$status='Approved';
}elseif($itemB->getStatus() == false){
$status='Rejected';
}
}
if(is_null($itemB->getStatusBoss())){
$statusB='Pending';
$pending = $pending + 1;
}else{
if($itemB->getStatusBoss() == true){
$statusB='Approved';
$approved = $approved + 1;
}elseif($itemB->getStatusBoss() == false){
$statusB='Rejected';
$rejected = $rejected + 1;
}
}
$dataB[] = array(
'id' => $itemB->getId(),
'idv' => $itemB->getIdv(),
'date' => $itemB->getDate(),
'status' => $status,
'statusBoss' => $statusB,
);
}
$data[] = array(
'idv' => $item->getId(),
'descripction' => $item->getDescription(),
'bossVal' =>$dataB,
);
}
}
}
$parametershd = array(
'idu' => $user_id,
'dateActual'=>$yearActual,
);
$dqlhd = 'SELECT p
FROM App:HalfDay p
WHERE p.idu = :idu AND YEAR(p.createdAt) = :dateActual
ORDER BY p.createdAt DESC
';
$queryhd = $em->createQuery($dqlhd)->setParameters($parametershd);
$halfDay= $queryhd->getResult();
$approvedH=0;
$pending=0;
$rejectedH=0;
$pendingH=0;
$totalH=0;
$dataH=array();
if(!empty($halfDay)){
foreach($halfDay as $item) {
$em = $this->getDoctrine()->getManager();
$bossVal = $em->getRepository(HalfDayValidation::class)->findBy(
array(
'idv'=>$item->getId()
)
);
$dataBH=array();
foreach($bossVal as $itemB) {
$itemB->getStatus()?$status='Approved':$status='Rejected';
if(is_null($itemB->getStatus())){
$status='Pending';
}
$itemB->getStatusBoss()?$statusB='Approved':$statusB='Rejected';
if(is_null($itemB->getStatusBoss())){
$statusB='Pending';
}
if($itemB->getStatusBoss()==1){
$approvedH++;
}else{
is_null($itemB->getStatusBoss())?$pendingH++:$rejectedH++;
}
$dataBH[] = array(
'id' => $itemB->getId(),
'idv' => $itemB->getIdv(),
'date' => $itemB->getDate(),
'status' => $status,
'statusBoss' => $statusB,
'horario'=>$itemB->getHorario(),
);
}
$dataH[] = array(
'idv' => $item->getId(),
'descripction' => $item->getDescription(),
'bossVal' =>$dataBH,
);
}
}
$uservacationdescripctionday = $em->getRepository('App\Entity\UserVacationsDescription')->findBy(
array(
'userId' => $user_id,
'year' => $yearActual,
)
);
foreach($uservacationdescripctionday as $descvacauser) {
$descriptionday[$descvacauser->getType()][] = $descvacauser;
}
$totalH=$approvedH+$rejectedH+$pendingH;
$remaining = $vacations_total - $approved;
$remainingH = $halfDays_total - $approvedH;
$datafull[$yearActual] = array(
'year' => $yearActual,
'data' => $data,
'dataHalfDay'=>$dataH,
'vacations'=>$vacations_total,
'approved'=>$approved,
'rejected'=>$rejected,
'remaining'=>$remaining,
'pending'=>$pending,
'total'=>$total,
'halfDays'=>$halfDays_total,
'approvedH'=>$approvedH,
'rejectedH'=>$rejectedH,
'remainingH'=>$remainingH,
'pendingH'=>$pendingH,
'totalH'=>$totalH,
'descriptionday'=>$descriptionday,
);
}
$allActiveUsers = $em->getRepository(User::class)->findBy(
array(
'status' => 1
)
);
return $this->render('vacations/view-user-others-vacations.html.twig', array(
'userName' => $query_user->getName() . ' ' . $query_user->getLastName(),
'datafull' => $datafull,
'idu'=>$user_id,
'year'=>$yearActual,
'allActiveUsers'=>$allActiveUsers,
));
}
/**
* @Route("/vacations/listTeamLeader", name="validate_vacations_list_team_leader")
* @param Request $request
* @return Response
*/
public function vacationsTeamLeaderListAction(Request $request)
{
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$em = $this->getDoctrine()->getManager();
$teamLeader = $em->getRepository(User::class)->findOneById(
array(
"id" => $user_id,
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
)
;
$team=$teamLeader->getTeamLeader();
$flag=1;
$data = array();
if($team){
$users=$em->getRepository(User::class)->findBy(
array(
'team'=>$teamLeader->getTeam(),
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
)
;
$emConfig = $em->getConfiguration();
$emConfig->addCustomDatetimeFunction('YEAR', 'DoctrineExtensions\Query\Mysql\Year');
foreach ($users as $itemUsers){
// $vacations = $em->getRepository(Vacations::class)->findBy(array('idu'=>$itemUsers->getId()));
// $parameters = array(
// 'dateActual'=>date("Y"),
// 'userId'=>$itemUsers->getId(),
// );
// $dql = 'SELECT p
// FROM App:Vacations p
// WHERE YEAR(p.createdAt) = :dateActual
// AND p.idu = :userId
// ORDER BY p.createdAt DESC
// ';
// Enero dia 30
$yearActual = date('Y');
$yearSiguiente = $yearActual +1;
$parameters = array(
'idu' => $itemUsers->getId(),
// 'dateActual'=>$yearActual."-1-30",
// 'dateSiguiente'=>$yearSiguiente."-1-30",
);
// $dql = 'SELECT p
// FROM App:Vacations p
// WHERE p.idu = :idu AND (p.createdAt >= :dateActual AND p.createdAt <= :dateSiguiente )
// ORDER BY p.createdAt DESC
// ';
$dql = 'SELECT p
FROM App:Vacations p
WHERE p.idu = :idu
ORDER BY p.createdAt DESC
';
$query = $em->createQuery($dql)->setParameters($parameters);
$vacations= $query->getResult();
$dataF = array();
if(!empty($vacations)){
foreach($vacations as $item) {
$dataF = array();
$validation = $em->getRepository(VacationsValidation::class)->findBy(array('idv'=>$item->getId()),array('date'=>'ASC'));
// d($validation);
$num=sizeof($validation);
$users = $em->getRepository(User::class)->findOneBy(
array(
'id'=>$item->getIdu(),
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
)
;
foreach($validation as $itemF) {
$itemF->getStatus()?$status='Approved':$status='Rejected';
if(is_null($itemF->getStatus()) ){
$status='Pending';
}
$dataF[] = array(
'id' => $itemF->getId(),
'idv' => $itemF->getIdv(),
'date' => $itemF->getDate(),
'status' => $status,
);
}
$item->getStatusLeader()?$statLeader='Validated':$statLeader='Pending';
//$item->getStatusLeader()?$color='#66BB6A':$color='#42A5F5';
$item->getStatus()==1?$stat='Validated':$stat='Pending';
//$item->getStatus()?$color='#66BB6A':$color='#42A5F5';
if($statLeader=='Validated' ){
$color='#66BB6A';
}else{
$color='#42A5F5';
}
$data[] = array(
'idv' => $item->getId(),
'idu'=>$users->getId(),
'fullname'=> $users->getName().' '.$users->getLastname(),
'description'=>$item->getDescription(),
'validation'=>$dataF,
'status'=>$statLeader,
'statusLeader'=>$statLeader,
'days'=>$num,
'color'=>$color,
'created'=>$item->getCreatedAt(),
);
}
}else{
// $data = array();
}
}
}else{
$flag=0;
}
return $this->render('vacations/list-vacations-team-leader.html.twig', array(
'data' => $data,
'isTeamLeader'=>$flag
));
}
// /**
// * @Route("/vacations/list/{status}", defaults={"status" = "0"}, name="validate_vacations_list")
// * @param Request $request
// * @param $status
// * @return Response
// */
// public function vacationsListAction(Request $request, $status)
// {
// $user_logueado = $this->get('security.token_storage')->getToken()->getUser();
// $user_id = $user_logueado->getId();
//
// $em = $this->getDoctrine()->getManager();
// // $vacations = $em->getRepository(Vacations::class)->findAll();
// $emConfig = $em->getConfiguration();
// //$emConfig = $this->getEntityManager()->getConfiguration();
// $emConfig->addCustomDatetimeFunction('YEAR', 'DoctrineExtensions\Query\Mysql\Year');
//// $parameters = array(
//// 'dateActual'=>date("Y"),
//// 'status'=> $status,
//// );
//// $dql = 'SELECT p
//// FROM App:Vacations p
//// WHERE YEAR(p.createdAt) = :dateActual AND p.status = :status
//// ORDER BY p.createdAt DESC
//// ';
// // Enero dia 30
// $yearActual = date('Y');
//// $yearSiguiente = $yearActual +1;
// $parameters = array(
// 'dateActual'=>$yearActual,
//// 'dateSiguiente'=>$yearSiguiente."-1-30",
// 'status'=> $status,
// );
//// $dql = 'SELECT p
//// FROM App:Vacations p
//// WHERE p.status = :status AND (p.createdAt >= :dateActual AND p.createdAt <= :dateSiguiente )
//// ORDER BY p.createdAt DESC
//// ';
// $dql = 'SELECT p
// FROM App:Vacations p
// WHERE p.status = :status AND p.createdAt >= :dateActual
// ORDER BY p.createdAt DESC
// ';
//
// $query = $em->createQuery($dql)->setParameters($parameters);
// $vacations= $query->getResult();
//
// $data = array();
// $user= $em->getRepository(User::class)->findOneById(
// array(
// "id" => $user_id,
// "status" => VacationsConstants::PAYROLL_STAFF_STATUS
// )
// )
// ;
//
// if(!empty($vacations)){
// /**
// * @var Vacations $item
// */
// foreach($vacations as $item) {
// $flag=1;
//// $yearActual = $item->getCreatedAt()->format('Y');
//// $yearSiguiente = $yearActual +1;
//// $parametersval = array(
//// 'dateActual'=>$yearActual."-1-30",
//// 'dateSiguiente'=>$yearSiguiente."-1-30",
//// 'idv'=> $item->getId(),
//// );
//// $dqlval = 'SELECT p
//// FROM App:VacationsValidation p
//// WHERE p.idv = :idv AND (p.date >= :dateActual AND p.date <= :dateSiguiente )
//// ORDER BY p.date ASC
//// ';
//// $queryvali = $em->createQuery($dqlval)->setParameters($parametersval);
//// $validation = $queryvali->getResult();
//
//
// $validation = $em->getRepository(VacationsValidation::class)->findBy(array('idv'=>$item->getId()),array('date'=>'ASC'));
// $num=sizeof($validation);
// $users = $em->getRepository(User::class)->findOneBy(
// array(
// 'id'=>$item->getIdu(),
// "status" => VacationsConstants::PAYROLL_STAFF_STATUS
// )
// )
// ;
// if(!empty($users)){
//
// $dataF = array();
// /**
// * @var VacationsValidation $itemF
// */
// foreach($validation as $itemF) {
//// d($itemF);
//
// if($itemF->getStatusBoss()==1 ){
// $status='Approved';
// }
// if($itemF->getStatusBoss()==0 ){
// $status='Rejected';
// }
// if(is_null($itemF->getStatusBoss()) ){
// $status='Pending';
// $flag=0;
// }
// $dataF[] = array(
// 'id' => $itemF->getId(),
// 'idv' => $itemF->getIdv(),
// 'date' => $itemF->getDate(),
// 'status' => $status,
//
// );
// }
//
// $item->getStatus()?$stat='Approved':$stat='Pending';
// $item->getStatus()?$color='#66BB6A':$color='#42A5F5';
// $data[] = array(
// 'idv' => $item->getId(),
// 'idu'=>$users->getId(),
// 'fullname'=> $users->getName().' '.$users->getLastname(),
// 'description'=>$item->getDescription(),
// 'validation'=>$dataF,
// 'status'=>$stat,
// 'days'=>$num,
// 'color'=>$color,
// 'created'=>$item->getCreatedAt(),
// 'validate'=>$flag
// );
//
// }
//
// }
//
// }
// return $this->render('vacations/list-vacations.html.twig', array(
// 'data' => $data,
// 'role'=>$user->getRole(),
// "status" => $status
// ));
// }
/**
* @Route("/vacations/listHistoric/{status}", defaults={"status" = "1"}, name="validate_vacations_list_Historic")
* @param Request $request
* @param $status
* @return Response
*/
public function vacationsListHistoricAction(Request $request, $status)
{
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$em = $this->getDoctrine()->getManager();
// $vacations = $em->getRepository(Vacations::class)->findAll();
$emConfig = $em->getConfiguration();
//$emConfig = $this->getEntityManager()->getConfiguration();
$emConfig->addCustomDatetimeFunction('YEAR', 'DoctrineExtensions\Query\Mysql\Year');
// $parameters = array(
// 'dateActual'=>date("Y"),
// 'status'=> $status,
// );
// $dql = 'SELECT p
// FROM App:Vacations p
// WHERE YEAR(p.createdAt) = :dateActual AND p.status = :status
// ORDER BY p.createdAt DESC
// ';
// Enero dia 30
$yearActual = date('Y');
// $yearSiguiente = $yearActual +1;
$parameters = array(
'dateActual'=>$yearActual,
// 'dateSiguiente'=>$yearSiguiente."-1-30",
'status'=> $status,
);
// $dql = 'SELECT p
// FROM App:Vacations p
// WHERE p.status = :status AND (p.createdAt >= :dateActual AND p.createdAt <= :dateSiguiente )
// ORDER BY p.createdAt DESC
// ';
$dql = 'SELECT p
FROM App:Vacations p
WHERE p.status = :status AND p.createdAt < :dateActual
ORDER BY p.createdAt DESC
';
$query = $em->createQuery($dql)->setParameters($parameters);
$vacations= $query->getResult();
$data = array();
$user= $em->getRepository(User::class)->findOneById(
array(
"id" => $user_id,
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
)
;
if(!empty($vacations)){
foreach($vacations as $item) {
$flag=1;
// $yearActual = $item->getCreatedAt()->format('Y');
// $yearSiguiente = $yearActual +1;
// $parametersval = array(
// 'dateActual'=>$yearActual."-1-30",
// 'dateSiguiente'=>$yearSiguiente."-1-30",
// 'idv'=> $item->getId(),
// );
// $dqlval = 'SELECT p
// FROM App:VacationsValidation p
// WHERE p.idv = :idv AND (p.date >= :dateActual AND p.date <= :dateSiguiente )
// ORDER BY p.date ASC
// ';
// $queryvali = $em->createQuery($dqlval)->setParameters($parametersval);
// $validation = $queryvali->getResult();
$validation = $em->getRepository(VacationsValidation::class)->findBy(array('idv'=>$item->getId()),array('date'=>'ASC'));
$num=sizeof($validation);
$users = $em->getRepository(User::class)->findOneBy(
array(
'id'=>$item->getIdu(),
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
)
;
if(!empty($users)){
$dataF = array();
foreach($validation as $itemF) {
// d($itemF);
if($itemF->getStatus()==1 ){
$status='Approved';
}
if($itemF->getStatus()==0 ){
$status='Rejected';
}
if(is_null($itemF->getStatus()) ){
$status='Pending';
$flag=0;
}
$dataF[] = array(
'id' => $itemF->getId(),
'idv' => $itemF->getIdv(),
'date' => $itemF->getDate(),
'status' => $status,
);
}
$item->getStatus()?$stat='Approved':$stat='Pending';
$item->getStatus()?$color='#66BB6A':$color='#42A5F5';
$data[] = array(
'idv' => $item->getId(),
'idu'=>$users->getId(),
'fullname'=> $users->getName().' '.$users->getLastname(),
'description'=>$item->getDescription(),
'validation'=>$dataF,
'status'=>$stat,
'days'=>$num,
'color'=>$color,
'created'=>$item->getCreatedAt(),
'validate'=>$flag
);
}
}
}
return $this->render('vacations/list-vacations.html.twig', array(
'data' => $data,
'role'=>$user->getRole(),
"status" => $status,
'year' => $yearActual
));
}
/**
* @deprecated No longer called
* @Route("/vacations/fastValidateBoss/{idv}", name="fast_validate_boss_vacations")
* @param Request $request
* @param Swift_Mailer $mailer
* @param $idv
* @return JsonResponse
*/
public function vacationsBossFastValidationAction(Request $request, \Swift_Mailer $mailer, $idv )
{
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$em = $this->getDoctrine()->getManager();
$vacations=$em->getRepository(Vacations::class)->findOneById($idv);
$vacationsDay = $em->getRepository(VacationsValidation::class)->findBy(array('idv'=>$idv));
if (!empty($vacations))
{
// $vacations->setStatus(true);
try{
if (!empty($vacationsDay))
{
foreach($vacationsDay as $itemB) {
$itemB->setStatusBoss($itemB->getStatus());
$em->persist($itemB);
$em->flush();
}
}
$em->persist($vacations);
$em->flush();
$data=array();
$vacations=$em->getRepository(Vacations::class)->findOneById($idv);
$vacationsDay = $em->getRepository(VacationsValidation::class)->findBy(array('idv'=>$idv));
$user=$em->getRepository(User::class)->findOneById(
array(
"id" => $vacations->getIdu(),
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
)
;
if (!empty($vacationsDay))
{
foreach($vacationsDay as $itemB) {
$itemB->getStatus()?$status='Approved':$status='Rejected';
if(is_null($itemB->getStatus())){
$status='Pending';
}
$itemB->getStatusBoss()?$statusB='Approved':$statusB='Rejected';
if(is_null($itemB->getStatusBoss())){
$statusB='Pending';
}
$dataB[] = array(
'id' => $itemB->getId(),
'date' => $itemB->getDate(),
'status' => $status,
'statusBoss' => $statusB,
);
}
$data = array(
'idv' => $idv,
'days' =>$dataB,
'fullname'=>$user->getName().' '.$user->getLastName(),
'date'=>$vacations->getCreatedAt(),
'role'=>$user->getRole()
);
}
$message = (new \Swift_Message())
->setSubject('Solicitud de Vacaciones')
->setFrom(array("desarrollo@develup.solutions" => "System Mante 3.0"))
->setTo($user->getEmail())
->setBody(
$this->renderView(
'vacations/vacations-email-user-report.html.twig',
array('data' => $data)
),'text/html'
);
$mailer->send($message);
$teamLeader=$em->getRepository(User::class)->findOneBy(array(
'team'=>$user->getTeam(),
'teamleader'=>VacationsConstants::IS_TEAM_LEADER,
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
);
if(!empty($teamLeader)) {
$message = (new \Swift_Message())
->setSubject('Solicitud de Vacaciones Validada')
->setFrom(array("desarrollo@develup.solutions" => "System Mante 3.0"))
->setTo($teamLeader->getEmail())
->setBody(
$this->renderView(
'vacations/vacations-email-report.html.twig',
array('data' => $data)
),'text/html'
);
$mailer->send($message);
}
$message=1;
}
catch (\Exception $e){
$event = 'An error occurred: '.$e->getMessage();
/* Para el log */
// $logger->error($event);
/* Para el usuario */
$errorMessage = $this->translator->trans($event);
$this->addFlash('mensajeholidayserror', $errorMessage);
$message= 0;
}
}
$event = 'The request has ben Validated.';
$successMessage = $this->translator->trans($event);
$this->addFlash('mensajeholidays', $successMessage);
// return $this->redirect('/vacations/list');
$response = new JsonResponse($message);
return $response;
}
/**
* @Route("/vacations/preView/{idu}/{idv}", name="preview_vacations")
* @param $idu
* @param $idv
* @param Request $request
* @return Response
*/
public function vacationsPreviewAction($idu, $idv, Request $request)
{
$em = $this->getDoctrine()->getManager();
$emConfig = $em->getConfiguration();
$emConfig->addCustomDatetimeFunction('YEAR', 'DoctrineExtensions\Query\Mysql\Year');
// $parameters = array(
// 'dateActual'=>date("Y"),
// 'userId'=>$idu,
// );
// $dql = 'SELECT p
// FROM App:Vacations p
// WHERE YEAR(p.createdAt) = :dateActual
// AND p.idu = :userId
// ORDER BY p.createdAt DESC
// ';
$solicitudperiodo = $em->getRepository(Vacations::class)->findOneById($idv);
// Enero dia 30
// $yearActual = date('Y');
$yearActual = $solicitudperiodo->getCreatedAt()->format('Y');
$yearSiguiente = $yearActual +1;
$parameters = array(
'idu' => $idu,
'dateActual'=>$yearActual,
// 'dateSiguiente'=>$yearSiguiente."-1-30",
);
// (p.createdAt >= :dateActual AND p.createdAt <= :dateSiguiente )
$dql = 'SELECT p
FROM App:Vacations p
WHERE p.idu = :idu AND YEAR(p.createdAt) = :dateActual
ORDER BY p.createdAt DESC
';
$query = $em->createQuery($dql)->setParameters($parameters);
$vacations= $query->getResult();
$approved=0;
$pending=0;
$rejected=0;
// $total=22;
if(!empty($vacations)){
foreach ($vacations as $vacation){
$vacationsDay = $em->getRepository(VacationsValidation::class)->findBy(array('idv'=>$vacation->getId()));
if(!empty($vacationsDay)){
// $total=count($vacationsDay);
foreach ($vacationsDay as $itemVacations){
if($itemVacations->getStatusBoss()==1){
$approved++;
}else{
is_null($itemVacations->getStatusBoss())?$pending++:$rejected++;
}
}
}
}
}
$user=$em->getRepository(User::class)->findOneBy(
array(
"id" => intval($idu),
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
)
;
// SACAR LOS DIAS ASIGNADOS POR EL AÑO $uservacationday
$uservacationday = $em->getRepository('App\Entity\UserVacationYearDay')->findOneBy(
array(
'userId' => $idu,
'year' => $yearActual,
)
);
if (empty($uservacationday)){
$daysVacation = $this->translator->trans("Not Assigned");
$left = 0-$approved;
}else{
$daysVacation = $uservacationday->getDays();
$left = $daysVacation-$approved;
}
// aqui sustituir user por año dias de vacaciones
$data=array(
'idu'=>$idu,
'name'=>$user->getName().' '.$user->getLastname(),
'approved'=>$approved,
'rejected'=>$rejected,
'pending'=>$pending,
'left'=>$left,
'total'=>$daysVacation,
'periodoinicio'=>"01/01/".$yearActual,
'periodofin'=>"30/01/".$yearSiguiente,
);
$uservacationdescripctionday = $em->getRepository('App\Entity\UserVacationsDescription')->findBy(
array(
'userId' => $idu,
'year' => $yearActual,
'type' => "vacations",
)
);
$descriptionday = array();
foreach($uservacationdescripctionday as $descvacauser) {
$descriptionday[] = $descvacauser;
}
return $this->render('vacations/modal-preview.html.twig', array(
'data' => $data,
'descriptionday' => $descriptionday,
));
}
/**
* @Route("/vacations/viewadmin/{idu}/{year}", name="view_Admin_vacations")
*/
public function vacationsViewAdminAction($idu, $year, Request $request)
{
$em = $this->getDoctrine()->getManager();
$emConfig = $em->getConfiguration();
$emConfig->addCustomDatetimeFunction('YEAR', 'DoctrineExtensions\Query\Mysql\Year');
// $parameters = array(
// 'dateActual'=>date("Y"),
// 'userId'=>$idu,
// );
// $dql = 'SELECT p
// FROM App:Vacations p
// WHERE YEAR(p.createdAt) = :dateActual
// AND p.idu = :userId
// ORDER BY p.createdAt DESC
// ';
$yearActual = $year;
$yearSiguiente = $yearActual +1;
$parameters = array(
'idu' => $idu,
'dateActual'=>$yearActual,
// 'dateSiguiente'=>$yearSiguiente."-1-30",
);
// (p.createdAt >= :dateActual AND p.createdAt <= :dateSiguiente )
$dql = 'SELECT p
FROM App:Vacations p
WHERE p.idu = :idu AND YEAR(p.createdAt) = :dateActual
ORDER BY p.createdAt DESC
';
$query = $em->createQuery($dql)->setParameters($parameters);
$vacations= $query->getResult();
$approved=0;
$pending=0;
$rejected=0;
// $total=22;
if(!empty($vacations)){
foreach ($vacations as $vacation){
$vacationsDay = $em->getRepository(VacationsValidation::class)->findBy(array('idv'=>$vacation->getId()));
if(!empty($vacationsDay)){
// $total=count($vacationsDay);
foreach ($vacationsDay as $itemVacations){
if($itemVacations->getStatusBoss()==1){
$approved++;
}else{
is_null($itemVacations->getStatusBoss())?$pending++:$rejected++;
}
}
}
}
}
$user=$em->getRepository(User::class)->findOneById(
array(
"id" => $idu,
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
)
;
// SACAR LOS DIAS ASIGNADOS POR EL AÑO $uservacationday
$uservacationday = $em->getRepository('App\Entity\UserVacationYearDay')->findOneBy(
array(
'userId' => $idu,
'year' => $yearActual,
)
);
if (empty($uservacationday)){
$daysVacation = $this->translator->trans("Not Assigned");
$left = 0-$approved;
}else{
$daysVacation = $uservacationday->getDays();
$left = $daysVacation-$approved;
}
// aqui sustituir user por año dias de vacaciones
$data=array(
'idu'=>$idu,
'name'=>$user->getName().' '.$user->getLastname(),
'approved'=>$approved,
'rejected'=>$rejected,
'pending'=>$pending,
'left'=>$left,
'total'=>$daysVacation,
'periodoinicio'=>"01/01/".$yearActual,
'periodofin'=>"30/01/".$yearSiguiente,
);
$uservacationdescripctionday = $em->getRepository('App\Entity\UserVacationsDescription')->findBy(
array(
'userId' => $idu,
'year' => $yearActual,
'type' => "vacations",
)
);
$descriptionday = array();
foreach($uservacationdescripctionday as $descvacauser) {
$descriptionday[] = $descvacauser;
}
return $this->render('vacations/modal-preview.html.twig', array(
'data' => $data,
'descriptionday' => $descriptionday,
));
}
/**
* @deprecated No longer used
* @Route("/vacations/validateBoss/{idv}", name="validate_boss_vacations")
* @param Request $request
* @param Swift_Mailer $mailer
* @param $idv
* @return RedirectResponse
*/
public function vacationsBossValidationAction(Request $request, \Swift_Mailer $mailer, $idv)
{
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$em = $this->getDoctrine()->getManager();
$data=array();
$vacations=$em->getRepository(Vacations::class)->findOneById($idv);
$vacationsDay = $em->getRepository(VacationsValidation::class)->findBy(array('idv'=>$idv));
$user=$em->getRepository(User::class)->findOneById(
array(
"id" => $vacations->getIdu(),
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
)
;
if (!empty($vacationsDay))
{
foreach($vacationsDay as $itemB) {
$itemB->getStatus()?$status='Approved':$status='Rejected';
if(is_null($itemB->getStatus())){
$status='Pending';
}
$itemB->getStatusBoss()?$statusB='Approved':$statusB='Rejected';
if(is_null($itemB->getStatusBoss())){
$statusB='Pending';
}
$dataB[] = array(
'id' => $itemB->getId(),
'date' => $itemB->getDate(),
'status' => $status,
'statusBoss' => $statusB,
);
}
$data = array(
'idv' => $idv,
'days' =>$dataB,
'fullname'=>$user->getName().' '.$user->getLastName(),
'date'=>$vacations->getCreatedAt(),
'role'=>$user->getRole()
);
}
if (!empty($vacations))
{
$vacations->setStatus(1);
try{
$em->persist($vacations);
$em->flush();
$message = (new \Swift_Message())
->setSubject('Solicitud de Vacaciones Validada')
->setFrom(array("desarrollo@develup.solutions" => "System Mante 3.0"))
->setTo($user->getEmail())
->setBody(
$this->renderView(
'vacations/vacations-email-user-report.html.twig',
array('data' => $data)
),'text/html'
);
$mailer->send($message);
$teamLeader=$em->getRepository(User::class)->findOneBy(array(
'team'=>$user->getTeam(),
'teamleader'=>VacationsConstants::IS_TEAM_LEADER,
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
);
if(!empty($teamLeader)) {
$emailarray = $teamLeader->getEmail();
$message = (new \Swift_Message())
->setSubject('Solicitud de Vacaciones Validada')
->setFrom(array("desarrollo@develup.solutions" => "System Mante 3.0"))
->setTo($emailarray)
->setBody(
$this->renderView(
'vacations/vacations-email-report.html.twig',
array('data' => $data)
),'text/html'
);
$mailer->send($message);
}
}
catch (\Exception $e){
$event = 'An error occurred: '.$e->getMessage();
$errorMessage = $this->translator->trans($event);
$this->addFlash('mensajeholidayserror', $errorMessage);
}
}
$event = 'The request has ben Validated.';
$successMessage = $this->translator->trans($event);
$this->addFlash('mensajeholidays', $successMessage);
return $this->redirect('/vacations/manage');
}
/**
* @Route("/vacations/validateLeader/{idv}", name="validate_leader_vacations")
*/
public function vacationsLeaderValidationAction($idv, Request $request, \Swift_Mailer $mailer)
{
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$em = $this->getDoctrine()->getManager();
$data=array();
$vacations=$em->getRepository(Vacations::class)->findOneById($idv);
$vacationsDay = $em->getRepository(VacationsValidation::class)->findBy(array('idv'=>$idv));
$user=$em->getRepository(User::class)->findOneById(
array(
"id" => $vacations->getIdu(),
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
)
;
//$vac_num=$user->getVacations();
if (!empty($vacationsDay))
{
foreach($vacationsDay as $itemB) {
$itemB->getStatus()?$status='Approved':$status='Rejected';
if(is_null($itemB->getStatus())){
$status='Pending';
}
$itemB->getStatusBoss()?$statusB='Approved':$statusB='Rejected';
if(is_null($itemB->getStatusBoss())){
$statusB='Pending';
}
$dataB[] = array(
'id' => $itemB->getId(),
'date' => $itemB->getDate(),
'status' => $status,
'statusBoss' => $statusB,
);
}
$data = array(
'idv' => $idv,
'days' =>$dataB,
'fullname'=>$user->getName().' '.$user->getLastName(),
'date'=>$vacations->getCreatedAt(),
'role'=>$user->getRole()
);
}
$teamLeader=$em->getRepository(User::class)->findOneBy(array(
'team'=>$user->getTeam(),
'teamleader'=>VacationsConstants::IS_TEAM_LEADER,
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
);
if (!empty($vacations) and !empty($vacationsDay))
$emailarray = array();
$usermails = $em->getRepository(User::class)->findByRole('ROLE_ADMIN');
foreach($usermails as $usermail){
$emailarray[] = $usermail->getEmail();
}
{
$vacations->setStatusLeader(1);
try{
$em->persist($vacations);
$em->flush();
$message = (new \Swift_Message())
->setSubject('Solicitud de Vacaciones')
->setFrom(array("desarrollo@develup.solutions" => "System Mante 3.0"))
->setTo($emailarray)
->setBody(
$this->renderView(
'vacations/vacations-email-report.html.twig',
array('data' => $data)
),'text/html'
);
$mailer->send($message);
//d($data,$emailarray);
//exit();
}
catch (\Exception $e){
$event = 'An error occurred: '.$e->getMessage();
/* Para el log */
// $logger->error($event);
/* Para el usuario */
$errorMessage = $this->translator->trans($event);
$this->addFlash('mensajeholidayserror', $errorMessage);
}
}
$event = 'The request has ben Validated.';
$successMessage = $this->translator->trans($event);
$this->addFlash('mensajeholidays', $successMessage);
// d($data,$vacationsAll);
return $this->redirect('/vacations/listTeamLeader');
}
/**
* @Route("/vacations/edit/{idu}/{idv}", name="edit_vacations")
*/
public function vacationsEditAction($idu, $idv, Request $request)
{
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$em = $this->getDoctrine()->getManager();
$vacations = $em->getRepository(Vacations::class)->findOneBy(array('id'=>$idv));
$yearActual = $vacations->getCreatedAt()->format('Y');
$data = array();
$vacationsAll=array();
$approved=0;
$rejected=0;
$pending=0;
$solicitadasNum=0;
$dataB = array();
$statusB = null;
$status = null;
if(!empty($vacations)){
$users = $em->getRepository(User::class)->findOneBy(
array(
'id'=>$idu,
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
)
;
$uservacationday = $em->getRepository('App\Entity\UserVacationYearDay')->findOneBy(
array(
'userId' => $vacations->getIdu(),
'year' => $yearActual,
)
);
if (empty($uservacationday)){
$total = $this->translator->trans("Not Assigned");
$totaln = 0;
}else{
$total = $uservacationday->getDays();
$totaln = $uservacationday->getDays();
}
$data = array(
'idv' => $vacations->getId(),
'idu'=>$idu,
'fullname'=> $users->getName().' '.$users->getLastname(),
'totalvacations'=>$total,
);
// Enero dia 15
// $yearActual = date('Y');
$yearSiguiente = $yearActual +1;
$parameters = array(
'idu' => $idu,
'yearActual' => $yearActual,
'dateActual'=>$yearActual."-1-01",
'dateSiguiente'=>$yearSiguiente."-1-30",
);
$em = $this->getDoctrine()->getManager();
$emConfig = $em->getConfiguration();
$emConfig->addCustomDatetimeFunction('YEAR', 'DoctrineExtensions\Query\Mysql\Year');
// $emConfig->addCustomDatetimeFunction('MONTH', 'DoctrineExtensions\Query\Mysql\Month');
// $emConfig->addCustomDatetimeFunction('DAY', 'DoctrineExtensions\Query\Mysql\Day');
$dql = 'SELECT p
FROM App:VacationsValidation p
WHERE p.idu = :idu AND (p.date >= :dateActual AND p.date <= :dateSiguiente ) AND YEAR(p.createdAt) = :yearActual
ORDER BY p.date DESC
';
$query = $em->createQuery($dql)->setParameters($parameters);
$vacationsAll= $query->getResult();
$solicitadasNum=sizeof($vacationsAll);
if(!empty($vacationsAll)){
foreach ($vacationsAll as $itemVacations){
if($itemVacations->getStatusBoss()==1){
$approved++;
}else{
is_null($itemVacations->getStatusBoss())?$pending++:$rejected++;
}
}
}
}
// d($data,$vacationsAll);
return $this->render('vacations/edit-vacations.html.twig', array(
'data' => $data,
'days' => $totaln,
'left' => $totaln - $approved,
'id'=>$vacations->getId(),
'allVacations'=>$vacationsAll,
'totalOld'=>$solicitadasNum,
'approved'=>$approved,
'rejected'=>$rejected,
'pending'=>$pending,
'periodoinicio'=>"01/01/".$yearActual,
'periodofin'=>"30/01/".$yearSiguiente,
));
}
// /**
// * @Route("/vacations/edit/{idu}/{idv}", name="edit_vacations")
// */
// public function vacationsEditAction($idu, $idv, Request $request)
// {
// $user_logueado = $this->get('security.token_storage')->getToken()->getUser();
// $user_id = $user_logueado->getId();
//
// $em = $this->getDoctrine()->getManager();
// $vacations = $em->getRepository(Vacations::class)->findOneBy(array('id'=>$idv));
// $yearActual = $vacations->getCreatedAt()->format('Y');
// $data = array();
// $vacationsAll=array();
// $approved=0;
// $rejected=0;
// $pending=0;
// $solicitadasNum=0;
// $dataB = array();
// $statusB = null;
// $status = null;
// if(!empty($vacations)){
//
//// $bossVal = $em->getRepository(VacationsValidation::class)->findBy(
//// array('idv'=>$idv),
//// array('date' => 'DESC')
//// );
////
//// foreach($bossVal as $itemB) {
////
//// $itemB->getStatusBoss()?$statusB='Approved':$statusB='Rejected';
//// if(is_null($itemB->getStatusBoss())){
//// $statusB='Pending';
//// }
////
//// $itemB->getStatus()?$status='Approved':$status='Rejected';
//// if(is_null($itemB->getStatus())){
//// $status='Pending';
//// }
////
//// $dataB[] = array(
//// 'id' => $itemB->getId(),
//// 'idv' => $itemB->getIdv(),
//// 'date' => $itemB->getDate(),
//// 'status' => $status,
//// 'statusBoss' => $statusB,
//// );
//// }
// $users = $em->getRepository(User::class)->findOneBy(array('id'=>$idu));
//
// $total=$users->getVacations();
// $requested=sizeof($bossVal);
// $left=$total-$requested;
// $data = array(
// 'idv' => $vacations->getId(),
// 'idu'=>$idu,
// 'fullname'=> $users->getName().' '.$users->getLastname(),
// 'bossVal' =>$dataB,
// 'totalvacations'=>$total,
// 'requested'=>$requested,
// 'left'=>$left
//
// );
//
// // Enero dia 15
//// $yearActual = date('Y');
//
// $yearSiguiente = $yearActual +1;
//// $yearActualMasUno = strtotime ( '+1 year' , strtotime ( $yearActual ) ) ;
//// d($yearActual);
// $parameters = array(
// //'idv' => $idv,
// 'idu' => $idu,
// 'dateActual'=>$yearActual."-1-30",
// 'dateSiguiente'=>$yearSiguiente."-1-30",
//// 'dateActual'=>date('Y'),
// );
// $em = $this->getDoctrine()->getManager();
// $emConfig = $em->getConfiguration();
// //$emConfig = $this->getEntityManager()->getConfiguration();
// $emConfig->addCustomDatetimeFunction('YEAR', 'DoctrineExtensions\Query\Mysql\Year');
//
//// $emConfig->addCustomDatetimeFunction('MONTH', 'DoctrineExtensions\Query\Mysql\Month');
//// $emConfig->addCustomDatetimeFunction('DAY', 'DoctrineExtensions\Query\Mysql\Day');
//
//
//// $dql = 'SELECT p
//// FROM App:VacationsValidation p
//// WHERE p.idu = :idu AND YEAR(p.date) = :dateActual
//// ORDER BY p.date DESC
//// ';
// $dql = 'SELECT p
// FROM App:VacationsValidation p
// WHERE p.idu = :idu AND (p.date >= :dateActual AND p.date <= :dateSiguiente )
// ORDER BY p.date DESC
// ';
// $query = $em->createQuery($dql)->setParameters($parameters);
// $vacationsAll= $query->getResult();
//
// $solicitadasNum=sizeof($vacationsAll);
//
// if(!empty($vacationsAll)){
// foreach ($vacationsAll as $itemVacations){
//
// if($itemVacations->getStatusBoss()==1){
// $approved++;
// }else{
// is_null($itemVacations->getStatusBoss())?$pending++:$rejected++;
// }
//// if($itemVacations->getStatusBoss()==0){
////
//// }
////
//// if(is_null($itemVacations->getStatusBoss())){
//// $pending++;
//// }
// }
//
// }
//
//
// }
//
// // d($data,$vacationsAll);
// return $this->render('vacations/edit-vacations.html.twig', array(
// 'data' => $data,
// 'id'=>$vacations->getId(),
// 'allVacations'=>$vacationsAll,
// 'totalOld'=>$solicitadasNum,
// 'approved'=>$approved,
// 'rejected'=>$rejected,
// 'pending'=>$pending,
// ));
// }
/**
* @Route("/vacations/view/{idv}", name="view_vacations")
*/
public function vacationsViewAction($idv, Request $request)
{
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$em = $this->getDoctrine()->getManager();
$vacations = $em->getRepository(Vacations::class)->findOneBy(array('id'=>$idv));
$yearActual = $vacations->getCreatedAt()->format('Y');
$data = array();
$vacationsAll=array();
$approved=0;
$rejected=0;
$pending=0;
$solicitadasNum=0;
if(!empty($vacations)){
$bossVal = $em->getRepository(VacationsValidation::class)->findBy(
array('idv'=>$vacations->getId()),
array('date' => 'ASC')
);
foreach($bossVal as $itemB) {
$itemB->getStatusBoss()?$statusB='Approved':$statusB='Rejected';
if(is_null($itemB->getStatusBoss())){
$statusB='Pending';
}
$itemB->getStatus()?$status='Approved':$status='Rejected';
if(is_null($itemB->getStatus())){
$status='Pending';
}
if($itemB->getStatusBoss()==1){
$approved++;
}else{
is_null($itemB->getStatusBoss())?$pending++:$rejected++;
}
$dataB[] = array(
'id' => $itemB->getId(),
'idv' => $itemB->getIdv(),
'date' => $itemB->getDate(),
'status' => $status,
'statusBoss' => $statusB,
);
}
$users = $em->getRepository(User::class)->findOneBy(
array(
'id'=>$vacations->getIdu(),
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
)
;
$uservacationday = $em->getRepository('App\Entity\UserVacationYearDay')->findOneBy(
array(
'userId' => $vacations->getIdu(),
'year' => $yearActual,
)
);
if (empty($uservacationday)){
$total = $this->translator->trans("Not Assigned");
$totaln = 0;
$requested=sizeof($bossVal);
$left = 0-$approved;
}else{
$total = $uservacationday->getDays();
$totaln = $uservacationday->getDays();
$requested=sizeof($bossVal);
$left = $total-$approved;
}
$data = array(
'idv' => $vacations->getId(),
'idu'=>$users->getId(),
'fullname'=> $users->getName().' '.$users->getLastname(),
'bossVal' =>$dataB,
'totalvacations'=>$total,
'requested'=>$requested,
'left'=>$left
);
$totales = $totaln-$approved;
}else{
}
//d($data,$vacationsAll);
return $this->render('vacations/view-vacations.html.twig', array(
'data' => $data,
'days' => $total,
'id'=>$vacations->getId(),
'allVacations'=>$vacationsAll,
'totalOld'=>$solicitadasNum+$requested,
'approved'=>$approved,
'rejected'=>$rejected,
'totales'=>$totales,
));
}
/**
* @Route("/vacations/checkTeamLeader/{idv}", name="team_leader_check_vacations")
* @param Request $request
* @param $idv
* @return Response
*/
public function vacationsCheckTeamLeaderAction(Request $request, $idv)
{
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$em = $this->getDoctrine()->getManager();
$vacations = $em->getRepository(Vacations::class)->findOneBy(array('id'=>$idv));
$yearActual = $vacations->getCreatedAt()->format('Y');
$data = array();
$vacationsAll=array();
$approved=0;
$rejected=0;
$pending=0;
$totales=0;
$solicitadasNum=0;
if(!empty($vacations)){
$bossVal = $em->getRepository(VacationsValidation::class)->findBy(
array('idv'=>$vacations->getId()),
array('date' => 'ASC')
);
foreach($bossVal as $itemB) {
$itemB->getStatusBoss()?$statusB='Approved':$statusB='Rejected';
if(is_null($itemB->getStatusBoss())){
$statusB='Pending';
}
$itemB->getStatus()?$status='Approved':$status='Rejected';
if(is_null($itemB->getStatus())){
$status='Pending';
}
$dataB[] = array(
'id' => $itemB->getId(),
'idv' => $itemB->getIdv(),
'date' => $itemB->getDate(),
'status' => $status,
'statusBoss' => $statusB,
);
}
$users = $em->getRepository(User::class)->findOneBy(
array(
'id'=>$vacations->getIdu(),
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
)
;
$uservacationday = $em->getRepository('App\Entity\UserVacationYearDay')->findOneBy(
array(
'userId' => $vacations->getIdu(),
'year' => $yearActual,
)
);
if (empty($uservacationday)){
$total = $this->translator->trans("Not Assigned");
$totaln = 0;
$requested=sizeof($bossVal);
$left = 0-$approved;
}else{
$total = $uservacationday->getDays();
$totaln = $uservacationday->getDays();
$requested=sizeof($bossVal);
$left = $total-$requested;
}
$data = array(
'idv' => $vacations->getId(),
'idu'=>$users->getId(),
'fullname'=> $users->getName().' '.$users->getLastname(),
'bossVal' =>$dataB,
'totalvacations'=>$total,
'requested'=>$requested,
'left'=>$left
);
// $parameters = array(
// 'idv' => $idv,
// 'idu' => $users->getId(),
// 'dateActual'=>date("Y"),
// );
// Enero dia 15
// $yearActual = date('Y');
$yearSiguiente = $yearActual +1;
$parameters = array(
'idv' => $idv,
'idu' => $users->getId(),
'yearActual' => $yearActual,
'dateActual'=>$yearActual."-1-01",
'dateSiguiente'=>$yearSiguiente."-1-30",
);
$em = $this->getDoctrine()->getManager();
$emConfig = $em->getConfiguration();
$emConfig->addCustomDatetimeFunction('YEAR', 'DoctrineExtensions\Query\Mysql\Year');
// $emConfig->addCustomDatetimeFunction('MONTH', 'DoctrineExtensions\Query\Mysql\Month');
// $emConfig->addCustomDatetimeFunction('DAY', 'DoctrineExtensions\Query\Mysql\Day');
$dql = 'SELECT p
FROM App:VacationsValidation p
WHERE p.idu = :idu AND p.idv <> :idv AND (p.date >= :dateActual AND p.date <= :dateSiguiente ) AND YEAR(p.createdAt) = :yearActual
AND 1=(SELECT q.status
FROM App:Vacations q
WHERE q.id = p.idv)
';
$query = $em->createQuery($dql)->setParameters($parameters);
$vacationsAll= $query->getResult();
$solicitadasNum=sizeof($vacationsAll);
if(!empty($vacationsAll)){
foreach ($vacationsAll as $itemVacations){
if($itemVacations->getStatusBoss()==1){
$approved++;
}else{
is_null($itemVacations->getStatusBoss())?$pending++:$rejected++;
}
}
}
$totales = $totaln-$approved;
}else{
}
// d($data,$vacationsAll);
return $this->render('vacations/team-leader-validate-vacations.html.twig', array(
'data' => $data,
'id'=>$vacations->getId(),
'allVacations'=>$vacationsAll,
'totalOld'=>$solicitadasNum+$requested,
'approved'=>$approved,
'rejected'=>$rejected,
'totales'=>$totales,
'periodoinicio'=>"01/01/".$yearActual,
'periodofin'=>"30/01/".$yearSiguiente,
'datesolicitud'=>$vacations->getCreatedAt()->format('d/m/Y')
));
}
/**
* @Route("/vacations/check/{idv}", name="check_vacations")
*/
public function vacationsCheckAction($idv, Request $request)
{
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$em = $this->getDoctrine()->getManager();
$helper = new VacationsHelper($em);
$vacations = $em->getRepository(Vacations::class)->findOneBy(array('id'=>$idv));
$yearActual = $vacations->getCreatedAt()->format('Y');
$data = array();
$vacationsAll=array();
$approved=0;
$rejected=0;
$pending=0;
$solicitadasNum=0;
$totales=0;
$dataB=array();
if(!empty($vacations)){
$bossVal = $em->getRepository(VacationsValidation::class)->findBy(
array('idv'=>$vacations->getId()),
array('date' => 'ASC')
);
foreach($bossVal as $itemB) {
$itemB->getStatusBoss()?$statusB='Approved':$statusB='Rejected';
if(is_null($itemB->getStatusBoss())){
$statusB='Pending';
}
$itemB->getStatus()?$status='Approved':$status='Rejected';
if(is_null($itemB->getStatus())){
$status='Pending';
}
$dataB[] = array(
'id' => $itemB->getId(),
'idv' => $itemB->getIdv(),
'date' => $itemB->getDate(),
'status' => $status,
'statusBoss' => $statusB,
);
}
$users = $em->getRepository(User::class)->findOneBy(
array(
'id'=>$vacations->getIdu(),
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
)
;
$uservacationday = $em->getRepository('App\Entity\UserVacationYearDay')->findOneBy(
array(
'userId' => $vacations->getIdu(),
'year' => $yearActual,
)
);
if (empty($uservacationday)){
$total = $this->translator->trans("Not Assigned");
$totaln = 0;
$requested=sizeof($bossVal);
$left = 0-$approved;
}else{
$total = $uservacationday->getDays();
$totaln = $uservacationday->getDays();
$requested=sizeof($bossVal);
$left = $total-$requested;
}
$data = array(
'idv' => $vacations->getId(),
'idu'=>$users->getId(),
'fullname'=> $users->getName().' '.$users->getLastname(),
'bossVal' =>$dataB,
'totalvacations'=>$total,
'requested'=>$requested,
'left'=>$left
);
// $parameters = array(
// 'idv' => $idv,
// 'idu' => $users->getId(),
// 'dateActual'=>date("Y"),
// );
// Enero dia 15
// $yearActual = date('Y');
$yearSiguiente = $yearActual +1;
$parameters = array(
'idv' => $idv,
'idu' => $users->getId(),
// 'yearActual' => $yearActual,
'dateActual'=>$yearActual."-1-01",
'dateSiguiente'=>$yearSiguiente."-1-30",
);
$em = $this->getDoctrine()->getManager();
// $emConfig = $em->getConfiguration();
// $emConfig->addCustomDatetimeFunction('YEAR', 'DoctrineExtensions\Query\Mysql\Year');
// $emConfig->addCustomDatetimeFunction('MONTH', 'DoctrineExtensions\Query\Mysql\Month');
// $emConfig->addCustomDatetimeFunction('DAY', 'DoctrineExtensions\Query\Mysql\Day');
// $dql = 'SELECT p
// FROM App:VacationsValidation p
// WHERE p.idu = :idu AND p.idv <> :idv AND YEAR(p.date) = :dateActual
// AND 1=(SELECT q.status
// FROM App:Vacations q
// WHERE q.id = p.idv)
// ';
$dql = 'SELECT p
FROM App:VacationsValidation p
WHERE p.idu = :idu AND p.idv <> :idv AND ( p.date >= :dateActual AND p.date <= :dateSiguiente )
AND 1=(SELECT q.status
FROM App:Vacations q
WHERE q.id = p.idv)
';
$query = $em->createQuery($dql)->setParameters($parameters);
$vacationsAll= $query->getResult();
$solicitadasNum=sizeof($vacationsAll);
if(!empty($vacationsAll)){
foreach ($vacationsAll as $itemVacations){
if($itemVacations->getStatusBoss()==1){
$approved++;
}else{
is_null($itemVacations->getStatusBoss())?$pending++:$rejected++;
}
}
}
$totales = $totaln-$approved;
}
$yearnow = date('Y');
if ($yearActual >= $yearnow){
$transferyear = null;
}else{
$transferyear = $yearSiguiente;
}
return $this->render('vacations/validate-vacations.html.twig', array(
'data' => $data,
'id'=>$vacations->getId(),
'allVacations'=>$vacationsAll,
'totalOld'=>$solicitadasNum+$requested,
'approved'=>$approved,
'rejected'=>$rejected,
'totales'=>$totales,
'periodoinicio'=>"01/01/".$yearActual,
'periodofin'=>"30/01/".$yearSiguiente,
'transferyear'=>$transferyear,
'yearnow'=>$yearnow,
'datesolicitud'=>$vacations->getCreatedAt()->format('d/m/Y'),
'teamName' => $helper->getTeamNameByUserID($vacations->getIdu())
));
}
/**
* @Route("/vacations/notesUser/{idu}", name="get_vacations_notes_user")
*/
public function widgetUserVacatioNotestAction($idu, Request $request) {
$em = $this->getDoctrine()->getManager();
$emConfig = $em->getConfiguration();
$emConfig->addCustomDatetimeFunction('YEAR', 'DoctrineExtensions\Query\Mysql\Year');
// $parameters = array(
// 'dateActual'=>date("Y"),
// 'idu'=>$idu
// );
// $dql = 'SELECT p
// FROM App:VacationsValidation p
// WHERE p.idu = :idu AND YEAR(p.date) = :dateActual
// ORDER BY p.date DESC
// ';
// Enero dia 30
$yearActual = date('Y');
$yearSiguiente = $yearActual +1;
$parameters = array(
'idu' => $idu,
'dateActual'=>$yearActual."-1-30",
'dateSiguiente'=>$yearSiguiente."-1-30",
);
$dql = 'SELECT p
FROM App:VacationsValidation p
WHERE p.idu = :idu AND (p.date >= :dateActual AND p.date <= :dateSiguiente )
ORDER BY p.date DESC
';
$query = $em->createQuery($dql)->setParameters($parameters);
$vacationsV= $query->getResult();
$data = array();
if(!empty($vacationsV)){
//d($vacationsV);
foreach($vacationsV as $itemB) {
$vacations = $em->getRepository(Vacations::class)->findOneById($itemB->getIdv());
if( $itemB->getStatusBoss()==1){
$status='Approved';
$color='#66BB6A';
}
if( $itemB->getStatusBoss()==0){
$status='Rejected';
$color='#EF5350';
}
if(is_null($itemB->getStatusBoss()) ){
$status='Pending';
$color='#42A5F5';
}
$dataB[] = array(
'date' => $itemB->getDate(),
'status' => $status,
'color'=>$color,
'url'=>''
);
$users = $em->getRepository(User::class)->findOneBy(
array(
'id'=>$itemB->getIdu(),
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
)
;
$data[] = array(
'id'=>$itemB->getId(),
'idv' => $itemB->getIdv(),
'idu'=>$users->getId(),
'fullname'=> $users->getName().' '.$users->getLastname(),
'description'=>$vacations->getDescription(),
'color'=>$color,
'date' =>$itemB->getDate(),
);
}
//}
}else{
}
$return = array(
'notes' => $data,
);
$response = new JsonResponse($return);
return $response;
}
/**
* @Route("/vacations/notesApproved/{idu}", name="get_vacations_notes_all_approved")
*/
public function widgetApprovedVacationsAction($idu, Request $request)
{
$em = $this->getDoctrine()->getManager();
$emConfig = $em->getConfiguration();
$emConfig->addCustomDatetimeFunction('YEAR', 'DoctrineExtensions\Query\Mysql\Year');
// Obtener el año actual una sola vez
$currentYear = date("Y");
// Obtener el usuario actual y validar su existencia
$userActual = $em->getRepository(User::class)->findOneBy([
"id" => $idu,
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
]);
if (!$userActual) {
return new JsonResponse(['error' => 'Usuario no encontrado o inactivo.'], 404);
}
$isAdmin = $userActual->getRole() === 'ROLE_ADMIN';
// Definir parámetros y DQL para VacationsValidation
if ($isAdmin) {
$vacationsParameters = [
'dateActual' => $currentYear,
];
$vacationsDql = '
SELECT p
FROM App:VacationsValidation p
WHERE p.statusBoss = 1
AND YEAR(p.date) >= :dateActual
';
} else {
// Determinar los equipos relevantes
$teamsID = VacationsConstants::isThisTeamIDIsAnyReservationsTeam($userActual->getTeam())
? VacationsConstants::$mixedReservationsTeams
: [$userActual->getTeam()];
$vacationsParameters = [
'dateActual' => $currentYear,
'team' => $teamsID,
];
$vacationsDql = '
SELECT p
FROM App:VacationsValidation p
WHERE p.statusBoss = 1
AND YEAR(p.date) >= :dateActual
AND p.idu IN (
SELECT q.id
FROM App\Entity\User q
WHERE q.team IN (:team)
)
';
}
// Ejecutar la consulta para VacationsValidation
$vacationsV = $em->createQuery($vacationsDql)
->setParameters($vacationsParameters)
->getResult();
// Definir parámetros y DQL para HalfDayValidation
if ($isAdmin) {
$halfDayParameters = [
'dateActual' => $currentYear,
];
$halfDayDql = '
SELECT p
FROM App:HalfDayValidation p
WHERE p.statusBoss = 1
AND YEAR(p.date) >= :dateActual
AND 1 = (
SELECT q.status
FROM App:HalfDay q
WHERE q.id = p.idv
)
';
} else {
$halfDayParameters = [
'dateActual' => $currentYear,
'team' => $userActual->getTeam(),
];
$halfDayDql = '
SELECT p
FROM App:HalfDayValidation p
WHERE p.statusBoss = 1
AND YEAR(p.date) >= :dateActual
AND 1 = (
SELECT r.status
FROM App:HalfDay r
WHERE r.id = p.idv
)
AND p.idu IN (
SELECT q.id
FROM App\Entity\User q
WHERE q.team = :team
)
';
}
// Ejecutar la consulta para HalfDayValidation
$halfH = $em->createQuery($halfDayDql)
->setParameters($halfDayParameters)
->getResult();
$data = [];
// Procesar VacationsValidation
if (!empty($vacationsV)) {
foreach ($vacationsV as $itemB) {
$vacation = $em->getRepository(Vacations::class)->find($itemB->getIdv());
$user = $em->getRepository(User::class)->findOneBy([
'id' => $itemB->getIdu(),
'status' => VacationsConstants::PAYROLL_STAFF_STATUS
]);
if ($user && $vacation) {
$data[] = [
'idv' => $itemB->getIdv(),
'idu' => $user->getId(),
'fullname' => '(VAC.) ' . $user->getName() . ' ' . $user->getLastname(),
'description' => "VACACIONES: " . $vacation->getDescription(),
'color' => '#4B4B4B',
'date' => $itemB->getDate(),
];
}
}
}
// Procesar HalfDayValidation
if (!empty($halfH)) {
foreach ($halfH as $itemB) {
$halfday = $em->getRepository(HalfDay::class)->find($itemB->getIdv());
$user = $em->getRepository(User::class)->findOneBy([
'id' => $itemB->getIdu(),
'status' => VacationsConstants::PAYROLL_STAFF_STATUS
]);
if ($user && $halfday) {
$data[] = [
'idv' => $itemB->getIdv(),
'idu' => $user->getId(),
'fullname' => '(MDD.) ' . $user->getName() . ' ' . $user->getLastname(),
'description' => "MEDIO DIA: " . $halfday->getDescription(),
'color' => '#9c9c9c',
'date' => $itemB->getDate(),
];
}
}
}
// Preparar la respuesta
$responseData = [
'notes' => $data,
];
return new JsonResponse($responseData);
}
/**
* @Route("/vacations/notesAll", name="get_vacations_notes_all")
*/
public function widgetAllVacatioNotestAction(Request $request) {
$em = $this->getDoctrine()->getManager();
$emConfig = $em->getConfiguration();
$emConfig->addCustomDatetimeFunction('YEAR', 'DoctrineExtensions\Query\Mysql\Year');
$parameters = array(
'dateActual'=>date("Y"),
);
$dql = 'SELECT p
FROM App:VacationsValidation p
WHERE YEAR(p.date) = :dateActual
';
$query = $em->createQuery($dql)->setParameters($parameters);
$vacationsV= $query->getResult();
$data = array();
if(!empty($vacationsV)){
//d($vacationsV);
foreach($vacationsV as $itemB) {
$vacations = $em->getRepository(Vacations::class)->findOneById($itemB->getIdv());
if( $itemB->getStatusBoss()==1){
$status='Approved';
$color='#66BB6A';
}
if( $itemB->getStatusBoss()==0){
$status='Rejected';
$color='#EF5350';
}
if(is_null($itemB->getStatusBoss()) ){
$status='Pending';
$color='#42A5F5';
}
$dataB[] = array(
'date' => $itemB->getDate(),
'status' => $status,
'color'=>$color,
'url'=>''
);
$users = $em->getRepository(User::class)->findOneBy(
array(
'id'=>$itemB->getIdu(),
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
)
;
$data[] = array(
'idv' => $itemB->getIdv(),
'idu'=>$users->getId(),
'fullname'=> $users->getName().' '.$users->getLastname(),
'description'=>$vacations->getDescription(),
'color'=>$color,
'date' =>$itemB->getDate(),
);
}
//}
}else{
}
$return = array(
'notes' => $data,
);
$response = new JsonResponse($return);
return $response;
}
/**
* @Route("/vacations/notesAll/{id}", name="get_vacations_notes_all_user")
*/
public function widgetAllVacatioUserNotestAction($id, Request $request) {
$em = $this->getDoctrine()->getManager();
$emConfig = $em->getConfiguration();
$emConfig->addCustomDatetimeFunction('YEAR', 'DoctrineExtensions\Query\Mysql\Year');
$userActual = $em->getRepository(User::class)->findOneById(
array(
"id" => $id,
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
)
;
if($userActual->getRole()=='ROLE_ADMIN'){
$parameters = array(
'dateActual'=>date("Y"),
);
$dql = 'SELECT p
FROM App:VacationsValidation p
WHERE YEAR(p.date) = :dateActual
';
}else{
$parameters = array(
'dateActual'=>date("Y"),
'team'=> $userActual->getTeam(),
);
$dql = 'SELECT p
FROM App:VacationsValidation p
WHERE YEAR(p.date) = :dateActual AND
p.idu=(SELECT q.id
FROM App\Entity\User q
WHERE q.team = :team)
';
}
$query = $em->createQuery($dql)->setParameters($parameters);
$vacationsV= $query->getResult();
$data = array();
if(!empty($vacationsV)){
//d($vacationsV);
foreach($vacationsV as $itemB) {
$vacations = $em->getRepository(Vacations::class)->findOneById($itemB->getIdv());
if( $itemB->getStatusBoss()==1){
$status='Approved';
$color='#66BB6A';
}
if( $itemB->getStatusBoss()==0){
$status='Rejected';
$color='#EF5350';
}
if(is_null($itemB->getStatusBoss()) ){
$status='Pending';
$color='#42A5F5';
}
$dataB[] = array(
'date' => $itemB->getDate(),
'status' => $status,
'color'=>$color,
'url'=>''
);
$users = $em->getRepository(User::class)->findOneBy(
array(
'id'=>$itemB->getIdu(),
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
)
;
$data[] = array(
'idv' => $itemB->getIdv(),
'idu'=>$users->getId(),
'fullname'=> $users->getName().' '.$users->getLastname(),
'description'=>$vacations->getDescription(),
'color'=>$color,
'date' =>$itemB->getDate(),
);
}
//}
}else{
}
$return = array(
'notes' => $data,
);
$response = new JsonResponse($return);
return $response;
}
/**
* @Route("/vacations/notes/{idv}", name="get_vacations_notes_select")
* @param $idv
* @param Request $request
* @return JsonResponse
* @throws Exception
*/
public function widgetVacationNotesAction($idv, Request $request) {
$em = $this->getDoctrine()->getManager();
$vacations = $em->getRepository(Vacations::class)->findOneById($idv);
// $data = array();
$dataForTheCalendar = array();
if(!empty($vacations)){
//$firstVal = $em->getRepository('App:VacationsFirstValidation')->findBy(array('idv'=>$item->getId()));
$bossVal = $em->getRepository(VacationsValidation::class)->findBy(array('idv'=>$vacations->getId()));
foreach($bossVal as $itemB) {
// $itemB->getStatus()?$status='Approved':$status='Rejected';
// if(is_null($itemB->getStatus())){
// $status='Pending';
// }
if( $itemB->getStatusBoss()==1){
$status='Approved';
$color='#66BB6A';
}
if( $itemB->getStatusBoss()==0){
$status='Rejected';
$color='#EF5350';
}
if(is_null($itemB->getStatusBoss()) ){
$status='Pending';
// $color='#42A5F5';
$color='#f0ad4e';
}
$dataB[] = array(
'date' => $itemB->getDate(),
'status' => $status,
'color'=>$color,
'url'=>''
);
}
$users = $em->getRepository(User::class)->findOneBy(
array(
'id'=>$vacations->getIdu(),
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
)
;
// $data = array(
// 'idv' => $vacations->getId(),
// 'idu'=>$users->getId(),
// 'fullname'=> $users->getName().' '.$users->getLastname(),
// 'date' =>$dataB,
// 'description'=>$vacations->getDescription()
// );
$helper = new VacationsHelper($em);
$dataForTheCalendar = $helper->retrieveDataForTheCalendar(
$users->getId(),
$bossVal);
}
$return = array(
'dataForTheCalendar' => $dataForTheCalendar
);
$response = new JsonResponse($return);
return $response;
}
/**
* @Route("/vacations/notificationFromTeamLeader/{idv}", name="notificationFromTeamLeader_vacations")
* @param $idv
* @param Request $request
* @return RedirectResponse
*/
public function notificationFromTeamLeaderVacationsAction($idv, Request $request) {
$em = $this->getDoctrine()->getManager();
$helper = new VacationsHelper($em);
$vacation = $em->getRepository(Vacations::class)->find($idv);
if (!is_null($vacation) && !empty($vacation)) {
$vacationsValidations = $em->getRepository(VacationsValidation::class)
->findBy(
array(
'idv' => $idv
)
)
;
if (!is_null($vacationsValidations) && !empty($vacationsValidations)) {
$vacationCreationDay = $vacation->getCreatedAt();
$idu = $vacation->getIdu();
$token = $vacation->getToken();
$user = $em->getRepository(User::class)->find($idu);
if (!is_null($user) && !empty($user)) {
$userRole = $user->getRole();
$requestedDays = array();
/**
* @var VacationsValidation $vacationsValidation
*/
foreach ($vacationsValidations as $vacationsValidation) {
$requestedDays[] = $vacationsValidation;
}
$data = array(
'idv' => $idv,
'days' => $requestedDays,
'fullname' => $user->getFullName(),
'date' => $vacationCreationDay,
'role' => $userRole,
);
// Recopilamos las direcciones de los administradores
$adminEmails = $helper->getEmailsByRole(VacationsConstants::ROLE_ADMIN);
if (!is_null($adminEmails) && !empty($adminEmails)) {
// Formateamos el asunto del mensaje
$teamLeaderOfThisUser = $helper->getTeamLeaderByUserID($user->getId());
$subjectTeamLeader = VacationsConstants::EMAIL_FROM_TEAMLEADER_SUBJECT;
if (!is_null($teamLeaderOfThisUser) && !empty($teamLeaderOfThisUser)) {
// Si hay jefe de equipo, concatenamos su nombre al asunto.
$teamLeaderFullName = $teamLeaderOfThisUser->getFullName();
$subjectTeamLeader = $subjectTeamLeader . " Por " . $teamLeaderFullName;
}
$emailService = new EmailService();
$emailsDelivered = $emailService->sendHTMLEmail(
$adminEmails, //TO ADDRESS
$subjectTeamLeader,
$this->renderView(
'vacations/vacations-email-report.html.twig',
array(
'data' => $data,
'token' => $token,
'idTeamLeader' => $teamLeaderOfThisUser->getId(),
'isBoss' => true
)
)
);
if (0 < $emailsDelivered) {
$message = $this->translator->trans("Message Correctly Sent");
$messageType = 'mensajeholidays';
} else {
$message = $this->translator->trans("Your message was not sent");
$messageType = 'mensajeholidayserror';
}
} else {
$noAdminUsers = $this->translator->trans("No admin users were found");
$messageNotSent = $this->translator->trans("Your message was not sent");
$message = $noAdminUsers . ":" . $messageNotSent;
$messageType = 'mensajeholidayserror';
}
$this->addFlash($messageType, $message);
}
}
}
return $this->redirect('/vacations/check/'.$idv);
}
/**
* @Route("/vacations/dateRange/{idu}/{startDate}", name="dateRange_vacations")
* @param $idu
* @param $startDate
* @param Request $request
* @return JsonResponse
* @throws Exception
*/
public function getVacationsInDateRange($idu, $startDate, Request $request) {
$em = $this->getDoctrine()->getManager();
$isUserIDValid = (!is_null($idu) && !empty($idu));
$isStartDateValid = (!is_null($startDate) && !empty($startDate));
$endDate = date("Y-m-t", strtotime($startDate));
$dataForTheCalendar = array();
if ($isUserIDValid && $isStartDateValid) {
$vacationsValidations = $em->getRepository(VacationsValidation::class)
->getRequestedDaysOfVacationsByUserID($idu, $startDate, $endDate);
if(!empty($vacationsValidations)){
foreach($vacationsValidations as $vacationsValidation) {
if( $vacationsValidation->getStatusBoss()==1){
$status='Approved';
$color='#66BB6A';
}
if( $vacationsValidation->getStatusBoss()==0){
$status='Rejected';
$color='#EF5350';
}
if(is_null($vacationsValidation->getStatusBoss()) ){
$status='Pending';
// $color='#42A5F5';
$color='#f0ad4e';
}
$dataB[] = array(
'date' => $vacationsValidation->getDate(),
'status' => $status,
'color'=>$color,
'url'=>''
);
}
$users = $em->getRepository(User::class)->findOneBy(
array(
'id'=>$idu,
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
)
;
d($vacationsValidations);
$helper = new VacationsHelper($em);
$dataForTheCalendar = $helper->retrieveDataForTheCalendar(
$users->getId(),
$vacationsValidations);
}
}
$return = array(
'dataForTheCalendar' => $dataForTheCalendar
);
$response = new JsonResponse($return);
return $response;
}
/**
* @Route("/vacations/notesTeamLeader/{idv}", name="get_vacations_notes_team_leader_select")
* @param $idv
* @param Request $request
* @return JsonResponse
*/
public function widgetVacatioNotesTeamLeadertAction($idv, Request $request) {
$em = $this->getDoctrine()->getManager();
$vacations = $em->getRepository(Vacations::class)->findOneById($idv);
$data = array();
if(!empty($vacations)){
$bossVal = $em->getRepository(VacationsValidation::class)->findBy(array('idv'=>$vacations->getId()));
foreach($bossVal as $itemB) {
// $itemB->getStatus()?$status='Approved':$status='Rejected';
// if(is_null($itemB->getStatus())){
// $status='Pending';
// }
if( $itemB->getStatus()==1){
$status='Approved';
$color='#66BB6A';
}
if( $itemB->getStatus()==0){
$status='Rejected';
$color='#EF5350';
}
if(is_null($itemB->getStatus()) ){
$status='Pending';
// $color='#42A5F5';
$color='#f0ad4e';
}
$dataB[] = array(
'date' => $itemB->getDate(),
'status' => $status,
'color'=>$color,
'url'=>''
);
}
$users = $em->getRepository(User::class)->findOneBy(
array(
'id'=>$vacations->getIdu(),
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
)
;
$data = array(
'idv' => $vacations->getId(),
'idu'=>$users->getId(),
'fullname'=> $users->getName().' '.$users->getLastname(),
'date' =>$dataB,
'description'=>$vacations->getDescription()
);
}else{
}
$return = array(
'notes' => $data
);
$response = new JsonResponse($return);
return $response;
}
/**
* @Route("/vacations/change/{idd}/{value}", name="change_vacations_notes_select")
* @param $idd
* @param $value
* @param Request $request
* @return JsonResponse
*/
public function changeWidgetVacatioNotestAction($idd, $value, Request $request) {
$em = $this->getDoctrine()->getManager();
$helper = new VacationsHelper($em);
$message = $helper->changeVacationsNote($idd, $value);
$response = new JsonResponse($message);
return $response;
}
/**
* @Route("/vacations/updateVacationsExecutiveBoss/{idv}/{idu}/{idCollection}/{value}", name="updateVacations_executiveBoss")
* @param Request $request
* @param $idv
* @param $idu
* @param $idCollection
* @param $value
* @param LoggerInterface $logger
* @param Swift_Mailer $mailer
* @return JsonResponse
* @throws Exception
*/
public function updateVacationExecutiveBossAction(Request $request, $idv, $idu, $idCollection, $value, LoggerInterface $logger, Swift_Mailer $mailer )
{
$em = $this->getDoctrine()->getManager();
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
if (!is_null($idCollection)) {
$thePostIdArray = explode(',', $idCollection);
$em = $this->getDoctrine()->getManager();
// Actualizamos el número total de días de vacaciones en el caso de aprobarlas.
if (VacationsConstants::VACATIONS_ACCEPTED_STATUS === intval($value)) {
$numApprovedDays = count($thePostIdArray);
$helper = new VacationsHelper($em);
$helper->updateApprovedDaysOfVacations($idu, $numApprovedDays);
}
$storedVacations = true;
foreach ($thePostIdArray as $vacationID) {
/**
* @var VacationsValidation $validation
*/
$validation = $em->getRepository(VacationsValidation::class)->findOneBy(array('id' => $vacationID));
if (!empty($validation)) {
try {
if ("null" === $value) {
$value = NULL;
}
$validation->setUpdatedId($user_id);
$validation->setStatusBoss($value);
$em->persist($validation);
$em->flush();
} catch (Exception $e) {
$event = 'An error occurred: '.$e->getMessage();
/* Para el log */
$logger->error($event);
/* Para el usuario */
$errorMessage = $this->translator->trans($event);
$this->addFlash('mensajeholidayserror', $errorMessage);
$storedVacations = false;
}
}
}
if($storedVacations) {
/**
* @var Vacations $vacations
*/
$vacations=$em->getRepository(Vacations::class)->findOneById($idv);
$vacationsDay = $em->getRepository(VacationsValidation::class)->findBy(array('idv'=>$idv));
/**
* @var User $user
*/
$user=$em->getRepository(User::class)->findOneBy(
array(
"id" => $vacations->getIdu(),
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
);
if (!empty($vacationsDay))
{
$dataB = array();
foreach($vacationsDay as $itemB) {
$itemB->getStatus()?$status='Approved':$status='Rejected';
if(is_null($itemB->getStatus())){
$status='Pending';
}
$itemB->getStatusBoss()?$statusB='Approved':$statusB='Rejected';
if(is_null($itemB->getStatusBoss())){
$statusB='Pending';
}
$dataB[] = array(
'id' => $itemB->getId(),
'date' => $itemB->getDate(),
'status' => $status,
'statusBoss' => $statusB,
);
}
$data = array(
'idv' => $idv,
'days' =>$dataB,
'fullname'=>$user->getFullName(),
'date'=>$vacations->getCreatedAt(),
'role'=>$user->getRole()
);
$message = (new \Swift_Message())
->setSubject('Solicitud de Vacaciones')
->setFrom(array("desarrollo@develup.solutions" => "System Mante 3.0"))
->setTo($user->getEmail())
->setBody(
$this->renderView(
'vacations/vacations-email-user-report.html.twig',
array('data' => $data)
),'text/html'
);
$mailer->send($message);
}
}
}
$dataForTheCalendar = array();
$dataForTheCalendar['numDays'] = 0;
// If the $value is for denying all requested days, we aren't going to retrieve data for the calendar
$bossVal = $em->getRepository(VacationsValidation::class)->findBy(
array('idv' => $idv),
array('date' => 'ASC')
);
$dataForTheCalendar = (new VacationsHelper($em))->retrieveDataForTheCalendar(
$idu,
$bossVal);
$return = array(
'dataForTheCalendar' => $dataForTheCalendar
);
$response = new JsonResponse($return);
return $response;
}
/**
* @Route("/vacations/updateVacationsTeamLeader/{idv}/{idu}/{idCollection}/{value}", name="updateVacations_teamLeader")
* @param Request $request
* @param $idv
* @param $idu
* @param $idCollection
* @param $value
* @param LoggerInterface $logger
* @return JsonResponse
* @throws Exception
*/
public function updateVacationTeamLeaderAction(Request $request, $idv, $idu, $idCollection, $value, LoggerInterface $logger)
{
/**
* @var User $loggedUser
*/
$loggedUser = $this->get('security.token_storage')->getToken()->getUser();
$loggedUserID = $loggedUser->getId();
if (!is_null($idCollection)) {
$thePostIdArray = explode(',', $idCollection);
$em = $this->getDoctrine()->getManager();
foreach ($thePostIdArray as $vacationID) {
/**
* @var VacationsValidation $validation
*/
$validation = $em->getRepository(VacationsValidation::class)->findOneBy(array('id' => $vacationID));
if (!empty($validation)) {
try {
$em = $this->getDoctrine()->getManager();
if ("null" === $value) {
$value = NULL;
}
$validation->setUpdatedId($loggedUserID);
$validation->setStatus($value);
// Si el equipo del usuario logueado (un jefe de equipo) pertenece a uno de los equipos
// dados de alta en la base de datos de equipos autorizados entonces
// su decisión se replicará al jefe ejecutivo
// 1. Recojo el team del $loggedUser
$loggedUserTeam = $loggedUser->getTeam();
$isTeamLeaderAsExecutiveBoss = VacationsConstants::isTeamLeaderAsExecutiveBoss($loggedUserTeam);
if ($isTeamLeaderAsExecutiveBoss) {
$validation->setStatusBoss($value);
}
// Fin de esta sección
$em->persist($validation);
$em->flush();
} catch (Exception $e) {
// $event = 'An error occurred: '.$e->getMessage();
// /* Para el log */
// $logger->error($event);
// /* Para el usuario */
// $errorMessage = $this->translator->trans($event);
// $this->addFlash('mensajeholidayserror', $errorMessage);
}
}
}
}
$dataForTheCalendar = array();
$dataForTheCalendar['numDays'] = 0;
// If the $value is for denying all requested days, we aren't going to retrieve data for the calendar
$bossVal = $em->getRepository(VacationsValidation::class)->findBy(
array('idv' => $idv),
array('date' => 'ASC')
);
$dataForTheCalendar = (new VacationsHelper($em))->retrieveDataForTheCalendar(
$idu,
$bossVal);
$return = array(
'dataForTheCalendar' => $dataForTheCalendar
);
$response = new JsonResponse($return);
return $response;
}
/**
* @Route("/vacations/changeTeamLeader/{idd}/{value}", name="change_vacations_notes_select_team_leader")
* @param $idd
* @param $value
* @param Request $request
* @return JsonResponse
*/
public function changeWidgetVacationTeamLeaderNotestAction($idd,$value, Request $request) {
if($value=='null') $value='';
$em = $this->getDoctrine()->getManager();
$Validation = $em->getRepository(VacationsValidation::class)->findOneBy(array('id'=>$idd));
if($value=='')$value=null;
$message='Error';
if(!empty($Validation)) {
$message='OK';
try{
$Validation->setStatus($value);
$em->persist($Validation);
$em->flush();
}catch (\Exception $e){
$message=$e->getMessage();
}
}
$response = new JsonResponse($message);
return $response;
}
/**
* @Route("/vacations/transferyear/{idv}", name="user_vacations_tranfer_year")
* @param $idv
* @param Request $request
* @param LoggerInterface $logger
* @return RedirectResponse
* @throws Exception
*/
public function userTransferYearAction($idv, Request $request, LoggerInterface $logger)
{
$em = $this->getDoctrine()->getManager();
$vacationsDay = $em->getRepository(Vacations::class)->findOneById($idv);
if(!empty($vacationsDay)){
$vacationsDayvalidation = $em->getRepository(VacationsValidation::class)->findByIdv($idv);
foreach($vacationsDayvalidation as $dayvalidate) {
$dayvalidate->setCreatedAt( new \DateTime('now') );
$em->persist($dayvalidate);
}
try{
$vacationsDay->setCreatedAt( new \DateTime('now') );
$em->persist($vacationsDay);
$em->flush();
}catch (\Exception $e){
$event = 'An error occurred: '.$e->getMessage();
/* Para el log */
$logger->error($event);
/* Para el usuario */
$errorMessage = $this->translator->trans($event);
$this->addFlash('mensajeholidayserror', $errorMessage);
}
}
$event = 'The Item has been Updated.';
$successMessage = $this->translator->trans($event);
$this->addFlash('mensajeholidays', $successMessage);
/* Fin Gestión de eventos en Log */
return $this->redirectToRoute('check_vacations',
array(
'idv' => $idv
)
);
}
/**
* @Route("/vacations/requestedDays/cancel/{token}&{isBoss}", name="cancel_requestedDays_vacations")
* @param $token
* @param $isBoss
* @param Request $request
* @param LoggerInterface $logger
* @return Response
*/
public function cancelRequestedDaysVacationsAction($token, $isBoss, Request $request, LoggerInterface $logger)
{
$em = $this->getDoctrine()->getManager();
$vacation = $em->getRepository(Vacations::class)
->findOneBy(array(
'token' => $token
)
)
;
$isBoss = ("false" === $isBoss) ? false : true;
// We fetch the data user who requested these days to show the fullname.
$user = $em->getRepository(User::class)
->findOneBy(
array(
'id' => $vacation->getIdu(),
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
)
;
$idv = $vacation->getId();
// Once we have fetched the $vacation object, we are going to fetch $vacations_validation with this $idv
$vacations_validations = $em->getRepository(VacationsValidation::class)
->findBy(array(
'idv' => $idv
)
)
;
$requestedDays = array();
$data = array();
if (!empty($vacations_validations)) {
foreach ($vacations_validations as $vacations_validation) {
if (!$isBoss) {
$vacations_validation->setStatus(false);
} else {
$vacations_validation->setStatusBoss(false);
}
$em->persist($vacations_validation);
$em->flush();
$requestedDays[] = array(
'date' => $vacations_validation->getDate()
);
}
$data = array(
'days' =>$requestedDays
);
}
return $this->render(
'vacations/vacations-validation-cancelled.html.twig',
array(
'data' => $data,
'fullname'=> $user->getName().' '.$user->getLastName(),
'token' => $token,
'isBoss' => $isBoss
)
)
;
}
/**
* @Route("/vacations/requestedDays/approve/{token}/{isBoss}/", name="approve_requestedDays_vacations")
* @param $token
* @param $isBoss
* @param Request $request
* @param LoggerInterface $logger
* @return Response
*/
public function approveRequestedDaysVacationsAction($token, $isBoss, Request $request, LoggerInterface $logger)
{
$isBoss = ("false" === $isBoss) ? false : true;
$em = $this->getDoctrine()->getManager();
$vacation = $em->getRepository(Vacations::class)
->findOneBy(array(
'token' => $token
)
)
;
// We fetch the data user who requested these days to show the fullname.
$user = $em->getRepository(User::class)
->findOneBy(
array(
'id' => $vacation->getIdu(),
"status" => VacationsConstants::PAYROLL_STAFF_STATUS
)
)
;
$idv = $vacation->getId();
// Once we have fetched the $vacation object, we are going to fetch $vacations_validation with this $idv
$vacations_validations = $em->getRepository(VacationsValidation::class)
->findBy(array(
'idv' => $idv
)
)
;
$requestedDays = array();
$data = array();
if (!empty($vacations_validations)) {
foreach ($vacations_validations as $vacations_validation) {
if (!$isBoss) {
$vacations_validation->setStatus(true);
} else {
$vacations_validation->setStatusBoss(true);
}
$em->persist($vacations_validation);
$em->flush();
$requestedDays[] = array(
'date' => $vacations_validation->getDate(),
'statusBoss' => ''
);
}
$data = array(
'days' =>$requestedDays,
'fullname' => $user->getFullName(),
'idv' => $idv,
'date' => $vacation->getCreatedAt(),
'role' => $user->getRole()
);
}
$adminLeaders=$em->getRepository(User::class)->findBy(
array(
'role'=>'ROLE_ADMIN',
'status'=>VacationsConstants::PAYROLL_STAFF_STATUS,
)
)
;
$dani = $em->getRepository(User::class)->findOneById(16);
if (!in_array($dani,$adminLeaders)){
$adminLeaders[] = $dani; // Agrega a Daniel Guerrero, en caso de que no se encuentre en el arreglo
}
if(!empty($adminLeaders)) {
foreach($adminLeaders as $adminLeader) {
$adminLeaderID = $adminLeader->getId();
$adminLeaderEmail=$adminLeader->getEmail();
if (!$isBoss) {
$emailService = new EmailService();
$emailsDelivered = $emailService->sendHTMLEmail(
$adminLeaderEmail, //TO ADDRESS
'Solicitud de Vacaciones',
$this->renderView(
'vacations/vacations-email-report.html.twig',
array('data' => $data,
'token'=> $token,
'idTeamLeader' => $adminLeaderID,
'isBoss' => true)
)//,
// "desarrollo@develup.solutions",
// "System Mante 3.0"
)
;
}
}
}
return $this->render(
'vacations/vacations-validation-approved.html.twig',
array(
'data' => $data,
'fullname'=> $user->getName().' '.$user->getLastName(),
'token'=> $token,
'isBoss' => $isBoss
)
)
;
}
// /**
// * @Route("/vacations/getMembersOfThisGroup/{teamID}", name="getMembersOfThisGroup_vacations")
// * @param Request $request
// * @param $teamID
// * @return JsonResponse
// */
// public function getMembersOfThisGroupAction(Request $request, $teamID) {
//
// $em = $this->getDoctrine()->getManager();
//
// $membersOfThisGroup = $em->getRepository(User::class)
// ->findBy(array(
// 'team' => $teamID,
// 'status' => VacationsConstants::PAYROLL_STAFF_STATUS
// )
// )
// ;
// foreach($membersOfThisGroup as $memberOfThisGroup){
// $datos[] = array(
// "id" => $memberOfThisGroup->getId(),
// "name" => $memberOfThisGroup->getFullName(),
// );
// }
//
// $return = array(
// 'membersOfThisGroup' => $datos,
// );
//
// $response = new JsonResponse($return);
// return $response;
//
//
// /* We retrieve the whole collection of members of the group this user belongs to */
// }
/**
* @Route("/vacations/getVacationsByMonth/", name="getVacationsByMonth_vacations")
* @param Request $request
* @return Response
*/
public function vacationsByMonthAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$helper = new VacationsHelper($em);
$month = date('n');
$vacationsByMonthData = $helper->vacationsByMonthData($month);
return $this->render(
'vacations/vacations-month-list.html.twig', array(
'monthList' => $vacationsByMonthData["monthList"],
'month'=> $month,
'daysOfMonth' => intval($vacationsByMonthData["daysOfMonth"]),
'dataPerDay' => $vacationsByMonthData["dataDay"]
)
)
;
}
/**
* @Route("/vacations/postVacationsByMonth", name="postVacationsByMonth_vacations")
* @param Request $request
* @return JsonResponse
*/
public function postVacationsByMonthAction(Request $request) {
$em = $this->getDoctrine()->getManager();
$helper = new VacationsHelper($em);
$month = $request->request->get("month");
if (is_null($month)) {
$month = date('m');
}
$vacationsByMonthData = $helper->vacationsByMonthData($month);
$literalsHeader = array(
"days" => $this->translator->trans('Days'),
"approvedString" => $this->translator->trans('Staff with approved vacations'),
"pendingString" => $this->translator->trans('Staff with pending vacations')
);
$response = array(
"data" => array(
"monthList" => $vacationsByMonthData["monthList"],
'month'=> $month,
'daysOfMonth' => intval($vacationsByMonthData["daysOfMonth"]),
'literals' => $literalsHeader,
'dataPerDay' => $vacationsByMonthData["dataDay"]
)
);
return new JsonResponse($response);
}
/**
* @Route("/vacations/exportTo/{month}", name="exportToFormat_vacations")
* @param $month
* @return StreamedResponse
* @throws PhpSpreadsheetException
*/
public function exportToExcelAction($month) {
$em = $this->getDoctrine()->getManager();
$helper = new VacationsHelper($em);
$response = null;
try{
$phpExcelObject = new Spreadsheet();
$excelData = $helper->getExcelData($month);
// Crea el writer
$writer = new Xlsx($helper->exportToExcel($phpExcelObject,$excelData));
// Envia la respuesta del controlador
$response = new StreamedResponse(
function () use ($writer) {
$writer->save('php://output');
}
);
// Agrega los headers requeridos
$month++; // Conversión locale inglés al español necesaria para el nombre del fichero.
$dispositionHeader = $response->headers->makeDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
DateHelper::getCurrentYear() . $month . VacationsConstants::EXCEL_MONTH_REPORT_FILENAME.".xlsx"
);
$response->headers->set('Content-Type', 'application/vnd.ms-excel; charset=utf-8');
$response->headers->set('Pragma', 'public');
$response->headers->set('Cache-Control', 'maxage=1');
$response->headers->set('Content-Disposition', $dispositionHeader);
return $response;
} catch(PhpSpreadsheetException $excelException) {
}
// $daysOfMonth = DateHelper::getDaysByMonth($month, date(DateConstants::YEAR));
// $dataDay = $helper->getDataVacationsValidationOfThisDate($daysOfMonth, $month);
//
// $header = array(
// "data" => DateHelper::getMonthNameByID($month)
// );
// $subheader = array(
// "Día", "Personal con vacaciones aceptadas", "Personal con vacaciones pendientes"
// );
// $phpExcelObject = $this->get('phpexcel')->createPHPExcelObject();
//
// $excelArray = array(
// 'header' => $header,
// 'subheader' => $subheader,
// 'data' => $dataDay,
// 'daysOfMonth' => $daysOfMonth
// )
// ;
//
// // Crea el writer
// $writer = $this->get('phpexcel')->createWriter(
// $helper->exportToExcel($phpExcelObject,$excelArray), 'Excel2007');
// // Envia la respuesta del controlador
// $response = $this->get('phpexcel')->createStreamedResponse($writer);
// // Agrega los headers requeridos
//
// $month = $month + 1;
// $dispositionHeader = $response->headers->makeDisposition(
// ResponseHeaderBag::DISPOSITION_ATTACHMENT,
// DateHelper::getCurrentYear() . $month . '_Lista de ausentes y pendientes.xlsx'
// );
//
// $response->headers->set('Content-Type', 'application/vnd.ms-excel; charset=utf-8');
// $response->headers->set('Pragma', 'public');
// $response->headers->set('Cache-Control', 'maxage=1');
// $response->headers->set('Content-Disposition', $dispositionHeader);
return $response;
}
/**
* @Route("/vacations/manage/{status}", defaults={"status" = "Pending"}, name="vacations_manage")
* @param Request $request
* @param integer $status 0: rejected; null: pending; 1: approved
* @return Response
*/
public function getRequestedDaysListAction($status, Request $request) {
/* Obtengo usuario logueado */
/**
* @var User $loggedUserIn
*/
$loggedUserIn = $this->get('security.token_storage')->getToken()->getUser();
$em = $this->getDoctrine()->getManager();
$year = date('Y');
$helper = new VacationsHelper($em);
$singleRequestDTOList = $helper->getVacationsListByYear(
$loggedUserIn,
$status,
$year
)
;
return $this->render('vacations/list-vacations.html.twig', array(
'requestedDayList' => $singleRequestDTOList,
'status' => strval($status),
'year' => $year
));
}
/**
* @Route("/vacations/manage/historic/{status}/{year}", name="vacations_manage_historic")
* @param $status
* @param $year
* @param Request $request
* @return Response
*/
public function getHistoricRequestedDaysListAction($status, $year, Request $request) {
/**
* @var User $loggedUserIn
*/
$loggedUserIn = $this->get('security.token_storage')->getToken()->getUser();
$em = $this->getDoctrine()->getManager();
$helper = new VacationsHelper($em);
$singleRequestDTOList = $helper->getVacationsListByYear(
$loggedUserIn,
$status,
intval($year)
)
;
return $this->render('vacations/list-vacations.html.twig', array(
'requestedDayList' => $singleRequestDTOList,
'status' => $status,
'year' => $year
));
}
}