Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 35 additions & 35 deletions .github/CHECKLIST.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
# InvoicePlane V2 – Feature Test Checklist

I've written some tests. Indexes first. After indexes, the statuses, etc. After that the special cases, exceptions, etc., then the Create, Update, Delete actions within the different *modules*.
Some *modules* had a *sub page*. For example: Invoices have invoice_groups as a *sub page*.
I've written some tests. Indexes first. After indexes, the statuses, etc. After that the special cases, exceptions, etc., then the Create, Update, Delete actions within the different *modules*.
Some *modules* had a *sub page*. For example: Invoices have invoice_groups as a *sub page*.
Maybe I'll do the *settings* per module as a separate row in this checklist.

## Notes (Invoices)
- Tests for overdue invoices are missing:
- If status NOT IN (1,4) and DATEDIFF((NOW), invoice_date_due) > 0 then `is_overdue` is true
- If status NOT IN (1,4) and DATEDIFF((NOW), invoice_date_due) > 0 then `is_overdue` is true
- Make special scope for overdue invoices
- Test for that scope

Expand All @@ -18,39 +18,39 @@ Maybe I'll do the *settings* per module as a separate row in this checklist.

## Test Coverage

| Module | Submodule | Index (happy) | Specials (happy) | Create (happy) | Update (happy) | Delete (happy) | Translations |
| Module | Submodule | Index (happy) | Specials (happy) | Create (happy) | Update (happy) | Delete (happy) | Translations |
|-----------|------------------|:-------------:|:----------------:|:--------------:|:--------------:|:--------------:|:------------:|
| clients | | ✔️ | | ✔️ | ✔️ | | |
| | user_clients | | | ✔️ | ✔️ | | |
| core | | | | ✔️ | ✔️ | | |
| | custom_fields | | | ✔️ | ✔️ | | |
| | custom_values | | | ✔️ | ✔️ | | |
| | dashboard | ✔️ | | ✔️ | ✔️ | | |
| | email_templates | ✔️ | | ✔️ | ✔️ | | |
| | filter | | | ✔️ | ✔️ | | |
| | guest | (view missing)| | ✔️ | ✔️ | | |
| | import | ✔️ | | ✔️ | ✔️ | | |
| | layout | | | ✔️ | ✔️ | | |
| | mailer | | | ✔️ | ✔️ | | |
| | sessions | | | ✔️ | ✔️ | | |
| | settings | ✔️ | | ✔️ | ✔️ | | |
| | upload | | | ✔️ | ✔️ | | |
| | welcome | ✔️ | | ✔️ | ✔️ | | |
| invoices | | ✔️ | | ✔️ | ✔️ | | |
| | invoice_groups | ✔️ | | ✔️ | ✔️ | | |
| | tax_rates | ✔️ | | ✔️ | ✔️ | | |
| | peppol | ✔️ | ✔️ | ✔️ | ✔️ | | |
| payments | | ✔️ | | ✔️ | ✔️ | | |
| | payment_methods | ✔️ | | ✔️ | ✔️ | | |
| products | | ✔️ | | ✔️ | ✔️ | | |
| | families | ✔️ | | ✔️ | ✔️ | | |
| | units | ✔️ | | ✔️ | ✔️ | | |
| projects | | ✔️ | | ✔️ | ✔️ | | |
| | tasks | ✔️ | | ✔️ | ✔️ | | |
| quotes | | ✔️ | | ✔️ | ✔️ | | |
| reports | | | | ✔️ | ✔️ | | |
| users | | ✔️ | | ✔️ | ✔️ | | |
| setup | | | | ✔️ | ✔️ | | |
| clients | | | | | | | |
| | user_clients | | | | | | |
| core | | | | | | | |
| | custom_fields | | | | | | |
| | custom_values | | | | | | |
| | dashboard | | | | | | |
| | email_templates | | | | | | |
| | filter | | | | | | |
| | guest | (view missing)| | | | | |
| | import | | | | | | |
| | layout | | | | | | |
| | mailer | | | | | | |
| | sessions | | | | | | |
| | settings | | | | | | |
| | upload | | | | | | |
| | welcome | | | | | | |
| invoices | | | | | | | |
| | invoice_groups | | | | | | |
| | tax_rates | | | | | | |
| | peppol | | | | | | |
| payments | | | | | | | |
| | payment_methods | | | | | | |
| products | | | | | | | |
| | families | | | | | | |
| | units | | | | | | |
| projects | | | | | | | |
| | tasks | | | | | | |
| quotes | | | | | | | |
| reports | | | | | | | |
| users | | | | | | | |
| setup | | | | | | | |

