---
tags: [reports, job]
module: Reports
---

# [Job]Jobs

## Connections
[[_Reports]] · [[[Model]Models]] · [[[Service]CustomerAgingService]] · [[[Command]Commands]] · [[[Cross]CrossModuleDependencies]]

## Source
`Modules/Reports/Jobs/`

---

## TrialBalanceJob
**Queue:** default · **Implements:** ShouldQueue

Handles async trial balance calculation dispatched by `SaudiTrialBalanceServiceWithJob`. Runs the full account-balance aggregation, then fires the `TrialBalance` event to return results to the browser (WebSocket / polling).

**Uses:** `AccountingFiscalYearBalanceRepository` · `AccountsRepository` · `FiscalYearsRepository`  
**Fires:** `TrialBalance` event → `RetrievingTrialBalanceData` listener

---

## GenerateJournalReportPdfJob
**Queue:** default · **Timeout:** 900 s · **Implements:** ShouldQueue

Async PDF generation + email delivery for journal reports. Triggered when a user requests a journal report PDF via email.

**Calls:** `SendingJournalReportToEmailService::execute()`  
**Constructor args:** request · email · userName · locale · subdomain

---

## PopulateAgingReportForTenantJob
**Queue:** `report_processing` · **Timeout:** 300 s · **Tries:** 3 · **Implements:** ShouldQueue

Repopulates the `report_customer_aging` cache table for a single tenant. Clears existing rows first, then processes all Invoices and InvoiceReturns.

**Constructor arg:** `websiteId`

**Internal flow:**
```
populateTransactionsForTenant()
    → DELETE all rows for tenant
    → processInvoices()
        → for each Invoice: calc due_date (due_date field → payment term calc → invoice date)
        → upsert ReportCustomerAging row with amount + paid_amount
    → processInvoiceReturns()
        → stored as negative amounts (credits)
    → restoreSystemConnection()
```

**Uses:** `Invoice` · `InvoiceReturn` (Sales) · `ReportCustomerAging` model  
**Dispatched by:** `PopulateReportCustomerAgingTransactionsCommand`

---

## Event & Listener

### TrialBalance (Event)
Carries aggregated trial balance result data. Fired by `TrialBalanceJob` on completion.

### RetrievingTrialBalanceData (Listener)
Handles `TrialBalance` event. Passes data through (minimal implementation — likely feeds a WebSocket broadcast).
