zsolt148 / szamlazzhu
This is my package szamlazzhu
v1.1.1
2023-12-01 15:59 UTC
Requires
- php: ^8.1
- illuminate/contracts: ^10.0
- spatie/laravel-package-tools: ^1.14.0
- zoparga/laravel-szamlazzhu: ^1.4
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^7.8
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^8.8
- pestphp/pest: ^2.20
- pestphp/pest-plugin-arch: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
README
Built on top of https://github.com/zoparga/laravel-szamlazzhu Laravel szamlazzhu as an simple Facade.
Installation
You can install the package via composer:
composer require zsolt148/szamlazzhu
You can publish and run the migrations with:
php artisan vendor:publish --tag="szamlazzhu-migrations"
php artisan migrate
You can publish the config file with:
php artisan vendor:publish --tag="szamlazzhu-config"
This is the contents of the published config file:
return [ /** * Global disabled/enable function */ 'enabled' => env('SZAMLAZZ_HU_ENABLED', false), /** * Global discount disabled/enable function */ 'discount_enabled' => env('SZAMLAZZ_HU_DISCOUNT_ENABLED', false), /** * Send invoice/receipt notifications */ 'send_notifications' => env('SZAMLAZZ_HU_SEND_NOTIFICATIONS', true), /** * Create/cancel invoice/receipt routes */ 'route' => [ 'prefix' => 'szamlazzhu', 'name' => 'szamlazzhu.', 'middleware' => ['web'], ], /* * These merchant details will be used by default. * You can override these values. * */ 'merchant' => [ 'bank_name' => env('SZAMLAZZ_HU_MERCHANT_BANK_NAME'), 'bank_account_number' => env('SZAMLAZZ_HU_MERCHANT_BANK_ACCOUNT_NUMBER'), 'reply_email' => env('SZAMLAZZ_HU_MERCHANT_REPLY_EMAIL'), ], /* * Invoice/Receipt prefix */ 'prefix' => env('SZAMLAZZ_HU_PREFIX', 'PRE'), /* * API Client settings */ 'client' => [ /* * Authentication credentials. * */ 'credentials' => [ 'api_key' => env('SZAMLAZZ_HU_API_KEY'), 'username' => env('SZAMLAZZ_HU_USERNAME'), 'password' => env('SZAMLAZZ_HU_PASSWORD'), ], /* * You can enable the certificate based communication. * You do not need to provide password if you'll use szamlazz.hu's own certificate * */ 'certificate' => [ 'enabled' => false, 'disk' => 'local', 'path' => 'szamlazzhu/cacert.pem', // Relative to disk root ], /* * HTTP request timeout (in seconds) */ 'timeout' => 30, /* * Base URI used to reach API * */ 'base_uri' => env('SZAMLAZZ_HU_BASE_URI', 'https://www.szamlazz.hu/'), /* * Client can automatically save / update invoice PDF files if enabled * */ 'storage' => [ 'auto_save' => true, 'disk' => 'public', 'path' => 'invoices', ], ],
Usage
Using the global helper
// Access the invoice service szamlazzhu()->invoice(); szamlazzhu('invoice'); // Access the receipt service szamlazzhu()->receipt(); szamlazzhu('receipt'); // Create invoice/receipt - dispatches an event szamlazzhu()->invoice()->create($invoiceable); szamlazzhu()->receipt()->create($invoiceable); // Create now szamlazzhu()->invoice()->createNow($invoiceable); szamlazzhu()->receipt()->createNow($invoiceable); // Cancel invoice/receipt szamlazzhu()->invoice()->cancel($invoice); szamlazzhu()->receipt()->cancel($receipt);
Using the facade
use Zsolt148\Szamlazzhu\Facades\Szamlazzhu; // Access the invoice service Szamlazzhu::invoice(); // Access the receipt service Szamlazzhu::receipt(); // Create invoice/receipt - dispatches an event Szamlazzhu::invoice()->create($invoiceable); Szamlazzhu::receipt()->create($invoiceable); // Create now Szamlazzhu::invoice()->createNow($invoiceable); Szamlazzhu::receipt()->createNow($invoiceable); // Cancel invoice/receipt Szamlazzhu::invoice()->cancel($invoice); Szamlazzhu::receipt()->cancel($receipt);
The model you want to be invoiceable/receiptable should implement the Invoiceable/Receiptable interface, with HasInvoice/HasReceipt traits.
use Zsolt148\Szamlazzhu\Interfaces\Invoiceable; use Zsolt148\Szamlazzhu\Traits\HasInvoices; class Order implements Invoiceable { use HasInvoices; ... }
The model you want be as invoice/receipt items should implement the ArrayableItem
If the model will has only one item, it can be the Order model as well.
use zoparga\SzamlazzHu\Contracts\ArrayableItem; class OrderItem implements ArrayableItem { ... }
Using the default routes, it should receive a class string and an ID.
Returns a json response
await axios.post(route('szamlazzhu.create-receipt'), { class: this.model.class, id: this.model.id, }).then(resp => { console.log(resp.data) })
Testing
composer test
Changelog
Please see CHANGELOG for more information on what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Security Vulnerabilities
Please review our security policy on how to report security vulnerabilities.
Credits
License
The MIT License (MIT). Please see License File for more information.