fixes for new quick-entry week form (#2887)
This commit is contained in:
@@ -15,6 +15,7 @@ use App\Form\Type\WeekPickerType;
|
|||||||
use App\Model\QuickEntryWeek;
|
use App\Model\QuickEntryWeek;
|
||||||
use App\Validator\Constraints\QuickEntryModel;
|
use App\Validator\Constraints\QuickEntryModel;
|
||||||
use Symfony\Component\Form\AbstractType;
|
use Symfony\Component\Form\AbstractType;
|
||||||
|
use Symfony\Component\Form\CallbackTransformer;
|
||||||
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
|
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
|
||||||
use Symfony\Component\Form\FormBuilderInterface;
|
use Symfony\Component\Form\FormBuilderInterface;
|
||||||
use Symfony\Component\Form\FormInterface;
|
use Symfony\Component\Form\FormInterface;
|
||||||
@@ -36,6 +37,29 @@ class QuickEntryForm extends AbstractType
|
|||||||
*/
|
*/
|
||||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||||
{
|
{
|
||||||
|
$builder->addModelTransformer(new CallbackTransformer(
|
||||||
|
function ($value) {
|
||||||
|
// page is loaded, nothing to do
|
||||||
|
return $value;
|
||||||
|
},
|
||||||
|
function (?QuickEntryWeek $value) {
|
||||||
|
if ($value === null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($value->getRows() as $row) {
|
||||||
|
$project = $row->getProject();
|
||||||
|
$activity = $row->getActivity();
|
||||||
|
foreach ($row->getTimesheets() as $timesheet) {
|
||||||
|
$timesheet->setProject($project);
|
||||||
|
$timesheet->setActivity($activity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $value;
|
||||||
|
}
|
||||||
|
));
|
||||||
|
|
||||||
$startDate = new \DateTime();
|
$startDate = new \DateTime();
|
||||||
if ($builder->getData() !== null) {
|
if ($builder->getData() !== null) {
|
||||||
/** @var QuickEntryWeek $data */
|
/** @var QuickEntryWeek $data */
|
||||||
|
|||||||
@@ -82,9 +82,23 @@ class QuickEntryWeekType extends AbstractType
|
|||||||
|
|
||||||
$event->getForm()->add('activity', ActivityType::class, $activityOptions);
|
$event->getForm()->add('activity', ActivityType::class, $activityOptions);
|
||||||
};
|
};
|
||||||
|
|
||||||
$builder->addEventListener(FormEvents::PRE_SET_DATA, $activityFunction);
|
$builder->addEventListener(FormEvents::PRE_SET_DATA, $activityFunction);
|
||||||
|
|
||||||
|
$activityPreSubmitFunction = function (FormEvent $event) use ($activityOptions) {
|
||||||
|
$data = $event->getData();
|
||||||
|
|
||||||
|
if (isset($data['project']) && !empty($data['project'])) {
|
||||||
|
$activityOptions['projects'] = [$data['project']];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($data['activity']) && !empty($data['activity'])) {
|
||||||
|
$activityOptions['activities'] = [$data['activity']];
|
||||||
|
}
|
||||||
|
|
||||||
|
$event->getForm()->add('activity', ActivityType::class, $activityOptions);
|
||||||
|
};
|
||||||
|
$builder->addEventListener(FormEvents::PRE_SUBMIT, $activityPreSubmitFunction);
|
||||||
|
|
||||||
$builder->add('timesheets', CollectionType::class, [
|
$builder->add('timesheets', CollectionType::class, [
|
||||||
'entry_type' => QuickEntryTimesheetType::class,
|
'entry_type' => QuickEntryTimesheetType::class,
|
||||||
'label' => false,
|
'label' => false,
|
||||||
|
|||||||
@@ -695,6 +695,9 @@ class TimesheetControllerTest extends ControllerBaseTest
|
|||||||
$fixture->setStartDate($dateTime->createDateTime());
|
$fixture->setStartDate($dateTime->createDateTime());
|
||||||
$fixture->setCallback(function (Timesheet $timesheet) {
|
$fixture->setCallback(function (Timesheet $timesheet) {
|
||||||
$timesheet->setDescription('Testing is fun!');
|
$timesheet->setDescription('Testing is fun!');
|
||||||
|
$begin = clone $timesheet->getBegin();
|
||||||
|
$begin->setTime(0, 0, 0);
|
||||||
|
$timesheet->setBegin($begin);
|
||||||
$end = clone $timesheet->getBegin();
|
$end = clone $timesheet->getBegin();
|
||||||
$end->modify('+ 8 hours');
|
$end->modify('+ 8 hours');
|
||||||
$timesheet->setEnd($end);
|
$timesheet->setEnd($end);
|
||||||
@@ -726,7 +729,6 @@ class TimesheetControllerTest extends ControllerBaseTest
|
|||||||
$this->assertEquals(2016, $timesheet->getRate());
|
$this->assertEquals(2016, $timesheet->getRate());
|
||||||
$this->assertEquals(127, $timesheet->getHourlyRate());
|
$this->assertEquals(127, $timesheet->getHourlyRate());
|
||||||
$this->assertEquals(2016, $timesheet->getFixedRate());
|
$this->assertEquals(2016, $timesheet->getFixedRate());
|
||||||
$this->assertTrue($timesheet->getDuration() == 28800 || $timesheet->getDuration() == 28860); // 1 minute rounding might be applied
|
|
||||||
$this->assertEquals(2016, $timesheet->getRate());
|
$this->assertEquals(2016, $timesheet->getRate());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -414,6 +414,9 @@ class TimesheetTeamControllerTest extends ControllerBaseTest
|
|||||||
$fixture->setStartDate($dateTime->createDateTime());
|
$fixture->setStartDate($dateTime->createDateTime());
|
||||||
$fixture->setCallback(function (Timesheet $timesheet) {
|
$fixture->setCallback(function (Timesheet $timesheet) {
|
||||||
$timesheet->setDescription('Testing is fun!');
|
$timesheet->setDescription('Testing is fun!');
|
||||||
|
$begin = clone $timesheet->getBegin();
|
||||||
|
$begin->setTime(0, 0, 0);
|
||||||
|
$timesheet->setBegin($begin);
|
||||||
$end = clone $timesheet->getBegin();
|
$end = clone $timesheet->getBegin();
|
||||||
$end->modify('+ 8 hours');
|
$end->modify('+ 8 hours');
|
||||||
$timesheet->setEnd($end);
|
$timesheet->setEnd($end);
|
||||||
@@ -445,7 +448,6 @@ class TimesheetTeamControllerTest extends ControllerBaseTest
|
|||||||
$this->assertEquals(2016, $timesheet->getRate());
|
$this->assertEquals(2016, $timesheet->getRate());
|
||||||
$this->assertEquals(127, $timesheet->getHourlyRate());
|
$this->assertEquals(127, $timesheet->getHourlyRate());
|
||||||
$this->assertEquals(2016, $timesheet->getFixedRate());
|
$this->assertEquals(2016, $timesheet->getFixedRate());
|
||||||
$this->assertTrue($timesheet->getDuration() == 28800 || $timesheet->getDuration() == 28860); // 1 minute rounding might be applied
|
|
||||||
$this->assertEquals(2016, $timesheet->getRate());
|
$this->assertEquals(2016, $timesheet->getRate());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user