fix pargar and login

This commit is contained in:
2026-08-01 14:04:01 +03:30
parent 6e75b9632b
commit 87f0e2beed
9 changed files with 248 additions and 38 deletions
+23 -4
View File
@@ -25,7 +25,8 @@ use Rooyesh\Wallet\models\Transaction;
* 4) ماندهٔ تازهٔ پرگار (از جمله صفر/تغییر دستی حسابدار) بلافاصله اعمال می‌شود —
* دیگر منتظر دو snapshot یکسان یا بلوک صفر نمی‌مانیم.
* 5) اگر واریز/برداشت ریالی‌ای اصلاً سند پرگار نداشته باشد، مانده اعمال نمی‌شود؛
* پرگار از آن پول خبر ندارد و اعمال مانده موجودی مشتری را پاک می‌کند.
* همزمان سند جاافتاده خودکار صف می‌شود. پرگار از آن پول خبر ندارد و اعمال مانده
* موجودی مشتری را پاک می‌کند.
* 6) دکمهٔ ادمین با force می‌تواند گیت‌های سند pending را رد کند (ابزار اصلاح دستی).
*/
class PargarInboundWalletService
@@ -502,11 +503,28 @@ class PargarInboundWalletService
$missing = $this->unexportedCashMovement($customer, $lastConfirmedAt);
if ($missing !== null) {
// ترمیم خودکار: سند جاافتاده را صف کن تا pending بماند و بعد از ثبت در پرگار مانده باز شود
$queued = 0;
try {
$queued = app(PargarSyncService::class)->queueMissingCashDocuments(
$customer,
$missing['rows'],
'mande_auto_missing'
);
} catch (\Throwable $e) {
report($e);
}
$suffix = $queued > 0
? ' — سند در صف ثبت قرار گرفت؛ تا تأیید پرگار، مانده اعمال نمی‌شود'
: ' — تا ثبت سند، مانده اعمال نمی‌شود';
return [
'reason' => 'unexported_wallet_movement',
'message' => 'حرکت ریالی '
. number_format($missing['amount'])
. ' ریال هنوز سندی در پرگار ندارد — تا ثبت سند، مانده اعمال نمی‌شود',
. ' ریال هنوز سندی در پرگار ندارد'
. $suffix,
];
}
@@ -529,7 +547,7 @@ class PargarInboundWalletService
* تا وقتی پرگار از این حرکت خبر ندارد، ماندهٔ آن هم شامل این پول نیست؛ اعمال آن
* موجودی مشتری را پاک می‌کند. پس مانده را نگه می‌داریم تا سند ساخته و ثبت شود.
*
* @return array{amount: float, withdraw_ids: list<int>}|null
* @return array{amount: float, withdraw_ids: list<int>, rows: \Illuminate\Support\Collection}|null
*/
private function unexportedCashMovement(Customer $customer, ?Carbon $lastConfirmedAt): ?array
{
@@ -552,7 +570,7 @@ class PargarInboundWalletService
->whereColumn('pargar_sync_logs.withdraw_id', 'transactions.withdraw_id')
->where('pargar_sync_logs.type', PargarSyncService::TYPE_WALLET_CASH);
})
->get(['withdraw_id', 'cash']);
->get(['withdraw_id', 'cash', 'note']);
if ($rows->isEmpty()) {
return null;
@@ -561,6 +579,7 @@ class PargarInboundWalletService
return [
'amount' => (float) $rows->sum(fn ($row) => abs((float) $row->cash)),
'withdraw_ids' => $rows->pluck('withdraw_id')->map(fn ($id) => (int) $id)->all(),
'rows' => $rows,
];
}