mix-code / wafeq
Simple implementation for Wafeq API
v1.3.0
2025-05-06 16:33 UTC
Requires
- php: ^8.2
- illuminate/support: ^10.0|^11.0|^12.0
Requires (Dev)
- laravel/pint: ^1.21
- orchestra/testbench: ^9.12
- pestphp/pest: ^3.7
README
A Laravel package for interacting with the Wafeq API, supporting projects, contacts, accounts, manual journals, invoices.
🚀 Features
- Manage projects (list, show, create, update, delete)
- Manage contacts (list, show, create, update, delete)
- Manage accounts (list)
- Manage manual journal (create)
- Manage invoice (create)
- Simple API wrapper with Laravel's HTTP Client
- Supports facade usage for convenience
‼️ Requirments
- PHP 8.2
- Laravel 10 or Above
📦 Installation
composer require mix-code/wafeq
⚙️ Configuration
Publish the configuration file:
php artisan vendor:publish --tag=wafeq
To enable the package, add the following to your .env
file:
WAFEQ_IS_ENABLED=true
And update your .env
file:
WAFEQ_API_KEY=your_api_key_here WAFEQ_ENDPOINT=https://api.wafeq.com/v1
🛠️ Usage
1️⃣ Project Directly
You can inject Project
directly anywhere:
use MixCode\Wafeq\Project; class ProjectController { public function listProjects() { $projectService = new Project(); return $projectService->list(); } }
2️⃣ Using the Facade
You can also use the Project
facade:
use MixCode\Wafeq\ProjectFacade as Project; $projects = Project::list();
3️⃣ Using Dependency Injection
You can inject Project
directly into your controllers or services:
use MixCode\Wafeq\Project; class ProjectController { public function __construct(private Project $project) {} public function listProjects() { return $this->project->list(); } }
📚 API Methods
🔹 Projects Use Project.php
class, in namespace MixCode\Wafeq\Project
List Projects
$project = new Project(); $projects = $project->list();
Show Project
$project = new Project(); $project = $project->show($projectId);
Create Project
use MixCode\Wafeq\Payloads\ProjectPayload; $payload = new ProjectPayload( name: 'Project Name', ); $project = new Project(); $response = $project->create($payload);
update Project
use MixCode\Wafeq\Payloads\ProjectPayload; $payload = new ProjectPayload( name: 'John Doe', ); $project = new Project(); $response = $project->update($payload);
Delete Project
$project = new Project(); $response = $project->delete($projectId);
🔹 Contacts Use Contact.php
class, in namespace MixCode\Wafeq\Contact
List Contacts
$contact = new Contact(); $contacts = $contact->list();
Show Contact
$contact = new Contact(); $contact = $contact->show($contactId);
Create Contact
use MixCode\Wafeq\Payloads\ContactPayload; $payload = new ContactPayload( name: 'Contact Name', email: 'contact@example.com', phone: '+1234567890' ); $contact = new Contact(); $response = $contact->create($payload);
Update Contact
use MixCode\Wafeq\Payloads\ContactPayload; $payload = new ContactPayload( name: 'Contact Name Updated', email: 'contact@example.com', phone: '+1234567890' ); $contact = new Contact(); $response = $contact->update($payload);
Delete Contact
$contact = new Contact(); $contact = $contact->delete($contactId);
🔹 manual journal Use ManualJournal.php
class, in namespace MixCode\Wafeq\ManualJournal
Create Manual Journal
// 1. Build Line Items $lineItem1 = new ManualJournalLineItemPayload( account: 'acc_123', amount: 1000, amountToBcy: 1000, currency: 'AED', description: 'Sales Revenue', branch: 'main', ); $lineItem2 = new ManualJournalLineItemPayload( account: 'acc_456', amount: -1000, amountToBcy: -1000, currency: 'AED', description: 'Cash Payment', branch: 'main', ); // 2. Build the main payload $manualJournalPayload = new ManualJournalPayload( date: '2025-04-25', lineItems: [$lineItem1, $lineItem2], reference: 'REF-001', notes: 'Payment for invoice #001', ); // 3. Create the manual journal $manualJournalService = new ManualJournal(); $response = $manualJournalService->create($manualJournalPayload);
🔹 Accounts Use Account.php
class, in namespace MixCode\Wafeq\Account
List Accounts
$account = new Account(); $accounts = $account->list();
✅ Testing
vendor/bin/pest
📜 License
This package is open-source and available under the MIT License.