feat: 예상 지출 자동 동기화 Observer 구현

- expected_expenses 테이블에 source_type, source_id 컬럼 추가
- PurchaseExpenseSyncObserver: 매입 → 예상 지출 동기화
- WithdrawalExpenseSyncObserver: 카드결제만 → 예상 지출 동기화
- BillExpenseSyncObserver: 발행어음만 → 예상 지출 동기화
- 생성/수정/삭제/복원/강제삭제 이벤트 모두 처리
- 조건 변경 시 자동 동기화 해제 (카드→현금, 발행→수취)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-01-23 11:06:06 +09:00
parent 73e49f2736
commit fa210b91c2
6 changed files with 515 additions and 0 deletions

View File

@@ -12,6 +12,8 @@
use App\Models\Tenants\Deposit;
use App\Models\Tenants\ExpectedExpense;
use App\Models\Tenants\Stock;
use App\Models\Tenants\Bill;
use App\Models\Tenants\Purchase;
use App\Models\Tenants\Tenant;
use App\Models\Tenants\Withdrawal;
use App\Observers\MenuObserver;
@@ -24,6 +26,9 @@
use App\Observers\TodayIssue\OrderIssueObserver;
use App\Observers\TodayIssue\StockIssueObserver;
use App\Observers\TodayIssue\WithdrawalIssueObserver;
use App\Observers\ExpenseSync\BillExpenseSyncObserver;
use App\Observers\ExpenseSync\PurchaseExpenseSyncObserver;
use App\Observers\ExpenseSync\WithdrawalExpenseSyncObserver;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Support\Facades\DB;
@@ -83,5 +88,10 @@ public function boot(): void
Client::observe(ClientIssueObserver::class);
Deposit::observe(DepositIssueObserver::class);
Withdrawal::observe(WithdrawalIssueObserver::class);
// 예상 지출 자동 동기화 (매입/카드결제/발행어음 → expected_expenses)
Purchase::observe(PurchaseExpenseSyncObserver::class);
Withdrawal::observe(WithdrawalExpenseSyncObserver::class);
Bill::observe(BillExpenseSyncObserver::class);
}
}