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).
You can install the package via composer:
composer require inquid/laravel-stock
By running php artisan vendor:publish --provider="Inquid\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.
The configuration file looks this:
<?php
return [
/*
|--------------------------------------------------------------------------
| Default table name
|--------------------------------------------------------------------------
|
| Table name to use to store mutations.
|
*/
'table' => 'stock_mutations',
'stock_mutation_model' => Inquid\Stock\StockMutation::class,
//'special_date_class' => \MongoDB\BSON\UTCDateTime::class,
];
Adding the HasStock
trait will enable stock functionality on the Model.
Note: If you need to use a custom Model for example for MongoDB you can update the model to use in the config file
stock.php
.
use Inquid\Stock\HasStock;
class Book extends Model
{
use HasStock;
}
$book->increaseStock(10);
$book->decreaseStock(10);
$book->mutateStock(10);
$book->mutateStock(-10);
With warehouse support
$book->increaseStock(10, ['warehouse' => $warehouse_first]);
$book->decreaseStock(10, ['warehouse' => $warehouse_first]);
$book->mutateStock(10, ['warehouse' => $warehouse_first]);
$book->mutateStock(-10, ['warehouse' => $warehouse_first]);
It's also possible to clear the stock and directly setting a new value.
$book->clearStock();
$book->clearStock(10);
// With warehouse
$book->clearStock(10, ['warehouse' => $warehouse_first]);
It is possible to set stock. This will create a new mutation with the difference between the old and new value.
$book->setStock(10);
It's also possible to check if a product is in stock (with a minimal value).
$book->inStock();
$book->inStock(10);
With warehouse
$book->inStock(); // anywhere
$book->inStock(10);
$book->inStock(10, ['warehouse' => $warehouse_first]);
Get the current stock value (on a certain date).
$book->stock;
$book->stock(Carbon::now()->subDays(10));
Note: If you are using MongoDb you need to set the date class in the config file.
'special_date_class' => \MongoDB\BSON\UTCDateTime::class,
Get the current stock value (on a certain date) in specific warehouse.
$book->stock(null, ['warehouse' =>$warehouse_first]);
$book->stock(Carbon::now()->subDays(10), ['warehouse' =>$warehouse_first]);
Move amount from source warehouse to destination warehouse.
$book->moveBetweenStocks(5,$warehouse_first, $warehouse_second);
Add a description and/or reference model to de StockMutation.
$book->increaseStock(10, [
'description' => 'This is a description',
'reference' => $otherModel,
]);
With warehouse
$book->setStock(10, ['warehouse' => $warehouse_first]);
It is also possible to query based on stock.
Book::whereInStock()->get();
Book::whereOutOfStock()->get();
composer test
Contributions are welcome, thanks to y'all :)
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.
The MIT License (MIT). Please see License File for more information.