---

Expand Down
22 changes: 8 additions & 14 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,13 @@ Thank you for considering contributing to **InvoicePlane V2** — a Laravel + Fi
- **Filament** used for all UI
- **Livewire** used for reactive components
- **Modular** folder structure only:
- `Modules/{Module}/Filament/Admin/Resources/`
- `Modules/{Module}/Services/`
- `Modules/{Module}/Tests/Feature/`
- `Modules/{Module}/Filament/Admin/Resources/`
- `Modules/{Module}/Services/`
- `Modules/{Module}/Tests/Feature/`
- Use:
- `BelongsToCompany` trait for multi-tenancy
- `DTOs` + `Transformers` for all data
- `Services` for all business logic
- `BelongsToCompany` trait for multi-tenancy
- `DTOs` + `Transformers` for all data
- `Services` for all business logic

---

Expand Down Expand Up @@ -53,8 +53,8 @@ All tests should have:
/**
* @payload missing: invoice_number
* {
* "customer_id": 1,
* "due_date": "2025-06-01"
* "customer_id": 1,
* "due_date": "2025-06-01"
* }
*/
public function it_fails_to_create_invoice_without_required_invoice_number(): void
Expand All @@ -69,8 +69,6 @@ Pull Requests
- Translate if needed
- Add tests where you can



---

Translation
Expand All @@ -80,8 +78,6 @@ All strings use trans('...')
Translations managed via Crowdin:
https://translations.invoiceplane.com



---

Community
Expand All @@ -91,5 +87,3 @@ Discord: https://discord.gg/PPzD2hTrXt
Community Forums: https://community.invoiceplane.com

GitHub Issues: https://github.com/InvoicePlane/InvoicePlane-v2/issues


11 changes: 0 additions & 11 deletions .github/DOCKER.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ docker compose up -d

Visit: http://localhost/ivpl


---

Useful Commands
Expand All @@ -41,8 +40,6 @@ View logs docker compose logs -f
Run artisan docker compose exec app php artisan
Rebuild containers docker compose build --no-cache



---

Services
Expand All @@ -55,8 +52,6 @@ Mail: MailCatcher (port 1080)

Queue: Redis (optional)



---

Customize Docker
Expand All @@ -67,8 +62,6 @@ Override PHP version via Dockerfile

Add volumes for local persistence if needed



---

Troubleshooting
Expand All @@ -79,14 +72,10 @@ Permission issues: Ensure Docker has access to your project folder

Missing .env config: Re-run cp .env.example .env and adjust


---



---

What's Next?

Visit CHECKLIST.md if contributing

