Laravel Stock
Keep stock for Eloquent models. This package will track stock mutations for your models. You can increase, decrease, clear and set stock. It's also possible to check if a model is in stock (on a certain date/time).
Installation
You can install the package via composer:
composer require appstract/laravel-stock
By running php artisan vendor:publish --provider="Appstract\Stock\StockServiceProvider"
in your project all files for this package will be published. Run php artisan migrate
to migrate the table. There will now be a stock_mutations
table in your database.
Usage
Adding the HasStock
trait will enable stock functionality on the Model.
use Appstract\Stock\HasStock;
class Book extends Model
{
use HasStock;
}
Basic mutations
$book->increaseStock(10);
$book->decreaseStock(10);
$book->mutateStock(10);
$book->mutateStock(-10);
Clearing stock
It's also possible to clear the stock and directly setting a new value.
$book->clearStock();
$book->clearStock(10);
Setting stock
It is possible to set stock. This will create a new mutation with the difference between the old and new value.
$book->setStock(10);
Check if model is in stock
It's also possible to check if a product is in stock (with a minimal value).
$book->inStock();
$book->inStock(10);
Current stock
Get the current stock value (on a certain date).
$book->stock;
$book->stock(Carbon::now()->subDays(10));
Stock arguments
Add a description and/or reference model to de StockMutation.
$book->increaseStock(10, [
'description' => 'This is a description',
'reference' => $otherModel,
]);
Query Scopes
It is also possible to query based on stock.
Book::whereInStock()->get();
Book::whereOutOfStock()->get();
Testing
composer test
Contributing
Contributions are welcome, thanks to y'all :)
About Appstract
Appstract is a small team from The Netherlands. We create (open source) tools for Web Developers and write about related subjects on Medium. You can follow us on Twitter, buy us a beer or support us on Patreon.
License
The MIT License (MIT). Please see License File for more information.