added invoice replacer for currently logged-in user (#2899)
This commit is contained in:
@@ -151,7 +151,7 @@ final class ConfigurableNumberGenerator implements NumberGeneratorInterface
|
|||||||
|
|
||||||
// for customer
|
// for customer
|
||||||
case 'cc':
|
case 'cc':
|
||||||
$partialResult = $this->repository->getCounterForAllTime($this->model->getCustomer()) + $increaseBy;
|
$partialResult = $this->repository->getCounterForCustomerAllTime($this->model->getCustomer()) + $increaseBy;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'ccy':
|
case 'ccy':
|
||||||
@@ -166,9 +166,34 @@ final class ConfigurableNumberGenerator implements NumberGeneratorInterface
|
|||||||
$partialResult = $this->repository->getCounterForDay($invoiceDate, $this->model->getCustomer()) + $increaseBy;
|
$partialResult = $this->repository->getCounterForDay($invoiceDate, $this->model->getCustomer()) + $increaseBy;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
// for user
|
||||||
|
case 'cu':
|
||||||
|
$partialResult = $this->repository->getCounterForUserAllTime($this->model->getUser()) + $increaseBy;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'cuy':
|
||||||
|
$partialResult = $this->repository->getCounterForYear($invoiceDate, null, $this->model->getUser()) + $increaseBy;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'cum':
|
||||||
|
$partialResult = $this->repository->getCounterForMonth($invoiceDate, null, $this->model->getUser()) + $increaseBy;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'cud':
|
||||||
|
$partialResult = $this->repository->getCounterForDay($invoiceDate, null, $this->model->getUser()) + $increaseBy;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'ustaff':
|
||||||
|
$partialResult = $this->model->getUser() !== null ? $this->model->getUser()->getAccountNumber() : '';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'uid':
|
||||||
|
$partialResult = $this->model->getUser() !== null ? (string) $this->model->getUser()->getId() : '';
|
||||||
|
break;
|
||||||
|
|
||||||
// across all invoices
|
// across all invoices
|
||||||
case 'c':
|
case 'c':
|
||||||
$partialResult = $this->repository->getCounterForAllTime() + $increaseBy;
|
$partialResult = $this->repository->getCounterForCustomerAllTime() + $increaseBy;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'cy':
|
case 'cy':
|
||||||
@@ -184,11 +209,11 @@ final class ConfigurableNumberGenerator implements NumberGeneratorInterface
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 'cname':
|
case 'cname':
|
||||||
$partialResult = $this->model->getCustomer()->getName();
|
$partialResult = $this->model->getCustomer() !== null ? $this->model->getCustomer()->getName() : '';
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'cnumber':
|
case 'cnumber':
|
||||||
$partialResult = $this->model->getCustomer()->getNumber();
|
$partialResult = $this->model->getCustomer() !== null ? $this->model->getCustomer()->getNumber() : '';
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ class InvoiceRepository extends EntityRepository
|
|||||||
return $counter > 0;
|
return $counter > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function getCounterFor(\DateTime $start, \DateTime $end, ?Customer $customer = null): int
|
private function getCounterFor(\DateTime $start, \DateTime $end, ?Customer $customer = null, ?User $user = null): int
|
||||||
{
|
{
|
||||||
$qb = $this->getEntityManager()->createQueryBuilder();
|
$qb = $this->getEntityManager()->createQueryBuilder();
|
||||||
$qb->select('count(i.createdAt) as counter')
|
$qb->select('count(i.createdAt) as counter')
|
||||||
@@ -68,7 +68,14 @@ class InvoiceRepository extends EntityRepository
|
|||||||
if (null !== $customer) {
|
if (null !== $customer) {
|
||||||
$qb
|
$qb
|
||||||
->andWhere($qb->expr()->eq('i.customer', ':customer'))
|
->andWhere($qb->expr()->eq('i.customer', ':customer'))
|
||||||
->setParameter('customer', $customer)
|
->setParameter('customer', $customer->getId())
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (null !== $user) {
|
||||||
|
$qb
|
||||||
|
->andWhere($qb->expr()->eq('i.user', ':user'))
|
||||||
|
->setParameter('user', $user->getId())
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,34 +88,43 @@ class InvoiceRepository extends EntityRepository
|
|||||||
return $result['counter'];
|
return $result['counter'];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getCounterForDay(\DateTime $date, ?Customer $customer = null): int
|
public function getCounterForDay(\DateTime $date, ?Customer $customer = null, ?User $user = null): int
|
||||||
{
|
{
|
||||||
$start = (clone $date)->setTime(0, 0, 0);
|
$start = (clone $date)->setTime(0, 0, 0);
|
||||||
$end = (clone $date)->setTime(23, 59, 59);
|
$end = (clone $date)->setTime(23, 59, 59);
|
||||||
|
|
||||||
return $this->getCounterFor($start, $end, $customer);
|
return $this->getCounterFor($start, $end, $customer, $user);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getCounterForMonth(\DateTime $date, ?Customer $customer = null): int
|
public function getCounterForMonth(\DateTime $date, ?Customer $customer = null, ?User $user = null): int
|
||||||
{
|
{
|
||||||
$start = (clone $date)->setDate((int) $date->format('Y'), (int) $date->format('n'), 1)->setTime(0, 0, 0);
|
$start = (clone $date)->setDate((int) $date->format('Y'), (int) $date->format('n'), 1)->setTime(0, 0, 0);
|
||||||
$end = (clone $date)->setDate((int) $date->format('Y'), (int) $date->format('n'), (int) $date->format('t'))->setTime(23, 59, 59);
|
$end = (clone $date)->setDate((int) $date->format('Y'), (int) $date->format('n'), (int) $date->format('t'))->setTime(23, 59, 59);
|
||||||
|
|
||||||
return $this->getCounterFor($start, $end, $customer);
|
return $this->getCounterFor($start, $end, $customer, $user);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getCounterForYear(\DateTime $date, ?Customer $customer = null): int
|
public function getCounterForYear(\DateTime $date, ?Customer $customer = null, ?User $user = null): int
|
||||||
{
|
{
|
||||||
$start = (clone $date)->setDate((int) $date->format('Y'), 1, 1)->setTime(0, 0, 0);
|
$start = (clone $date)->setDate((int) $date->format('Y'), 1, 1)->setTime(0, 0, 0);
|
||||||
$end = (clone $date)->setDate((int) $date->format('Y'), 12, 31)->setTime(23, 59, 59);
|
$end = (clone $date)->setDate((int) $date->format('Y'), 12, 31)->setTime(23, 59, 59);
|
||||||
|
|
||||||
return $this->getCounterFor($start, $end, $customer);
|
return $this->getCounterFor($start, $end, $customer, $user);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getCounterForAllTime(?Customer $customer = null): int
|
public function getCounterForCustomerAllTime(?Customer $customer = null): int
|
||||||
{
|
{
|
||||||
if (null !== $customer) {
|
if (null !== $customer) {
|
||||||
return $this->count(['customer' => $customer]);
|
return $this->count(['customer' => $customer->getId()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->count([]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCounterForUserAllTime(?User $user = null): int
|
||||||
|
{
|
||||||
|
if (null !== $user) {
|
||||||
|
return $this->count(['user' => $user->getId()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->count([]);
|
return $this->count([]);
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ namespace App\Tests\Invoice\NumberGenerator;
|
|||||||
|
|
||||||
use App\Configuration\SystemConfiguration;
|
use App\Configuration\SystemConfiguration;
|
||||||
use App\Entity\Customer;
|
use App\Entity\Customer;
|
||||||
|
use App\Entity\User;
|
||||||
use App\Invoice\InvoiceModel;
|
use App\Invoice\InvoiceModel;
|
||||||
use App\Invoice\NumberGenerator\ConfigurableNumberGenerator;
|
use App\Invoice\NumberGenerator\ConfigurableNumberGenerator;
|
||||||
use App\Repository\InvoiceRepository;
|
use App\Repository\InvoiceRepository;
|
||||||
@@ -32,7 +33,11 @@ class ConfigurableNumberGeneratorTest extends TestCase
|
|||||||
$repository = $this->createMock(InvoiceRepository::class);
|
$repository = $this->createMock(InvoiceRepository::class);
|
||||||
$repository
|
$repository
|
||||||
->expects($this->any())
|
->expects($this->any())
|
||||||
->method('getCounterForAllTime')
|
->method('getCounterForCustomerAllTime')
|
||||||
|
->willReturn($counter);
|
||||||
|
$repository
|
||||||
|
->expects($this->any())
|
||||||
|
->method('getCounterForUserAllTime')
|
||||||
->willReturn($counter);
|
->willReturn($counter);
|
||||||
$repository
|
$repository
|
||||||
->expects($this->any())
|
->expects($this->any())
|
||||||
@@ -68,12 +73,20 @@ class ConfigurableNumberGeneratorTest extends TestCase
|
|||||||
['{cy}', '2', $invoiceDate],
|
['{cy}', '2', $invoiceDate],
|
||||||
['{cm}', '2', $invoiceDate],
|
['{cm}', '2', $invoiceDate],
|
||||||
['{cd}', '2', $invoiceDate],
|
['{cd}', '2', $invoiceDate],
|
||||||
|
// customer
|
||||||
['{cc}', '2', $invoiceDate],
|
['{cc}', '2', $invoiceDate],
|
||||||
['{ccy}', '2', $invoiceDate],
|
['{ccy}', '2', $invoiceDate],
|
||||||
['{ccm}', '2', $invoiceDate],
|
['{ccm}', '2', $invoiceDate],
|
||||||
['{ccd}', '2', $invoiceDate],
|
['{ccd}', '2', $invoiceDate],
|
||||||
['{cname}', 'Acme company', $invoiceDate],
|
['{cname}', 'Acme company', $invoiceDate],
|
||||||
['{cnumber}', '0815', $invoiceDate],
|
['{cnumber}', '0815', $invoiceDate],
|
||||||
|
// user
|
||||||
|
['{cu}', '2', $invoiceDate],
|
||||||
|
['{cuy}', '2', $invoiceDate],
|
||||||
|
['{cum}', '2', $invoiceDate],
|
||||||
|
['{cud}', '2', $invoiceDate],
|
||||||
|
['{ustaff}', '0815', $invoiceDate],
|
||||||
|
['{uid}', '13', $invoiceDate],
|
||||||
// number formatting (not testing the lower case versions, as the tests might break depending on the date)
|
// number formatting (not testing the lower case versions, as the tests might break depending on the date)
|
||||||
['{date,10}', '0000' . $invoiceDate->format('ymd'), $invoiceDate],
|
['{date,10}', '0000' . $invoiceDate->format('ymd'), $invoiceDate],
|
||||||
['{Y,6}', '00' . $invoiceDate->format('Y'), $invoiceDate],
|
['{Y,6}', '00' . $invoiceDate->format('Y'), $invoiceDate],
|
||||||
@@ -108,6 +121,7 @@ class ConfigurableNumberGeneratorTest extends TestCase
|
|||||||
['{Y}{cy}{m}', $invoiceDate->format('Y') . '2' . $invoiceDate->format('n'), $invoiceDate],
|
['{Y}{cy}{m}', $invoiceDate->format('Y') . '2' . $invoiceDate->format('n'), $invoiceDate],
|
||||||
['{Y}-{cy}/{m}', $invoiceDate->format('Y') . '-2/' . $invoiceDate->format('n'), $invoiceDate],
|
['{Y}-{cy}/{m}', $invoiceDate->format('Y') . '-2/' . $invoiceDate->format('n'), $invoiceDate],
|
||||||
['{Y}-{cy}/{m}', $invoiceDate->format('Y') . '-2/' . $invoiceDate->format('n'), $invoiceDate],
|
['{Y}-{cy}/{m}', $invoiceDate->format('Y') . '-2/' . $invoiceDate->format('n'), $invoiceDate],
|
||||||
|
['{ustaff}|{cuy}_{Y}-{cy}/{m}', '0815|2_' . $invoiceDate->format('Y') . '-2/' . $invoiceDate->format('n'), $invoiceDate],
|
||||||
['{Y,5}/{cy,5}', '0' . $invoiceDate->format('Y') . '/00002', $invoiceDate],
|
['{Y,5}/{cy,5}', '0' . $invoiceDate->format('Y') . '/00002', $invoiceDate],
|
||||||
// with decrementing counter
|
// with decrementing counter
|
||||||
['{c-1,2}', '00', $invoiceDate],
|
['{c-1,2}', '00', $invoiceDate],
|
||||||
@@ -137,10 +151,15 @@ class ConfigurableNumberGeneratorTest extends TestCase
|
|||||||
$customer->setName('Acme company');
|
$customer->setName('Acme company');
|
||||||
$customer->setNumber('0815');
|
$customer->setNumber('0815');
|
||||||
|
|
||||||
|
$user = $this->createMock(User::class);
|
||||||
|
$user->method('getId')->willReturn(13);
|
||||||
|
$user->method('getAccountNumber')->willReturn('0815');
|
||||||
|
|
||||||
$sut = $this->getSut($format, $counter);
|
$sut = $this->getSut($format, $counter);
|
||||||
$model = new InvoiceModel(new DebugFormatter());
|
$model = new InvoiceModel(new DebugFormatter());
|
||||||
$model->setInvoiceDate($invoiceDate);
|
$model->setInvoiceDate($invoiceDate);
|
||||||
$model->setCustomer($customer);
|
$model->setCustomer($customer);
|
||||||
|
$model->setUser($user);
|
||||||
$sut->setModel($model);
|
$sut->setModel($model);
|
||||||
|
|
||||||
$this->assertEquals($expectedInvoiceNumber, $sut->getInvoiceNumber());
|
$this->assertEquals($expectedInvoiceNumber, $sut->getInvoiceNumber());
|
||||||
|
|||||||
Reference in New Issue
Block a user