# Task 07 — Journals

## Goal
Build the Journals module to manage different types of accounting journals (e.g., General Journal, Sales Journal, Purchase Journal). Each journal will group related journal entries.

---

## Database

Table: `journals`

Fields:
- id
- code (string, unique) - e.g., GJ, SJ, PJ
- name (json, translatable)
- is_active (boolean, default true)
- created_by (nullable, FK to admins.id)
- updated_by (nullable, FK to admins.id)
- created_at
- updated_at

Indexes:
- unique code
- index is_active

---

## Relations

Journal model relations:
- entries() -> hasMany JournalEntry
- creator() -> belongsTo Admin
- updater() -> belongsTo Admin

---

## Business Rules

1. Each journal must have a unique code.
2. Name must be stored as JSON using HasTranslations.
3. Journals are used to categorize accounting transactions.
4. Journals are global to the company and not branch-specific.

---

## Files

### Model
- app/Models/Finance/Journal.php

### Service
- app/Services/Finance/JournalService.php

### Controller
- app/Http/Controllers/Admin/Finance/JournalController.php

### Requests
- app/Http/Requests/Admin/Finance/StoreJournalRequest.php
- app/Http/Requests/Admin/Finance/UpdateJournalRequest.php

### Views
- resources/views/dashboard/finance/journals/index.blade.php
- resources/views/dashboard/finance/journals/create.blade.php
- resources/views/dashboard/finance/journals/edit.blade.php

### Lang files
- lang/ar/finance.php
- lang/en/finance.php

---

## Permissions

- finance.journals.view
- finance.journals.create
- finance.journals.update
- finance.journals.delete

---

## Validation Rules

- code: required, unique:journals,code
- name.ar: required, string
- name.en: nullable, string
- is_active: boolean

---

## UI

Views path:
`resources/views/dashboard/finance/journals/`

Fields in form:
- code
- name_ar
- name_en
- is_active

Index columns:
- code
- name
- status
- actions

---

## Steps

### Step 1
Create migration for `journals` table.

### Step 2
Create `Journal` model with HasTranslations.

### Step 3
Create `JournalService`.

### Step 4
Create Form Requests.

### Step 5
Create `JournalController`.

### Step 6
Create routes in `routes/admin.php`.

### Step 7
Create views.

### Step 8
Update `RolePermissionSeeder`.

### Step 9
Update lang files.

---

## Notes for AI

- Follow docs/ai/AI_MASTER_PROJECT.md
- Follow docs/ai/ARCHITECTURE_RULES.md
- Follow docs/ai/MODULE_STRUCTURE.md
- Execute one step at a time
- Do not modify unrelated files
- Do not generate tests in this task
- Wait for confirmation after each step