mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-06-23 20:00:33 -04:00
Handle case where public_id has been used
This commit is contained in:
parent
46c008477e
commit
a04015ac41
@ -69,26 +69,32 @@ class EntityModel extends Eloquent
|
||||
$entity->setRelation('user', $user);
|
||||
$entity->setRelation('account', $account);
|
||||
|
||||
if (method_exists($className, 'trashed')) {
|
||||
$lastEntity = $className::whereAccountId($entity->account_id)->withTrashed();
|
||||
} else {
|
||||
$lastEntity = $className::whereAccountId($entity->account_id);
|
||||
}
|
||||
|
||||
if (static::$hasPublicId) {
|
||||
$lastEntity = $lastEntity->orderBy('public_id', 'DESC')
|
||||
->first();
|
||||
|
||||
if ($lastEntity) {
|
||||
$entity->public_id = $lastEntity->public_id + 1;
|
||||
} else {
|
||||
$entity->public_id = 1;
|
||||
}
|
||||
$entity->public_id = static::getNextPublicId($entity->account_id);
|
||||
}
|
||||
|
||||
return $entity;
|
||||
}
|
||||
|
||||
private static function getNextPublicId($accountId)
|
||||
{
|
||||
$className = get_called_class();
|
||||
|
||||
if (method_exists($className, 'trashed')) {
|
||||
$lastEntity = $className::whereAccountId($accountId)->withTrashed();
|
||||
} else {
|
||||
$lastEntity = $className::whereAccountId($accountId);
|
||||
}
|
||||
|
||||
$lastEntity = $lastEntity->orderBy('public_id', 'DESC')->first();
|
||||
|
||||
if ($lastEntity) {
|
||||
return $lastEntity->public_id + 1;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $publicId
|
||||
*
|
||||
@ -379,4 +385,21 @@ class EntityModel extends Eloquent
|
||||
{
|
||||
return '';
|
||||
}
|
||||
|
||||
public function save(array $options = [])
|
||||
{
|
||||
try {
|
||||
return parent::save($options);
|
||||
} catch (\Illuminate\Database\QueryException $exception) {
|
||||
// check if public_id has been taken
|
||||
if ($exception->getCode() == 23000 && static::$hasPublicId) {
|
||||
$nextId = static::getNextPublicId($this->account_id);
|
||||
if ($nextId != $this->public_id) {
|
||||
$this->public_id = $nextId;
|
||||
return $this->save($options);
|
||||
}
|
||||
}
|
||||
throw $exception;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user