bananas-commerce-admin 0.18.4 → 0.18.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/extensions/inventory/contrib/ArticleInventory.js +31 -0
- package/dist/esm/extensions/inventory/contrib/ArticleInventory.js.map +1 -0
- package/dist/esm/extensions/inventory/index.js +14 -0
- package/dist/esm/extensions/inventory/index.js.map +1 -0
- package/dist/esm/extensions/inventory/types/contrib.js +2 -0
- package/dist/esm/extensions/inventory/types/contrib.js.map +1 -0
- package/dist/esm/extensions/pos/components/PurchaseRow.js +2 -1
- package/dist/esm/extensions/pos/components/PurchaseRow.js.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/util/format_purchase_name.js +9 -0
- package/dist/esm/util/format_purchase_name.js.map +1 -0
- package/dist/types/extensions/inventory/contrib/ArticleInventory.d.ts +4 -0
- package/dist/types/extensions/inventory/index.d.ts +2 -0
- package/dist/types/extensions/inventory/types/contrib.d.ts +7 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/util/format_purchase_name.d.ts +2 -0
- package/package.json +1 -1
- package/src/extensions/inventory/contrib/ArticleInventory.tsx +62 -0
- package/src/extensions/inventory/index.tsx +17 -0
- package/src/extensions/inventory/types/contrib.ts +7 -0
- package/src/extensions/pos/components/PurchaseRow.tsx +2 -3
- package/src/index.ts +1 -0
- package/src/util/format_purchase_name.ts +11 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { TableBody, TableCell, TableHead, TableRow } from "@mui/material";
|
|
3
|
+
import Card from "../../../components/Card";
|
|
4
|
+
import CardHeader from "../../../components/Card/CardHeader";
|
|
5
|
+
import Table from "../../../components/Table";
|
|
6
|
+
import TableHeading from "../../../components/Table/TableHeading";
|
|
7
|
+
import { useI18n } from "../../../contexts/I18nContext";
|
|
8
|
+
const ArticleInventoryCard = ({ data }) => {
|
|
9
|
+
const { t } = useI18n();
|
|
10
|
+
return (React.createElement(Card, null,
|
|
11
|
+
React.createElement(CardHeader, { title: "Inventory" }),
|
|
12
|
+
React.createElement(Table, { count: data.length },
|
|
13
|
+
React.createElement(TableHead, null,
|
|
14
|
+
React.createElement(TableRow, null,
|
|
15
|
+
React.createElement(TableHeading, null, t("Warehouse")),
|
|
16
|
+
React.createElement(TableHeading, { align: "right" }, t("On Hand")),
|
|
17
|
+
React.createElement(TableHeading, { align: "right" }, t("Allocated")),
|
|
18
|
+
React.createElement(TableHeading, { align: "right" }, t("Available")))),
|
|
19
|
+
React.createElement(TableBody, { sx: { ".MuiTableRow-root:last-child > .MuiTableCell-root": { borderBottom: "none" } } },
|
|
20
|
+
data.length === 0 && (React.createElement(TableRow, null,
|
|
21
|
+
React.createElement(TableCell, { align: "center", colSpan: 4, sx: { color: "GrayText" } }, t("No inventory")))),
|
|
22
|
+
data
|
|
23
|
+
.sort((a, b) => (a.warehouse_code < b.warehouse_code ? -1 : 1))
|
|
24
|
+
.map((stock) => (React.createElement(TableRow, { key: stock.warehouse_code, sx: { height: 56 } },
|
|
25
|
+
React.createElement(TableCell, { sx: { py: 0 } }, stock.warehouse_code),
|
|
26
|
+
React.createElement(TableCell, { align: "right", sx: { py: 0 } }, stock.quantity_on_hand),
|
|
27
|
+
React.createElement(TableCell, { align: "right", sx: { py: 0 } }, stock.allocated_quantity),
|
|
28
|
+
React.createElement(TableCell, { align: "right", sx: { py: 0 } }, stock.availability))))))));
|
|
29
|
+
};
|
|
30
|
+
export default ArticleInventoryCard;
|
|
31
|
+
//# sourceMappingURL=ArticleInventory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArticleInventory.js","sourceRoot":"","sources":["../../../../../src/extensions/inventory/contrib/ArticleInventory.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE1E,OAAO,IAAI,MAAM,0BAA0B,CAAC;AAC5C,OAAO,UAAU,MAAM,qCAAqC,CAAC;AAC7D,OAAO,KAAK,MAAM,2BAA2B,CAAC;AAC9C,OAAO,YAAY,MAAM,wCAAwC,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAIxD,MAAM,oBAAoB,GAAqC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;IAC1E,MAAM,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;IAExB,OAAO,CACL,oBAAC,IAAI;QACH,oBAAC,UAAU,IAAC,KAAK,EAAC,WAAW,GAAG;QAChC,oBAAC,KAAK,IAAC,KAAK,EAAE,IAAI,CAAC,MAAM;YACvB,oBAAC,SAAS;gBACR,oBAAC,QAAQ;oBACP,oBAAC,YAAY,QAAE,CAAC,CAAC,WAAW,CAAC,CAAgB;oBAC7C,oBAAC,YAAY,IAAC,KAAK,EAAC,OAAO,IAAE,CAAC,CAAC,SAAS,CAAC,CAAgB;oBACzD,oBAAC,YAAY,IAAC,KAAK,EAAC,OAAO,IAAE,CAAC,CAAC,WAAW,CAAC,CAAgB;oBAC3D,oBAAC,YAAY,IAAC,KAAK,EAAC,OAAO,IAAE,CAAC,CAAC,WAAW,CAAC,CAAgB,CAClD,CACD;YAEZ,oBAAC,SAAS,IACR,EAAE,EAAE,EAAE,mDAAmD,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE;gBAEpF,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CACpB,oBAAC,QAAQ;oBACP,oBAAC,SAAS,IAAC,KAAK,EAAC,QAAQ,EAAC,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,IAC5D,CAAC,CAAC,cAAc,CAAC,CACR,CACH,CACZ;gBAEA,IAAI;qBACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;qBAC9D,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACd,oBAAC,QAAQ,IAAC,GAAG,EAAE,KAAK,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;oBACrD,oBAAC,SAAS,IAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAG,KAAK,CAAC,cAAc,CAAa;oBAC5D,oBAAC,SAAS,IAAC,KAAK,EAAC,OAAO,EAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IACnC,KAAK,CAAC,gBAAgB,CACb;oBACZ,oBAAC,SAAS,IAAC,KAAK,EAAC,OAAO,EAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IACnC,KAAK,CAAC,kBAAkB,CACf;oBACZ,oBAAC,SAAS,IAAC,KAAK,EAAC,OAAO,EAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IACnC,KAAK,CAAC,YAAY,CACT,CACH,CACZ,CAAC,CACM,CACN,CACH,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import InventoryOutlinedIcon from "@mui/icons-material/InventoryOutlined";
|
|
2
|
+
export const contrib = {
|
|
3
|
+
catalog: {
|
|
4
|
+
"catalog:article:detail:inventory": {
|
|
5
|
+
title: "Inventory",
|
|
6
|
+
icon: InventoryOutlinedIcon,
|
|
7
|
+
component: async () => (await import("./contrib/ArticleInventory")).default,
|
|
8
|
+
predicate: (article) => article.item_type == "SKU",
|
|
9
|
+
variant: "inline",
|
|
10
|
+
permission: "inventory.view_inventorytransaction",
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/extensions/inventory/index.tsx"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,MAAM,uCAAuC,CAAC;AAK1E,MAAM,CAAC,MAAM,OAAO,GAAwC;IAC1D,OAAO,EAAE;QACP,kCAAkC,EAAE;YAClC,KAAK,EAAE,WAAW;YAClB,IAAI,EAAE,qBAAqB;YAC3B,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC,CAAC,OAAO;YAC3E,SAAS,EAAE,CAAC,OAAsB,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,IAAI,KAAK;YACjE,OAAO,EAAE,QAAQ;YACjB,UAAU,EAAE,qCAAqC;SAClD;KACF;CACO,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contrib.js","sourceRoot":"","sources":["../../../../../src/extensions/inventory/types/contrib.ts"],"names":[],"mappings":""}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { TableCell } from "../../../components/Table/TableCell";
|
|
3
3
|
import { NavigatingTableRow } from "../../../components/Table/TableRow";
|
|
4
|
+
import { formatPurchaseName } from "../../../util/format_purchase_name";
|
|
4
5
|
import { formatPurchaseNumber } from "../../../util/format_purchase_number";
|
|
5
6
|
export const PurchaseRow = ({ purchase }) => (React.createElement(NavigatingTableRow, { route: "pos.purchase:detail", routeParams: { purchase_number: purchase.number } },
|
|
6
7
|
React.createElement(TableCell, null, formatPurchaseNumber(purchase.number)),
|
|
7
|
-
React.createElement(TableCell, null, purchase
|
|
8
|
+
React.createElement(TableCell, null, formatPurchaseName(purchase)),
|
|
8
9
|
React.createElement(TableCell, null, purchase.email),
|
|
9
10
|
React.createElement(TableCell, null, purchase.phone),
|
|
10
11
|
React.createElement(TableCell, null, new Date(purchase.date_confirmed).toLocaleString("sv-SE", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PurchaseRow.js","sourceRoot":"","sources":["../../../../../src/extensions/pos/components/PurchaseRow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAO5E,MAAM,CAAC,MAAM,WAAW,GAA+B,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CACvE,oBAAC,kBAAkB,IACjB,KAAK,EAAC,qBAAqB,EAC3B,WAAW,EAAE,EAAE,eAAe,EAAE,QAAQ,CAAC,MAAM,EAAE;IAEjD,oBAAC,SAAS,QAAE,oBAAoB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAa;IAC9D,oBAAC,SAAS,
|
|
1
|
+
{"version":3,"file":"PurchaseRow.js","sourceRoot":"","sources":["../../../../../src/extensions/pos/components/PurchaseRow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAO5E,MAAM,CAAC,MAAM,WAAW,GAA+B,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CACvE,oBAAC,kBAAkB,IACjB,KAAK,EAAC,qBAAqB,EAC3B,WAAW,EAAE,EAAE,eAAe,EAAE,QAAQ,CAAC,MAAM,EAAE;IAEjD,oBAAC,SAAS,QAAE,oBAAoB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAa;IAC9D,oBAAC,SAAS,QAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAa;IACrD,oBAAC,SAAS,QAAE,QAAQ,CAAC,KAAK,CAAa;IACvC,oBAAC,SAAS,QAAE,QAAQ,CAAC,KAAK,CAAa;IACvC,oBAAC,SAAS,QACP,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE;QACzD,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;KAClB,CAAC,CACQ,CACO,CACtB,CAAC"}
|
package/dist/esm/index.js
CHANGED
|
@@ -63,6 +63,7 @@ export * from "./contexts/UserContext";
|
|
|
63
63
|
export * as bananas from "./extensions/bananas";
|
|
64
64
|
export * as catalog from "./extensions/catalog";
|
|
65
65
|
export * as fulfillment from "./extensions/fulfillment";
|
|
66
|
+
export * as inventory from "./extensions/inventory";
|
|
66
67
|
export * as member from "./extensions/member";
|
|
67
68
|
export * as pos from "./extensions/pos";
|
|
68
69
|
export * as pricing from "./extensions/pricing";
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,OAAO,CAAC;AACtB,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yCAAyC,CAAC;AACxD,cAAc,qCAAqC,CAAC;AACpD,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAClD,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,oCAAoC,CAAC;AACnD,cAAc,oCAAoC,CAAC;AACnD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,yCAAyC,CAAC;AACxD,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mCAAmC,CAAC;AAClD,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,WAAW,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAC9C,OAAO,KAAK,GAAG,MAAM,kBAAkB,CAAC;AACxC,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAC9C,OAAO,KAAK,YAAY,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAE7B,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,OAAO,CAAC;AACtB,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yCAAyC,CAAC;AACxD,cAAc,qCAAqC,CAAC;AACpD,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAClD,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,oCAAoC,CAAC;AACnD,cAAc,oCAAoC,CAAC;AACnD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,yCAAyC,CAAC;AACxD,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mCAAmC,CAAC;AAClD,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,WAAW,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAC9C,OAAO,KAAK,GAAG,MAAM,kBAAkB,CAAC;AACxC,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAC9C,OAAO,KAAK,YAAY,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAE7B,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export function formatPurchaseName(purchase) {
|
|
2
|
+
if (purchase.company_name)
|
|
3
|
+
return purchase.company_name;
|
|
4
|
+
if (purchase.given_name && purchase.family_name) {
|
|
5
|
+
return `${purchase.given_name} ${purchase.family_name}`;
|
|
6
|
+
}
|
|
7
|
+
return purchase.given_name || purchase.family_name || "—";
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=format_purchase_name.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format_purchase_name.js","sourceRoot":"","sources":["../../../src/util/format_purchase_name.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,kBAAkB,CAAC,QAAwB;IACzD,IAAI,QAAQ,CAAC,YAAY;QAAE,OAAO,QAAQ,CAAC,YAAY,CAAC;IAExD,IAAI,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;QAChD,OAAO,GAAG,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;IAC1D,CAAC;IAED,OAAO,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,WAAW,IAAI,GAAG,CAAC;AAC5D,CAAC"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -63,6 +63,7 @@ export * from "./contexts/UserContext";
|
|
|
63
63
|
export * as bananas from "./extensions/bananas";
|
|
64
64
|
export * as catalog from "./extensions/catalog";
|
|
65
65
|
export * as fulfillment from "./extensions/fulfillment";
|
|
66
|
+
export * as inventory from "./extensions/inventory";
|
|
66
67
|
export * as member from "./extensions/member";
|
|
67
68
|
export * as pos from "./extensions/pos";
|
|
68
69
|
export * as pricing from "./extensions/pricing";
|
package/package.json
CHANGED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
|
|
3
|
+
import { TableBody, TableCell, TableHead, TableRow } from "@mui/material";
|
|
4
|
+
|
|
5
|
+
import Card from "../../../components/Card";
|
|
6
|
+
import CardHeader from "../../../components/Card/CardHeader";
|
|
7
|
+
import Table from "../../../components/Table";
|
|
8
|
+
import TableHeading from "../../../components/Table/TableHeading";
|
|
9
|
+
import { useI18n } from "../../../contexts/I18nContext";
|
|
10
|
+
import { ContribComponent } from "../../../types";
|
|
11
|
+
import { ArticleStock } from "../types/contrib";
|
|
12
|
+
|
|
13
|
+
const ArticleInventoryCard: ContribComponent<ArticleStock[]> = ({ data }) => {
|
|
14
|
+
const { t } = useI18n();
|
|
15
|
+
|
|
16
|
+
return (
|
|
17
|
+
<Card>
|
|
18
|
+
<CardHeader title="Inventory" />
|
|
19
|
+
<Table count={data.length}>
|
|
20
|
+
<TableHead>
|
|
21
|
+
<TableRow>
|
|
22
|
+
<TableHeading>{t("Warehouse")}</TableHeading>
|
|
23
|
+
<TableHeading align="right">{t("On Hand")}</TableHeading>
|
|
24
|
+
<TableHeading align="right">{t("Allocated")}</TableHeading>
|
|
25
|
+
<TableHeading align="right">{t("Available")}</TableHeading>
|
|
26
|
+
</TableRow>
|
|
27
|
+
</TableHead>
|
|
28
|
+
|
|
29
|
+
<TableBody
|
|
30
|
+
sx={{ ".MuiTableRow-root:last-child > .MuiTableCell-root": { borderBottom: "none" } }}
|
|
31
|
+
>
|
|
32
|
+
{data.length === 0 && (
|
|
33
|
+
<TableRow>
|
|
34
|
+
<TableCell align="center" colSpan={4} sx={{ color: "GrayText" }}>
|
|
35
|
+
{t("No inventory")}
|
|
36
|
+
</TableCell>
|
|
37
|
+
</TableRow>
|
|
38
|
+
)}
|
|
39
|
+
|
|
40
|
+
{data
|
|
41
|
+
.sort((a, b) => (a.warehouse_code < b.warehouse_code ? -1 : 1))
|
|
42
|
+
.map((stock) => (
|
|
43
|
+
<TableRow key={stock.warehouse_code} sx={{ height: 56 }}>
|
|
44
|
+
<TableCell sx={{ py: 0 }}>{stock.warehouse_code}</TableCell>
|
|
45
|
+
<TableCell align="right" sx={{ py: 0 }}>
|
|
46
|
+
{stock.quantity_on_hand}
|
|
47
|
+
</TableCell>
|
|
48
|
+
<TableCell align="right" sx={{ py: 0 }}>
|
|
49
|
+
{stock.allocated_quantity}
|
|
50
|
+
</TableCell>
|
|
51
|
+
<TableCell align="right" sx={{ py: 0 }}>
|
|
52
|
+
{stock.availability}
|
|
53
|
+
</TableCell>
|
|
54
|
+
</TableRow>
|
|
55
|
+
))}
|
|
56
|
+
</TableBody>
|
|
57
|
+
</Table>
|
|
58
|
+
</Card>
|
|
59
|
+
);
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export default ArticleInventoryCard;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import InventoryOutlinedIcon from "@mui/icons-material/InventoryOutlined";
|
|
2
|
+
|
|
3
|
+
import { ArticleDetail } from "../../extensions/catalog";
|
|
4
|
+
import { ContribComponentMap } from "../../types";
|
|
5
|
+
|
|
6
|
+
export const contrib: Record<string, ContribComponentMap> = {
|
|
7
|
+
catalog: {
|
|
8
|
+
"catalog:article:detail:inventory": {
|
|
9
|
+
title: "Inventory",
|
|
10
|
+
icon: InventoryOutlinedIcon,
|
|
11
|
+
component: async () => (await import("./contrib/ArticleInventory")).default,
|
|
12
|
+
predicate: (article: ArticleDetail) => article.item_type == "SKU",
|
|
13
|
+
variant: "inline",
|
|
14
|
+
permission: "inventory.view_inventorytransaction",
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
} as const;
|
|
@@ -2,6 +2,7 @@ import React from "react";
|
|
|
2
2
|
|
|
3
3
|
import { TableCell } from "../../../components/Table/TableCell";
|
|
4
4
|
import { NavigatingTableRow } from "../../../components/Table/TableRow";
|
|
5
|
+
import { formatPurchaseName } from "../../../util/format_purchase_name";
|
|
5
6
|
import { formatPurchaseNumber } from "../../../util/format_purchase_number";
|
|
6
7
|
import { PurchaseDetail } from "../types/purchase";
|
|
7
8
|
|
|
@@ -15,9 +16,7 @@ export const PurchaseRow: React.FC<PurchaseRowProps> = ({ purchase }) => (
|
|
|
15
16
|
routeParams={{ purchase_number: purchase.number }}
|
|
16
17
|
>
|
|
17
18
|
<TableCell>{formatPurchaseNumber(purchase.number)}</TableCell>
|
|
18
|
-
<TableCell>
|
|
19
|
-
{purchase.given_name ? `${purchase.given_name} ${purchase.family_name}` : "—"}
|
|
20
|
-
</TableCell>
|
|
19
|
+
<TableCell>{formatPurchaseName(purchase)}</TableCell>
|
|
21
20
|
<TableCell>{purchase.email}</TableCell>
|
|
22
21
|
<TableCell>{purchase.phone}</TableCell>
|
|
23
22
|
<TableCell>
|
package/src/index.ts
CHANGED
|
@@ -63,6 +63,7 @@ export * from "./contexts/UserContext";
|
|
|
63
63
|
export * as bananas from "./extensions/bananas";
|
|
64
64
|
export * as catalog from "./extensions/catalog";
|
|
65
65
|
export * as fulfillment from "./extensions/fulfillment";
|
|
66
|
+
export * as inventory from "./extensions/inventory";
|
|
66
67
|
export * as member from "./extensions/member";
|
|
67
68
|
export * as pos from "./extensions/pos";
|
|
68
69
|
export * as pricing from "./extensions/pricing";
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { PurchaseDetail } from "../extensions/pos";
|
|
2
|
+
|
|
3
|
+
export function formatPurchaseName(purchase: PurchaseDetail): string {
|
|
4
|
+
if (purchase.company_name) return purchase.company_name;
|
|
5
|
+
|
|
6
|
+
if (purchase.given_name && purchase.family_name) {
|
|
7
|
+
return `${purchase.given_name} ${purchase.family_name}`;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
return purchase.given_name || purchase.family_name || "—";
|
|
11
|
+
}
|