Commit 6b40aa9f authored by Regis's avatar Regis
Browse files

Merge branch '#79_event_course_need_to_be_modified' into 'master'

#79 event course need to be modified

See merge request a_boiteau/site-vikazimut-stage!33
parents 01df51a3 dc28b7e4
......@@ -9,8 +9,10 @@ use App\Entity\ParticipantMakeEventCourse;
use App\Entity\User;
use App\Form\EventType;
use App\Form\EventCourseType;
use App\Form\ModifyEventCourseType;
use App\Form\ModifyParticipantMakeEventCourseType;
use App\Form\ParticipantType;
use App\Model\ModifyEventCourse;
use App\Model\ModifyParticipantMakeEventCourse;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RedirectResponse;
......@@ -206,8 +208,9 @@ class EventController extends AbstractController
if ($participantForm->isSubmitted() && $participantForm->isValid()) {
$error = $participant->create($event, $this->getDoctrine()->getManager());
if ($error == "") {
if ($error === "") {
$success = "success";
return $this->redirect($request->getUri());
}
}
......@@ -249,36 +252,42 @@ class EventController extends AbstractController
* @param Request $request
* @return Response
*/
public function my_event_course(int $id, Request $request): Response
public function my_event_courses(int $id, Request $request): Response
{
$event = $this->getDoctrine()->getRepository(Event::class)->find($id);
$eventCourse = new EventCourse();
$eventCourseForm = $this->createForm(EventCourseType::class, $eventCourse, ['user' => $this->security->getUser(), 'id' => $eventCourse->getId()]);
$eventCourseForm = $this->createForm(EventCourseType::class, $eventCourse, ['user' => $this->security->getUser()]);
$eventCourseForm->handleRequest($request);
if ($eventCourseForm->isSubmitted() && $eventCourseForm->isValid()) {
$event = $this->getDoctrine()->getRepository(Event::class)->find($id);
if ($eventCourseForm->isSubmitted() && $eventCourseForm->isValid() && $eventCourse->getId() === null) {
$eventCourse->setEvent($event);
$eventCourse->convertTimeToMaxTime();
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($eventCourse);
$participants = $event->getParticipants();
foreach ($participants as $participant) {
$participantMakeEventCourse = new ParticipantMakeEventCourse();
$participantMakeEventCourse->setParticipant($participant);
$participantMakeEventCourse->setEventCourse($eventCourse);
$entityManager->persist($participantMakeEventCourse);
$eventCourse->generateParticipantMakeEventCourse($entityManager);
//return $this->redirect($request->getUri());
}
$modifyFormsView=[];
foreach ($this->getDoctrine()->getRepository(Event::class)->find($id)->getEventCourses() as $eventCourse){
$modifyEventCourse = new ModifyEventCourse($eventCourse);
$modifyEventCourseForm = $this->createForm(ModifyEventCourseType::class, $modifyEventCourse,);
$modifyFormsView[$eventCourse->getId()] = $modifyEventCourseForm->createView();
$modifyEventCourseForm->handleRequest($request);
if ($modifyEventCourseForm->isSubmitted() && $modifyEventCourseForm->isValid() && $modifyEventCourse->getId()===$eventCourse->getId()) {
$modifyEventCourse->modify($this->getDoctrine()->getRepository(EventCourse::class), $this->getDoctrine()->getManager());
}
$entityManager->flush();
}
return $this->render(
'event/my_event_add_course.html.twig',
'event/my_event_courses.html.twig',
[
'event' => $event,
'eventCourseForm' => $eventCourseForm->createView(),
'eventCourses' => $this->getDoctrine()->getRepository(Event::class)->find($id)->getEventCourses(),
'idEvent' => $id,
'modifyEventCourseFormView' => $modifyFormsView,
]
);
}
......
......@@ -144,7 +144,7 @@ class EventCourse
public function convertTimeToMaxTime()
{
$this->maxTime = $this->time*1000;
$this->maxTime = $this->time * 1000;
}
public function remove(ObjectManager $entityManager, ParticipantMakeEventCourseRepository $participantMakeEventCourse)
......@@ -155,4 +155,16 @@ class EventCourse
$entityManager->remove($this);
$entityManager->flush();
}
public function generateParticipantMakeEventCourse($entityManager)
{
$participants = $this->event->getParticipants();
foreach ($participants as $participant) {
$participantMakeEventCourse = new ParticipantMakeEventCourse();
$participantMakeEventCourse->setParticipant($participant);
$participantMakeEventCourse->setEventCourse($this);
$entityManager->persist($participantMakeEventCourse);
}
$entityManager->flush();
}
}
\ No newline at end of file
......@@ -6,8 +6,10 @@ namespace App\Form;
use App\Entity\EventCourse;
use App\Entity\User;
use phpDocumentor\Reflection\Types\Integer;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\TimeType;
......@@ -22,6 +24,7 @@ class EventCourseType extends AbstractType
$courses[$course->getName()] = $course;
}
$builder
->add('id', HiddenType::class, ['data' => $options['id']])
->add(
'course',
ChoiceType::class,
......@@ -56,6 +59,7 @@ class EventCourseType extends AbstractType
[
'eventCourse' => EventCourse::class,
'user' => User::class,
'id' => Integer::class,
]
);
}
......
<?php
namespace App\Form;
use App\Model\ModifyEventCourse;
use App\Entity\User;
use phpDocumentor\Reflection\Types\Integer;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\TimeType;
use Symfony\Component\OptionsResolver\OptionsResolver;
class ModifyEventCourseType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('id', HiddenType::class,)
->add(
'format',
ChoiceType::class,
[
'label' => "form.eventCourse.format",
'choices' => [
'form.eventCourse.imposed' => 0,
'form.eventCourse.free' => 1,
],
]
)
->add('missingPunchPenalty', TextType::class, ['label' => "form.eventCourse.missingPunchPenalty",])
->add('overTimePenalty', TextType::class, ['label' => "form.eventCourse.overTimePenalty",])
->add('time', TimeType::class, [
'input' => 'timestamp',
'widget' => 'choice',
'label' => "form.eventCourse.maxTime",
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(
[
'modifyEventCourse' => ModifyEventCourse::class,
]
);
}
}
\ No newline at end of file
<?php
namespace App\Model;
use App\Entity\EventCourse;
class ModifyEventCourse
{
private int $id;
private int $format;
private int $missingPunchPenalty;
private int $overTimePenalty;
private string $time;
function __construct(EventCourse $eventCourse)
{
$this->id = $eventCourse->getId();
$this->format = $eventCourse->getFormat();
$this->missingPunchPenalty = $eventCourse->getMissingPunchPenalty();
$this->overTimePenalty = $eventCourse->getOverTimePenalty();
$this->time = (string)$eventCourse->getMaxTime() / 1000;
}
function modify($eventCourseRepository, $entityManager){
$eventCourse = $eventCourseRepository->find($this->id);
$eventCourse->setFormat($this->format);
$eventCourse->setMissingPunchPenalty($this->missingPunchPenalty);
$eventCourse->setOverTimePenalty($this->overTimePenalty);
$eventCourse->setTime($this->time);
$eventCourse->convertTimeToMaxTime();
$entityManager->persist($eventCourse);
$entityManager->flush();
}
/**
* @return int|null
*/
public function getId(): ?int
{
return $this->id;
}
/**
* @param int|null $id
*/
public function setId(?int $id): void
{
$this->id = $id;
}
/**
* @return int|null
*/
public function getFormat(): ?int
{
return $this->format;
}
/**
* @param int|null $format
*/
public function setFormat(?int $format): void
{
$this->format = $format;
}
/**
* @return int|null
*/
public function getMissingPunchPenalty(): ?int
{
return $this->missingPunchPenalty;
}
/**
* @param int|null $missingPunchPenalty
*/
public function setMissingPunchPenalty(?int $missingPunchPenalty): void
{
$this->missingPunchPenalty = $missingPunchPenalty;
}
/**
* @return int|null
*/
public function getOverTimePenalty(): ?int
{
return $this->overTimePenalty;
}
/**
* @param int|null $overTimePenalty
*/
public function setOverTimePenalty(?int $overTimePenalty): void
{
$this->overTimePenalty = $overTimePenalty;
}
/**
* @return float|int|string
*/
public function getTime()
{
return $this->time;
}
/**
* @param float|int|string $time
*/
public function setTime($time): void
{
$this->time = $time;
}
}
\ No newline at end of file
......@@ -22,8 +22,13 @@
<th scope="col">{% trans %}event.info.courses_table.course{% endtrans %}</th>
<th scope="col">{% trans %}event.info.courses_table.order{% endtrans %}</th>
<th scope="col">{% trans %}event.info.courses_table.limit_time{% endtrans %}</th>
<th scope="col">{% trans %}event.info.courses_table.PM_penalty{% endtrans %}</th>
<th scope="col">{% trans %}event.info.courses_table.over_time_penalty{% endtrans %}</th>
{% if event.type==0 or event.type == 1 %}
<th scope="col">{% trans %}event.info.courses_table.PM_penalty{% endtrans %}</th>
<th scope="col">{% trans %}event.info.courses_table.over_time_penalty{% endtrans %}</th>
{% elseif event.type==2 %}
<th scope="col">{% trans %}event.info.courses_table.PM_penalty_sec{% endtrans %}</th>
<th scope="col">{% trans %}event.info.courses_table.over_time_penalty_sec{% endtrans %}</th>
{% endif %}
</tr>
</thead>
{% for eventCourse in eventCourses %}
......@@ -143,5 +148,5 @@
{% block javascripts %}
<script src="{{ asset('public/javascript/jquery-3.5.1.slim.min.js') }}"></script>
<script src="{{ asset('public/bootstrap-4.5.2/js/bootstrap.min.js') }}"></script>
<script src="{{ asset('public/javascript/event.js') }}"></script>
<script src="{{ asset('public/javascript/event.js') }}"></script>
{% endblock %}
\ No newline at end of file
......@@ -4,18 +4,24 @@
{% block body %}
<div class="container text-center" style="padding-top: 20pt">
<h2>{% trans %}my_events.courses.title{% endtrans %}</h2>
<h2>{% trans %}my_events.courses.title{% endtrans %} : {{ event.name }}</h2>
<div class="overflow-auto h-50" style="margin-bottom: 20px">
<div class=" border rounded" style="padding: 20px">
<h5>{% trans %}my_events.add_course.coursesList{% endtrans %}</h5>
<h5>{% trans %}my_events.add_course.coursesList{% endtrans %} : {{ event.name }}</h5>
<table class="table table-bordered table-sm">
<thead>
<tr>
<th scope="col">{% trans %}my_event_details.courses_table.course{% endtrans %}</th>
<th scope="col">{% trans %}my_event_details.courses_table.order{% endtrans %}</th>
<th scope="col">{% trans %}my_event_details.courses_table.limit_time{% endtrans %}</th>
<th scope="col">{% trans %}my_event_details.courses_table.PM_penalty{% endtrans %}</th>
<th scope="col">{% trans %}my_event_details.courses_table.over_time_penalty{% endtrans %}</th>
{% if event.type==0 or event.type == 1 %}
<th scope="col">{% trans %}my_event_details.courses_table.PM_penalty{% endtrans %}</th>
<th scope="col">{% trans %}my_event_details.courses_table.over_time_penalty{% endtrans %}</th>
{% elseif event.type==2 %}
<th scope="col">{% trans %}my_event_details.courses_table.PM_penalty_sec{% endtrans %}</th>
<th scope="col">{% trans %}my_event_details.courses_table.over_time_penalty_sec{% endtrans %}</th>
{% endif %}
<th scope="col">{% trans %}my_event_details.courses_table.modify{% endtrans %}</th>
<th scope="col">{% trans %}my_event_details.courses_table.remove{% endtrans %}</th>
</tr>
</thead>
......@@ -28,20 +34,59 @@
{% trans %}my_event_details.imposed{% endtrans %}
{% else %}
{% trans %}my_event_details.free{% endtrans %}
{% endif %}</td>
<td class="eventCourse">{{ eventCourse.maxTime }}</td>
<script src="{{ asset('public/javascript/event.js') }}"></script>
<script>convertTime();</script>
{% endif %}
</td>
{% if eventCourse.maxTime==0 %}
<td>-</td>
{% else %}
<td class="msTime">{{ eventCourse.maxTime }}</td>
{% endif %}
<td>{{ eventCourse.missingPunchPenalty }}</td>
<td>{{ eventCourse.overTimePenalty }}</td>
<td>
<button type="button" class="btn btn-danger" data-toggle="modal" data-target="#confirm-delete-{{ eventCourse.id }}">{% trans %}my_events.manage_courses.remove{% endtrans %}</button>
<div class="modal fade" id="confirm-delete-{{ eventCourse.id }}" tabindex="-1" role="dialog" aria-hidden="true">
<button type="button" class="btn btn-primary" data-toggle="modal"
data-target="#modifyCourse{{ eventCourse.id }}">{% trans %}my_event_details.courses_table.modify{% endtrans %}</button>
<div class="modal fade" id="modifyCourse{{ eventCourse.id }}" tabindex="-1"
role="dialog" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">{% trans %}my_event_details.courses_table.modify{% endtrans %}</h5>
<button type="button" class="close" data-dismiss="modal"
aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
{% form_theme modifyEventCourseFormView[eventCourse.id] 'bootstrap_4_layout.html.twig' %}
{{ form_start(modifyEventCourseFormView[eventCourse.id]) }}
<div class="modal-body">
{{ form_row(modifyEventCourseFormView[eventCourse.id].format) }}
{{ form_row(modifyEventCourseFormView[eventCourse.id].missingPunchPenalty) }}
{{ form_row(modifyEventCourseFormView[eventCourse.id].overTimePenalty) }}
{{ form_row(modifyEventCourseFormView[eventCourse.id].time) }}
</div>
<div class="modal-footer">
<button type="submit"
class="btn btn-primary">{% trans %}my_events.modify_course.confirm{% endtrans %}</button>
<button type="button" class="btn btn-secondary"
data-dismiss="modal">{% trans %}my_events.modify_course.abort{% endtrans %}</button>
</div>
{{ form_end(modifyEventCourseFormView[eventCourse.id]) }}
</div>
</div>
</div>
</td>
<td>
<button type="button" class="btn btn-danger" data-toggle="modal"
data-target="#confirm-delete-{{ eventCourse.id }}">{% trans %}my_events.manage_courses.remove{% endtrans %}</button>
<div class="modal fade" id="confirm-delete-{{ eventCourse.id }}" tabindex="-1"
role="dialog" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">{% trans %}my_events.manage_courses.remove{% endtrans %}</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<button type="button" class="close" data-dismiss="modal"
aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
......@@ -49,8 +94,11 @@
{% trans %}my_events.manage_courses.remove_message{% endtrans %}
</div>
<div class="modal-footer">
<a href="{{ path('my_event_delete_course', {idEvent: idEvent, id: eventCourse.id}) }}" type="button" class="btn btn-secondary">{% trans %}my_events.manage_courses.confirm.remove{% endtrans %}</a>
<button type="button" class="btn btn-primary" data-dismiss="modal">{% trans %}my_events.manage_courses.confirm.abort{% endtrans %}</button>
<a href="{{ path('my_event_delete_course', {idEvent: idEvent, id: eventCourse.id}) }}"
type="button"
class="btn btn-secondary">{% trans %}my_events.manage_courses.confirm.remove{% endtrans %}</a>
<button type="button" class="btn btn-primary"
data-dismiss="modal">{% trans %}my_events.manage_courses.confirm.abort{% endtrans %}</button>
</div>
</div>
</div>
......@@ -60,17 +108,46 @@
</tbody>
{% endfor %}
</table>
<h5>{% trans %}my_events.add_course.title{% endtrans %} :</h5>
{% form_theme eventCourseForm 'bootstrap_4_layout.html.twig' %}
{{ form_start(eventCourseForm) }}
{{ form_row(eventCourseForm.course) }}
{{ form_row(eventCourseForm.format) }}
{{ form_row(eventCourseForm.missingPunchPenalty) }}
{{ form_row(eventCourseForm.overTimePenalty) }}
{{ form_row(eventCourseForm.time) }}
<button type="submit" class="btn btn-primary">ajouter</button>
{{ form_end(eventCourseForm) }}
<button type="button" class="btn btn-primary" data-toggle="modal"
data-target="#addNewEventCourse">{% trans %}my_events.add_course.title{% endtrans %}</button>
<div class="modal fade" id="addNewEventCourse" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">{% trans %}my_events.add_course.title{% endtrans %}</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
{% form_theme eventCourseForm 'bootstrap_4_layout.html.twig' %}
{{ form_start(eventCourseForm) }}
<div class="modal-body">
{{ form_row(eventCourseForm.course) }}
{{ form_row(eventCourseForm.format) }}
{{ form_row(eventCourseForm.missingPunchPenalty) }}
{{ form_row(eventCourseForm.overTimePenalty) }}
{{ form_row(eventCourseForm.time) }}
</div>
<div class="modal-footer">
<button type="submit"
class="btn btn-primary">{% trans %}my_events.add_course.confirm{% endtrans %}</button>
<button type="button" class="btn btn-secondary"
data-dismiss="modal">{% trans %}my_events.add_course.abort{% endtrans %}</button>
</div>
{{ form_end(eventCourseForm) }}
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
{% block javascripts %}
<script src="{{ asset('public/javascript/jquery-3.5.1.slim.min.js') }}"></script>
<script src="{{ asset('public/bootstrap-4.5.2/js/bootstrap.min.js') }}"></script>
<script src="{{ asset('public/javascript/event.js') }}"></script>
{% endblock %}
\ No newline at end of file
......@@ -22,8 +22,13 @@
<th scope="col">{% trans %}my_event_details.courses_table.course{% endtrans %}</th>
<th scope="col">{% trans %}my_event_details.courses_table.order{% endtrans %}</th>
<th scope="col">{% trans %}my_event_details.courses_table.limit_time{% endtrans %}</th>
<th scope="col">{% trans %}my_event_details.courses_table.PM_penalty{% endtrans %}</th>
<th scope="col">{% trans %}my_event_details.courses_table.over_time_penalty{% endtrans %}</th>
{% if event.type==0 or event.type == 1 %}
<th scope="col">{% trans %}my_event_details.courses_table.PM_penalty{% endtrans %}</th>
<th scope="col">{% trans %}my_event_details.courses_table.over_time_penalty{% endtrans %}</th>
{% elseif event.type==2 %}
<th scope="col">{% trans %}my_event_details.courses_table.PM_penalty_sec{% endtrans %}</th>
<th scope="col">{% trans %}my_event_details.courses_table.over_time_penalty_sec{% endtrans %}</th>
{% endif %}
</tr>
</thead>
<tbody>
......@@ -83,9 +88,11 @@
( {{ ranking[3][ranking[0][rank]][eventCourse][1] }}
| {{ ranking[3][ranking[0][rank]][eventCourse][2] }} )
{% if ranking[5][ranking[0][rank]][eventCourse][0] %}
<button type="button" class="btn btn-success" data-toggle="modal" data-target="#modify-{{ participants.get(ranking[0][rank]).id }}-{{ eventCourses[eventCourse].id }}">{% trans %}my_events.modify{% endtrans %}</button>
<button type="button" class="btn btn-success" data-toggle="modal"
data-target="#modify-{{ participants.get(ranking[0][rank]).id }}-{{ eventCourses[eventCourse].id }}">{% trans %}my_events.modify{% endtrans %}</button>
{% else %}
<button type="button" class="btn btn-warning" data-toggle="modal" data-target="#modify-{{ participants.get(ranking[0][rank]).id }}-{{ eventCourses[eventCourse].id }}">{% trans %}my_events.modify{% endtrans %}</button>
<button type="button" class="btn btn-warning" data-toggle="modal"
data-target="#modify-{{ participants.get(ranking[0][rank]).id }}-{{ eventCourses[eventCourse].id }}">{% trans %}my_events.modify{% endtrans %}</button>
{% endif %}
<div class="modal fade"
id="modify-{{ participants.get(ranking[0][rank]).id }}-{{ eventCourses[eventCourse].id }}"
......@@ -121,9 +128,11 @@
({{ ranking[3][ranking[0][rank]][eventCourse][1] }}
|{{ ranking[3][ranking[0][rank]][eventCourse][2] }})
{% if ranking[5][ranking[0][rank]][eventCourse][0] %}
<button type="button" class="btn btn-success" data-toggle="modal" data-target="#modify-{{ participants.get(ranking[0][rank]).id }}-{{ eventCourses[eventCourse].id }}">{% trans %}my_events.modify{% endtrans %}</button>
<button type="button" class="btn btn-success" data-toggle="modal"
data-target="#modify-{{ participants.get(ranking[0][rank]).id }}-{{ eventCourses[eventCourse].id }}">{% trans %}my_events.modify{% endtrans %}</button>
{% else %}
<button type="button" class="btn btn-warning" data-toggle="modal" data-target="#modify-{{ participants.get(ranking[0][rank]).id }}-{{ eventCourses[eventCourse].id }}">{% trans %}my_events.modify{% endtrans %}</button>
<button type="button" class="btn btn-warning" data-toggle="modal"
data-target="#modify-{{ participants.get(ranking[0][rank]).id }}-{{ eventCourses[eventCourse].id }}">{% trans %}my_events.modify{% endtrans %}</button>
{% endif %}
<div class="modal fade"
id="modify-{{ participants.get(ranking[0][rank]).id }}-{{ eventCourses[eventCourse].id }}"
......
......@@ -647,7 +647,7 @@ of Computer Science.</target>
</trans-unit>
<trans-unit id="2Z2rBfK" resname="my_event_details.courses_table.over_time_penalty">
<source>my_event_details.courses_table.over_time_penalty</source>
<target>Over time penalty</target>
<target>Penalty per minute exceeded</target>
</trans-unit>
<trans-unit id="3Wlf2.i" resname="my_event_details.courses_table.PM_penalty">
<source>my_event_details.courses_table.PM_penalty</source>
......@@ -1061,6 +1061,46 @@ of Computer Science.</target>
<source>admin_list_planners.events</source>
<target>Events</target>
</trans-unit>
<trans-unit id="_OwCnT9" resname="my_event_details.courses_table.modify">
<source>my_event_details.courses_table.modify</source>
<target>Modify</target>
</trans-unit>
<trans-unit id="7gV9hhn" resname="my_events.manage_courses.modify">
<source>my_events.manage_courses.modify</source>
<target>Modify</target>
</trans-unit>
<trans-unit id="Qve6fQ4" resname="my_events.add_course.confirm">
<source>my_events.add_course.confirm</source>
<target>Add</target>
</trans-unit>
<trans-unit id="_fK1hMI" resname="my_events.add_course.abort">
<source>my_events.add_course.abort</source>
<target>Cancel</target>
</trans-unit>
<trans-unit id="x5C6wHW" resname="event.info.courses_table.PM_penalty_sec">
<source>event.info.courses_table.PM_penalty_sec</source>
<target>PM penalty in second</target>
</trans-unit>
<trans-unit id="QQddspD" resname="event.info.courses_table.over_time_penalty_sec">
<source>event.info.courses_table.over_time_penalty_sec</source>
<target>Penalty per minute exceeded in second</target>
</trans-unit>
<trans-unit id="eAcXosP" resname="my_event_details.courses_table.PM_penalty_sec">
<source>my_event_details.courses_table.PM_penalty_sec</source>
<target>PM penalty in second</target>
</trans-unit>
<trans-unit id="6bqsSb4" resname="my_event_details.courses_table.over_time_penalty_sec">
<source>my_event_details.courses_table.over_time_penalty_sec</source>
<target>Penalty per minute exceeded in second</target>
</trans-unit>
<trans-unit id="DDVg_8F" resname="my_events.modify_course.confirm">
<source>my_events.modify_course.confirm</source>
<target>Modify</target>
</trans-unit>
<trans-unit id="hklG9du" resname="my_events.modify_course.abort">
<source>my_events.modify_course.abort</source>