24 changes: 12 additions & 12 deletions .github/EXPORT-REFACTORING.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ All modules now have dedicated Filament Exporters located in `Modules/{ModuleNam
**Internationalization:**
- All notification strings use trans() function
- New translation keys in resources/lang/en/ip.php:
- `export_completed` - Success notification
- `export_failed_rows` - Failure notification
- `row` - Pluralizable row/rows
- `export_completed` - Success notification
- `export_failed_rows` - Failure notification
- `row` - Pluralizable row/rows

**Expenses Module:**
- `ExpenseExporter` - Regular export with 7 columns
Expand Down Expand Up @@ -148,16 +148,16 @@ For each module (Expenses, Products, Quotes, Projects, Tasks, Relations, Contact
1. Navigate to the list page
2. Click the "Export" button
3. Test each of the 4 export options:
- Export as CSV (v2)
- Export as CSV (v1, Legacy)
- Export as Excel (v2)
- Export as Excel (v1, Legacy)
- Export as CSV (v2)
- Export as CSV (v1, Legacy)
- Export as Excel (v2)
- Export as Excel (v1, Legacy)
4. Verify:
- Modal opens with column selection
- Export completes successfully
- Notification is received
- File downloads correctly
- File contains expected data and columns
- Modal opens with column selection
- Export completes successfully
- Notification is received
- File downloads correctly
- File contains expected data and columns

### Automated Testing

Expand Down
82 changes: 41 additions & 41 deletions .github/IMPORTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ InvoicePlane supports importing data from external systems using CSV files. This

---

## 📂 Accessing the Import Tool
## Accessing the Import Tool

1. Navigate to **Settings**.
2. Click on **Import Data**.

---

## 📄 Import Requirements
## Import Requirements

To ensure a successful import:

Expand All @@ -26,72 +26,72 @@ To ensure a successful import:

---

## 📁 Supported Files and Structures
## Supported Files and Structures

### 1. `customers.csv`

| Column Name | Description |
| Column Name | Description |
|---------------------|-------------------------------------|
| `client_name` | Customer's full name |
| `client_address_1` | Primary address line |
| `client_address_2` | Secondary address line |
| `client_city` | City |
| `client_state` | State or province |
| `client_zip` | ZIP or postal code |
| `client_country` | Country |
| `client_phone` | Phone number |
| `client_fax` | Fax number |
| `client_mobile` | Mobile number |
| `client_email` | Email address |
| `client_web` | Website URL |
| `client_vat_id` | VAT identification number |
| `client_tax_code` | Tax code |
| `client_active` | Status (`1` for active, `0` for inactive) |
| `client_name` | Customer's full name |
| `client_address_1` | Primary address line |
| `client_address_2` | Secondary address line |
| `client_city` | City |
| `client_state` | State or province |
| `client_zip` | ZIP or postal code |
| `client_country` | Country |
| `client_phone` | Phone number |
| `client_fax` | Fax number |
| `client_mobile` | Mobile number |
| `client_email` | Email address |
| `client_web` | Website URL |
| `client_vat_id` | VAT identification number |
| `client_tax_code` | Tax code |
| `client_active` | Status (`1` for active, `0` for inactive) |

### 2. `invoices.csv`

| Column Name | Description |
| Column Name | Description |
|-------------------------|-------------------------------------------|
| `user_email` | Email of the InvoicePlane user |
| `client_name` | Name of the customer |
| `invoice_date_created` | Creation date (`YYYY-MM-DD`) |
| `invoice_date_due` | Due date (`YYYY-MM-DD`) |
| `invoice_number` | Unique invoice number |
| `invoice_terms` | Payment terms |
| `user_email` | Email of the InvoicePlane user |
| `client_name` | Name of the customer |
| `invoice_date_created` | Creation date (`YYYY-MM-DD`) |
| `invoice_date_due` | Due date (`YYYY-MM-DD`) |
| `invoice_number` | Unique invoice number |
| `invoice_terms` | Payment terms |

### 3. `invoice_items.csv`

| Column Name | Description |
| Column Name | Description |
|--------------------|-------------------------------------------|
| `invoice_number` | Associated invoice number |
| `item_tax_rate` | Tax rate (e.g., `7.8` for 7.8%) |
| `item_date_added` | Date added (`YYYY-MM-DD`) |
| `item_name` | Name of the item |
| `item_description` | Description of the item |
| `item_quantity` | Quantity of the item |
| `item_price` | Price per item (numeric, no currency symbols) |
| `invoice_number` | Associated invoice number |
| `item_tax_rate` | Tax rate (e.g., `7.8` for 7.8%) |
| `item_date_added` | Date added (`YYYY-MM-DD`) |
| `item_name` | Name of the item |
| `item_description` | Description of the item |
| `item_quantity` | Quantity of the item |
| `item_price` | Price per item (numeric, no currency symbols) |

### 4. `payments.csv`

| Column Name | Description |
| Column Name | Description |
|------------------|-------------------------------------------|
| `invoice_number` | Associated invoice number |
| `payment_method` | Method of payment (e.g., Cash, Credit) |
| `payment_date` | Date of payment (`YYYY-MM-DD`) |
| `invoice_number` | Associated invoice number |
| `payment_method` | Method of payment (e.g., Cash, Credit) |
| `payment_date` | Date of payment (`YYYY-MM-DD`) |
| `payment_amount` | Amount paid (numeric, no currency symbols)|
| `payment_note` | Additional notes |
| `payment_note` | Additional notes |

---

## ⚠️ Important Notes
## Important Notes

- **Custom Fields**: Importing custom fields is not supported in the current version.
- **Data Validation**: Ensure all data is accurate and conforms to the required formats to prevent import errors.
- **Testing**: It's recommended to test imports with a small dataset before full-scale importing.

---

## 🛠️ Troubleshooting
## Troubleshooting

- **Import Errors**: If the import process fails, double-check file formats, headers, and data consistency.
- **Community Support**: For assistance, visit the [InvoicePlane Community Forums](https://community.invoiceplane.com/).
Expand Down
Loading