added more columns to spreadsheet exports (#2413)
This commit is contained in:
@@ -49,7 +49,6 @@ use Symfony\Component\Validator\Constraints as Assert;
|
||||
*
|
||||
* @Exporter\Order({"id", "name", "project", "budget", "timeBudget", "color", "visible", "comment"})
|
||||
* @Exporter\Expose("project", label="label.project", exp="object.getProject() === null ? null : object.getProject().getName()")
|
||||
* @ Exporter\Expose("teams", label="label.team", exp="object.getTeams().toArray()", type="array")
|
||||
*/
|
||||
class Activity implements EntityWithMetaFields
|
||||
{
|
||||
@@ -368,7 +367,22 @@ class Activity implements EntityWithMetaFields
|
||||
{
|
||||
if ($this->id) {
|
||||
$this->id = null;
|
||||
$this->meta = new ArrayCollection();
|
||||
}
|
||||
|
||||
$currentTeams = $this->teams;
|
||||
$this->teams = new ArrayCollection();
|
||||
/** @var Team $team */
|
||||
foreach ($currentTeams as $team) {
|
||||
$this->addTeam($team);
|
||||
}
|
||||
|
||||
$currentMeta = $this->meta;
|
||||
$this->meta = new ArrayCollection();
|
||||
/** @var ProjectMeta $meta */
|
||||
foreach ($currentMeta as $meta) {
|
||||
$newMeta = clone $meta;
|
||||
$newMeta->setEntity($this);
|
||||
$this->setMetaField($newMeta);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -632,4 +632,27 @@ class Customer implements EntityWithMetaFields
|
||||
{
|
||||
return $this->getName();
|
||||
}
|
||||
|
||||
public function __clone()
|
||||
{
|
||||
if ($this->id) {
|
||||
$this->id = null;
|
||||
}
|
||||
|
||||
$currentTeams = $this->teams;
|
||||
$this->teams = new ArrayCollection();
|
||||
/** @var Team $team */
|
||||
foreach ($currentTeams as $team) {
|
||||
$this->addTeam($team);
|
||||
}
|
||||
|
||||
$currentMeta = $this->meta;
|
||||
$this->meta = new ArrayCollection();
|
||||
/** @var ProjectMeta $meta */
|
||||
foreach ($currentMeta as $meta) {
|
||||
$newMeta = clone $meta;
|
||||
$newMeta->setEntity($this);
|
||||
$this->setMetaField($newMeta);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -531,8 +531,22 @@ class Project implements EntityWithMetaFields
|
||||
{
|
||||
if ($this->id) {
|
||||
$this->id = null;
|
||||
$this->teams = new ArrayCollection();
|
||||
$this->meta = new ArrayCollection();
|
||||
}
|
||||
|
||||
$currentTeams = $this->teams;
|
||||
$this->teams = new ArrayCollection();
|
||||
/** @var Team $team */
|
||||
foreach ($currentTeams as $team) {
|
||||
$this->addTeam($team);
|
||||
}
|
||||
|
||||
$currentMeta = $this->meta;
|
||||
$this->meta = new ArrayCollection();
|
||||
/** @var ProjectMeta $meta */
|
||||
foreach ($currentMeta as $meta) {
|
||||
$newMeta = clone $meta;
|
||||
$newMeta->setEntity($this);
|
||||
$this->setMetaField($newMeta);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -166,8 +166,6 @@ class Timesheet implements EntityWithMetaFields, ExportItemInterface
|
||||
*/
|
||||
private $user;
|
||||
/**
|
||||
* Activity
|
||||
*
|
||||
* @var Activity
|
||||
*
|
||||
* @Serializer\Expose()
|
||||
@@ -180,8 +178,6 @@ class Timesheet implements EntityWithMetaFields, ExportItemInterface
|
||||
*/
|
||||
private $activity;
|
||||
/**
|
||||
* Project
|
||||
*
|
||||
* @var Project
|
||||
*
|
||||
* @Serializer\Expose()
|
||||
@@ -727,6 +723,13 @@ class Timesheet implements EntityWithMetaFields, ExportItemInterface
|
||||
$timesheet->setMetaField(clone $meta);
|
||||
}
|
||||
|
||||
$timesheet->tags = new ArrayCollection();
|
||||
|
||||
/** @var Tag $tag */
|
||||
foreach ($this->tags as $tag) {
|
||||
$timesheet->addTag($tag);
|
||||
}
|
||||
|
||||
return $timesheet;
|
||||
}
|
||||
|
||||
@@ -734,7 +737,24 @@ class Timesheet implements EntityWithMetaFields, ExportItemInterface
|
||||
{
|
||||
if ($this->id) {
|
||||
$this->id = null;
|
||||
$this->exported = false;
|
||||
}
|
||||
|
||||
$this->exported = false;
|
||||
|
||||
$currentMeta = $this->meta;
|
||||
$this->meta = new ArrayCollection();
|
||||
/** @var TimesheetMeta $meta */
|
||||
foreach ($currentMeta as $meta) {
|
||||
$newMeta = clone $meta;
|
||||
$newMeta->setEntity($this);
|
||||
$this->setMetaField($newMeta);
|
||||
}
|
||||
|
||||
$currentTags = $this->tags;
|
||||
$this->tags = new ArrayCollection();
|
||||
/** @var Tag $tag */
|
||||
foreach ($currentTags as $tag) {
|
||||
$this->addTag($tag);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -90,6 +90,11 @@ abstract class AbstractSpreadsheetRenderer
|
||||
'project-meta' => [],
|
||||
'activity-meta' => [],
|
||||
'user-meta' => [],
|
||||
'type' => [],
|
||||
'category' => [],
|
||||
'customer_number' => [],
|
||||
'customer_vat' => [],
|
||||
'order_number' => [],
|
||||
];
|
||||
|
||||
public function __construct(TranslatorInterface $translator, LocaleFormatExtensions $dateExtension, EventDispatcherInterface $dispatcher, AuthorizationCheckerInterface $voter)
|
||||
@@ -503,6 +508,78 @@ abstract class AbstractSpreadsheetRenderer
|
||||
];
|
||||
}
|
||||
|
||||
if (isset($columns['type']) && !isset($columns['type']['render'])) {
|
||||
$columns['type']['render'] = function (Worksheet $sheet, int $row, int $column, ExportItemInterface $entity) {
|
||||
$sheet->setCellValueByColumnAndRow($column, $row, $entity->getType());
|
||||
};
|
||||
}
|
||||
|
||||
if (isset($columns['category']) && !isset($columns['category']['render'])) {
|
||||
$columns['category']['render'] = function (Worksheet $sheet, int $row, int $column, ExportItemInterface $entity) {
|
||||
$sheet->setCellValueByColumnAndRow($column, $row, $entity->getCategory());
|
||||
};
|
||||
}
|
||||
|
||||
if (isset($columns['customer_number'])) {
|
||||
if (!isset($columns['customer_number']['header'])) {
|
||||
$columns['customer_number']['header'] = function (Worksheet $sheet, $row, $column) {
|
||||
$sheet->setCellValueByColumnAndRow($column, $row, $this->translator->trans('label.number'));
|
||||
|
||||
return 1;
|
||||
};
|
||||
}
|
||||
|
||||
if (!isset($columns['customer_number']['render'])) {
|
||||
$columns['customer_number']['render'] = function (Worksheet $sheet, int $row, int $column, ExportItemInterface $entity) {
|
||||
$customerId = '';
|
||||
if (null !== $entity->getProject()) {
|
||||
$customerId = $entity->getProject()->getCustomer()->getNumber();
|
||||
}
|
||||
$sheet->setCellValueByColumnAndRow($column, $row, $customerId);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($columns['customer_vat']) && !isset($columns['customer_vat']['render'])) {
|
||||
if (!isset($columns['customer_vat']['header'])) {
|
||||
$columns['customer_vat']['header'] = function (Worksheet $sheet, $row, $column) {
|
||||
$sheet->setCellValueByColumnAndRow($column, $row, $this->translator->trans('label.vat_id'));
|
||||
|
||||
return 1;
|
||||
};
|
||||
}
|
||||
|
||||
if (!isset($columns['customer_vat']['render'])) {
|
||||
$columns['customer_vat']['render'] = function (Worksheet $sheet, int $row, int $column, ExportItemInterface $entity) {
|
||||
$customerVat = '';
|
||||
if (null !== $entity->getProject()) {
|
||||
$customerVat = $entity->getProject()->getCustomer()->getVatId();
|
||||
}
|
||||
$sheet->setCellValueByColumnAndRow($column, $row, $customerVat);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($columns['order_number']) && !isset($columns['order_number']['render'])) {
|
||||
if (!isset($columns['order_number']['header'])) {
|
||||
$columns['order_number']['header'] = function (Worksheet $sheet, $row, $column) {
|
||||
$sheet->setCellValueByColumnAndRow($column, $row, $this->translator->trans('label.orderNumber'));
|
||||
|
||||
return 1;
|
||||
};
|
||||
}
|
||||
|
||||
if (!isset($columns['order_number']['render'])) {
|
||||
$columns['order_number']['render'] = function (Worksheet $sheet, int $row, int $column, ExportItemInterface $entity) {
|
||||
$orderNumber = '';
|
||||
if (null !== $entity->getProject()) {
|
||||
$orderNumber = $entity->getProject()->getOrderNumber();
|
||||
}
|
||||
$sheet->setCellValueByColumnAndRow($column, $row, $orderNumber);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
if (!$showRates) {
|
||||
$removes = ['rate', 'fixedRate', 'hourlyRate', 'rate_internal'];
|
||||
foreach ($removes as $removeMe) {
|
||||
|
||||
@@ -158,4 +158,45 @@ class ActivityTest extends TestCase
|
||||
self::assertEquals($item[1], $column->getType());
|
||||
}
|
||||
}
|
||||
|
||||
public function testClone()
|
||||
{
|
||||
$sut = new Activity();
|
||||
$sut->setName('activity1111');
|
||||
$sut->setComment('DE-0123456789');
|
||||
|
||||
$project = new Project();
|
||||
$project->setName('foo');
|
||||
$project->setOrderNumber('1234567890');
|
||||
$project->setBudget(123.45);
|
||||
$project->setTimeBudget(12345);
|
||||
$project->setVisible(false);
|
||||
$project->setEnd(new \DateTime());
|
||||
$project->setColor('#ccc');
|
||||
|
||||
$sut->setProject($project);
|
||||
|
||||
$team = new Team();
|
||||
$sut->addTeam($team);
|
||||
|
||||
$meta = new ActivityMeta();
|
||||
$meta->setName('blabla');
|
||||
$meta->setValue('1234567890');
|
||||
$meta->setIsVisible(false);
|
||||
$meta->setIsRequired(true);
|
||||
$sut->setMetaField($meta);
|
||||
|
||||
$clone = clone $sut;
|
||||
|
||||
foreach ($sut->getMetaFields() as $metaField) {
|
||||
$cloneMeta = $clone->getMetaField($metaField->getName());
|
||||
self::assertEquals($cloneMeta->getValue(), $metaField->getValue());
|
||||
}
|
||||
self::assertEquals($clone->getBudget(), $sut->getBudget());
|
||||
self::assertEquals($clone->getTimeBudget(), $sut->getTimeBudget());
|
||||
self::assertEquals($clone->getComment(), $sut->getComment());
|
||||
self::assertEquals($clone->getColor(), $sut->getColor());
|
||||
self::assertEquals('DE-0123456789', $clone->getComment());
|
||||
self::assertEquals('activity1111', $clone->getName());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -211,4 +211,35 @@ class CustomerTest extends TestCase
|
||||
self::assertEquals($item[1], $column->getType());
|
||||
}
|
||||
}
|
||||
|
||||
public function testClone()
|
||||
{
|
||||
$sut = new Customer();
|
||||
$sut->setName('mycustomer');
|
||||
$sut->setVatId('DE-0123456789');
|
||||
$sut->setTimeBudget(123456);
|
||||
$sut->setBudget(1234.56);
|
||||
|
||||
$team = new Team();
|
||||
$sut->addTeam($team);
|
||||
|
||||
$meta = new CustomerMeta();
|
||||
$meta->setName('blabla');
|
||||
$meta->setValue('1234567890');
|
||||
$meta->setIsVisible(false);
|
||||
$meta->setIsRequired(true);
|
||||
$sut->setMetaField($meta);
|
||||
|
||||
$clone = clone $sut;
|
||||
|
||||
foreach ($sut->getMetaFields() as $metaField) {
|
||||
$cloneMeta = $clone->getMetaField($metaField->getName());
|
||||
self::assertEquals($cloneMeta->getValue(), $metaField->getValue());
|
||||
}
|
||||
self::assertEquals($clone->getBudget(), $sut->getBudget());
|
||||
self::assertEquals($clone->getTimeBudget(), $sut->getTimeBudget());
|
||||
self::assertEquals($clone->getColor(), $sut->getColor());
|
||||
self::assertEquals('DE-0123456789', $clone->getVatId());
|
||||
self::assertEquals('mycustomer', $clone->getName());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -185,4 +185,45 @@ class ProjectTest extends TestCase
|
||||
self::assertEquals($item[1], $column->getType());
|
||||
}
|
||||
}
|
||||
|
||||
public function testClone()
|
||||
{
|
||||
$customer = new Customer();
|
||||
$customer->setName('prj-customer');
|
||||
$customer->setVatId('DE-0123456789');
|
||||
|
||||
$sut = new Project();
|
||||
$sut->setName('foo');
|
||||
$sut->setOrderNumber('1234567890');
|
||||
$sut->setBudget(123.45);
|
||||
$sut->setTimeBudget(12345);
|
||||
$sut->setVisible(false);
|
||||
$sut->setEnd(new \DateTime());
|
||||
$sut->setColor('#ccc');
|
||||
|
||||
$sut->setCustomer($customer);
|
||||
|
||||
$team = new Team();
|
||||
$sut->addTeam($team);
|
||||
|
||||
$meta = new ProjectMeta();
|
||||
$meta->setName('blabla');
|
||||
$meta->setValue('1234567890');
|
||||
$meta->setIsVisible(false);
|
||||
$meta->setIsRequired(true);
|
||||
$sut->setMetaField($meta);
|
||||
|
||||
$clone = clone $sut;
|
||||
|
||||
foreach ($sut->getMetaFields() as $metaField) {
|
||||
$cloneMeta = $clone->getMetaField($metaField->getName());
|
||||
self::assertEquals($cloneMeta->getValue(), $metaField->getValue());
|
||||
}
|
||||
self::assertEquals($clone->getBudget(), $sut->getBudget());
|
||||
self::assertEquals($clone->getTimeBudget(), $sut->getTimeBudget());
|
||||
self::assertEquals($clone->getEnd(), $sut->getEnd());
|
||||
self::assertEquals($clone->getColor(), $sut->getColor());
|
||||
self::assertEquals('DE-0123456789', $clone->getCustomer()->getVatId());
|
||||
self::assertEquals('prj-customer', $clone->getCustomer()->getName());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -172,4 +172,39 @@ class TimesheetTest extends TestCase
|
||||
|
||||
$sut->setCategory('foo');
|
||||
}
|
||||
|
||||
public function testClone()
|
||||
{
|
||||
$sut = new Timesheet();
|
||||
$sut->setExported(true);
|
||||
$sut->setDescription('Invalid timesheet category "foo" given, expected one of: work, holiday, sickness, parental, overtime');
|
||||
|
||||
$meta = new TimesheetMeta();
|
||||
$meta->setName('blabla');
|
||||
$meta->setValue('1234567890');
|
||||
$meta->setIsVisible(false);
|
||||
$meta->setIsRequired(true);
|
||||
$sut->setMetaField($meta);
|
||||
|
||||
$tag = new Tag();
|
||||
$tag->setName('bar');
|
||||
$sut->addTag($tag);
|
||||
$tag = new Tag();
|
||||
$tag->setName('foo');
|
||||
$sut->addTag($tag);
|
||||
|
||||
$clone = clone $sut;
|
||||
|
||||
foreach ($sut->getMetaFields() as $metaField) {
|
||||
$cloneMeta = $clone->getMetaField($metaField->getName());
|
||||
self::assertEquals($cloneMeta->getValue(), $metaField->getValue());
|
||||
}
|
||||
self::assertEquals($clone->getTags(), $sut->getTags());
|
||||
self::assertEquals($clone->getTags(), $sut->getTags());
|
||||
self::assertEquals($clone->getTagsAsArray(), $sut->getTagsAsArray());
|
||||
self::assertEquals(['bar', 'foo'], $sut->getTagsAsArray());
|
||||
self::assertEquals($clone->getBegin(), $sut->getBegin());
|
||||
self::assertEquals($clone->getEnd(), $sut->getEnd());
|
||||
self::assertFalse($clone->isExported());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,11 +72,14 @@ abstract class AbstractRendererTest extends KernelTestCase
|
||||
{
|
||||
$customer = new Customer();
|
||||
$customer->setName('Customer Name');
|
||||
$customer->setNumber('A-0123456789');
|
||||
$customer->setVatId('DE-9876543210');
|
||||
$customer->setMetaField((new CustomerMeta())->setName('customer-foo')->setValue('customer-bar')->setIsVisible(true));
|
||||
|
||||
$project = new Project();
|
||||
$project->setName('project name');
|
||||
$project->setCustomer($customer);
|
||||
$project->setOrderNumber('ORDER-123');
|
||||
$project->setMetaField((new ProjectMeta())->setName('project-bar')->setValue('project-bar')->setIsVisible(true));
|
||||
$project->setMetaField((new ProjectMeta())->setName('project-foo2')->setValue('project-foo2')->setIsVisible(true));
|
||||
|
||||
|
||||
@@ -100,6 +100,11 @@ class CsvRendererTest extends AbstractRendererTest
|
||||
19 => '',
|
||||
20 => 'project-foo2',
|
||||
21 => 'activity-bar',
|
||||
22 => 'timesheet',
|
||||
23 => 'work',
|
||||
24 => 'A-0123456789',
|
||||
25 => 'DE-9876543210',
|
||||
26 => 'ORDER-123',
|
||||
];
|
||||
|
||||
self::assertEquals(7, \count($all));
|
||||
|
||||
@@ -71,11 +71,14 @@ abstract class AbstractRendererTest extends KernelTestCase
|
||||
{
|
||||
$customer = new Customer();
|
||||
$customer->setName('Customer Name');
|
||||
$customer->setNumber('A-0123456789');
|
||||
$customer->setVatId('DE-9876543210');
|
||||
$customer->setMetaField((new CustomerMeta())->setName('customer-foo')->setValue('customer-bar')->setIsVisible(true));
|
||||
|
||||
$project = new Project();
|
||||
$project->setName('project name');
|
||||
$project->setCustomer($customer);
|
||||
$project->setOrderNumber('ORDER-123');
|
||||
$project->setMetaField((new ProjectMeta())->setName('project-bar')->setValue('project-bar')->setIsVisible(true));
|
||||
$project->setMetaField((new ProjectMeta())->setName('project-foo2')->setValue('project-foo2')->setIsVisible(true));
|
||||
|
||||
|
||||
@@ -97,6 +97,11 @@ class CsvRendererTest extends AbstractRendererTest
|
||||
19 => '',
|
||||
20 => 'project-foo2',
|
||||
21 => 'activity-bar',
|
||||
22 => 'timesheet',
|
||||
23 => 'work',
|
||||
24 => 'A-0123456789',
|
||||
25 => 'DE-9876543210',
|
||||
26 => 'ORDER-123',
|
||||
];
|
||||
|
||||
self::assertEquals(7, \count($all));
|
||||
|
||||
Reference in New Issue
Block a user