<?php
namespace App\Controller;
use App\Entity\Family;
use App\Entity\FamilyMember;
use App\Entity\Rechnungen;
use App\Entity\Gesundheit;
use App\Entity\Bildung;
use App\Entity\Offices;
use App\Entity\Contact;
use App\Form\FamilyType;
use App\Form\FamilyMemberType;
use App\Form\OfficesType;
use App\Repository\FamilyRepository;
use App\Repository\FamilyMemberRepository;
use App\Repository\JugendamtRepository;
use App\Repository\BildungRepository;
use App\Repository\LeistungstragerRepository;
use App\Repository\GesundheitRepository;
use App\Repository\CalendarRepository;
use App\Repository\RechnungenRepository;
use App\Repository\SituationsberichteRepository;
use App\Repository\ZieleRepository;
use App\Repository\OfficesRepository;
use App\Repository\ContactRepository;
use App\Repository\FileTypeRepository;
use App\Repository\UserRepository;
use DateTime;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
use Symfony\Component\String\Slugger\SluggerInterface;
use Symfony\Component\Security\Core\Security;
use Dompdf\Dompdf;
use Dompdf\Options;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;
use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\Filesystem\Filesystem;
/**
* @Route("/family")
*/
class FamilyController extends AbstractController
{
private EntityManagerInterface $em;
private $tokenManager;
private $security;
public function __construct(CsrfTokenManagerInterface $tokenManager, EntityManagerInterface $em, Security $Security)
{
$this->tokenManager = $tokenManager;
$this->em = $em;
$this->security = $Security;
}
/**
* @Route("/searchGlob", name="searchGlob", methods={"POST"})
*/
public function searchGlob(FamilyRepository $familyRepository): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
return $this->render('family/search.html.twig');
}
/**
* @Route("/serverSearch", name="serverSearch", methods={"POST","GET"} , options = {"expose"= true })
*/
public function serverSearch(Request $request, EntityManagerInterface $entityManager, FamilyRepository $FamilyRepository): Response
{
$search_glob = str_replace(' ', '', $request->get('search_glob'));
$families = $entityManager->createQuery(
'SELECT p
FROM App\Entity\Family p
WHERE 1=1 AND ( p.date_of_birth LIKE \'%' . date('Y-m-d', strtotime(str_replace('/', '-', $search_glob))) . '%\' OR concat(p.firstname,p.lastname) LIKE \'%' . $search_glob . '%\' OR concat(p.lastname,p.firstname) LIKE \'%' . $search_glob . '%\' )
'
)
->getResult();
$results = $entityManager->createQuery(
'SELECT p
FROM App\Entity\FamilyMember p
JOIN p.family f
WHERE 1=1 AND ( p.date_of_birth LIKE \'%' . date('Y-m-d', strtotime(str_replace('/', '-', $search_glob))) . '%\' OR concat(p.firstname,p.lastname) LIKE \'%' . $search_glob . '%\' OR concat(p.lastname,p.firstname) LIKE \'%' . $search_glob . '%\' OR f.date_of_birth LIKE \'%' . date('Y-m-d', strtotime(str_replace('/', '-', $search_glob))) . '%\' OR concat(f.firstname,f.lastname) LIKE \'%' . $search_glob . '%\' OR concat(f.lastname,f.firstname) LIKE \'%' . $search_glob . '%\' ) GROUP BY f.id
'
)
->getResult();
$output = [];
foreach ($results as $result) {
$output[] = [
'name' => $result->getFamily()->getFirstname() . ' ' . $result->getFamily()->getLastname(),
'id' => $result->getFamily()->getId(),
];
}
$JSON = json_encode($output);
$JSON = '{"draw": ' . $request->get('draw') . ',"recordsTotal":' . count($output) . ',"recordsFiltered":' . count($output) . ',"data":' . $JSON . '}';
$response = new Response($JSON, 200, ['Content-Type' => 'application/json']);
return $response;
}
/**
* @Route("/getFamilyInfos/{id}/{token}", name="getFamilyInfos", methods={"GET"} , options = {"expose" = true } )
*/
public function getFamilyInfos(Request $request, EntityManagerInterface $entityManager, FamilyRepository $FamilyRepository): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$family = null;
if ($this->isCsrfTokenValid('getFamily3pTLcc5m2MQ4', $request->get('token'))) {
$family = $FamilyRepository->find($request->get('id'));
}
$output = [
'stadt' => 'Römerberg - ' . $family->getStadt() . ' - Römerberg',
'km' => $family->getKm()
];
$JSON = json_encode($output);
$response = new Response($JSON, 200, ['Content-Type' => 'application/json']);
return $response;
}
/**
* @Route("/", name="app_family_index", methods={"GET"})
* @Route("/uma/{uma}", name="app_uma_index", methods={"GET"})
* @Route("/clearing/{clearing}", name="app_clearing_index", methods={"GET"})
*
*/
public function index(FamilyRepository $familyRepository): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
return $this->render('family/index.html.twig', [
'families' => $familyRepository->findAll(),
'status' => 1,
'particular' => 0,
]);
}
/**
* @Route("/archive_index", name="app_family_archive_index", methods={"GET"})
*/
public function archive(FamilyRepository $familyRepository): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
return $this->render('family/index.html.twig', [
'families' => $familyRepository->findAll(),
'status' => 0,
]);
}
/**
* @Route("/sonstige_falle_index", name="app_family_sonstige_falle_index", methods={"GET"})
*/
public function sonstige_falle(FamilyRepository $familyRepository): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
return $this->render('family/index.html.twig', [
'families' => $familyRepository->findAll(),
'particular' => 1,
]);
}
/**
* @Route("/office_new", name="app_office_new", methods={"GET", "POST"} , options={"expose"=true})
*/
public function office_new(Request $request, SluggerInterface $slugger, FamilyRepository $familyRepository, OfficesRepository $officesRepository, ValidatorInterface $validator): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$error = null;
$offices = new Offices();
$form = $this->createForm(OfficesType::class, $offices);
$form->handleRequest($request);
if ($form->isSubmitted() && !$form->isValid()) {
$errors = $validator->validate($familyMember);
if (count($errors) > 0) {
$error = $errors[0]['constraint']['message'];
} else {
$error = 'Technisches Problem .';
}
return new Response($error);
} else if ($form->isSubmitted() && $form->isValid()) {
$family = $familyRepository->find($request->get('family_id'));
$offices->setFamily($family);
$officesRepository->add($offices, true);
return new Response('OK');
}
return $this->renderForm('family/office_new.html.twig', [
'offices' => $offices,
'form' => $form,
'error' => $error,
]);
}
/**
* @Route("/member_new", name="app_family_member_new", methods={"GET", "POST"} , options={"expose"=true})
*/
public function member_new(Request $request, SluggerInterface $slugger, FamilyRepository $familyRepository, FamilyMemberRepository $familyMemberRepository, ValidatorInterface $validator): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$error = null;
$familyMember = new FamilyMember();
$form = $this->createForm(FamilyMemberType::class, $familyMember);
$form->handleRequest($request);
if ($form->isSubmitted() && !$form->isValid()) {
$errors = $validator->validate($familyMember);
if (count($errors) > 0) {
$error = $errors[0]['constraint']['message'];
} else {
$error = 'Technisches Problem .';
}
return new Response($error);
} else if ($form->isSubmitted() && $form->isValid()) {
//dd($familyMember) ;
/** @var UploadedFile $brochureFile */
$photo = $form->get('photo')->getData();
if ($photo) {
$originalFilename = pathinfo($photo->getClientOriginalName(), PATHINFO_FILENAME);
// this is needed to safely include the file name as part of the URL
$safeFilename = $slugger->slug($originalFilename);
$newFilename = $safeFilename . '-' . uniqid() . '.' . $photo->guessExtension();
try {
$photo->move(
$this->getParameter('photos_family'),
$newFilename
);
} catch (FileException $e) {
// ... handle exception if something happens during file upload
}
$familyMember->setPhoto($newFilename);
}
$family = $familyRepository->find($request->get('family_id'));
$familyMember->setFamily($family);
//$familyMember->setGesundheit()
$familyMemberRepository->add($familyMember, true);
return new Response('OK');
}
return $this->renderForm('family/member_new.html.twig', [
'family' => $familyMember,
'form' => $form,
'error' => $error,
]);
}
/**
* @Route("/new_sonstige_fall/{particular}", name="app_family_sonstige_fall_new", methods={"GET", "POST"})
* @Route("/new", name="app_family_new", methods={"GET", "POST"})
* @Route("/new/uma/{uma}", name="app_family_uma_new", methods={"GET", "POST"})
* @Route("/new/clearing/{clearing}", name="app_family_clearing_new", methods={"GET", "POST"})
*
*/
public function new(Request $request, SluggerInterface $slugger, FamilyRepository $familyRepository, ValidatorInterface $validator): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$error = null;
$family = new Family();
$form = $this->createForm(FamilyType::class, $family);
$form->handleRequest($request);
if ($form->isSubmitted() && !$form->isValid()) {
$errors = $validator->validate($family);
if (count($errors) > 0) {
$error = $errors[0];
} else {
$error['constraint']['message'] = 'Technisches Problem .';
}
} else if ($form->isSubmitted() && $form->isValid()) {
/** @var UploadedFile $brochureFile */
$photo = $form->get('photo')->getData();
if ($photo) {
$originalFilename = pathinfo($photo->getClientOriginalName(), PATHINFO_FILENAME);
// this is needed to safely include the file name as part of the URL
$safeFilename = $slugger->slug($originalFilename);
$newFilename = $safeFilename . '-' . uniqid() . '.' . $photo->guessExtension();
try {
$photo->move(
$this->getParameter('photos_family'),
$newFilename
);
} catch (FileException $e) {
// ... handle exception if something happens during file upload
}
$family->setPhoto($newFilename);
}
if ($request->get('particular') == 'particular') {
$family->setParticular(1);
} else {
$family->setParticular(0);
}
if ($request->get('uma') == '1') {
$family->setUma(1);
} else {
$family->setUma(0);
}
if ($request->get('clearing') == '1') {
$family->setClearing(1);
} else {
$family->setClearing(0);
}
$family->setStatus(1);
$familyRepository->add($family, true);
if ($request->get('particular') == 'particular') {
return $this->redirectToRoute('app_family_sonstige_falle_index', [], Response::HTTP_SEE_OTHER);
} else if ($request->get('uma') == '1') {
return $this->redirectToRoute('app_uma_index', ['uma' => 1], Response::HTTP_SEE_OTHER);
} else if ($request->get('clearing') == '1') {
return $this->redirectToRoute('app_clearing_index', ['clearing' => 1], Response::HTTP_SEE_OTHER);
} else {
return $this->redirectToRoute('app_family_index', [], Response::HTTP_SEE_OTHER);
}
}
return $this->renderForm('family/new.html.twig', [
'family' => $family,
'form' => $form,
'error' => $error,
'particular' => $request->get('particular') ? 'particular' : '',
]);
}
/**
* @Route("/{id}/sonstige_fall_show", name="app_family_sonstige_fall_show", methods={"GET"} , options = {"expose" = true})
* @Route("/{id}/show", name="app_family_show", methods={"GET"} , options = {"expose" = true})
* @Route("/{id}/show/uma/{uma}", name="app_family_uma_show", methods={"GET"} , options = {"expose" = true})
* @Route("/{id}/show/clearing/{clearing}", name="app_family_clearing_show", methods={"GET"} , options = {"expose" = true})
*
*
*/
public function show(EntityManagerInterface $entityManager, Family $family, FileTypeRepository $fileTypeRepository, JugendamtRepository $JugendamtRepository, ZieleRepository $ZieleRepository, SituationsberichteRepository $SituationsberichteRepository, BildungRepository $BildungRepository, LeistungstragerRepository $LeistungstragerRepository, GesundheitRepository $GesundheitRepository, RechnungenRepository $RechnungenRepository): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$jugendamt = $JugendamtRepository->findOneBy(['family' => $family]);
$bildung = $BildungRepository->findOneBy(['family' => $family]);
$leistungstrager = $LeistungstragerRepository->findOneBy(['family' => $family]);
$gesundheit = $GesundheitRepository->findOneBy(['family' => $family]);
$Rechnungen = $RechnungenRepository->findOneBy(['family' => $family->getId()], ['id' => 'DESC']);
$situationsberichte = $SituationsberichteRepository->findOneBy(['family' => $family, 'status' => 0], ['id' => 'desc']);
$ziele = $ZieleRepository->findOneBy(['family' => $family]);
if (!$this->security->isGranted('ROLE_ADMIN')) {
$fileTypes = $fileTypeRepository->findAll() ;
} else {
$fileTypes = $entityManager->createQuery(
'SELECT p
FROM App\Entity\FileType p
WHERE p.id != 8
'
)
->getResult();
}
return $this->render('family/show.html.twig', [
'family' => $family,
'fileTypes' => $fileTypes,
'id' => sha1($family->getId()),
'jugendamt' => $jugendamt,
'bildung' => $bildung,
'leistungstrager' => $leistungstrager,
'gesundheit' => $gesundheit,
'situationsberichte' => $situationsberichte,
'ziele' => $ziele,
'file' => $Rechnungen != null ? '/uploads/docs_family/' . sha1($family->getId()) . '/Rechnung-' . $Rechnungen->getNum() . '.pdf' : ''
]);
}
/**
* @Route("/edit_sonstige_fall/{id}", name="app_family_sonstige_fall_edit", methods={"GET", "POST"}, options = {"expose"=true})
* @Route("/{id}/edit", name="app_family_edit", methods={"GET", "POST"} , options = {"expose"=true})
*/
public function edit(Request $request, SluggerInterface $slugger, Family $family, JugendamtRepository $JugendamtRepository, BildungRepository $BildungRepository, LeistungstragerRepository $LeistungstragerRepository, GesundheitRepository $GesundheitRepository, FamilyRepository $familyRepository, ValidatorInterface $validator): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$user = $this->security->getToken()->getUser();
if ((!$this->security->isGranted('ROLE_ADMIN')) && (!$this->security->isGranted('ROLE_SUPERVISOR'))) {
if (!$user->getFamilies()->contains($family)) {
// Si la famille n'appartient pas à l'utilisateur, on le déconnecte
return $this->redirectToRoute('app_logout');
}
}
$form = $this->createForm(FamilyType::class, $family);
$form->handleRequest($request);
$error = null;
if ($form->isSubmitted() && !$form->isValid()) {
$errors = $validator->validate($family);
if (count($errors) > 0) {
$error = $errors[0];
} else {
$error['constraint']['message'] = 'Technisches Problem .';
}
} else if ($form->isSubmitted() && $form->isValid()) {
/** @var UploadedFile $brochureFile */
$photo = $form->get('photo')->getData();
if ($photo != null) {
$originalFilename = pathinfo($photo->getClientOriginalName(), PATHINFO_FILENAME);
// this is needed to safely include the file name as part of the URL
$safeFilename = $slugger->slug($originalFilename);
$newFilename = $safeFilename . '-' . uniqid() . '.' . $photo->guessExtension();
try {
$photo->move(
$this->getParameter('photos_family'),
$newFilename
);
$family->setPhoto($newFilename);
} catch (FileException $e) {
// ... handle exception if something happens during file upload
}
}
$familyRepository->add($family, true);
// return $this->redirectToRoute('app_family_index', [], Response::HTTP_SEE_OTHER);
}
$Jugendamt = $JugendamtRepository->findOneBy(['family' => $family]);
$bildung = $BildungRepository->findOneBy(['family' => $family]);
$leistungstrager = $LeistungstragerRepository->findOneBy(['family' => $family]);
$gesundheit = $GesundheitRepository->findOneBy(['family' => $family]);
return $this->renderForm('family/edit.html.twig', [
'family' => $family,
'form' => $form,
'error' => $error,
'jugendamt' => $Jugendamt,
'bildung' => $bildung,
'leistungstrager' => $leistungstrager,
'gesundheit' => $gesundheit,
]);
}
/**
* @Route("/{id}", name="app_family_delete", methods={"POST"} , options = {"expose" = true})
*/
public function delete(Request $request, Family $family, FamilyRepository $familyRepository): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$user = $this->security->getToken()->getUser();
if ((!$this->security->isGranted('ROLE_ADMIN')) && (!$this->security->isGranted('ROLE_SUPERVISOR'))) {
if (!$user->getFamilies()->contains($family)) {
// Si la famille n'appartient pas à l'utilisateur, on le déconnecte
return $this->redirectToRoute('app_logout');
}
}
if ($this->isCsrfTokenValid('delete' . $family->getId(), $request->request->get('_token'))) {
$familyRepository->remove($family, true);
}
return new Response('OK');
}
/**
* @Route("/convert/uma/{id}", name="app_family_convert_clearing", methods={"POST"} , options = {"expose" = true})
*/
public function convertUmaToClearing(Request $request, Family $family, FamilyRepository $familyRepository): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$user = $this->security->getToken()->getUser();
if ((!$this->security->isGranted('ROLE_ADMIN')) && (!$this->security->isGranted('ROLE_SUPERVISOR'))) {
if (!$user->getFamilies()->contains($family)) {
// Si la famille n'appartient pas à l'utilisateur, on le déconnecte
return $this->redirectToRoute('app_logout');
}
}
$family->setUma(0);
$family->setClearing(1);
$familyRepository->add($family, true);
return new Response('OK');
}
/**
* @Route("/sonstige_fall_recup/{id}", name="app_family_sonstige_fall_recup", methods={"POST"} , options = {"expose" = true})
*/
public function sonstige_fall_recup(Request $request, Family $family, FamilyRepository $familyRepository): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$user = $this->security->getToken()->getUser();
if ((!$this->security->isGranted('ROLE_ADMIN')) && (!$this->security->isGranted('ROLE_SUPERVISOR'))) {
if (!$user->getFamilies()->contains($family)) {
// Si la famille n'appartient pas à l'utilisateur, on le déconnecte
return $this->redirectToRoute('app_logout');
}
}
if ($this->isCsrfTokenValid('particular' . $family->getId(), $request->request->get('_tokenParticular'))) {
$family->setParticular($request->get('particular'));
$familyRepository->add($family, true);
}
return new Response('OK');
}
/**
* @Route("/archive/{id}", name="app_family_archive", methods={"POST"} , options = {"expose" = true})
*/
public function confirm_archive(Request $request, Family $family, FamilyRepository $familyRepository): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$user = $this->security->getToken()->getUser();
if ((!$this->security->isGranted('ROLE_ADMIN')) && (!$this->security->isGranted('ROLE_SUPERVISOR'))) {
if (!$user->getFamilies()->contains($family)) {
// Si la famille n'appartient pas à l'utilisateur, on le déconnecte
return $this->redirectToRoute('app_logout');
}
}
if ($this->isCsrfTokenValid('archive' . $family->getId(), $request->request->get('_tokenStatus'))) {
$family->setStatus($request->get('status'));
$familyRepository->add($family, true);
}
return new Response('OK');
}
/**
* @Route("/{id}/office", name="app_office_delete", methods={"POST"} , options = {"expose" = true})
*/
public function delete_office(Request $request, Offices $offices, OfficesRepository $officesRepository): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$user = $this->security->getToken()->getUser();
if ((!$this->security->isGranted('ROLE_ADMIN')) && (!$this->security->isGranted('ROLE_SUPERVISOR'))) {
if (!$user->getFamilies()->contains($family)) {
// Si la famille n'appartient pas à l'utilisateur, on le déconnecte
return $this->redirectToRoute('app_logout');
}
}
if ($this->isCsrfTokenValid('delete' . $offices->getId(), $request->request->get('_office_token'))) {
$officesRepository->remove($offices, true);
}
return new Response('OK');
}
/**
* @Route("/{id}/member", name="app_family_member_delete", methods={"POST"} , options = {"expose" = true})
*/
public function delete_member(Request $request, FamilyMember $familyMember, FamilyMemberRepository $familyMemberRepository): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$user = $this->security->getToken()->getUser();
if ((!$this->security->isGranted('ROLE_ADMIN')) && (!$this->security->isGranted('ROLE_SUPERVISOR'))) {
if (!$user->getFamilies()->contains($family)) {
// Si la famille n'appartient pas à l'utilisateur, on le déconnecte
return $this->redirectToRoute('app_logout');
}
}
if ($this->isCsrfTokenValid('delete' . $familyMember->getId(), $request->request->get('_token'))) {
$familyMemberRepository->remove($familyMember, true);
}
return new Response('OK');
}
/**
* @Route("/serverOffices", name="serverOffices", methods={"GET"} , options = {"expose" = true } )
*/
public function serverOffices(Request $request, EntityManagerInterface $entityManager): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$sql_where = '';
if (($request->get('searchByEtat') != "all") && ($request->get('searchByEtat') != "")) {
$sql_where .= ' AND p.etat = ' . $request->get('searchByEtat');
}
if (($request->get('family') != "")) {
$sql_where .= ' AND p.family = ' . $request->get('family');
}
if (($request->get('searchByEtat') != "all") && ($request->get('searchByEtat') != "")) {
$sql_where .= ' AND p.etat = ' . $request->get('searchByEtat');
}
/*if ( (!$this->security->isGranted('ROLE_ADMIN')) && (!$this->security->isGranted('ROLE_SUPERVISOR')) ) {
$sql_where .= ' AND p.user IS NULL OR p.user ='.$this->security->getToken()->getUser()->getId().' ' ;
}*/
if (($request->get('searchByStatus') != "")) {
$sql_where .= ' AND p.status = ' . $request->get('searchByStatus');
}
if (($request->get('searchByParticular') != "")) {
$sql_where .= ' AND p.particular = ' . $request->get('searchByParticular');
}
$columns = ['p.id', 'p.firstname', 'p.lastname', 'p.address', 'p.office', 'p.tel', 'p.email', 'p.id'];
$sql_search = '';
if ($request->get('search')['value'] != "") {
$sql_where_glob_arr = [];
foreach ($columns as $column) {
$sql_where_glob_arr[] = ' ' . $column . ' LIKE \'%' . $request->get('search')['value'] . '%\' ';
}
if (count($sql_where_glob_arr) > 0) {
$sql_search = ' AND ( ' . implode(' OR ', $sql_where_glob_arr) . ' ) ';
}
}
$orders = [];
for ($i = 0; $i < count($request->get('order')); $i++) {
$orders[] = $columns[$request->get('order')[$i]['column']] . ' ' . $request->get('order')[$i]['dir'];
}
if (count($orders) > 0) {
$order = " ORDER BY " . implode(' , ', $orders);
} else {
$order = "";
}
$existance = $entityManager->createQuery(
'SELECT p
FROM App\Entity\Offices p
WHERE 1=1 ' . $sql_where . ' ' . $sql_search . '
'
)
->getResult();
$I_nbResultatsTotal = count($existance);
$limit = $request->get('length');
$offset = $request->get('start');
$array_search = array();
//->setParameter('nom', '%'.$request->get('searchByNom').'%')
//p.nom LIKE :nom
$offices = $entityManager->createQuery(
'SELECT p
FROM App\Entity\Offices p
WHERE 1=1 ' . $sql_where . ' ' . $sql_search . ' ' . $order . '
'
)
->setMaxResults($limit)
->setFirstResult($offset)
->getResult();
$output = [];
foreach ($offices as $office) {
$token = $this->tokenManager->getToken('delete' . $office->getId())->getValue();
//$tokenStatus = $this->tokenManager->getToken('archive'.$family->getId())->getValue();
$output[] = [
'lastname' => $office->getLastname(),
'firstname' => $office->getFirstname(),
'id' => $office->getId(),
'address' => $office->getAddress(),
'office' => $office->getOffice(),
'tel' => $office->getTel(),
'email' => $office->getEmail(),
'token' => $token,
];
}
$JSON = json_encode($output);
$JSON = '{"draw": ' . $request->get('draw') . ',"recordsTotal":' . $I_nbResultatsTotal . ',"recordsFiltered":' . $I_nbResultatsTotal . ',"data":' . $JSON . '}';
$response = new Response($JSON, 200, ['Content-Type' => 'application/json']);
return $response;
}
/**
* @Route("/serverFamily", name="serverFamily", methods={"GET"} , options = {"expose" = true } )
*/
public function serverFamily(Request $request, EntityManagerInterface $entityManager, UserRepository $userRepository): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$user = $userRepository->find($this->security->getToken()->getUser()->getId());
$sql_where = '';
if (($request->get('searchByEtat') != "all") && ($request->get('searchByEtat') != "")) {
$sql_where .= ' AND p.etat = ' . $request->get('searchByEtat');
}
if ((!$this->security->isGranted('ROLE_ADMIN')) && (!$this->security->isGranted('ROLE_SUPERVISOR'))) {
$authorizedFamilies = $user->getFamilies();
$familieIds = [];
foreach($authorizedFamilies as $authorizedFamily){
$familieIds[] = $authorizedFamily->getId();
}
if(count($familieIds)>0) {
$sql_where .= ' AND p.id IN ('.implode(',', $familieIds).')';
} else {
$sql_where .= ' AND p.id = 0 ';
}
}
if (($request->get('searchByStatus') == '0')) {
$sql_where .= ' AND p.status = ' . $request->get('searchByStatus');
} else {
$sql_where .= ' AND p.status = 1 ';
if (($request->get('searchByParticular') != "")) {
$sql_where .= ' AND p.particular = ' . $request->get('searchByParticular');
}
if (($request->get('searchByUma') == "1")) {
$sql_where .= ' AND p.uma = 1 ';
} else {
$sql_where .= ' AND p.uma = 0 ';
}
if (($request->get('searchByClearing') == "1")) {
$sql_where .= ' AND p.clearing = 1 ';
} else {
$sql_where .= ' AND p.clearing = 0 ';
}
}
$columns = ['p.id', 'p.firstname', 'p.lastname', 'p.place_of_birth', 'p.date_of_birth', 'p.country', 'p.address', 'p.language', 'p.tel', 'p.id'];
$columnsSearch = ['p.firstname', 'p.lastname', 'p.date_of_birth'];
$sql_search = '';
if ($request->get('search')['value'] != "") {
$sql_where_glob_arr = [];
foreach ($columnsSearch as $column) {
if($column == 'p.date_of_birth'){
$date = DateTime::createFromFormat('d.m.Y', $request->get('search')['value']);
if ($date === false) {
continue;
}
$newDateString = $date->format('Y-m-d');
$sql_where_glob_arr[] = ' ' . $column . ' = \''.$newDateString.'\' ';
} else {
$sql_where_glob_arr[] = ' ' . $column . ' LIKE \'%' . $request->get('search')['value'] . '%\' ';
}
}
if (count($sql_where_glob_arr) > 0) {
$sql_search = ' AND ( ' . implode(' OR ', $sql_where_glob_arr) . ' ) ';
}
}
$orders = [];
for ($i = 0; $i < count($request->get('order')); $i++) {
$orders[] = $columns[$request->get('order')[$i]['column']] . ' ' . $request->get('order')[$i]['dir'];
}
if (count($orders) > 0) {
$order = " ORDER BY " . implode(' , ', $orders);
} else {
$order = "";
}
$existance = $entityManager->createQuery(
'SELECT p
FROM App\Entity\Family p
WHERE 1=1 ' . $sql_where . ' ' . $sql_search . '
'
)
->getResult();
$I_nbResultatsTotal = count($existance);
$limit = $request->get('length');
$offset = $request->get('start');
$array_search = array();
//->setParameter('nom', '%'.$request->get('searchByNom').'%')
//p.nom LIKE :nom
$families = $entityManager->createQuery(
'SELECT p
FROM App\Entity\Family p
WHERE 1=1 ' . $sql_where . ' ' . $sql_search . ' ' . $order . '
'
)
->setMaxResults($limit)
->setFirstResult($offset)
->getResult();
$output = [];
foreach ($families as $family) {
$token = $this->tokenManager->getToken('delete' . $family->getId())->getValue();
$tokenStatus = $this->tokenManager->getToken('archive' . $family->getId())->getValue();
$tokenParticular = $this->tokenManager->getToken('particular' . $family->getId())->getValue();
$output[] = [
'lastname' => $family->getLastname(),
'firstname' => $family->getFirstname(),
'hpg' => !is_null($family->getBerichtszeitraumDate2()) ? date_format($family->getBerichtszeitraumDate2(), 'd.m.Y') : '',
'date_of_birth' => date_format($family->getDateOfBirth(), 'd.m.Y'),
'country' => $family->getCountry(),
'id' => $family->getId(),
'address' => $family->getAddress(),
'place_of_birth' => $family->getStadt(),
'language' => $family->getLanguage(),
'tel' => $family->getTel(),
'jugendamt_hilf_beginn' => !is_null($family->getJugendamts()[0]) ? $family->getJugendamts()[0]->getHilfBeginn() : '',
'token' => $token,
'status' => $family->getStatus(),
'tokenStatus' => $tokenStatus,
'particular' => $family->getParticular(),
'tokenParticular' => $tokenParticular,
'uma' => $family->isUma() ? 1 : 0,
'clearing' => $family->isClearing() ? 1 : 0,
];
}
$JSON = json_encode($output);
$JSON = '{"draw": ' . $request->get('draw') . ',"recordsTotal":' . $I_nbResultatsTotal . ',"recordsFiltered":' . $I_nbResultatsTotal . ',"data":' . $JSON . '}';
$response = new Response($JSON, 200, ['Content-Type' => 'application/json']);
return $response;
}
/**
* @Route("/serverFamilyMembers", name="serverFamilyMembers", methods={"GET"} , options = {"expose" = true } )
*/
public function serverFamilyMembers(Request $request, UserRepository $userRepository, EntityManagerInterface $entityManager): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$user = $userRepository->find($this->security->getToken()->getUser()->getId());
$sql_where = '';
if (($request->get('searchByEtat') != "all") && ($request->get('searchByEtat') != "")) {
$sql_where .= ' AND p.etat = ' . $request->get('searchByEtat');
}
if (($request->get('searchByEtat') != "all") && ($request->get('searchByEtat') != "")) {
$sql_where .= ' AND p.etat = ' . $request->get('searchByEtat');
}
if ((!$this->security->isGranted('ROLE_ADMIN')) && (!$this->security->isGranted('ROLE_SUPERVISOR'))) {
$authorizedFamilies = $user->getFamilies();
$familieIds = [];
foreach($authorizedFamilies as $authorizedFamily){
$familieIds[] = $authorizedFamily->getId();
}
if(count($familieIds)>0) {
$sql_where .= ' AND f.id IN ('.implode(',', $familieIds).')';
} else {
$sql_where .= ' AND f.id = 0 ';
}
}
$columns = ['p.id', 'p.firstname', 'p.lastname', 'p.date_of_birth', 'p.id'];
$sql_search = '';
if ($request->get('search')['value'] != "") {
$sql_where_glob_arr = [];
foreach ($columns as $column) {
$sql_where_glob_arr[] = ' ' . $column . ' LIKE \'%' . $request->get('search')['value'] . '%\' ';
}
if (count($sql_where_glob_arr) > 0) {
$sql_search = ' AND ( ' . implode(' OR ', $sql_where_glob_arr) . ' ) ';
}
}
$orders = [];
for ($i = 0; $i < count($request->get('order')); $i++) {
$orders[] = $columns[$request->get('order')[$i]['column']] . ' ' . $request->get('order')[$i]['dir'];
}
if (count($orders) > 0) {
$order = " ORDER BY " . implode(' , ', $orders);
} else {
$order = "";
}
$existance = $entityManager->createQuery(
'SELECT p
FROM App\Entity\FamilyMember p
JOIN p.family f
WHERE ( 1=1 AND f.id = ' . $request->get('family') . ' ) ' . $sql_where . ' ' . $sql_search . '
'
)
->getResult();
$I_nbResultatsTotal = count($existance);
$limit = $request->get('length');
$offset = $request->get('start');
$array_search = array();
//->setParameter('nom', '%'.$request->get('searchByNom').'%')
//p.nom LIKE :nom
$members = $entityManager->createQuery(
'SELECT p
FROM App\Entity\FamilyMember p
JOIN p.family f
WHERE ( 1=1 AND f.id = ' . $request->get('family') . ' ) ' . $sql_where . ' ' . $sql_search . ' ' . $order . '
'
)
->setMaxResults($limit)
->setFirstResult($offset)
->getResult();
$output = [];
foreach ($members as $member) {
$token = $this->tokenManager->getToken('delete' . $member->getId())->getValue();
$output[] = [
'lastname' => $member->getLastname(),
'firstname' => $member->getFirstname(),
'date_of_birth' => $member->getDateOfBirth() != "" ? date_format($member->getDateOfBirth(), 'd/m/Y') : '',
'id' => $member->getId(),
'token' => $token
];
}
$JSON = json_encode($output);
$JSON = '{"draw": ' . $request->get('draw') . ',"recordsTotal":' . $I_nbResultatsTotal . ',"recordsFiltered":' . $I_nbResultatsTotal . ',"data":' . $JSON . '}';
$response = new Response($JSON, 200, ['Content-Type' => 'application/json']);
return $response;
}
/**
* @Route("/{id}/edit_office", name="app_office_edit", methods={"GET", "POST"} , options = {"expose"=true})
*/
public function edit_office(Request $request, Offices $offices, SluggerInterface $slugger, OfficesRepository $officesRepository, ValidatorInterface $validator): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$form = $this->createForm(OfficesType::class, $offices);
$form->handleRequest($request);
$error = null;
if ($form->isSubmitted() && !$form->isValid()) {
$errors = $validator->validate($familyMember);
if (count($errors) > 0) {
$error = $errors[0]['constraint']['message'];
} else {
$error = 'Technisches Problem .';
}
return new Response($error);
} else if ($form->isSubmitted() && $form->isValid()) {
$officesRepository->add($offices, true);
return new Response('OK');
}
return $this->renderForm('family/office_new.html.twig', [
'form' => $form,
'error' => $error
]);
}
/**
* @Route("/{id}/edit_member", name="app_family_member_edit", methods={"GET", "POST"} , options = {"expose"=true})
*/
public function edit_member(Request $request, FamilyMember $familyMember, GesundheitRepository $GesundheitRepository, BildungRepository $BildungRepository, SluggerInterface $slugger, FamilyMemberRepository $familyMemberRepository, ValidatorInterface $validator): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$form = $this->createForm(FamilyMemberType::class, $familyMember);
$form->handleRequest($request);
$error = null;
if ($form->isSubmitted() && !$form->isValid()) {
$errors = $validator->validate($familyMember);
if (count($errors) > 0) {
$error = $errors[0]['constraint']['message'];
} else {
$error = 'Technisches Problem .';
}
return new Response($error);
} else if ($form->isSubmitted() && $form->isValid()) {
if ($form['gesundheit']['name']->getData() != "") {
$gesundheit = new Gesundheit();
$gesundheit->setType($form['gesundheit']['type']->getData());
$gesundheit->setName($form['gesundheit']['name']->getData());
$gesundheit->setAnschrift($form['gesundheit']['anschrift']->getData());
$gesundheit->setTel($form['gesundheit']['tel']->getData());
$GesundheitRepository->add($gesundheit, true);
$familyMember->setGesundheit($gesundheit);
}
if ($form['bildung']['name']->getData() != "") {
$bildung = new Bildung();
$bildung->setType($form['bildung']['type']->getData());
$bildung->setName($form['bildung']['name']->getData());
$bildung->setKlasse($form['bildung']['klasse']->getData());
$bildung->setAddress($form['bildung']['address']->getData());
$bildung->setSchulsozialarbeiter($form['bildung']['schulsozialarbeiter']->getData());
$bildung->setSchulsozialarbeiterTel($form['bildung']['schulsozialarbeiter_tel']->getData());
$bildung->setSchulsozialarbeiterEmail($form['bildung']['schulsozialarbeiter_email']->getData());
$bildung->setKlassenlehrer($form['bildung']['klassenlehrer']->getData());
$bildung->setKlassenlehrerTel($form['bildung']['klassenlehrer_tel']->getData());
$bildung->setKlassenlehrerEmail($form['bildung']['klassenlehrer_email']->getData());
$BildungRepository->add($bildung, true);
$familyMember->setBildung($bildung);
}
/** @var UploadedFile $brochureFile */
$photo = $form->get('photo')->getData();
if ($photo) {
$originalFilename = pathinfo($photo->getClientOriginalName(), PATHINFO_FILENAME);
// this is needed to safely include the file name as part of the URL
$safeFilename = $slugger->slug($originalFilename);
$newFilename = $safeFilename . '-' . uniqid() . '.' . $photo->guessExtension();
try {
$photo->move(
$this->getParameter('photos_family'),
$newFilename
);
} catch (FileException $e) {
// ... handle exception if something happens during file upload
}
$familyMember->setPhoto($newFilename);
}
$familyMemberRepository->add($familyMember, true);
return new Response('OK');
}
return $this->renderForm('family/member_new.html.twig', [
'family' => $familyMember,
'form' => $form,
'error' => $error
]);
}
/**
* @Route("/reisekosten", name="app_reisekosten_index", methods={"GET"})
*/
public function index_reisekosten(CalendarRepository $CalendarRepository, FamilyRepository $FamilyRepository): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
if (!$this->security->isGranted('ROLE_ADMIN')) {
return $this->redirectToRoute('app_logout');
}
$families = $FamilyRepository->findAll();
return $this->render('family/index_reisekosten.html.twig', [
'calendars' => $CalendarRepository->findAll(),
'families' => $families,
]);
}
/**
* @Route("/serverReisekosten", name="serverReisekosten", methods={"GET"} , options = {"expose" = true } )
*/
public function serverReisekosten(Request $request, EntityManagerInterface $entityManager): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$sql_where = '';
if ($request->get('searchByFamily') != "") {
$sql_where .= ' AND p.family = ' . $request->get('searchByFamily');
}
if ($request->get('searchByMonth') != "") {
$sql_where .= ' AND MONTH(p.start) = ' . $request->get('searchByMonth');
}
if ($request->get('searchByYear') != "") {
$sql_where .= ' AND YEAR(p.start) = ' . $request->get('searchByYear');
}
$columns = ['p.id', 'p.firstname', 'p.lastname', 'p.place_of_birth', 'p.date_of_birth', 'p.country', 'p.address', 'p.language', 'p.tel', 'p.id'];
$sql_search = '';
if ($request->get('search')['value'] != "") {
$sql_where_glob_arr = [];
foreach ($columns as $column) {
$sql_where_glob_arr[] = ' ' . $column . ' LIKE \'%' . $request->get('search')['value'] . '%\' ';
}
if (count($sql_where_glob_arr) > 0) {
$sql_search = ' AND ( ' . implode(' OR ', $sql_where_glob_arr) . ' ) ';
}
}
$orders[] = ' p.start ASC ';
for ($i = 0; $i < count($request->get('order')); $i++) {
$orders[] = $columns[$request->get('order')[$i]['column']] . ' ' . $request->get('order')[$i]['dir'];
}
if (count($orders) > 0) {
$order = " ORDER BY " . implode(' , ', $orders);
} else {
$order = "";
}
$existance = $entityManager->createQuery(
'SELECT p
FROM App\Entity\Calendar p
WHERE 1=1 ' . $sql_where . ' ' . $sql_search . '
'
)
->getResult();
$I_nbResultatsTotal = count($existance);
$limit = $request->get('length');
$offset = $request->get('start');
$array_search = array();
//->setParameter('nom', '%'.$request->get('searchByNom').'%')
//p.nom LIKE :nom
$calndars = $entityManager->createQuery(
'SELECT p
FROM App\Entity\Calendar p
WHERE 1=1 AND p.status = 2 ' . $sql_where . ' ' . $sql_search . ' ' . $order . '
'
)
->setMaxResults($limit)
->setFirstResult($offset)
->getResult();
$calndar_global = $entityManager->createQuery(
'SELECT SUM(p.km) as total_km
FROM App\Entity\Calendar p
WHERE 1=1 AND p.status = 2 ' . $sql_where . '
'
)
->getOneOrNullResult();
$output = [];
if ($calndar_global != null) {
$total_km = $calndar_global['total_km'];
} else {
$total_km = 0;
}
foreach ($calndars as $calndar) {
$output[] = [
'tag' => date_format($calndar->getStart(), 'd/m/Y'),
'beginn' => date_format($calndar->getStart(), 'H:i'),
'ende' => date_format($calndar->getEnd(), 'H:i'),
'itinerary' => $calndar->getItinerary(),
'reise' => $calndar->getDescription(),
'km' => $calndar->getKm(),
];
}
$JSON = json_encode($output);
$JSON = '{"draw": ' . $request->get('draw') . ',"recordsTotal":' . $I_nbResultatsTotal . ',"recordsFiltered":' . $I_nbResultatsTotal . ',"total_km":"' . $total_km . '","data":' . $JSON . '}';
$response = new Response($JSON, 200, ['Content-Type' => 'application/json']);
return $response;
}
/**
* @Route("/confirm/paid/{id}/{token}", name="app_rechnungen_confirm_paid", methods={"POST"}, options={"expose"=true})
*/
public function confirm_paid(Request $request, EntityManagerInterface $entityManager, JugendamtRepository $JugendamtRepository, RechnungenRepository $RechnungenRepository, FamilyRepository $FamilyRepository): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
if (!$this->security->isGranted('ROLE_ADMIN')) {
return $this->redirectToRoute('app_logout');
}
$Rechnungen = $RechnungenRepository->find($request->get('id'));
$Rechnungen->setTotalAmount($request->get('amount'));
$Rechnungen->setPaid(1);
$Rechnungen->setPaidAt( !empty($request->get('paid_at')) ? \DateTime::createFromFormat('Y-m-d',$request->get('paid_at')) : null);
$this->em->persist($Rechnungen);
$this->em->flush();
return new Response('OK');
}
/**
* @Route("/send/office/alle_rechnungen_pdf", name="app_rechnungen_office_send", methods={"GET","POST"}, options={"expose"=true})
*/
public function alle_rechnungen_office_send(Request $request, MailerInterface $mailer, EntityManagerInterface $entityManager, JugendamtRepository $JugendamtRepository, RechnungenRepository $RechnungenRepository, FamilyRepository $FamilyRepository, ContactRepository $contactRepository): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
if (!$this->security->isGranted('ROLE_ADMIN')) {
return $this->redirectToRoute('app_logout');
}
if ((($request->get('other') != '1') && ($request->get('destination') == '')) || (($request->get('other') == '1') && ($request->get('other_destination') == ''))) {
return new Response('KO');
}
$filesystem = new Filesystem();
$sql_where = '';
$family = null;
if ($request->get('searchByFamily') != "") {
$sql_where .= ' AND f.id = ' . $request->get('searchByFamily');
$family = $FamilyRepository->find($request->get('searchByFamily'));
}
$sql_search = '';
/*if( $request->get('search')['value']!=""){
$sql_where_glob_arr = [];
foreach($columns as $column){
$sql_where_glob_arr[] = ' '.$column.' LIKE \'%'.$request->get('search')['value'].'%\' ' ;
}
if(count($sql_where_glob_arr)>0){
$sql_search = ' AND ( '.implode(' OR ', $sql_where_glob_arr ).' ) ' ;
}
}*/
//->setParameter('nom', '%'.$request->get('searchByNom').'%')
//p.nom LIKE :nom
$filename = $request->get('filename');
try {
if (($request->get('other') == '1') && ($request->get('other_destination') != '')) {
$email = (new TemplatedEmail())
->from('Nizar Trabelsi <nizar.trabelsi@wep-erziehungshilfe.de>')
->to($request->get('other_destination'))
->cc('verwaltung@wep-erziehungshilfe.de')
->attachFromPath($filename)
->subject('Rechnung')
->htmlTemplate('email/rechnung.html.twig')
->context([
'email_text' => $request->get('email_text'),
]);
$existanceContact = $contactRepository->findOneBy(['email' => $request->get('other_destination')]);
if (is_null($existanceContact)) {
$contact = new Contact();
$contact->setEmail($request->get('other_destination'));
$this->em->persist($contact);
}
} else {
$email = (new TemplatedEmail())
->from('Nizar Trabelsi <nizar.trabelsi@wep-erziehungshilfe.de>')
->to(...$request->get('destination'))
->cc('nizar.trabelsi@wep-erziehungshilfe.de')
->attachFromPath($filename)
->subject('Rechnung')
->htmlTemplate('email/rechnung.html.twig')
->context([
'email_text' => $request->get('email_text'),
]);
}
$mailer->send($email);
$filesystem->remove($filename);
foreach ($request->get('ids') as $id) {
$Rechnungen = $RechnungenRepository->find($id);
if (!is_null($Rechnungen)) {
$Rechnungen->setSent(1);
$this->em->persist($Rechnungen);
$this->em->flush();
}
}
$this->em->flush();
return new Response('OK');
} catch (TransportExceptionInterface $e) {
return new Response($e->getMessage());
}
}
/**
* @Route("/send/alle_rechnungen_pdf", name="app_rechnungen_send", methods={"GET","POST"}, options={"expose"=true})
*/
public function alle_rechnungen_send(Request $request, MailerInterface $mailer, EntityManagerInterface $entityManager, JugendamtRepository $JugendamtRepository, RechnungenRepository $RechnungenRepository, FamilyRepository $FamilyRepository): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
if (!$this->security->isGranted('ROLE_ADMIN')) {
return $this->redirectToRoute('app_logout');
}
if ((($request->get('other') != '1') && ($request->get('destination') == '')) || (($request->get('other') == '1') && ($request->get('other_destination') == ''))) {
return new Response('KO');
}
$filesystem = new Filesystem();
$sql_where = '';
if (!empty($request->get('ids'))) {
$sqlId = [];
foreach($request->get('ids') as $id) {
$sqlId[] = ' r.id = '.$id ;
}
if(!empty($sqlId)){
$sql_where .= ' AND ' . implode(' OR ', $sqlId) ;
}
}
$files = $entityManager->createQuery(
'SELECT r
FROM App\Entity\Rechnungen r
JOIN r.family f
WHERE 1=1 ' . $sql_where . '
'
)
->getResult();
$filePaths = [];
foreach($files as $file) {
$file->setSent(1);
$filePaths[] = $this->getParameter('docs_family') . '/' . sha1($file->getFamily()->getId()) . '/' .$file->getFileName();
}
try {
if (($request->get('other') == '1') && ($request->get('other_destination') != '')) {
$email = (new TemplatedEmail())
->from('Nizar Trabelsi <nizar.trabelsi@wep-erziehungshilfe.de>')
->to($request->get('other_destination'))
->cc('info@wep-erziehungshilfe.de')
->subject('Rechnung')
->htmlTemplate('email/rechnung.html.twig')
->context([
'email_text' => $request->get('email_text'),
]);
foreach($filePaths as $path) {
if (file_exists($path)) {
$email->attachFromPath($path);
}
}
$contact = new Contact();
$contact->setEmail($request->get('other_destination'));
$this->em->persist($contact);
} else {
$email = (new TemplatedEmail())
->from('Nizar Trabelsi <nizar.trabelsi@wep-erziehungshilfe.de>')
->to(...$request->get('destination'))
->cc('info@wep-erziehungshilfe.de')
->subject('Rechnung')
->htmlTemplate('email/rechnung.html.twig')
->context([
'email_text' => $request->get('email_text'),
]);
foreach($filePaths as $path) {
if (file_exists($path)) {
$email->attachFromPath($path);
}
}
}
$mailer->send($email);
$this->em->flush();
return new Response('OK');
} catch (TransportExceptionInterface $e) {
return new Response($e->getOriginalMessage());
}
}
/**
* @Route("/send/alle_rechnungen_pdf_old", name="app_rechnungen_send_old", methods={"GET","POST"}, options={"expose"=true})
*/
public function alle_rechnungen_send_old(Request $request, MailerInterface $mailer, EntityManagerInterface $entityManager, JugendamtRepository $JugendamtRepository, RechnungenRepository $RechnungenRepository, FamilyRepository $FamilyRepository): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
if (!$this->security->isGranted('ROLE_ADMIN')) {
return $this->redirectToRoute('app_logout');
}
if ((($request->get('other') != '1') && ($request->get('destination') == '')) || (($request->get('other') == '1') && ($request->get('other_destination') == ''))) {
return new Response('KO');
}
$filesystem = new Filesystem();
$sql_where = '';
$family = null;
if ($request->get('searchByFamily') != "") {
$sql_where .= ' AND f.id = ' . $request->get('searchByFamily');
$family = $FamilyRepository->find($request->get('searchByFamily'));
}
$sql_search = '';
/*if( $request->get('search')['value']!=""){
$sql_where_glob_arr = [];
foreach($columns as $column){
$sql_where_glob_arr[] = ' '.$column.' LIKE \'%'.$request->get('search')['value'].'%\' ' ;
}
if(count($sql_where_glob_arr)>0){
$sql_search = ' AND ( '.implode(' OR ', $sql_where_glob_arr ).' ) ' ;
}
}*/
$array_search = array();
//->setParameter('nom', '%'.$request->get('searchByNom').'%')
//p.nom LIKE :nom
$hourPrice = 55;
if ($request->get('searchByYear') . $request->get('searchByMonth') >= 202308) {
$hourPrice = 70;
}
$families = $entityManager->createQuery(
'SELECT f.id as id , f.firstname , f.lastname, concat(f.id , MONTH(p.start) , YEAR(p.start)) as family , SUM(p.km) as total_km , SUM(p.km)*0.30 as total_km_price , SUM( ( TimestampDiff(SECOND ,p.start , p.end) / 3600 ) ) as total_hours , SUM( ( TimestampDiff(SECOND ,p.start , p.end) / 3600 ) ) * ' . $hourPrice . ' as total_price_hours , MONTH(p.start) as m , YEAR(p.start) as y
FROM App\Entity\Calendar p
JOIN p.family f
WHERE 1=1 AND p.status = 2 AND MONTH(p.start) >= ' . $request->get('searchByMonth') . ' AND YEAR(p.start) >= ' . $request->get('searchByYear') . ' AND MONTH(p.start) <= ' . $request->get('searchByMonth2') . ' AND YEAR(p.start) <= ' . $request->get('searchByYear2') . ' ' . $sql_where . ' ' . $sql_search . ' GROUP BY family
'
)
->getResult();
$months = ['01' => 'Januar', '02' => 'Februar', '03' => 'März', '04' => 'April', '05' => 'Mai', '06' => 'Juni', '07' => 'Juli', '08' => 'August', '09' => 'September', '10' => 'Oktober', '11' => 'November', '12' => 'Dezember'];
$output = [];
foreach ($families as $family) {
$Rechnungen = $RechnungenRepository->findOneBy(['family' => $family['id'], 'month' => $family['m'], 'year' => $family['y']]);
if (!is_null($Rechnungen)) {
if ((($request->get('ids') != '') && (in_array($Rechnungen->getId(), $request->get('ids')))) || ($request->get('ids') == '')) {
$jugendamt = $JugendamtRepository->findOneBy(['family' => $family['id']]);
$output[] = [
'family' => $family['firstname'] . ' ' . $family['lastname'],
'period' => $months[$family['m'] < 10 ? '0' . $family['m'] : $family['m']] . ' ' . $family['y'],
'total_km' => $family['total_km'],
'total_hours' => $family['total_hours'],
'steigend' => $family['total_km_price'] + $family['total_price_hours'],
'id' => $family['id'],
'month' => $family['m'],
'year' => $family['y'],
'num' => substr($Rechnungen->getYear('Y'), -2) . str_pad($Rechnungen->getNum(), 3, 0, STR_PAD_LEFT),
'jugendamt' => $jugendamt,
'date_invoice' => date_format($Rechnungen->getCreatedAt(), 'd.m.Y'),
];
}
}
}
array_multisort(array_column($output, 'num'), SORT_ASC, $output);
$pdfOptions = new Options();
//$pdfOptions->set('defaultFont', 'Arial');
$pdfOptions->setIsRemoteEnabled(true);
$pdfOptions->isHtml5ParserEnabled(true);
// Instantiate Dompdf with our options
$dompdf = new Dompdf($pdfOptions);
$html = $this->renderView('files/alle_rechnungen_pdf.html.twig', [
'output' => $output,
'family' => $family
]);
// Load HTML to Dompdf
$dompdf->loadHtml($html);
// (Optional) Setup the paper size and orientation 'portrait' or 'portrait'
$dompdf->setPaper('A4', 'portrait');
// Render the HTML as PDF
$dompdf->render();
$output = $dompdf->output();
$dir = $this->getParameter('uploads');
$filename = 'rechnung' . time() . '.pdf';
file_put_contents($dir . $filename, $output);
try {
if (($request->get('other') == '1') && ($request->get('other_destination') != '')) {
$email = (new TemplatedEmail())
->from('Nizar Trabelsi <nizar.trabelsi@wep-erziehungshilfe.de>')
->to($request->get('other_destination'))
->cc('info@wep-erziehungshilfe.de')
->attachFromPath($dir . $filename)
->subject('Rechnung')
->htmlTemplate('email/rechnung.html.twig')
->context([
'email_text' => $request->get('email_text'),
]);
$contact = new Contact();
$contact->setEmail($request->get('other_destination'));
$this->em->persist($contact);
} else {
$email = (new TemplatedEmail())
->from('Nizar Trabelsi <nizar.trabelsi@wep-erziehungshilfe.de>')
->to(...$request->get('destination'))
->cc('info@wep-erziehungshilfe.de')
->attachFromPath($dir . $filename)
->subject('Rechnung')
->htmlTemplate('email/rechnung.html.twig')
->context([
'email_text' => $request->get('email_text'),
]);
}
$mailer->send($email);
$filesystem->remove($dir . $filename);
foreach ($families as $family) {
$Rechnungen = $RechnungenRepository->findOneBy(['family' => $family['id'], 'month' => $family['m'], 'year' => $family['y']]);
if (!is_null($Rechnungen)) {
if ((($request->get('ids') != '') && (in_array($Rechnungen->getId(), $request->get('ids')))) || ($request->get('ids') == '')) {
$Rechnungen->setSent(1);
$this->em->persist($Rechnungen);
$this->em->flush();
}
}
}
$this->em->flush();
return new Response('OK');
} catch (TransportExceptionInterface $e) {
return new Response($e->getOriginalMessage());
}
}
/**
* @Route("/send/rechnungen_pdf", name="app_rechnungen_pdf_send", methods={"GET","POST"}, options={"expose"=true})
*/
public function rechnungen_send(Request $request, MailerInterface $mailer, ContactRepository $contactRepository, EntityManagerInterface $entityManager, JugendamtRepository $JugendamtRepository, RechnungenRepository $RechnungenRepository, FamilyRepository $FamilyRepository): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
if (!$this->security->isGranted('ROLE_ADMIN')) {
return $this->redirectToRoute('app_logout');
}
if ((($request->get('other') != '1') && ($request->get('destination') == '')) || (($request->get('other') == '1') && ($request->get('other_destination') == ''))) {
return new Response('KO');
}
$filesystem = new Filesystem();
$sql_where = '';
$family = null;
if ($request->get('searchByFamily') != "") {
$sql_where .= ' AND f.id = ' . $request->get('searchByFamily');
$family = $FamilyRepository->find($request->get('searchByFamily'));
}
$sql_search = '';
/*if( $request->get('search')['value']!=""){
$sql_where_glob_arr = [];
foreach($columns as $column){
$sql_where_glob_arr[] = ' '.$column.' LIKE \'%'.$request->get('search')['value'].'%\' ' ;
}
if(count($sql_where_glob_arr)>0){
$sql_search = ' AND ( '.implode(' OR ', $sql_where_glob_arr ).' ) ' ;
}
}*/
$array_search = array();
//->setParameter('nom', '%'.$request->get('searchByNom').'%')
//p.nom LIKE :nom
$hourPrice = 55;
if ($request->get('searchByYear') . $request->get('searchByMonth') >= 202308) {
$hourPrice = 70;
}
$families = $entityManager->createQuery(
'SELECT f.id as id , f.firstname , f.lastname, concat(f.id , MONTH(p.start) , YEAR(p.start)) as family , SUM(p.km) as total_km , SUM(p.km)*0.30 as total_km_price , SUM( ( TimestampDiff(SECOND ,p.start , p.end) / 3600 ) ) as total_hours , SUM( ( TimestampDiff(SECOND ,p.start , p.end) / 3600 ) ) * ' . $hourPrice . ' as total_price_hours , MONTH(p.start) as m , YEAR(p.start) as y
FROM App\Entity\Calendar p
JOIN p.family f
WHERE 1=1 AND p.status = 2 AND MONTH(p.start) >= ' . $request->get('searchByMonth') . ' AND YEAR(p.start) >= ' . $request->get('searchByYear') . ' AND MONTH(p.start) <= ' . $request->get('searchByMonth2') . ' AND YEAR(p.start) <= ' . $request->get('searchByYear2') . ' ' . $sql_where . ' ' . $sql_search . ' GROUP BY family
'
)
->getResult();
$months = ['01' => 'Januar', '02' => 'Februar', '03' => 'März', '04' => 'April', '05' => 'Mai', '06' => 'Juni', '07' => 'Juli', '08' => 'August', '09' => 'September', '10' => 'Oktober', '11' => 'November', '12' => 'Dezember'];
$output = [];
foreach ($families as $family) {
$Rechnungen = $RechnungenRepository->findOneBy(['family' => $family['id'], 'month' => $family['m'], 'year' => $family['y']]);
if (!is_null($Rechnungen)) {
if ((($request->get('ids') != '') && (in_array($Rechnungen->getId(), $request->get('ids')))) || ($request->get('ids') == '')) {
$jugendamt = $JugendamtRepository->findOneBy(['family' => $family['id']]);
$output[] = [
'family' => $family['firstname'] . ' ' . $family['lastname'],
'period' => $months[$family['m'] < 10 ? '0' . $family['m'] : $family['m']] . ' ' . $family['y'],
'total_km' => $family['total_km'],
'total_hours' => $family['total_hours'],
'steigend' => $family['total_km_price'] + $family['total_price_hours'],
'id' => $family['id'],
'month' => $family['m'],
'year' => $family['y'],
'num' => substr($Rechnungen->getYear('Y'), -2) . str_pad($Rechnungen->getNum(), 3, 0, STR_PAD_LEFT),
'jugendamt' => $jugendamt,
'date_invoice' => date_format($Rechnungen->getCreatedAt(), 'd.m.Y'),
];
}
}
}
array_multisort(array_column($output, 'num'), SORT_ASC, $output);
$pdfOptions = new Options();
//$pdfOptions->set('defaultFont', 'Arial');
$pdfOptions->setIsRemoteEnabled(true);
$pdfOptions->isHtml5ParserEnabled(true);
// Instantiate Dompdf with our options
$dompdf = new Dompdf($pdfOptions);
$html = $this->renderView('files/rechnungen_pdf.html.twig', [
'output' => $output,
'family' => $family
]);
// Load HTML to Dompdf
$dompdf->loadHtml($html);
// (Optional) Setup the paper size and orientation 'portrait' or 'portrait'
$dompdf->setPaper('A4', 'portrait');
// Render the HTML as PDF
$dompdf->render();
$output = $dompdf->output();
$dir = $this->getParameter('uploads');
$filename = 'rechnung' . time() . '.pdf';
file_put_contents($dir . $filename, $output);
try {
if (($request->get('other') == '1') && ($request->get('other_destination') != '')) {
$email = (new TemplatedEmail())
->from('Nizar Trabelsi <nizar.trabelsi@wep-erziehungshilfe.de>')
->to($request->get('other_destination'))
->cc('info@wep-erziehungshilfe.de')
->attachFromPath($dir . $filename)
->subject('Rechnung')
->htmlTemplate('email/rechnung.html.twig')
->context([
'email_text' => $request->get('email_text'),
]);
$existanceContact = $contactRepository->findOneBy(['email' => $request->get('other_destination')]);
if (is_null($existanceContact)) {
$contact = new Contact();
$contact->setEmail($request->get('other_destination'));
$this->em->persist($contact);
}
} else {
$email = (new TemplatedEmail())
->from('Nizar Trabelsi <nizar.trabelsi@wep-erziehungshilfe.de>')
->to(...$request->get('destination'))
->cc('info@wep-erziehungshilfe.de')
->attachFromPath($dir . $filename)
->subject('Rechnung')
->htmlTemplate('email/rechnung.html.twig')
->context([
'email_text' => $request->get('email_text'),
]);
}
$mailer->send($email);
$filesystem->remove($dir . $filename);
foreach ($families as $family) {
$Rechnungen = $RechnungenRepository->findOneBy(['family' => $family['id'], 'month' => $family['m'], 'year' => $family['y']]);
if (!is_null($Rechnungen)) {
if ((($request->get('ids') != '') && (in_array($Rechnungen->getId(), $request->get('ids')))) || ($request->get('ids') == '')) {
$Rechnungen->setSent(1);
$this->em->persist($Rechnungen);
$this->em->flush();
}
}
}
$this->em->flush();
return new Response('OK');
} catch (TransportExceptionInterface $e) {
return new Response($e->getOriginalMessage());
}
}
/**
* @Route("/export/alle_rechnungen_pdf", name="app_alle_rechnungen_pdf", methods={"GET","POST"}, options={"expose"=true})
*/
public function alle_rechnungen_pdf(Request $request, EntityManagerInterface $entityManager, CalendarRepository $CalendarRepository, JugendamtRepository $JugendamtRepository, RechnungenRepository $RechnungenRepository, FamilyRepository $FamilyRepository): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
if (!$this->security->isGranted('ROLE_ADMIN')) {
return $this->redirectToRoute('app_logout');
}
$sql_where = '';
$family = null;
if ($request->get('searchByFamily') != "") {
$sql_where .= ' AND f.id = ' . $request->get('searchByFamily');
$family = $FamilyRepository->find($request->get('searchByFamily'));
}
$sql_search = '';
/*if( $request->get('search')['value']!=""){
$sql_where_glob_arr = [];
foreach($columns as $column){
$sql_where_glob_arr[] = ' '.$column.' LIKE \'%'.$request->get('search')['value'].'%\' ' ;
}
if(count($sql_where_glob_arr)>0){
$sql_search = ' AND ( '.implode(' OR ', $sql_where_glob_arr ).' ) ' ;
}
}*/
$array_search = array();
//->setParameter('nom', '%'.$request->get('searchByNom').'%')
//p.nom LIKE :nom
$hourPrice = 55;
if ($request->get('searchByYear') . $request->get('searchByMonth') >= 202308) {
$hourPrice = 70;
}
$families = $entityManager->createQuery(
'SELECT f.id as id , f.firstname , f.lastname, concat(f.id , MONTH(p.start) , YEAR(p.start)) as family , SUM(p.km) as total_km , SUM(p.km)*0.30 as total_km_price , SUM( ( TimestampDiff(SECOND ,p.start , p.end) / 3600 ) ) as total_hours , SUM( ( TimestampDiff(SECOND ,p.start , p.end) / 3600 ) ) * ' . $hourPrice . ' as total_price_hours , MONTH(p.start) as m , YEAR(p.start) as y
FROM App\Entity\Calendar p
JOIN p.family f
WHERE 1=1 AND p.status = 2 AND MONTH(p.start) >= ' . $request->get('searchByMonth') . ' AND YEAR(p.start) >= ' . $request->get('searchByYear') . ' AND MONTH(p.start) <= ' . $request->get('searchByMonth2') . ' AND YEAR(p.start) <= ' . $request->get('searchByYear2') . ' ' . $sql_where . ' ' . $sql_search . ' GROUP BY family
'
)
->getResult();
$months = ['01' => 'Januar', '02' => 'Februar', '03' => 'März', '04' => 'April', '05' => 'Mai', '06' => 'Juni', '07' => 'Juli', '08' => 'August', '09' => 'September', '10' => 'Oktober', '11' => 'November', '12' => 'Dezember'];
$output = [];
foreach ($families as $family) {
$Rechnungen = $RechnungenRepository->findOneBy(['family' => $family['id'], 'month' => $family['m'], 'year' => $family['y']]);
if (!is_null($Rechnungen)) {
if ((($request->get('ids') != '') && (in_array($Rechnungen->getId(), $request->get('ids')))) || ($request->get('ids') == '')) {
$mois = $family['m'] < 10 ? '0' . $family['m'] : $family['m'];
$annee = $family['y'];
$start = $annee.'-'.$mois.'-01 00:00:00';
$end = date("Y-m-t", strtotime($annee.'-'.$mois.'-01')).' 00:00:00';
$jugendamt = $JugendamtRepository->findOneBy(['family' => $family['id']]);
$calendars = $entityManager->createQuery(
'SELECT p
FROM App\Entity\Calendar p
JOIN p.family f
WHERE 1=1 AND f.id='.$family['id'].' AND p.status = 2 AND p.start >= \'' . $start . '\' AND p.end <= \'' . $end . '\'
'
)
->getResult();
$output[] = [
'family' => $family['firstname'] . ' ' . $family['lastname'],
'period' => $months[$family['m'] < 10 ? '0' . $family['m'] : $family['m']] . ' ' . $family['y'],
'total_km' => $family['total_km'],
'total_hours' => $family['total_hours'],
'steigend' => $family['total_km_price'] + $family['total_price_hours'],
'id' => $family['id'],
'month' => $family['m'],
'year' => $family['y'],
'num' => substr($Rechnungen->getYear('Y'), -2) . str_pad($Rechnungen->getNum(), 3, 0, STR_PAD_LEFT),
'jugendamt' => $jugendamt,
'date_invoice' => date_format($Rechnungen->getCreatedAt(), 'd.m.Y'),
'calendars'=>$calendars
];
}
}
}
array_multisort(array_column($output, 'num'), SORT_ASC, $output);
$pdfOptions = new Options();
//$pdfOptions->set('defaultFont', 'Arial');
$pdfOptions->setIsRemoteEnabled(true);
$pdfOptions->isHtml5ParserEnabled(true);
// Instantiate Dompdf with our options
$dompdf = new Dompdf($pdfOptions);
$html = $this->renderView('files/alle_rechnungen_pdf.html.twig', [
'output' => $output,
'family' => $family
]);
// Load HTML to Dompdf
$dompdf->loadHtml($html);
// (Optional) Setup the paper size and orientation 'portrait' or 'portrait'
$dompdf->setPaper('A4', 'portrait');
// Render the HTML as PDF
$dompdf->render();
$dompdf->stream("mypdf.pdf", [
"Attachment" => false
]);
}
/**
* @Route("/export/rechnungen_table_pdf", name="app_rechnungen_table_pdf", methods={"GET","POST"}, options={"expose"=true})
*/
public function rechnungen_table_pdf(Request $request, EntityManagerInterface $entityManager, RechnungenRepository $RechnungenRepository, FamilyRepository $FamilyRepository): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
if (!$this->security->isGranted('ROLE_ADMIN')) {
return $this->redirectToRoute('app_logout');
}
$sql_where = '';
$family = null;
if ($request->get('searchByFamily') != "") {
$sql_where .= ' AND f.id = ' . $request->get('searchByFamily');
$family = $FamilyRepository->find($request->get('searchByFamily'));
}
$sql_search = '';
/*if( $request->get('search')['value']!=""){
$sql_where_glob_arr = [];
foreach($columns as $column){
$sql_where_glob_arr[] = ' '.$column.' LIKE \'%'.$request->get('search')['value'].'%\' ' ;
}
if(count($sql_where_glob_arr)>0){
$sql_search = ' AND ( '.implode(' OR ', $sql_where_glob_arr ).' ) ' ;
}
}*/
$array_search = array();
$hourPrice = 55;
if ($request->get('searchByYear') . $request->get('searchByMonth') >= 202308) {
$hourPrice = 70;
}
//->setParameter('nom', '%'.$request->get('searchByNom').'%')
//p.nom LIKE :nom
$families = $entityManager->createQuery(
'SELECT f.id as id , f.firstname , f.lastname , concat(f.id , MONTH(p.start) , YEAR(p.start)) as family , SUM(p.km)*0.30 as total_km_price , SUM( ( TimestampDiff(SECOND ,p.start , p.end) / 3600 ) ) * ' . $hourPrice . ' as total_price_hours , MONTH(p.start) as m , YEAR(p.start) as y
FROM App\Entity\Calendar p
JOIN p.family f
WHERE 1=1 AND p.status = 2 AND MONTH(p.start) >= ' . $request->get('searchByMonth') . ' AND YEAR(p.start) >= ' . $request->get('searchByYear') . ' AND MONTH(p.start) <= ' . $request->get('searchByMonth2') . ' AND YEAR(p.start) <= ' . $request->get('searchByYear2') . ' ' . $sql_where . ' ' . $sql_search . ' GROUP BY family
'
)
->getResult();
$months = ['01' => 'Januar', '02' => 'Februar', '03' => 'März', '04' => 'April', '05' => 'Mai', '06' => 'Juni', '07' => 'Juli', '08' => 'August', '09' => 'September', '10' => 'Oktober', '11' => 'November', '12' => 'Dezember'];
$output = [];
foreach ($families as $family) {
$Rechnungen = $RechnungenRepository->findOneBy(['family' => $family['id'], 'month' => $family['m'], 'year' => $family['y']]);
$output[] = [
'family' => $family['firstname'] . ' ' . $family['lastname'],
'period' => $months[$family['m'] < 10 ? '0' . $family['m'] : $family['m']] . ' ' . $family['y'],
'rechnung' => '',
'steigend' => $family['total_km_price'] + $family['total_price_hours'],
'id' => $family['id'],
'month' => $family['m'],
'year' => $family['y'],
'token' => $this->tokenManager->getToken('rechnung' . $family['id'])->getValue(),
'file' => $Rechnungen != null ? '/uploads/docs_family/' . sha1($family['id']) . '/Rechnung-' . $Rechnungen->getNum() . '.pdf' : ''
];
}
$pdfOptions = new Options();
//$pdfOptions->set('defaultFont', 'Arial');
$pdfOptions->setIsRemoteEnabled(true);
$pdfOptions->isHtml5ParserEnabled(true);
// Instantiate Dompdf with our options
$dompdf = new Dompdf($pdfOptions);
$html = $this->renderView('files/rechnungen_pdf.html.twig', [
'output' => $output,
'family' => $family,
]);
// Load HTML to Dompdf
$dompdf->loadHtml($html);
// (Optional) Setup the paper size and orientation 'portrait' or 'portrait'
$dompdf->setPaper('A4', 'portrait');
// Render the HTML as PDF
$dompdf->render();
$dompdf->stream("mypdf.pdf", [
"Attachment" => false
]);
}
/**
* @Route("/vordruck_tabelle_rechnungen", name="app_vordruck_tabelle_rechnungen_index", methods={"GET"})
*/
public function index_vordruck_tabelle_rechnungen(CalendarRepository $CalendarRepository, ContactRepository $contactRepository, FamilyRepository $FamilyRepository): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
if (!$this->security->isGranted('ROLE_ADMIN')) {
return $this->redirectToRoute('app_logout');
}
$families = $FamilyRepository->findAll();
$contacts = $contactRepository->findAll();
return $this->render('family/index_vordruck_tabelle_rechnungen.html.twig', [
'calendars' => $CalendarRepository->findAll(),
'families' => $families,
'contacts' => $contacts
]);
}
/**
* @Route("/alle_rechnungen", name="app_alle_rechnungen_index", methods={"GET"})
*/
public function alle_rechnungen(EntityManagerInterface $entityManager, CalendarRepository $CalendarRepository, FamilyRepository $FamilyRepository, ContactRepository $contactRepository): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
if (!$this->security->isGranted('ROLE_ADMIN')) {
return $this->redirectToRoute('app_logout');
}
$families = $FamilyRepository->findAll();
$contacts = $contactRepository->findAll();
$cities = $entityManager->createQuery(
'SELECT j
FROM App\Entity\Jugendamt j
WHERE j.stadt != \'\'
GROUP BY j.stadt
'
)
->getResult();
return $this->render('family/alle_rechnungen.html.twig', [
'calendars' => $CalendarRepository->findAll(),
'families' => $families,
'contacts' => $contacts,
'cities' => $cities
]);
}
/**
* @Route("/serverRechnungen", name="serverRechnungen", methods={"GET"} , options = {"expose" = true } )
*/
public function serverRechnungen(Request $request, EntityManagerInterface $entityManager, JugendamtRepository $JugendamtRepository, RechnungenRepository $RechnungenRepository): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$sql_where = '';
if ($request->get('searchByFamily') != "") {
$sql_where .= ' AND f.id = ' . $request->get('searchByFamily');
}
$columns = ['f.id', 'concat_ws(\'\',MONTH(r.month) , YEAR(r.year))', 'r.reference', 'r.id', 'r.id'];
$sql_search = '';
if ($request->get('search')['value'] != "") {
$sql_where_glob_arr = [];
foreach ($columns as $column) {
$sql_where_glob_arr[] = ' ' . $column . ' LIKE \'%' . $request->get('search')['value'] . '%\' ';
}
if (count($sql_where_glob_arr) > 0) {
$sql_search = ' AND ( ' . implode(' OR ', $sql_where_glob_arr) . ' ) ';
}
}
$orders = [];
for ($i = 0; $i < count($request->get('order')); $i++) {
$orders[] = $columns[$request->get('order')[$i]['column']] . ' ' . $request->get('order')[$i]['dir'];
}
if (count($orders) > 0) {
$order = " ORDER BY " . implode(' , ', $orders);
} else {
$order = "";
}
$hourPrice = 55;
if ($request->get('searchByYear') . $request->get('searchByMonth') >= 202308) {
$hourPrice = 70;
}
/*$existance = $entityManager->createQuery(
'SELECT f.id as id , f.firstname , f.lastname , concat(f.id , MONTH(p.start) , YEAR(p.start)) as family , SUM(p.km)*0.30 as total_km_price , SUM( ( TimestampDiff(SECOND ,p.start , p.end) / 3600 ) ) * ' . $hourPrice . ' as total_price_hours , MONTH(p.start) as m , YEAR(p.start) as y
FROM App\Entity\Calendar p
JOIN p.family f
WHERE 1=1 AND p.status = 2 AND MONTH(p.start) >= ' . $request->get('searchByMonth') . ' AND YEAR(p.start) >= ' . $request->get('searchByYear') . ' AND MONTH(p.start) <= ' . $request->get('searchByMonth2') . ' AND YEAR(p.start) <= ' . $request->get('searchByYear2') . ' ' . $sql_where . ' ' . $sql_search . ' GROUP BY family ' . $order . '
'
)
->getResult();*/
$existance = $entityManager->createQuery(
'SELECT count(r.id) as nbr, SUM(r.total_amount) as total_amount
FROM App\Entity\Rechnungen r
JOIN r.family f
WHERE 1=1 AND CONCAT(r.year,LPAD(r.month, 2, \'0\')) >= :start AND CONCAT(r.year,LPAD(r.month, 2, \'0\')) <= :end ' . $sql_where . ' ' . $sql_search . ' ' . $order . '
'
)
->setParameter('start', $request->get('searchByYear').str_pad($request->get('searchByMonth'), 2, '0', STR_PAD_LEFT))
->setParameter('end', $request->get('searchByYear2').str_pad($request->get('searchByMonth2'), 2, '0', STR_PAD_LEFT))
->getOneOrNullResult();
$I_nbResultatsTotal = $existance['nbr'];
$limit = $request->get('length');
$offset = $request->get('start');
$array_search = array();
//->setParameter('nom', '%'.$request->get('searchByNom').'%')
//p.nom LIKE :nom
$hourPrice = 55;
if ($request->get('searchByYear') . $request->get('searchByMonth') >= 202308) {
$hourPrice = 70;
}
/*$families = $entityManager->createQuery(
'SELECT f.clearing as clearing, f.id as id , f.status as status , concat_ws(\' \',f.firstname , f.lastname) as familien , ( SELECT r.reference FROM App\Entity\Rechnungen r JOIN r.family rf WHERE rf.id = f.id AND r.month = MONTH(p.start) AND r.year = YEAR(p.start) ) as num , concat(f.id , MONTH(p.start) , YEAR(p.start)) as family , SUM(p.km)*0.30 as total_km_price , SUM( ( TimestampDiff(SECOND ,p.start , p.end) / 3600 ) ) * ' . $hourPrice . ' as total_price_hours , ((SUM(p.km)*0.30)+(SUM( ( TimestampDiff(SECOND ,p.start , p.end) / 3600 ) ) * ' . $hourPrice . ')) as bertrag , concat_ws(\'\',MONTH(p.start) , YEAR(p.start)) as month_year ,MONTH(p.start) as m , YEAR(p.start) as y
FROM App\Entity\Calendar p
JOIN p.family f
WHERE 1=1 AND p.status = 2 AND DATE_FORMAT(p.start,\'%Y-%m\') >= \'' . $request->get('searchByYear') . '-' . $request->get('searchByMonth') . '\' AND DATE_FORMAT(p.start,\'%Y-%m\') <= \'' . $request->get('searchByYear2') . '-' . $request->get('searchByMonth2') . '\' ' . $sql_where . ' ' . $sql_search . ' GROUP BY family ' . $order . '
'
)
->setMaxResults($limit)
->setFirstResult($offset)
->getResult();*/
$invoices = $entityManager->createQuery(
'SELECT r
FROM App\Entity\Rechnungen r
JOIN r.family f
WHERE 1=1 AND CONCAT(r.year,LPAD(r.month, 2, \'0\')) >= :start AND CONCAT(r.year,LPAD(r.month, 2, \'0\')) <= :end ' . $sql_where . ' ' . $sql_search . ' ' . $order . '
'
)
->setParameter('start', $request->get('searchByYear').str_pad($request->get('searchByMonth'), 2, '0', STR_PAD_LEFT))
->setParameter('end', $request->get('searchByYear2').str_pad($request->get('searchByMonth2'), 2, '0', STR_PAD_LEFT))
->setMaxResults($limit)
->setFirstResult($offset)
->getResult();
$months = ['1' => 'Januar', '2' => 'Februar', '3' => 'März', '4' => 'April', '5' => 'Mai', '6' => 'Juni', '7' => 'Juli', '8' => 'August', '9' => 'September', '10' => 'Oktober', '11' => 'November', '12' => 'Dezember'];
$output = [];
foreach ($invoices as $invoice) {
$family = $invoice->getFamily();
$dateCalcul = new DateTime($invoice->getYear().'-'.$invoice->getMonth().'-01');
$dateCalcul->modify('last day of this month');
$dateEnd = $dateCalcul->format('Y-m-d 23:59:59');
$calendars = $this->em->createQuery(
'SELECT p
FROM App\Entity\Calendar p
WHERE 1=1 AND p.status = 2 AND p.family = '.$family->getId().' AND p.start >= \''.$invoice->getYear().'-'.$invoice->getMonth().'-01 00:00:00\' AND p.end <= \''.$dateEnd.'\'
'
)
->getResult() ;
$totalHours = 0;
foreach($calendars as $calendar){
$t1 = strtotime( date_format($calendar->getEnd(),'Y-m-d H:i:s') );
$t2 = strtotime( date_format($calendar->getStart(),'Y-m-d H:i:s') );
$diff = $t1 - $t2;
$hours = $diff / ( 60 * 60 );
$totalHours += $hours;
}
if($invoice->getHours() == null) {
$invoice->setHours(round($totalHours,2));
$entityManager->flush();
}
if($invoice->getFileName() == ''){
$folderPath = $this->getParameter('docs_family') . '/' . sha1($family->getId());
$oldPath = $folderPath . '/Rechnung-' . $invoice->getReference() . '.pdf';
$newFileName = 'Rechnung ' .
$invoice->getReference() . '-' .
$family->getFullName() . '-' .
$invoice->getMonth() . '-' .
substr($invoice->getYear(), 2, 2) . '.pdf';
$newPath = $folderPath . '/' . $newFileName;
if (file_exists($oldPath)) {
rename($oldPath, $newPath);
}
$invoice->setFileName($newFileName);
$this->em->flush();
}
$file = '/uploads/docs_family/' . sha1($family->getId()) . '/' . $invoice->getFileName();
$output[] = [
'id_rechnung' => $invoice != null ? $invoice->getId() : null,
'familyId' => $family->getId(),
'family' => $family->getFullName() . ($family->getStatus() === 0 ? ' (Archive)' : ''),
'period' => $months[$invoice->getMonth()] . ' ' . $invoice->getYear(),
'stunden' => isset($family->getJugendamts()[0]) ? $family->getJugendamts()[0]->getStunden() : '' ,
'current_hours' => $invoice->getHours(),
'rechnung' => $invoice->getReference(),
'steigend' => $invoice->getTotalAmount(),
'id' => $invoice->getId(),
'month' => $invoice->getMonth(),
'year' => $invoice->getYear(),
'token' => $this->tokenManager->getToken('rechnung' . $family->getId())->getValue(),
'file' => $file
];
}
$total = $existance['total_amount'];
$JSON = json_encode($output);
$JSON = '{"draw": ' . $request->get('draw') . ',"recordsTotal":' . $I_nbResultatsTotal . ',"recordsFiltered":' . $I_nbResultatsTotal . ',"total":"' . $total . '","data":' . $JSON . '}';
$response = new Response($JSON, 200, ['Content-Type' => 'application/json']);
return $response;
}
/**
* @Route("/serverAlleRechnungen", name="serverAlleRechnungen", methods={"GET"} , options = {"expose" = true } )
*/
public function serverAlleRechnungen(Request $request, EntityManagerInterface $entityManager, FamilyRepository $FamilyRepository, JugendamtRepository $JugendamtRepository, RechnungenRepository $RechnungenRepository): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$sql_where = '';
if ($request->get('searchByFamily') != "") {
$sql_where .= ' AND f.id = ' . $request->get('searchByFamily');
}
if ($request->get('searchByPaid') != "") {
$sql_where .= ' AND r.paid = ' . $request->get('searchByPaid');
}
if ($request->get('searchByCity') != "") {
$sql_where .= " AND j.stadt = '" . $request->get('searchByCity')."'";
}
if ($request->get('searchByPaidYear') != "") {
$sql_where .= " AND r.paidAt >= '" . $request->get('searchByPaidYear') ."-01-01' AND r.paidAt <= '" . $request->get('searchByPaidYear') ."-12-31' ";
}
$columns = ['r.id', 'concat_ws(\' \',f.firstname , f.lastname)', 'concat_ws(\'\', Substring(r.year, 3 , 2) , LPAD(r.num, 3, 0) )', 'r.reference', 'r.paid'];
$numArr = [];
$sql_search = '';
if ($request->get('search')['value'] != "") {
$sql_where_glob_arr = [];
foreach ($columns as $column) {
$sql_where_glob_arr[] = ' ' . $column . ' LIKE \'%' . $request->get('search')['value'] . '%\' ';
}
if (count($sql_where_glob_arr) > 0) {
$sql_search = ' AND ( ' . implode(' OR ', $sql_where_glob_arr) . ' ) ';
}
}
$orders = [];
for ($i = 0; $i < count($request->get('order')); $i++) {
$orders[] = $columns[$request->get('order')[$i]['column']] . ' ' . $request->get('order')[$i]['dir'];
}
if (count($orders) > 0) {
$order = " ORDER BY " . implode(' , ', $orders);
} else {
$order = "";
}
$existance = $entityManager->createQuery(
'SELECT count(r.id) as nbr
FROM App\Entity\Rechnungen r
JOIN r.family f
LEFT JOIN f.jugendamts j
WHERE 1=1 AND CONCAT(r.year,LPAD(r.month, 2, \'0\')) >= :start AND CONCAT(r.year,LPAD(r.month, 2, \'0\')) <= :end ' . $sql_search . ' ' . $sql_where . ' ' . $order . '
'
)
->setParameter('start', $request->get('searchByYear').str_pad($request->get('searchByMonth'), 2, '0', STR_PAD_LEFT))
->setParameter('end', $request->get('searchByYear2').str_pad($request->get('searchByMonth2'), 2, '0', STR_PAD_LEFT))
->getOneOrNullResult();
$I_nbResultatsTotal = !is_null($existance) ? $existance['nbr'] : 0;
$limit = $request->get('length');
$offset = $request->get('start');
$array_search = array();
//->setParameter('nom', '%'.$request->get('searchByNom').'%')
//p.nom LIKE :nom
$families = $entityManager->createQuery(
'SELECT f.clearing as clearing, f.id as id, f.status as status , concat_ws(\' \',f.firstname , f.lastname) as familien , concat_ws(\'\', Substring(r.year, 3 , 2) , LPAD(r.num, 3, 0) ) as numrr, r.total_amount , concat_ws(\'-\', LPAD(r.month, 2, 0) , r.year) as month_year, concat_ws(\'-\', r.year, LPAD(r.month, 2, 0)) as year_month ,r.month as m , r.year as y, r.paid as paid
FROM App\Entity\Rechnungen r
JOIN r.family f
LEFT JOIN f.jugendamts j
WHERE 1=1 AND CONCAT(r.year,LPAD(r.month, 2, \'0\')) >= :start AND CONCAT(r.year,LPAD(r.month, 2, \'0\')) <= :end ' . $sql_search . ' ' . $sql_where . ' GROUP BY r.reference ' . $order . '
'
)
->setParameter('start', $request->get('searchByYear').str_pad($request->get('searchByMonth'), 2, '0', STR_PAD_LEFT))
->setParameter('end', $request->get('searchByYear2').str_pad($request->get('searchByMonth2'), 2, '0', STR_PAD_LEFT))
->setMaxResults($limit)
->setFirstResult($offset)
->getResult();
$totalAmounts = $entityManager->createQuery(
'SELECT f.id as id , r.paid , concat_ws(\' \',f.firstname , f.lastname) as familien , concat_ws(\'\', Substring(r.year, 3 , 2) , LPAD(r.num, 3, 0) ) as numrr, r.total_amount , concat_ws(\'-\', r.month , r.year) as month_year, concat_ws(\'-\', r.year, LPAD(r.month, 2, 0)) as year_month ,r.month as m , r.year as y
FROM App\Entity\Rechnungen r
JOIN r.family f
LEFT JOIN f.jugendamts j
WHERE 1=1 AND CONCAT(r.year,LPAD(r.month, 2, \'0\')) >= :start AND CONCAT(r.year,LPAD(r.month, 2, \'0\')) <= :end ' . $sql_search . ' ' . $sql_where . ' ' . $order . '
'
)
->setParameter('start', $request->get('searchByYear').str_pad($request->get('searchByMonth'), 2, '0', STR_PAD_LEFT))
->setParameter('end', $request->get('searchByYear2').str_pad($request->get('searchByMonth2'), 2, '0', STR_PAD_LEFT))
->getResult();
$total = 0;
$total_paid = 0;
foreach ($totalAmounts as $totalAmount) {
$m = $totalAmount['m'] < 10 ? '0' . $totalAmount['m'] : $totalAmount['m'];
$hourPrice = 55;
if ($totalAmount['y'] . $m >= 202308) {
$hourPrice = 70;
}
$RechNotConfirmed = $entityManager->createQuery(
'SELECT concat(f.id , MONTH(p.start) , YEAR(p.start)) as family , SUM(p.km)*0.30 as total_km_price , SUM( ( TimestampDiff(SECOND ,p.start , p.end) / 3600 ) ) * ' . $hourPrice . ' as total_price_hours , ((SUM(p.km)*0.30)+(SUM( ( TimestampDiff(SECOND ,p.start , p.end) / 3600 ) ) * ' . $hourPrice . ')) as bertrag , concat_ws(\'\',MONTH(p.start) , YEAR(p.start)) as month_year ,MONTH(p.start) as m , YEAR(p.start) as y
FROM App\Entity\Calendar p
JOIN p.family f
WHERE 1=1 AND f.id = ' . $totalAmount['id'] . ' AND p.status = 2 AND DATE_FORMAT(p.start,\'%Y-%m\') = \'' . $totalAmount['y'] . '-' . $m . '\'
'
)
->getOneOrNullResult();
if ($totalAmount['total_amount'] != '') {
$total += $totalAmount['total_amount'];
} else {
$total += $RechNotConfirmed['total_price_hours'] + $RechNotConfirmed['total_km_price'];
}
if ($totalAmount['paid'] == '1') {
$total_paid += $totalAmount['total_amount'];
}
}
$months = ['01' => 'Januar', '02' => 'Februar', '03' => 'März', '04' => 'April', '05' => 'Mai', '06' => 'Juni', '07' => 'Juli', '08' => 'August', '09' => 'September', '10' => 'Oktober', '11' => 'November', '12' => 'Dezember'];
$output = [];
foreach ($families as $family) {
$currentFamily = $FamilyRepository->find($family['id']);
$m = $family['m'] < 10 ? '0' . $family['m'] : $family['m'];
$hourPrice = 55;
if ($family['y'] . $m >= 202308) {
$hourPrice = 70;
}
$RechnungenNotConfirmed = $entityManager->createQuery(
'SELECT concat(f.id , MONTH(p.start) , YEAR(p.start)) as family , SUM(p.km)*0.30 as total_km_price , SUM( ( TimestampDiff(SECOND ,p.start , p.end) / 3600 ) ) * ' . $hourPrice . ' as total_price_hours , ((SUM(p.km)*0.30)+(SUM( ( TimestampDiff(SECOND ,p.start , p.end) / 3600 ) ) * ' . $hourPrice . ')) as bertrag , concat_ws(\'\',MONTH(p.start) , YEAR(p.start)) as month_year ,MONTH(p.start) as m , YEAR(p.start) as y
FROM App\Entity\Calendar p
JOIN p.family f
WHERE 1=1 AND f.id = ' . $family['id'] . ' AND p.status = 2 AND DATE_FORMAT(p.start,\'%Y-%m\') = \'' . $family['y'] . '-' . $m . '\'
'
)
->getOneOrNullResult();
$Rechnungen = $RechnungenRepository->findOneBy(['family' => $family['id'], 'month' => $family['m'], 'year' => $family['y']]);
if($Rechnungen->getFileName() == ''){
$folderPath = $this->getParameter('docs_family') . '/' . sha1($currentFamily->getId());
$oldPath = $folderPath . '/Rechnung-' . $Rechnungen->getReference() . '.pdf';
$newFileName = 'Rechnung ' .
$Rechnungen->getReference() . '-' .
$currentFamily->getFullName() . '-' .
$Rechnungen->getMonth() . '-' .
substr($Rechnungen->getYear(), 2, 2) . '.pdf';
$newPath = $folderPath . '/' . $newFileName;
if (file_exists($oldPath)) {
rename($oldPath, $newPath);
}
$Rechnungen->setFileName($newFileName);
$this->em->flush();
}
$file = '/uploads/docs_family/' . sha1($currentFamily->getId()) . '/' . $Rechnungen->getFileName();
$jugendamt = $JugendamtRepository->findOneBy(['family' => $family['id']]);
$output[] = [
'id_rechnung' => $Rechnungen != null ? $Rechnungen->getId() : null,
'family' => $family['familien'] . ($family['status'] == 0 ? ' (Archive)' : ''),
'period' => $months[str_pad($family['m'], 2, '0', STR_PAD_LEFT)] . ' ' . $family['y'],
'stadt' => $jugendamt !== null ? $jugendamt->getStadt() : '',
'rechnung' => $family['numrr'],
//'steigend'=> ,
'steigend' => $family['clearing'] == 1 && !is_null($Rechnungen) ? $Rechnungen->getTotalAmount() : $RechnungenNotConfirmed['total_price_hours'] + $RechnungenNotConfirmed['total_km_price'],
'id' => $family['id'],
'month' => $family['m'],
'year' => $family['y'],
'token' => $this->tokenManager->getToken('rechnung' . $family['id'])->getValue(),
'file' => $file,
'sent' => $Rechnungen->getSent() ?? 0,
'paid' => $Rechnungen->getPaid(),
'paid_at' => $Rechnungen->getPaidAt() !== null ? date_format($Rechnungen->getPaidAt(),'d.m.Y') : ''
];
}
$total_unpaid = $total - $total_paid;
$JSON = json_encode($output);
$JSON = '{"draw": ' . $request->get('draw') . ',"recordsTotal":' . $I_nbResultatsTotal . ',"recordsFiltered":' . $I_nbResultatsTotal . ',"total_unpaid":"' . number_format($total_unpaid, 2, '.', ' ') . '","total_paid":"' . number_format($total_paid, 2, '.', ' ') . '","total":"' . number_format($total, 2, '.', ' ') . '","data":' . $JSON . '}';
$response = new Response($JSON, 200, ['Content-Type' => 'application/json']);
return $response;
}
/**
* @Route("/invoices/pending", name="app_invoice_pending_index", methods={"GET"})
*/
public function invoicesPending(CalendarRepository $CalendarRepository, FamilyRepository $FamilyRepository, ContactRepository $contactRepository): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
if (!$this->security->isGranted('ROLE_ADMIN')) {
return $this->redirectToRoute('app_logout');
}
$families = $FamilyRepository->findAll();
$contacts = $contactRepository->findAll();
return $this->render('family/invoice_pending.html.twig', [
'calendars' => $CalendarRepository->findAll(),
'families' => $families,
'contacts' => $contacts
]);
}
/**
* @Route("/server/invoices/pending", name="app_server_invoice_pending", methods={"GET"} , options = {"expose" = true } )
*/
public function serverInvoicesPending(Request $request, EntityManagerInterface $entityManager, JugendamtRepository $JugendamtRepository, RechnungenRepository $RechnungenRepository): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$sql_where = '';
if ($request->get('searchByFamily') != "") {
$sql_where .= ' AND f.id = ' . $request->get('searchByFamily');
}
$columns = ['family', 'concat_ws(\'\',MONTH(p.start) , YEAR(p.start))', 'num', 'f.country', 'p.id'];
$sql_search = '';
if ($request->get('search')['value'] != "") {
$sql_where_glob_arr = [];
foreach ($columns as $column) {
$sql_where_glob_arr[] = ' ' . $column . ' LIKE \'%' . $request->get('search')['value'] . '%\' ';
}
if (count($sql_where_glob_arr) > 0) {
$sql_search = ' AND ( ' . implode(' OR ', $sql_where_glob_arr) . ' ) ';
}
}
$orders = [];
for ($i = 0; $i < count($request->get('order')); $i++) {
$orders[] = $columns[$request->get('order')[$i]['column']] . ' ' . $request->get('order')[$i]['dir'];
}
if (count($orders) > 0) {
$order = " ORDER BY " . implode(' , ', $orders);
} else {
$order = "";
}
$hourPrice = 55;
if ($request->get('searchByYear') . $request->get('searchByMonth') >= 202308) {
$hourPrice = 70;
}
$month = (int) $request->get('searchByMonth') < 10 ? '0'.$request->get('searchByMonth') : $request->get('searchByMonth');
$month2 = (int) $request->get('searchByMonth2') < 10 ? '0'.$request->get('searchByMonth2') : $request->get('searchByMonth2');
$existance = $entityManager->createQuery(
'SELECT f.id as id , f.firstname , f.lastname , concat(f.id , MONTH(p.start) , YEAR(p.start)) as family , SUM(p.km)*0.30 as total_km_price , SUM( ( TimestampDiff(SECOND ,p.start , p.end) / 3600 ) ) * ' . $hourPrice . ' as total_price_hours , MONTH(p.start) as m , YEAR(p.start) as y
FROM App\Entity\Calendar p
JOIN p.family f
WHERE 1=1 AND p.status = 2 AND MONTH(p.start) >= ' . $month . ' AND YEAR(p.start) >= ' . $request->get('searchByYear') . ' AND MONTH(p.start) <= ' . $month2 . ' AND YEAR(p.start) <= ' . $request->get('searchByYear2') . ' ' . $sql_where . ' ' . $sql_search . ' GROUP BY family ' . $order . '
'
)
->getResult();
$I_nbResultatsTotal = count($existance);
$limit = $request->get('length');
$offset = $request->get('start');
$array_search = array();
//->setParameter('nom', '%'.$request->get('searchByNom').'%')
//p.nom LIKE :nom
$hourPrice = 55;
if ($request->get('searchByYear') . $month >= 202308) {
$hourPrice = 70;
}
$families = $entityManager->createQuery(
'SELECT f.clearing as clearing,
f.id as id ,
f.status as status ,
concat_ws(\' \',f.firstname , f.lastname) as familien ,
( SELECT r.reference FROM App\Entity\Rechnungen r JOIN r.family rf WHERE rf.id = f.id AND r.month = MONTH(p.start) AND r.year = YEAR(p.start) ) as num ,
concat(f.id , MONTH(p.start) , YEAR(p.start)) as family ,
SUM(p.km)*0.30 as total_km_price ,
(SUM(TIMESTAMPDIFF(SECOND, p.start, p.end) / 3600) * ' . $hourPrice . ' ) as total_price_hours ,
(SUM( TIMESTAMPDIFF(SECOND, p.start, p.end) / 3600 *
(' . $hourPrice . ' *
(CASE
WHEN p.holiday = 1 THEN 1.35
WHEN p.sunday = 1 THEN 0.25
ELSE 0
END)
))
) as total_price_extra_hours ,
((SUM(p.km)*0.30)+
(SUM(TIMESTAMPDIFF(SECOND, p.start, p.end) / 3600) *
(' . $hourPrice . ' *
(CASE
WHEN p.holiday = 1 THEN 2.35
WHEN p.sunday = 1 THEN 1.25
ELSE 1
END)
)
)
) as bertrag ,
concat_ws(\'\',MONTH(p.start) , YEAR(p.start)) as month_year ,MONTH(p.start) as m , YEAR(p.start) as y
FROM App\Entity\Calendar p
JOIN p.family f
WHERE 1=1 AND ( SELECT count(rc.reference) FROM App\Entity\Rechnungen rc JOIN rc.family rcf WHERE rcf.id = f.id AND rc.month = MONTH(p.start) AND rc.year = YEAR(p.start) ) = 0 AND p.status = 2 AND DATE_FORMAT(p.start,\'%Y-%m\') >= \'' . $request->get('searchByYear') . '-' . $month . '\' AND DATE_FORMAT(p.start,\'%Y-%m\') <= \'' . $request->get('searchByYear2') . '-' . $month2 . '\' ' . $sql_where . ' ' . $sql_search . ' GROUP BY family ' . $order . '
'
)
->setMaxResults($limit)
->setFirstResult($offset)
->getResult();
$months = ['01' => 'Januar', '02' => 'Februar', '03' => 'März', '04' => 'April', '05' => 'Mai', '06' => 'Juni', '07' => 'Juli', '08' => 'August', '09' => 'September', '10' => 'Oktober', '11' => 'November', '12' => 'Dezember'];
$total = 0;
$output = [];
foreach ($families as $family) {
$dateCalcul = new DateTime($family['y'].'-'.$family['m'].'-01');
$dateCalcul->modify('last day of this month');
$dateEnd = $dateCalcul->format('Y-m-d 23:59:59');
$calendars = $this->em->createQuery(
'SELECT p
FROM App\Entity\Calendar p
WHERE 1=1 AND p.status = 2 AND p.family = '.$family['id'].' AND p.start >= \''.$family['y'].'-'.$family['m'].'-01 00:00:00\' AND p.end <= \''.$dateEnd.'\'
'
)
->getResult() ;
$totalHours = 0;
foreach($calendars as $calendar){
$t1 = strtotime( date_format($calendar->getEnd(),'Y-m-d H:i:s') );
$t2 = strtotime( date_format($calendar->getStart(),'Y-m-d H:i:s') );
$diff = $t1 - $t2;
$hours = $diff / ( 60 * 60 );
$totalHours += $hours;
}
$Rechnungen = $RechnungenRepository->findOneBy(['family' => $family['id'], 'month' => $family['m'], 'year' => $family['y']]);
$jugendamt = $JugendamtRepository->findOneBy(['family' => $family['id']]);
$output[] = [
'family' => $family['familien'] . ($family['status'] == 0 ? ' (Archive)' : ''),
'period' => $months[$family['m'] < 10 ? '0' . $family['m'] : $family['m']] . ' ' . $family['y'],
'stunden' => !is_null($jugendamt) ? $jugendamt->getStunden() : '',
'current_hours' => $totalHours,
'rechnung' => $family['num'],
'steigend' => !is_null($Rechnungen) ? $Rechnungen->getTotalAmount() : $family['total_km_price'] + $family['total_price_extra_hours'] + $family['total_price_hours'],
'id' => $family['id'],
'month' => $family['m'],
'year' => $family['y'],
'token' => $this->tokenManager->getToken('rechnung' . $family['id'])->getValue(),
'file' => $Rechnungen != null ? '/uploads/docs_family/' . sha1($family['id']) . '/Rechnung-' . substr($family['y'], 2, 2) . str_pad($Rechnungen->getNum(), 3, 0, STR_PAD_LEFT) . '.pdf' : ''
];
$total += $family['total_km_price'] + $family['total_price_extra_hours'] + $family['total_price_hours'];
}
$JSON = json_encode($output);
$JSON = '{"draw": ' . $request->get('draw') . ',"recordsTotal":' . $I_nbResultatsTotal . ',"recordsFiltered":' . $I_nbResultatsTotal . ',"total":"' . $total . '","data":' . $JSON . '}';
$response = new Response($JSON, 200, ['Content-Type' => 'application/json']);
return $response;
}
}