mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2025-07-08 01:14:34 +02:00
Added an checkbox in the withdrawal/move dialog, that if checked automatically deletes a part lot if it becomes empty during the operation
Fixes issue #327
This commit is contained in:
parent
9e69a09a19
commit
ffb5d3e790
4 changed files with 35 additions and 7 deletions
|
@ -9,13 +9,15 @@ use App\Entity\LogSystem\PartStockChangedLogEntry;
|
|||
use App\Entity\Parts\PartLot;
|
||||
use App\Services\LogSystem\EventCommentHelper;
|
||||
use App\Services\LogSystem\EventLogger;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
|
||||
/**
|
||||
* @see \App\Tests\Services\Parts\PartLotWithdrawAddHelperTest
|
||||
*/
|
||||
final class PartLotWithdrawAddHelper
|
||||
{
|
||||
public function __construct(private readonly EventLogger $eventLogger, private readonly EventCommentHelper $eventCommentHelper)
|
||||
public function __construct(private readonly EventLogger $eventLogger,
|
||||
private readonly EventCommentHelper $eventCommentHelper, private EntityManagerInterface $entityManager)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -54,9 +56,9 @@ final class PartLotWithdrawAddHelper
|
|||
* @param float $amount The amount of parts that should be taken from the part lot
|
||||
* @param string|null $comment The optional comment describing the reason for the withdrawal
|
||||
* @param \DateTimeInterface|null $action_timestamp The optional timestamp, where the action happened. Useful if the action happened in the past, and the log entry is created afterwards.
|
||||
* @return PartLot The modified part lot
|
||||
* @param bool $delete_lot_if_empty If true, the part lot will be deleted if the amount is 0 after the withdrawal.
|
||||
*/
|
||||
public function withdraw(PartLot $partLot, float $amount, ?string $comment = null, ?\DateTimeInterface $action_timestamp = null): PartLot
|
||||
public function withdraw(PartLot $partLot, float $amount, ?string $comment = null, ?\DateTimeInterface $action_timestamp = null, bool $delete_lot_if_empty = false): void
|
||||
{
|
||||
//Ensure that amount is positive
|
||||
if ($amount <= 0) {
|
||||
|
@ -92,7 +94,9 @@ final class PartLotWithdrawAddHelper
|
|||
$this->eventCommentHelper->setMessage($comment);
|
||||
}
|
||||
|
||||
return $partLot;
|
||||
if ($delete_lot_if_empty && $partLot->getAmount() === 0.0) {
|
||||
$this->entityManager->remove($partLot);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -144,8 +148,9 @@ final class PartLotWithdrawAddHelper
|
|||
* @param float $amount The amount of parts that should be moved
|
||||
* @param string|null $comment A comment describing the reason for the move
|
||||
* @param \DateTimeInterface|null $action_timestamp The optional timestamp, where the action happened. Useful if the action happened in the past, and the log entry is created afterwards.
|
||||
* @param bool $delete_lot_if_empty If true, the part lot will be deleted if the amount is 0 after the withdrawal.
|
||||
*/
|
||||
public function move(PartLot $origin, PartLot $target, float $amount, ?string $comment = null, ?\DateTimeInterface $action_timestamp = null): void
|
||||
public function move(PartLot $origin, PartLot $target, float $amount, ?string $comment = null, ?\DateTimeInterface $action_timestamp = null, bool $delete_lot_if_empty = false): void
|
||||
{
|
||||
if ($amount <= 0) {
|
||||
throw new \InvalidArgumentException('Amount must be positive');
|
||||
|
@ -187,5 +192,9 @@ final class PartLotWithdrawAddHelper
|
|||
if (!$this->eventCommentHelper->isMessageSet() && ($comment !== null && $comment !== '')) {
|
||||
$this->eventCommentHelper->setMessage($comment);
|
||||
}
|
||||
|
||||
if ($delete_lot_if_empty && $origin->getAmount() === 0.0) {
|
||||
$this->entityManager->remove($origin);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue