Monitor stock levels in your dashboard and get notified when products are almost out of stock
Integration type
Category
Last published
Downloads in past month
This plugin helps you monitor the stock levels in two ways:
vendure-config.ts
to expose a productVariantsWithLowStock
query in the admin API.import { StockMonitoringPlugin } from '@pinelab/vendure-plugin-stock-monitoring';
import { AdminUiPlugin } from '@vendure/admin-ui-plugin';
plugins: [
StockMonitoringPlugin.init({
threshold: 10,
}),
// Add the widget to the admin ui
AdminUiPlugin.init({
port: 3002,
route: 'admin',
app: compileUiExtensions({
outputPath: path.join(__dirname, '__admin-ui'),
extensions: [StockMonitoringPlugin.ui],
}),
}),
];
For more configuration options regarding the admin ui, check the docs.
When you start the server and login, you can find stock-levels
under the add widgets
button.
The email handler will send an email when the stocklevel of a variant drops below the given threshold. To activate the
handler, you can add the following handlers to your vendure-config.ts
:
import { createLowStockEmailHandler } from "@pinelab/vendure-plugin-stock-monitoring";
EmailPlugin.init({
handlers: [
// Dynamically get email recipients based on the event
// and send an email when stock drops below 10
createLowStockEmailHandler({
threshold: 10,
subject: "Stock of variants belo 10",
emailRecipients: async (injector, event) => {
// Dynamically resolve email recipients with the injector and event
const recipients = await injector.get(MyService).getAdminsForChannel(event.ctx);
return recipients;
}
}),
// Send emails to two static addresses when stock drops below 99
createLowStockEmailHandler({
threshold: 99,
subject: "Stock of variants below 99",
emailRecipients: ["test@test.com", "admin2@vendure.io"]
})
],
...
Create a template file for the low stock email in static/email/templates/low-stock/body.hbs
with the following
content:
<mjml>
<mj-body>
<mj-section>
<mj-column>
<mj-text font-size='30px'>Low stocknotification</mj-text>
<mj-divider border-color='#343434'></mj-divider>
<mj-text>
These products are low on stock:
<br />
<br />
{{#each lines}}
<a href='http://localhost:3050/admin/products/'>
{{productVariant.name}}
-
{{productVariant.stockOnHand}}
pc.
</a>
<br />
{{/each}}
</mj-text>
</mj-column>
</mj-section>
</mj-body>
</mjml>