fix group reference duplicate bug

This commit is contained in:
omair saleh
2022-07-17 14:37:50 +08:00
parent 269b378693
commit 7219bc1301
3 changed files with 68 additions and 11 deletions
@@ -0,0 +1,22 @@
<?php
namespace App\Classes\Modules\Transactions\Services;
use App\Models\Group;
class ChecksIfGroupTransactionBillNumberExists
{
private $repository;
public function __construct(Group $repository)
{
$this->repository = $repository;
}
public function execute(string $bill_no): bool {
return $this->repository->where('reference', $bill_no)->exists();
}
}
@@ -0,0 +1,39 @@
<?php
namespace App\Classes\Modules\Transactions\Services;
use Carbon\Carbon;
class GeneratesGroupTransactionBillNumber
{
/** @var ChecksIfGroupTransactionBillNumberExists */
private $checksIfGroupTransactionBillNumberExists;
/**
* GeneratesGroupTransactionBillNumber constructor.
* @param ChecksIfGroupTransactionBillNumberExists $checksIfGroupTransactionBillNumberExists
*/
public function __construct(ChecksIfGroupTransactionBillNumberExists $checksIfGroupTransactionBillNumberExists)
{
$this->checksIfGroupTransactionBillNumberExists = $checksIfGroupTransactionBillNumberExists;
}
/**
* @param string $prefix
* @param Carbon|null $date
* @return string
*/
public function execute(string $prefix, ?Carbon $date = null): string {
if(!$date){
$date = carbon::now();
}
$billNumber = $prefix.$date->format('Y').$date->format('m').'-'.mt_rand(10000, 99999);
return !$this->checksIfGroupTransactionBillNumberExists->execute($billNumber) ? $billNumber : self::execute($prefix);
}
}
@@ -2,19 +2,15 @@
ini_set('memory_limit', '-1');
use App\Classes\Jobs\GenerateGroupTransactionsWhiteForm;
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
use App\Classes\Modules\Documents\Services\CreatesDocument;
use App\Classes\Modules\Documents\Services\CreatesFiles;
use App\Classes\Modules\Transactions\Services\GeneratesTransactionBillNumber;
use App\Classes\Modules\Transactions\Services\GeneratesGroupTransactionBillNumber;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\DocumentType;
use App\Models\Document;
use App\Models\Transaction;
use App\Models\Group;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Meneses\LaravelMpdf\Facades\LaravelMpdf;
class RecoverGroupTransactionTableSeeder extends Seeder
{
@@ -25,20 +21,20 @@ class RecoverGroupTransactionTableSeeder extends Seeder
/** @var CreatesFiles */
private $createsFile;
/** @var GeneratesTransactionBillNumber */
private $generatesTransactionBillNumber;
/** @var GeneratesGroupTransactionBillNumber */
private $generatesGroupTransactionBillNumber;
/**
* RecoverGroupTransactionTableSeeder constructor.
* @param CreatesDocument $createsDocument
* @param CreatesFiles $createsFile
* @param GeneratesTransactionBillNumber $generatesTransactionBillNumber
* @param GeneratesGroupTransactionBillNumber $generatesGroupTransactionBillNumber
*/
public function __construct(CreatesDocument $createsDocument, CreatesFiles $createsFile, GeneratesTransactionBillNumber $generatesTransactionBillNumber)
public function __construct(CreatesDocument $createsDocument, CreatesFiles $createsFile, GeneratesGroupTransactionBillNumber $generatesGroupTransactionBillNumber)
{
$this->createsDocument = $createsDocument;
$this->createsFile = $createsFile;
$this->generatesTransactionBillNumber = $generatesTransactionBillNumber;
$this->generatesGroupTransactionBillNumber = $generatesGroupTransactionBillNumber;
}
@@ -98,7 +94,7 @@ class RecoverGroupTransactionTableSeeder extends Seeder
$group->issuer = $issuer;
$group->receiver = $receiver;
$group->reference = $this->generatesTransactionBillNumber->execute('SPO-', $date);
$group->reference = $this->generatesGroupTransactionBillNumber->execute('SPO-', $date);
$group->amount = $amount;
$group->original_amount = $original_amount;
$group->currency_id = $currency_id;