<?php
namespace App\Controller\Mouvement;
use DateTime;
use App\Entity\PMotif;
use App\Entity\PPiece;
use App\Entity\PDossier;
use App\Entity\Pemploye;
use App\Entity\LContract;
use App\Entity\Prubrique;
use App\Entity\PPrelevement;
use App\Entity\PArretTravail;
use App\Entity\PPrelevementLg;
use App\Entity\PArretTravailLg;
use App\Controller\ApiController;
use App\Service\CalculPaieService;
use Doctrine\Persistence\ManagerRegistry;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\ParameterBag;
use PhpOffice\PhpSpreadsheet\Reader\Xlsx as Reader;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
#[Route('/mouvement/arret')]
class ArretController extends AbstractController
{
private $em;
private $calculPaieService;
private $api;
public function __construct(ManagerRegistry $doctrine , CalculPaieService $calculPaieService, ApiController $api)
{
$this->em = $doctrine->getManager();
$this->calculPaieService = $calculPaieService;
$this->api = $api;
}
#[Route('/', name: 'app_mouvement_arret', options:['expose' => true])]
public function index(Request $request): Response
{
$now = new DateTime();
// Get the current date in a specific format (e.g., 'Y-m-d H:i:s')
$currentDate = $now->format('Y-m');
$dossier = $request->getSession()->get('dossier');
$operations = $this->api->check($this->getUser(), 'app_mouvement_arret', $this->em, $request);
if(!is_array($operations)) {
return $this->redirectToRoute('app_site');
}elseif(count($operations) == 0) {
return $this->render('includes/404.html.twig');
}
// $queryBuilder = $this->em->createQueryBuilder()
// ->select('a.id as arret_id,p.id as employe_id,p.code as matricule,m.designation as motif,a.DateDebut as date_debut,a.dateFin as date_fin,a.dateReprise as date_rep')
// ->from(PArretTravail::class, 'a')
// ->innerJoin('a.contract', 'c')
// ->innerJoin('c.employe', 'p')
// ->innerJoin('a.motif', 'm')
// ->Where('a.active = 1')
// ->andWhere('c.dossier = :dossier')
// ->setParameter('dossier', $dossier);
// $results = $queryBuilder->getQuery()->getResult();
$pmotif = $this->em->getRepository(PMotif::class)->findBy(['active' => 1 ]);
$queryBuilder = $this->em->createQueryBuilder()
->select('contract.id as id, p.nom as nom, p.matricule as matricule , p.prenom')
->from(LContract::class, 'contract')
->innerJoin('contract.employe', 'p')
->innerJoin('contract.dossier', 'd')
->Where('contract.active = 1')
->andWhere('d.id = :dossier')
->setParameter('dossier', $dossier); // $elements = $this->em->getRepository(Prubrique::class)->findBy(['sens' => [1, -1]]);
$pemployes = $queryBuilder->getQuery()->getResult();
return $this->render('mouvement/Arret/index.html.twig', [
'motifs' => $pmotif,
'operations' => $operations,
'pemployes' => $pemployes,
'date' => $currentDate,
]);
}
#[Route('/arret_traitement', name: 'app_mouvement_arret_traitement', options:['expose' => true])]
public function arret_traitement(Request $request): Response
{
$startDate = $request->get('datedebut');
$endDate = $request->get('datefin');
$dateRanges = $this->generateDateRange($startDate, $endDate);
// dd($dateRanges);
// test period exist :
// $arret = $this->em->getRepository(PArretTravail::class)->add_Arret($request);
// // dd($request);
// $arret_lg = $this->em->getRepository(PArretTravailLg::class)->add_Arret_lg($request,$dateRanges,$arret);
return new JsonResponse($dateRanges);
}
#[Route('/arret_traitement_verification', name: 'arret_traitement_verification', options:['expose' => true])]
public function arret_traitement_verification(Request $request): Response
{
$id_cnt = $request->get('id_emp_arret');
// $endDate = $request->get('datefin');
// $dateRanges = $this->generateDateRange($startDate, $endDate);
// // dd($dateRanges);
// dd($request->get('editedData'));
// test period exist :
foreach ($request->get('editedData') as $sheet) {
$period_exist = $this->period_exist($id_cnt, $this->em);
if ($period_exist) {
foreach ($period_exist as $period) {
if($sheet['period'] == $period['code']){
$days = $sheet['days'] + $period['nbr'];
if ($days > 26) {
dd('error');
$error = 1;
$emp = $sheet[1];
$prd = $period['code'];
}
}
}
}
}
$arret = $this->em->getRepository(PArretTravail::class)->add_Arret($request, $this->getUser());
$arret_lg = $this->em->getRepository(PArretTravailLg::class)->add_Arret_lg($request,$request->get('editedData'),$arret);
$this->em->flush();
return new JsonResponse($arret_lg);
}
// public function generateDateRange($startDate, $endDate, $sunday = null) {
// $currentPeriodeDate = new \DateTime();
// $currentPeriode = $currentPeriodeDate->modify('first day of this month');
// $date = new DateTime($startDate);
// $currentDate = new DateTime($startDate); // 16-10-2023
// $currentDateFix = new DateTime($startDate); // 16-10-2023
// $endDateFix = new DateTime($endDate); // 07-11-2023
// $endDate = new DateTime($endDate); // 07-11-2023
// $startDate = new DateTime($startDate); // 07-11-2023
// // dd($intervalOriginal);
// if((int)$startDate->format('m') < (int)$currentPeriode->format('m') && (int)$startDate->format('y') == (int)$currentPeriode->format('y')) {
// $interval = $currentDate->diff($currentPeriodeDate);
// // dd($interval->days);
// // dump($endDate);
// if((int)$endDate->format('m') < (int)$currentPeriode->format('m') && (int)$endDate->format('y') == (int)$currentPeriode->format('y')) {
// $interval = $currentDate->diff($endDate);
// $endDate = clone $currentPeriode;
// }
// $currentDate = clone $currentPeriode;
// // dd($currentDate, $endDate);
// $endDate->modify('+'.$interval->days.' day');
// }
// // dd($currentDate, $endDate);
// $dateRanges = [];
// $leftDays = 0;
// while ($currentDate <= $endDate) {
// $monthEndDate = clone $currentDate; // 16-10-2023
// $monthEndDateFix = clone $currentDateFix; // 16-10-2023
// $monthEndDate->modify('last day of this month'); // 31-10-2023
// $monthEndDateFix = clone $currentDateFix; // 16-10-2023
// if ($monthEndDate > $endDate) {
// $monthEndDate = $endDate;
// }
// $daysInMonth = 0;
// $daysInMonthFix = 0;
// $tmpDate = clone $currentDate;
// while ($tmpDate <= $monthEndDate) {
// if($sunday and $sunday == 1) {
// $daysInMonth++;
// $tmpDate->modify('+1 day');
// } else {
// if ($tmpDate->format('N') != 7) { // Exclude Sundays
// $daysInMonth++;
// }
// $tmpDate->modify('+1 day');
// }
// $daysInMonthFix++;
// }
// $periode = $this->calculPaieService->getPeriode($currentDate->format('mY'));
// $period_my = $currentDate->format('mY');
// // $periode = $this->calculPaieService->getPeriode($currentDate->format('mY'));
// // $period_my = $currentDate->format('mY');
// if(($currentDate->format('m') == '02' && ((int)$startDate->format('m') < (int)$currentDate->format('m') or $currentDate->format('j') == '1') && (int)$currentDate->format('m') < (int)$endDate->format('m'))) {
// if($daysInMonth < 26 or $daysInMonth > 26) {
// $daysInMonth = 26;
// }
// }
// elseif ($daysInMonth > 26) {
// $daysInMonth = 26;
// }
// // dd($intervalOriginal);
// $dateRanges[] = [
// 'start' => $currentDateFix->format('Y-m-d'),
// 'end' => $monthEndDateFix->modify('+' . ($daysInMonthFix - 1). ' day')->format('Y-m-d'),
// 'days' => $daysInMonth,
// 'period' => $periode->getid(),
// 'period_my' => $period_my,
// ];
// $currentDate->modify('first day of next month');
// $currentDateFix->modify('first day of next month');
// $date->modify('+1 month');
// }
// // die;
// return $dateRanges;
// }
public function generateDateRange($startDate, $endDate, $sunday = null) {
$checkStartDate = new DateTime($startDate);
$checkCurrentDate = new DateTime();
$checkStartDate->modify('first day of this month');
$checkCurrentDate->modify('first day of this month');
$checkStartDate = $checkStartDate->format('Y-m-d');
$checkCurrentDate = $checkCurrentDate->format('Y-m-d');
$date = new DateTime();
$currentDate = new DateTime($startDate); // 16-10-2023
$endDate = new DateTime($endDate); // 07-11-2023
$startDate = new DateTime($startDate);
$dateRanges = [];
$daysInMonthTotal = 0;
$periode = $this->calculPaieService->getPeriode($date->format('mY'));
$period_my = null;
while ($currentDate <= $endDate) {
$realDate = clone $currentDate; // 16-10-2023
$monthEndDate = clone $currentDate; // 16-10-2023
$monthEndDate->modify('last day of this month'); // 31-10-2023
if ($monthEndDate > $endDate) {
$monthEndDate = $endDate;
}
$daysInMonth = 0;
$tmpDate = clone $currentDate;
while ($tmpDate <= $monthEndDate) {
if($sunday and $sunday == 1) {
$daysInMonth++;
$tmpDate->modify('+1 day');
} else {
if ($tmpDate->format('N') != 7) { // Exclude Sundays
$daysInMonth++;
}
$tmpDate->modify('+1 day');
}
}
// $periode = $this->calculPaieService->getPeriode($currentDate->format('mY'));
// $period_my = $currentDate->format('mY');
if(($currentDate->format('m') == '02' && ((int)$startDate->format('m') < (int)$currentDate->format('m') or $currentDate->format('j') == '1') && (int)$currentDate->format('m') < (int)$endDate->format('m'))) {
if($daysInMonth < 26 or $daysInMonth > 26) {
$daysInMonth = 26;
}
}
elseif ($daysInMonth > 26) {
$daysInMonth = 26;
}
// dump($daysInMonth);
// dd($checkCurrentDate > $checkStartDate);
$break = 0;
if($checkCurrentDate > $checkStartDate) {
if(($daysInMonthTotal + $daysInMonth) > 26) {
if($daysInMonth > $daysInMonthTotal) {
if($daysInMonth < 26) {
$rest = ($daysInMonth - $daysInMonthTotal )+ (26 - $daysInMonth);
$daysInMonth = $daysInMonth - $rest;
} else {
$rest = $daysInMonth - $daysInMonthTotal;
$daysInMonth = $daysInMonth - $rest;
}
} else {
// dd($daysInMonth, $daysInMonthTotal);
$rest = 26 - $daysInMonthTotal;
if($rest == 0) {
$break = 1;
}
$daysInMonth = $daysInMonth - $rest;
}
$daysInMonthTotal = 0;
// dd($realDate, $rest);
if($break == 0) {
$dateRanges[] = [
'start' => $realDate->format('Y-m-d'),
'end' => ($sunday and $sunday == 1) ? $this->addDays($realDate, $rest - 1 , 1)->format('Y-m-d') : $this->addDays($realDate, $rest - 1)->format('Y-m-d'),
'days' => $rest,
'period' => $periode->getid(),
'period_my' => $period_my,
];
$realDate->modify('+1 day');
}
$date->modify('+1 month');
// dd($realDateEnd);
// $startRealDate->modify('+1 day');
}
$daysInMonthTotal += $daysInMonth;
}
// dd($daysInMonthTotal);
$periode = $this->calculPaieService->getPeriode($date->format('mY'));
$period_my = $date->format('mY');
$dateRanges[] = [
'start' => $realDate->format('Y-m-d'),
'end' => $monthEndDate->format('Y-m-d'),
'days' => $daysInMonth,
'period' => $periode->getid(),
'period_my' => $period_my,
];
// $realDate->modify('+1 day');
// dd($dateRanges);
$currentDate->modify('first day of next month');
if($checkCurrentDate <= $checkStartDate) {
$date->modify('+1 month');
}
}
// die;
// $mergedData = [];
// foreach ($dateRanges as $item) {
// $period_my = $item["period_my"];
// if (!isset($mergedData[$period_my])) {
// // If the period_my is not already in the merged array, add it
// $mergedData[$period_my] = $item;
// } else {
// // If the period_my is already in the merged array, update the "end" and "days" values
// $mergedData[$period_my]["end"] = $item["end"];
// $mergedData[$period_my]["days"] += $item["days"];
// }
// }
// $mergedData = array_values($mergedData);
// dd($mergedData);
return $dateRanges;
}
public function period_exist($emp_id,$em) {
$query = "SELECT SUM(parret_travail_lg.nombre_jour) as nbr,periode.id,periode.code as code
FROM `parret_travail_lg`
INNER JOIN parret_travail ON parret_travail_lg.arret_travail_id=parret_travail.id
INNER JOIN lcontract ON lcontract.id=parret_travail.contract_id
INNER JOIN periode ON periode.id=parret_travail_lg.periode_id
where lcontract.id=$emp_id and parret_travail.active = 1 and parret_travail_lg.active = 1 group BY periode.id";
$stmt = $em->getConnection()->prepare($query);
$newstmt = $stmt->executeQuery();
$result = $newstmt->fetchAll();
// dd($result);
return $result;
}
// public function generateDateRange($startDate, $endDate) {
// $currentDate = new DateTime($startDate);
// $endDate = new DateTime($endDate);
// $dateRanges = [];
// while ($currentDate <= $endDate) {
// $monthEndDate = clone $currentDate;
// $monthEndDate->modify('last day of this month');
// if ($monthEndDate > $endDate) {
// $monthEndDate = $endDate;
// }
// // Calculate the number of days excluding Sundays
// $daysInMonth = 0;
// while ($currentDate <= $monthEndDate) {
// if ($currentDate->format('N') != 7) { // Exclude Sunday (7)
// $daysInMonth++;
// }
// $currentDate->modify('+1 day');
// }
// // Check if the days in the month exceed 26, if so, move to the next period
// if ($daysInMonth > 26) {
// // You need to determine how many days to move to the next period
// $daysToMove = $daysInMonth - 26;
// // Adjust the $endDate accordingly
// $endDate->modify('+' . $daysToMove . ' days');
// }
// // Get the period for the current month
// $periode = $this->calculPaieService->getPeriode($currentDate->format('mY'));
// $dateRanges[] = [
// 'start' => $currentDate->format('Y-m-d'),
// 'end' => $monthEndDate->format('Y-m-d'),
// 'days' => $daysInMonth,
// 'period' => $periode->getid(),
// ];
// // Move to the next month
// $currentDate->modify('first day of next month');
// }
// return $dateRanges;
// }
// }
#[Route('/arret_canvas', name: 'app_mouvement_arret_mass_canvas', options:['expose' => true])]
public function epreuveCanvas() {
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'ID_Motif');
$sheet->setCellValue('B1', 'Id_Contract');
$sheet->setCellValue('C1', 'Date arret');
$sheet->setCellValue('D1', 'Fin Previsionnelle');
$sheet->setCellValue('E1', 'Reprise de travail ');
$writer = new Xlsx($spreadsheet);
$fileName = 'canvas_arret.xlsx';
$temp_file = tempnam(sys_get_temp_dir(), $fileName);
$writer->save($temp_file);
return $this->file($temp_file, $fileName, ResponseHeaderBag::DISPOSITION_INLINE);
}
#[Route('/app_mouvement_arret_mass_canvas_retard', name: 'app_mouvement_arret_mass_canvas_retard', options:['expose' => true])]
public function app_mouvement_arret_mass_canvas_retard() {
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'Id_Contract');
$sheet->setCellValue('B1', 'Nombre de jours');
$writer = new Xlsx($spreadsheet);
$fileName = 'canvas_retard.xlsx';
$temp_file = tempnam(sys_get_temp_dir(), $fileName);
$writer->save($temp_file);
return $this->file($temp_file, $fileName, ResponseHeaderBag::DISPOSITION_INLINE);
}
#[Route('/arret_canvas_motif', name: 'app_mouvement_arret_mass_canvas_motif', options:['expose' => true])]
public function epreuveCanvas_motif() {
$count = 0;
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'ID_Motif');
$sheet->setCellValue('B1', 'Designation');
$i=2;
$pmotifs = $this->em->getRepository(PMotif::class)->findBy(['active' => 1]);
foreach ($pmotifs as $motif) {
$sheet->setCellValue('A'.$i, $motif->getId());
$sheet->setCellValue('B'.$i, $motif->getDesignation());
$i++;
$count++;
}
$writer = new Xlsx($spreadsheet);
$fileName = 'canvas_Motif.xlsx';
$temp_file = tempnam(sys_get_temp_dir(), $fileName);
$writer->save($temp_file);
return $this->file($temp_file, $fileName, ResponseHeaderBag::DISPOSITION_INLINE);
}
#[Route('/upload_arret', name: 'app_mouvement_arret_mass_upload', options: ['expose' => true])]
public function app_mouvement_arret_mass_upload(Request $request ): Response
{
// $dossier = $this->em->getRepository(PDossier::class)->find($request->get('dossier'));
$dossier = $request->getSession()->get('dossier');
$error = 0;
$prd = '';
$reader = new Reader();
$spreadsheet = $reader->load($request->files->get('file'));
$reader->setReadDataOnly(true);
$reader->setReadEmptyCells(false);
$period = $request->get('period');
$worksheet = $spreadsheet->getActiveSheet();
$spreadSheetArys = $worksheet->toArray();
unset($spreadSheetArys[0]);
$array = [];
// dd($spreadSheetArys);
$count = 0;
foreach ($spreadSheetArys as $key => $sheet) {
$startDate = new \DateTime($sheet[2]);
$startDate = $startDate->format('Y-m-d');
// $parsedDate = strtotime($startDate);
// if ($parsedDate !== false) {
// }
$endDate = new \DateTime($sheet[3]);
$endDate = $endDate->format('Y-m-d');
// $parsedDate = strtotime($endDate);
// if ($parsedDate !== false) {
// }
// if($sheet[1] == 1910) {
// dd($startDate, $endDate);
// }
$dateRanges = $this->generateDateRange($startDate, $endDate, $sheet[5]);
// dd($dateRanges);
$period_exist = $this->period_exist($sheet[1], $this->em);
if ($period_exist) {
foreach ($period_exist as $period) {
foreach ($dateRanges as $date) {
if($date['period'] == $period['id']){
$days = $date['days'] + $period['nbr'];
if ($days > 26) {
$error = 1;
$emp = $sheet[1];
$prd = $period['code'];
}
}
}
}
}
$motif = $this->em->getRepository(PMotif::class)->find($sheet[0]);
if (!$motif) {
$error = 2;
}
}
if($error == 0){
// dd($spreadSheetArys);
foreach ($spreadSheetArys as $key => $sheet) {
$newArray = [];
$newArray = new ParameterBag([
"id_emp_arret" => $sheet[1], // Combine elements 0 and 1
"motif_id" => $sheet[0], // Element 2
"datedebut" => date('Y-m-d', strtotime($sheet[2])), // Format date for element 3
"datefin" => date('Y-m-d', strtotime($sheet[3])), // Format date for element 4
"datereprise" => date('Y-m-d', strtotime($sheet[4])),
]);
$startDate = $sheet[2];
$endDate = $sheet[3];
$dateRanges = $this->generateDateRange($startDate, $endDate, $sheet[5]);
$period_exist = $this->period_exist($newArray->get('id_emp_arret'), $this->em);
$arret = $this->em->getRepository(PArretTravail::class)->add_Arret($newArray, $this->getUser());
// if(count($dateRanges) == 0) {
// dd($dateRanges, $sheet[1], date('Y-m-d', strtotime($sheet[2])), date('Y-m-d', strtotime($sheet[3])));
// }
$arretlg = $this->em->getRepository(PArretTravailLg::class)->add_Arret_lg($newArray,$dateRanges,$arret);
}
$this->em->flush();
}
else if($error == 2){
return new JsonResponse('Motif ID '. $sheet[0] .' n\'existe pas.', 500);
}
else{
// dd($employe->getcode());
return new JsonResponse('L employe avec le matricule'.$emp.' a plusieurs de 26 jrs periode '.$prd, 500);
}
return new JsonResponse('ok');
}
#[Route('/app_mouvement_arret_mass_upload_retard', name: 'app_mouvement_arret_mass_upload_retard', options: ['expose' => true])]
public function app_mouvement_arret_mass_upload_retard(Request $request ): Response
{
$reader = new Reader();
$spreadsheet = $reader->load($request->files->get('file'));
$periode = $request->get('period');
$date = new \DateTime($periode);
$periode = $this->calculPaieService->getPeriode($date->format('mY'));
$worksheet = $spreadsheet->getActiveSheet();
$spreadSheetArys = $worksheet->toArray();
unset($spreadSheetArys[0]);
// dd($spreadSheetArys);
$motif = $this->em->getRepository(PMotif::class)->find(13);
foreach ($spreadSheetArys as $key => $sheet) {
$contract = $this->em->getRepository(LContract::class)->findOneBy(['id' => $sheet[0], 'active' => true]);
if(!$contract) {
return new JsonResponse('Contrat introuvable à la ligne '.($key + 1).' !', 500);
}
$arretTravail = new PArretTravail();
$arretTravail->setContract($contract);
$arretTravail->setMotif($motif);
$this->em->persist($arretTravail);
$arretTravailLg = new PArretTravailLg();
$arretTravailLg->setArretTravail($arretTravail);
$arretTravailLg->setPeriode($periode);
$arretTravailLg->setNombreJour($sheet[1]);
$this->em->persist($arretTravailLg);
}
$this->em->flush();
return new JsonResponse('Bien enregistrer');
}
#[Route('/parret_aff', name: 'app_parret_aff', options: ['expose' => true])]
public function app_parret_aff(Request $request): Response
{
$draw = $request->query->get('draw');
$start = $request->query->get('start') ?? 0;
$length = $request->query->get('length') ?? 10;
$search = $request->query->all('search')["value"];
$orderColumnIndex = $request->query->all('order')[0]['column'];
$orderColumn = $request->query->all("columns")[$orderColumnIndex]['name'];
$orderDir = $request->query->all('order')[0]['dir'] ?? 'asc';
$dossier = $request->getSession()->get('dossier');
// dd($dossier);
$queryBuilder = $this->em->createQueryBuilder()
->select('a.id as arret_id,p.id as employe_id,p.nom,p.prenom,
p.code as matricule,m.designation as motif,a.DateDebut as date_debut,a.dateFin as date_fin,a.dateReprise as date_rep')
->from(PArretTravail::class, 'a')
->innerJoin('a.contract', 'c')
->innerJoin('c.employe', 'p')
->innerJoin('a.motif', 'm')
->Where('a.active = 1')
->andWhere('c.dossier = :dossier')
->setParameter('dossier', $dossier);
if (!empty($search)) {
$queryBuilder->andWhere('(a.id LIKE :search OR p.id LIKE :search OR m.designation LIKE :search OR p.nom LIKE :search OR p.prenom LIKE :search
OR a.DateDebut LIKE :search OR a.dateFin LIKE :search OR a.dateReprise LIKE :search OR p.code LIKE :search)')
->setParameter('search', "%$search%");
}
if (!empty($orderColumn)) {
$queryBuilder->orderBy("$orderColumn", $orderDir);
}
$filteredRecords = count($queryBuilder->getQuery()->getResult());
// Paginate results
$queryBuilder->setFirstResult($start)
->setMaxResults($length);
$results = $queryBuilder->getQuery()->getResult();
// dd($results);
// dd($results);
$totalRecords = $this->em->createQueryBuilder()
->select('COUNT(a.id)')
->from(PArretTravail::class, 'a')
->innerJoin('a.contract', 'c')
->innerJoin('c.employe', 'p')
->innerJoin('a.motif', 'm')
->Where('a.active = 1')
->andWhere('c.dossier = :dossier')
->setParameter('dossier', $dossier)
->getQuery()
->getSingleScalarResult();
return new JsonResponse([
'draw' => $draw,
'recordsTotal' => $totalRecords,
'recordsFiltered' => $filteredRecords,
'data' => $results,
]);
}
#[Route('/parret_aff_details/{code}', name: 'app_parret_aff_details', options: ['expose' => true])]
public function app_parret_aff_details($code): Response
{
// dd($code)
$arret = $this->em->getRepository(PArretTravail:: class)->find(['id' => $code]);
// dd($arret->getActiveArretTravailLgs());
$html = $this->renderView('mouvement/Arret/includes/arret_detail.html.twig', ['arret' => $arret, 'arretLgs' => $arret->getArretTravailLgs()]);
// $html = $this->renderView('mouvement/Arret/includes/arret_detail.html.twig', ['arret' => $arret, 'arretLgs' => $arret->getActiveArretTravailLgs()]);
return new JsonResponse($html);
}
#[Route('/parret_lg_desactiver/{code}', name: 'app_parret_lg_desactiver', options: ['expose' => true])]
public function app_parret_lg_desactiver($code): Response
{
// dd($code)
$arret = $this->em->getRepository(PArretTravailLg:: class)->desactiver($code, $this->getUser());
// dd($arret->getActiveArretTravailLgs());
// $html = $this->renderView('mouvement/Arret/includes/arret_detail.html.twig', ['arret' => $arret, 'arretLgs' => $arret->getActiveArretTravailLgs()]);
return new JsonResponse($arret);
}
function addDays($start_date, $days_to_add, $sunday = null) {
$current_date = $start_date;
// $interval = new \DateInterval('P1D'); // P1D represents a period of 1 day
// dd($sunday);
// $i = 1;
while ($days_to_add > 0) {
if(is_null($sunday)) {
if( $current_date->format('N') != 7) {
$days_to_add--;
}
} else {
$days_to_add--;
}
// if ($current_date->format('N') != 7 && is_null($sunday)) { // Check if it's not a Sunday (Monday is 1, Sunday is 7)
// $days_to_add--;
// }
// dd($days_to_add);
$current_date->modify('+1 day');
if ($current_date->format('N') == 7 && is_null($sunday) && $days_to_add == 0) {
$current_date->modify('+1 day');
}
}
// dd($i, $originalDays);
return $current_date;
}
}