GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Push — criterios ( d9c52f...16ffa8 )
by Luis Ramón
02:42
created

BaseController::deleteWorkdayAction()   C

Complexity

Conditions 7
Paths 13

Size

Total Lines 39
Code Lines 26

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 39
rs 6.7272
cc 7
eloc 26
nc 13
nop 2
1
<?php
2
/*
3
  ÁTICA - Aplicación web para la gestión documental de centros educativos
4
5
  Copyright (C) 2015-2016: Luis Ramón López López
6
7
  This program is free software: you can redistribute it and/or modify
8
  it under the terms of the GNU Affero General Public License as published by
9
  the Free Software Foundation, either version 3 of the License, or
10
  (at your option) any later version.
11
12
  This program is distributed in the hope that it will be useful,
13
  but WITHOUT ANY WARRANTY; without even the implied warranty of
14
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
  GNU Affero General Public License for more details.
16
17
  You should have received a copy of the GNU Affero General Public License
18
  along with this program.  If not, see [http://www.gnu.org/licenses/].
19
*/
20
21
namespace AppBundle\Controller;
22
23
use AppBundle\Entity\Agreement;
24
use AppBundle\Entity\Report;
25
use AppBundle\Entity\Tracking;
26
use AppBundle\Entity\Workday;
27
use Sasedev\MpdfBundle\Service\MpdfService;
28
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
29
use Symfony\Component\HttpFoundation\Request;
30
use Symfony\Component\Translation\TranslatorInterface;
31
32
class BaseController extends Controller
33
{
34
    protected function baseWorkdayAction(Workday $workday, Request $request, $options)
35
    {
36
        $agreement = $workday->getAgreement();
37
        $agreementHours = $this->getDoctrine()->getManager()->getRepository('AppBundle:Agreement')->countHours($agreement);
38
39
        $dow = ((6 + (int) $workday->getDate()->format('w')) % 7);
40
41
        $title = $this->get('translator')->trans('dow' . $dow, [], 'calendar') . ', ' . $workday->getDate()->format('d/m/Y');
42
        $em = $this->getDoctrine()->getManager();
43
        $em->getRepository('AppBundle:Tracking')->updateTrackingByWorkday($workday);
44
45
        $form = $this->createForm('AppBundle\Form\Type\WorkdayTrackingType', $workday, [
46
            'disabled' => (!$this->isGranted('AGREEMENT_FILL', $agreement) || $workday->isLocked()) && (!$this->isGranted('AGREEMENT_UNLOCK', $agreement))
47
        ]);
48
        $form->handleRequest($request);
49
50
        if ($form->isSubmitted() && $form->isValid()) {
51
            /** @var Tracking $tracking */
52
            foreach ($workday->getTrackingActivities() as $tracking) {
53
                if ($tracking->getHours() == 0) {
54
                    $workday->removeTrackingActivity($tracking);
55
                    $em->remove($tracking);
56
                } else {
57
                    $em->persist($tracking);
58
                }
59
            }
60
            $em->flush();
61
        }
62
63
        $activitiesStats = $em->getRepository('AppBundle:Agreement')->getActivitiesStats($agreement);
64
        $next = $em->getRepository('AppBundle:Workday')->getNext($workday);
65
        $previous = $em->getRepository('AppBundle:Workday')->getPrevious($workday);
66
67
        return $this->render('student/tracking_form.html.twig',
68
            [
69
                'menu_item' => $options['menu_item'],
70
                'breadcrumb' => $options['breadcrumb'],
71
                'title' => $title,
72
                'user' => $this->getUser(),
73
                'workday' => $workday,
74
                'form' => $form->createView(),
75
                'agreement_hours' => $agreementHours,
76
                'activities_stats' => $activitiesStats,
77
                'next' => $next,
78
                'previous' => $previous,
79
                'back_route_name' => $options['back_route_name']
80
            ]);
81
    }
82
83
    protected function lockWorkdayAction(Agreement $agreement, Request $request, $status, $routeName)
84
    {
85
        $this->denyAccessUnlessGranted($status ? 'AGREEMENT_LOCK' : 'AGREEMENT_UNLOCK', $agreement);
86
87
        $em = $this->getDoctrine()->getManager();
88
89
        if ($request->request->has('ids')) {
90
            try {
91
                $ids = $request->request->get('ids');
92
93
                $em->createQuery('UPDATE AppBundle:Workday w SET w.locked = :locked WHERE w.id IN (:ids) AND w.agreement = :agreement')
94
                    ->setParameter('locked', $status)
95
                    ->setParameter('ids', $ids)
96
                    ->setParameter('agreement', $agreement)
97
                    ->execute();
98
99
                $em->flush();
100
                $this->addFlash('success', $this->get('translator')->trans('alert.locked', [], 'calendar'));
101
            } catch (\Exception $e) {
102
                $this->addFlash('error', $this->get('translator')->trans('alert.locked_error', [], 'calendar'));
103
            }
104
        }
105
        return $this->redirectToRoute($routeName, ['id' => $agreement->getId()]);
106
    }
107
108
    protected function lockWeekAction(Agreement $agreement, Request $request, $status, $routeName)
109
    {
110
        $this->denyAccessUnlessGranted($status ? 'AGREEMENT_LOCK' : 'AGREEMENT_UNLOCK', $agreement);
111
112
        $data = $request->get($status ? 'week_lock' : 'week_unlock');
113
        $week = $data % 100;
114
        $year = intdiv($data, 100);
115
116
        $em = $this->getDoctrine()->getManager();
117
118
        $workdays = $em->getRepository('AppBundle:Workday')->getWorkdaysInWeek($agreement, $week, $year);
119
120
        try {
121
            /** @var Workday $workday */
122
            foreach ($workdays as $workday) {
123
                $workday->setLocked($status);
124
            }
125
126
            $em->flush();
127
            $this->addFlash('success', $this->get('translator')->trans('alert.locked', [], 'calendar'));
128
        } catch (\Exception $e) {
129
            $this->addFlash('error', $this->get('translator')->trans('alert.locked_error', [], 'calendar'));
130
        }
131
132
        return $this->redirectToRoute($routeName, ['id' => $agreement->getId()]);
133
    }
134
135
    protected function deleteWorkdayAction(Agreement $agreement, Request $request)
136
    {
137
        $this->denyAccessUnlessGranted('AGREEMENT_MANAGE', $agreement);
138
139
        $em = $this->getDoctrine()->getManager();
140
141
        if ($request->request->has('ids')) {
142
            try {
143
                $ids = $request->request->get('ids');
144
145
                $dates = $em->getRepository('AppBundle:Workday')->createQueryBuilder('w')
146
                    ->where('w.id IN (:ids)')
147
                    ->andWhere('w.agreement = :agreement')
148
                    ->setParameter('ids', $ids)
149
                    ->setParameter('agreement', $agreement)
150
                    ->getQuery()
151
                    ->getResult();
152
153
                /** @var Workday $date */
154
                foreach ($dates as $date) {
155
                    if ($date->getTrackedHours() === 0.0) {
156
                        $em->remove($date);
157
                    }
158
                }
159
                $em->flush();
160
161
                $from = $this->getDoctrine()->getManager()->getRepository('AppBundle:Agreement')->getRealFromDate($agreement);
162
                $to = $this->getDoctrine()->getManager()->getRepository('AppBundle:Agreement')->getRealToDate($agreement);
163
                $agreement->setFromDate($from ?: null);
164
                $agreement->setToDate($to ?: null);
165
166
                $em->flush();
167
                $this->addFlash('success', $this->get('translator')->trans('alert.deleted', [], 'calendar'));
168
            } catch (\Exception $e) {
169
                $this->addFlash('error', $this->get('translator')->trans('alert.not_deleted', [], 'calendar'));
170
            }
171
        }
172
        return $this->redirectToRoute('admin_group_student_calendar', ['id' => $agreement->getId()]);
173
    }
174
175
    protected function workTutorReportAction(Agreement $agreement, Request $request, $breadcrumb, $routes, $template)
176
    {
177
        $em = $this->getDoctrine()->getManager();
178
        if (null === $agreement->getReport()) {
179
            $report = new Report();
180
            $report->setSignDate(new \DateTime());
181
            $report->setAgreement($agreement);
182
            $em->persist($report);
183
        } else {
184
            $report = $agreement->getReport();
185
        }
186
187
        $form = $this->createForm('AppBundle\Form\Type\ReportType', $report);
188
        $form->handleRequest($request);
189
190
        if ($form->isSubmitted() && $form->isValid()) {
191
            $em->flush();
192
            if ($request->request->has('submit')) {
193
                $this->addFlash('success', $this->get('translator')->trans('alert.saved', [], 'student'));
194
            }
195
            return $this->redirectToRoute(
196
                $request->request->has('submit') ? $routes[0] : $routes[1],
197
                ['id' => $agreement->getId()]);
198
        }
199
200
        return $this->render($template, [
201
            'menu_item' => $this->get('app.menu_builders_chain')->getMenuItemByRouteName('my_student_index'),
202
            'breadcrumb' => $breadcrumb,
203
            'form' => $form->createView(),
204
            'agreement' => $agreement
205
        ]);
206
    }
207
208
    /**
209
     * @param MpdfService $mpdf
210
     * @param $text
211
     * @param $x
212
     * @param $y
213
     * @param $w
214
     * @param $h
215
     * @param string $overflow
216
     * @param string $align
217
     * @param bool $escape
218
     */
219
    private function pdfWriteFixedPosHTML(MpdfService $mpdf, $text, $x, $y, $w, $h, $overflow = 'auto', $align = 'left', $escape = true)
220
    {
221
        $obj = $mpdf->getMpdf();
222
223
        if ($escape) {
224
            $text = nl2br(htmlentities($text));
225
        }
226
        $obj->WriteFixedPosHTML('<div style="font-family: sans-serif; font-size: 12px; text-align: ' . $align . ';">' . $text . '</div>', $x, $y, $w, $h, $overflow);
227
    }
228
229
    /**
230
     * @param MpdfService $mpdf
231
     * @param TranslatorInterface $translator
232
     * @param Agreement $agreement
233
     * @param string $title
234
     */
235
    protected function fillWorkingTutorReport(MpdfService $mpdf, TranslatorInterface $translator, Agreement $agreement, $title)
236
    {
237
        $obj = $mpdf->getMpdf();
238
        $obj->SetImportUse();
239
        $obj->SetDocTemplate('pdf/Informe_tutor_laboral_seneca_rellenable.pdf');
240
241
        $obj->SetFont('DejaVuSansCondensed');
242
        $obj->SetFontSize(9);
243
        $obj->SetTitle($title);
244
245
        $obj->AddPage();
246
        $obj->WriteText(40, 40.8, (string) $agreement->getStudent());
247
        $obj->WriteText(40, 46.6, $this->getParameter('organization.name'));
248
        $obj->WriteText(40, 53, (string) $agreement->getStudent()->getStudentGroup()->getTraining());
249
        $obj->WriteText(179, 53, (string) $agreement->getStudent()->getStudentGroup()->getTraining()->getStage());
250
        $obj->WriteText(40, 59.1, (string) $agreement->getWorkcenter());
251
        $obj->WriteText(165, 59.1, (string) $agreement->getTrackedHours());
252
        $obj->WriteText(82, 65.1, (string) $agreement->getWorkTutor());
253
        $obj->WriteText(68, 71.5, (string) $agreement->getEducationalTutor());
254
255
        $obj->WriteText(108 + $agreement->getReport()->getProfessionalCompetence() * 35.0, 137, 'X');
256
        $obj->WriteText(108 + $agreement->getReport()->getOrganizationalCompetence() * 35.0, 143.5, 'X');
257
        $obj->WriteText(108 + $agreement->getReport()->getRelationalCompetence() * 35.0, 149.5, 'X');
258
        $obj->WriteText(108 + $agreement->getReport()->getContingencyResponse() * 35.0, 155.5, 'X');
259
260
        $obj->WriteText(104.6, 247.6, $agreement->getReport()->getSignDate()->format('d'));
261
        $obj->WriteText(154.4, 247.6, $agreement->getReport()->getSignDate()->format('y'));
262
        $obj->WriteText(89, 275.6, (string) $agreement->getWorkTutor());
263
264
        $this->pdfWriteFixedPosHTML($mpdf, $agreement->getWorkcenter()->getCity(), 61, 244.4, 38, 5, 'auto', 'center');
265
        $this->pdfWriteFixedPosHTML($mpdf, $translator->trans('r_month' . ($agreement->getReport()->getSignDate()->format('n') - 1), [], 'calendar'), 116, 244.4, 26, 5, 'auto', 'center');
266
        $this->pdfWriteFixedPosHTML($mpdf, $agreement->getReport()->getWorkActivities(), 18, 80, 179, 40.5, 'auto', 'justify');
267
        $this->pdfWriteFixedPosHTML($mpdf, $agreement->getReport()->getProposedChanges(), 18, 195, 179, 43, 'auto', 'justify');
268
    }
269
270
    /**
271
     * @param MpdfService $mpdf
272
     * @param TranslatorInterface $translator
273
     * @param Agreement $agreement
274
     * @param Workday[] $weekDays
275
     * @param string $title
276
     * @param boolean $isLocked
277
     * @param array $weekCounter
278
     */
279
    protected function fillWeeklyReport(MpdfService $mpdf, TranslatorInterface $translator, Agreement $agreement, $weekDays, $title, $isLocked, $weekCounter)
280
    {
281
        $activities = [];
282
        $hours = [];
283
        $notes = [];
284
        $noActivity = htmlentities($translator->trans('form.no_activities', [], 'calendar'));
285
        $noWorkday = htmlentities($translator->trans('form.no_workday', [], 'calendar'));
286
287
        foreach($weekDays as $workDay) {
288
            $day = $workDay->getDate()->format('N');
289
            $activities[$day] = '';
290
            $hours[$day] = '';
291
292
            foreach($workDay->getTrackingActivities() as $trackingActivity) {
293
                $activities[$day] .= '<li style="list-style-position: inside; list-style: square;">';
294
                if ($trackingActivity->getActivity()->getCode()) {
295
                    $activities[$day] .= '<b>' . htmlentities($trackingActivity->getActivity()->getCode()) . ': </b>';
296
                }
297
                $activities[$day] .= htmlentities($trackingActivity->getActivity()->getName()) . '</li>';
298
                $hours[$day] .= '<li style="list-style-position: inside; list-style: square;">' . $translator->transChoice('form.r_hours', $trackingActivity->getHours(), ['%hours%' => $trackingActivity->getHours()], 'calendar') . '</li>';
299
            }
300
301
            if ('' === $activities[$day]) {
302
                $activities[$day] = '<i>' . $noActivity . '</i>';
303
            }
304
            $notes[$day] = $workDay->getNotes();
305
        }
306
307
        $obj = $mpdf->getMpdf();
308
309
        $obj->SetImportUse();
310
        $obj->SetDocTemplate('pdf/Ficha_semanal_alumno_seneca_rellenable.pdf');
311
312
        $obj->SetTitle($title);
313
314
        $obj->AddPage('L');
315
316
        // añadir fecha a la ficha
317
        $first = end($weekDays);
318
        $last = reset($weekDays);
319
320
        $this->pdfWriteFixedPosHTML($mpdf, $first->getDate()->format('j'), 54.5, 33.5, 8, 5, 'auto', 'center');
321
        $this->pdfWriteFixedPosHTML($mpdf, $last->getDate()->format('j'), 67.5, 33.5, 10, 5, 'auto', 'center');
322
        $this->pdfWriteFixedPosHTML($mpdf, $translator->trans('r_month' . ($last->getDate()->format('n') - 1), [], 'calendar'), 85, 33.5, 23.6, 5, 'auto', 'center');
323
        $this->pdfWriteFixedPosHTML($mpdf, $last->getDate()->format('y'), 118.5, 33.5, 6, 5, 'auto', 'center');
324
325
        // añadir números de página
326
        $this->pdfWriteFixedPosHTML($mpdf, $weekCounter['current'], 245.5, 21.9, 6, 5, 'auto', 'center');
327
        $this->pdfWriteFixedPosHTML($mpdf, $weekCounter['total'], 254.8, 21.9, 6, 5, 'auto', 'center');
328
329
        // añadir campos de la cabecera
330
        $this->pdfWriteFixedPosHTML($mpdf, (string) $agreement->getWorkcenter(), 192, 40.8, 72, 5, 'auto', 'left');
331
        $this->pdfWriteFixedPosHTML($mpdf, $this->getParameter('organization.name'), 62.7, 40.9, 80, 5, 'auto', 'left');
332
        $this->pdfWriteFixedPosHTML($mpdf, (string) $agreement->getEducationalTutor(), 97.5, 46.5, 46, 5, 'auto', 'left');
333
        $this->pdfWriteFixedPosHTML($mpdf, (string) $agreement->getWorkTutor(), 198, 46.5, 66, 5, 'auto', 'left');
334
        $this->pdfWriteFixedPosHTML($mpdf, (string) $agreement->getStudent()->getStudentGroup()->getTraining(), 172, 54, 61, 5, 'auto', 'left');
335
        $this->pdfWriteFixedPosHTML($mpdf, (string) $agreement->getStudent()->getStudentGroup()->getTraining()->getStage(), 244, 54, 20, 5, 'auto', 'left');
336
        $this->pdfWriteFixedPosHTML($mpdf, (string) $agreement->getStudent(), 63, 54, 80, 5, 'auto', 'left');
337
338
        // añadir actividades semanales
339
        for ($n = 1; $n < 6; $n++) {
340
            if (isset($activities[$n])) {
341
                $activity = $activities[$n];
342
                $hour = $hours[$n];
343
                $note = $notes[$n];
344
            } else {
345
                $activity = '<i>' . $noWorkday . '</i>';
346
                $hour = '';
347
                $note = '';
348
            }
349
            $this->pdfWriteFixedPosHTML($mpdf, $activity, 58, 73.0 + ($n - 1) * 17.8, 128, 15.8, 'auto', 'left', false);
350
            $this->pdfWriteFixedPosHTML($mpdf, $hour, 189, 73.0 + ($n - 1) * 17.8, 25, 15.8, 'auto', 'left', false);
351
            $this->pdfWriteFixedPosHTML($mpdf, $note, 217.5, 73.0 + ($n - 1) * 17.8, 46, 15.8, 'auto', 'justify', true);
352
        }
353
354
        // añadir pie de firmas
355
        $this->pdfWriteFixedPosHTML($mpdf, (string) $agreement->getStudent(), 68, 185.4, 53, 5, 'auto', 'left');
356
        $this->pdfWriteFixedPosHTML($mpdf, (string) $agreement->getEducationalTutor(), 136, 186.9, 53, 5, 'auto', 'left');
357
        $this->pdfWriteFixedPosHTML($mpdf, (string) $agreement->getWorkTutor(), 204, 184.9, 53, 5, 'auto', 'left');
358
359
        // si no está bloqueada la semana, agregar la marca de agua de borrador
360
        if (!$isLocked) {
361
            $obj->SetWatermarkText($translator->trans('form.draft', [], 'calendar'), 0.1);
362
            $obj->showWatermarkText = true;
363
            $obj->watermark_font = 'DejaVuSansCondensed';
364
        }
365
    }
366
}
367