Skip to content

Commit

Permalink
added more columns to spreadsheet exports (#2413)
Browse files Browse the repository at this point in the history
  • Loading branch information
kevinpapst committed Mar 8, 2021
1 parent 30ac5e4 commit 0b7d551
Show file tree
Hide file tree
Showing 13 changed files with 321 additions and 9 deletions.
18 changes: 16 additions & 2 deletions src/Entity/Activity.php
Expand Up @@ -49,7 +49,6 @@
*
* @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
{
Expand Down Expand Up @@ -368,7 +367,22 @@ public function __clone()
{
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);
}
}
}
23 changes: 23 additions & 0 deletions src/Entity/Customer.php
Expand Up @@ -632,4 +632,27 @@ public function __toString()
{
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);
}
}
}
18 changes: 16 additions & 2 deletions src/Entity/Project.php
Expand Up @@ -531,8 +531,22 @@ public function __clone()
{
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);
}
}
}
30 changes: 25 additions & 5 deletions src/Entity/Timesheet.php
Expand Up @@ -166,8 +166,6 @@ class Timesheet implements EntityWithMetaFields, ExportItemInterface
*/
private $user;
/**
* Activity
*
* @var Activity
*
* @Serializer\Expose()
Expand All @@ -180,8 +178,6 @@ class Timesheet implements EntityWithMetaFields, ExportItemInterface
*/
private $activity;
/**
* Project
*
* @var Project
*
* @Serializer\Expose()
Expand Down Expand Up @@ -727,14 +723,38 @@ public function createCopy(?Timesheet $timesheet = null): Timesheet
$timesheet->setMetaField(clone $meta);
}

$timesheet->tags = new ArrayCollection();

/** @var Tag $tag */
foreach ($this->tags as $tag) {
$timesheet->addTag($tag);
}

return $timesheet;
}

public function __clone()
{
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);
}
}
}
77 changes: 77 additions & 0 deletions src/Export/Base/AbstractSpreadsheetRenderer.php
Expand Up @@ -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)
Expand Down Expand Up @@ -503,6 +508,78 @@ protected function getColumns(array $exportItems, TimesheetQuery $query, array $
];
}

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) {
Expand Down
41 changes: 41 additions & 0 deletions tests/Entity/ActivityTest.php
Expand Up @@ -158,4 +158,45 @@ public function testExportAnnotations()
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());
}
}
31 changes: 31 additions & 0 deletions tests/Entity/CustomerTest.php
Expand Up @@ -211,4 +211,35 @@ public function testExportAnnotations()
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());
}
}
41 changes: 41 additions & 0 deletions tests/Entity/ProjectTest.php
Expand Up @@ -185,4 +185,45 @@ public function testExportAnnotations()
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());
}
}

0 comments on commit 0b7d551

Please sign in to comment.