feat(accounting): add Shayegan as fixed boursecu provider

Wire outbound Invoice/Document sync after confirmed ops, store sync status with timeout lock, and keep SQL credentials out of frontend responses.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-10-05 17:12:43 +03:30
co-authored by Cursor
parent 698fbed805
commit a42261c06e
20 changed files with 1485 additions and 18 deletions
+6
View File
@@ -19,6 +19,7 @@ use App\Http\Controllers\Admin\ProductController;
use App\Http\Controllers\Admin\TahesabController;
use App\Http\Controllers\Admin\ZarinController;
use App\Http\Controllers\Admin\PargarController;
use App\Http\Controllers\Admin\ShayeganController;
use App\Http\Controllers\Admin\FileController;
use App\Http\Controllers\Site\OfferCodesController;
use App\Http\Controllers\Admin\SettingsController;
@@ -288,6 +289,11 @@ Route::middleware('auth:user')->group(function (){
Route::post('customer/{id}/zarin/sync-wallet', [ZarinController::class, 'syncCustomerWallet']);
Route::post('customer/{id}/zarin/preview-wallet', [ZarinController::class, 'previewCustomerWallet']);
Route::get('shayegan/health', [ShayeganController::class, 'healthCheck']);
Route::post('shayegan/table', [ShayeganController::class, 'table']);
Route::get('shayegan/{id}', [ShayeganController::class, 'show']);
Route::post('shayegan/{id}/retry', [ShayeganController::class, 'retrySanad']);
Route::post('pargar/table', [PargarController::class, 'table']);
Route::get('pargar/customer-sync/status', [PargarController::class, 'customerSyncStatus']);
Route::get('pargar/stuck-outbound', [PargarController::class, 'stuckOutbound']);