medusa-invoice
Version:
Generate invoice from Medusa
186 lines • 19.3 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.normalizeAmount = exports.getDecimalDigits = void 0;
const jsx_runtime_1 = require("react/jsx-runtime");
const moment_1 = __importDefault(require("moment"));
const react_1 = require("react");
const ui_1 = require("@medusajs/ui");
const currencies_1 = require("./utils/currencies");
const material_1 = require("@mui/material");
const actions_dropdown_1 = require("../../actions-dropdown/actions-dropdown");
const invoice_number_from_order_1 = __importDefault(require("./invoice-number-from-order"));
const packing_slip_number_1 = __importDefault(require("./packing-slip-number"));
const icons_1 = require("@medusajs/icons");
const Link_1 = __importDefault(require("@mui/material/Link"));
/**
* Checks the list of currencies and returns the divider/multiplier
* that should be used to calculate the persited and display amount.
* @param currency
* @return {number}
*/
function getDecimalDigits(currency) {
const divisionDigits = currencies_1.currencies[currency.toUpperCase()].decimal_digits;
return Math.pow(10, divisionDigits);
}
exports.getDecimalDigits = getDecimalDigits;
function normalizeAmount(currency, amount) {
const divisor = getDecimalDigits(currency);
return Math.floor(amount) / divisor;
}
exports.normalizeAmount = normalizeAmount;
function formatAmountWithSymbol({ amount, currency, digits, tax = 0, }) {
let locale = "en-US";
// We need this to display 'Kr' instead of 'DKK'
if (currency.toLowerCase() === "dkk") {
locale = "da-DK";
}
digits = digits !== null && digits !== void 0 ? digits : currencies_1.currencies[currency.toUpperCase()].decimal_digits;
const normalizedAmount = normalizeAmount(currency, amount);
const taxRate = tax instanceof Array ? tax.reduce((acc, curr) => acc + curr.rate, 0) : tax;
return new Intl.NumberFormat(locale, {
style: "currency",
currency,
minimumFractionDigits: digits,
}).format(normalizedAmount * (1 + taxRate / 100));
}
const useOrderTableColums = () => {
const decideStatus = (status) => {
switch (status) {
case "captured":
return ((0, jsx_runtime_1.jsx)(ui_1.StatusBadge, { color: "green", children: "Paid" }));
case "awaiting":
return ((0, jsx_runtime_1.jsx)(ui_1.StatusBadge, { color: "grey", children: "Awaiting" }));
case "requires_action":
return ((0, jsx_runtime_1.jsx)(ui_1.StatusBadge, { color: "red", children: "Requires action" }));
case "canceled":
return ((0, jsx_runtime_1.jsx)(ui_1.StatusBadge, { color: "orange", children: "Canceled" }));
default:
return ((0, jsx_runtime_1.jsx)(ui_1.StatusBadge, { color: "purple", children: "N/A" }));
}
};
const decideFullfillmentStatus = (status) => {
switch (status) {
case "not_fulfilled":
return ((0, jsx_runtime_1.jsx)(ui_1.StatusBadge, { color: "grey", children: "Not fulfilled" }));
case "partially_fulfilled":
return ((0, jsx_runtime_1.jsx)(ui_1.StatusBadge, { color: "blue", children: "Partially fulfilled" }));
case "fulfilled":
return ((0, jsx_runtime_1.jsx)(ui_1.StatusBadge, { color: "green", children: "Fulfilled" }));
case "partially_shipped":
return ((0, jsx_runtime_1.jsx)(ui_1.StatusBadge, { color: "blue", children: "Partially shipped" }));
case "shipped":
return ((0, jsx_runtime_1.jsx)(ui_1.StatusBadge, { color: "green", children: "Shipped" }));
case "partially_returned":
return ((0, jsx_runtime_1.jsx)(ui_1.StatusBadge, { color: "blue", children: "Partially returned" }));
case "returned":
return ((0, jsx_runtime_1.jsx)(ui_1.StatusBadge, { color: "green", children: "Returned" }));
case "canceled":
return ((0, jsx_runtime_1.jsx)(ui_1.StatusBadge, { color: "red", children: "Canceled" }));
case "requires_action":
return ((0, jsx_runtime_1.jsx)(ui_1.StatusBadge, { color: "purple", children: "Requires action" }));
default:
return ((0, jsx_runtime_1.jsx)(ui_1.StatusBadge, { color: "grey", children: "N/A" }));
}
};
const columns = (0, react_1.useMemo)(() => [
{
Header: (0, jsx_runtime_1.jsx)("div", { className: "pl-2", children: "Order" }),
accessor: "display_id",
Cell: ({ cell: { value } }) => ((0, jsx_runtime_1.jsx)("p", { className: "text-grey-90 group-hover:text-violet-60 pl-2", children: `#${value}` })),
},
{
Header: ("Date added"),
accessor: "created_at",
Cell: ({ cell: { value } }) => {
return ((0, jsx_runtime_1.jsx)(ui_1.Tooltip, { content: (0, jsx_runtime_1.jsx)(ui_1.Text, { children: (0, moment_1.default)(value).format("DD MMM YYYY hh:mm a") }), children: (0, jsx_runtime_1.jsx)("p", { className: "text-grey-90 group-hover:text-violet-60 min-w-[40px]", children: (0, moment_1.default)(value).format("DD MMM YYYY") }) }));
}
},
{
Header: ("Customer"),
accessor: "customer",
Cell: ({ row, cell: { value } }) => {
var _a, _b;
const customer = {
first_name: (value === null || value === void 0 ? void 0 : value.first_name) ||
((_a = row.original.shipping_address) === null || _a === void 0 ? void 0 : _a.first_name),
last_name: (value === null || value === void 0 ? void 0 : value.last_name) || ((_b = row.original.shipping_address) === null || _b === void 0 ? void 0 : _b.last_name),
email: row.original.email,
};
return ((0, jsx_runtime_1.jsx)("p", { className: "text-grey-90 group-hover:text-violet-60 min-w-[100px]", children: `${(customer.first_name || customer.last_name)
? `${customer.first_name} ${customer.last_name}`
: (customer.email
? customer.email
: "-")}` }));
},
},
{
Header: ("Fulfillment"),
accessor: "fulfillment_status",
Cell: ({ cell: { value } }) => decideFullfillmentStatus(value),
},
{
Header: ("Payment status"),
accessor: "payment_status",
Cell: ({ cell: { value } }) => decideStatus(value),
},
{
Header: () => ((0, jsx_runtime_1.jsx)("div", { className: "text-right", children: ("Total") })),
accessor: "total",
Cell: ({ row, cell: { value } }) => ((0, jsx_runtime_1.jsx)("div", { className: "text-grey-90 group-hover:text-violet-60 text-right", children: formatAmountWithSymbol({
amount: value,
currency: row.original.currency_code,
digits: 2,
}) })),
},
// {
// Header: "",
// accessor: "currency_code",
// Cell: ({ cell: { value } }) => (
// <div className="text-grey-40 text-right">{value.toUpperCase()}</div>
// ),
// },
// {
// Header: "",
// accessor: "country_code",
// Cell: ({ row }) => (
// <div className="pr-2">
// <div className="rounded-rounded flex w-full justify-end">
// <Tooltip
// content={
// row.original.shipping_address?.country_code?.toUpperCase()
// }
// >
// <ReactCountryFlag
// className={"rounded"}
// svg
// countryCode={row.original.shipping_address?.country_code}
// />
// </Tooltip>
// </div>
// </div>
// ),
// },
{
Header: () => ((0, jsx_runtime_1.jsx)("div", { style: { textAlign: 'center' }, children: ("Documents") })),
id: "invoice_number",
Cell: ({ row }) => {
return ((0, jsx_runtime_1.jsx)("p", { className: "text-grey-90 group-hover:text-violet-60 pl-2", children: (0, jsx_runtime_1.jsxs)(material_1.Grid, { container: true, justifyContent: 'flex-start', direction: 'column', spacing: 1, children: [row.original.metadata['invoice_id'] !== undefined &&
(0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, children: (0, jsx_runtime_1.jsx)(invoice_number_from_order_1.default, { invoiceId: row.original.metadata['invoice_id'] }) }), row.original.metadata['packing_slip_id'] !== undefined &&
(0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, children: (0, jsx_runtime_1.jsx)(packing_slip_number_1.default, { packingSlipId: row.original.metadata['packing_slip_id'] }) })] }) }));
}
},
{
Header: () => ((0, jsx_runtime_1.jsxs)(material_1.Grid, { container: true, justifyContent: "flex-end", alignItems: "flex-end", spacing: 1, children: [(0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, children: (0, jsx_runtime_1.jsx)(ui_1.Tooltip, { content: (0, jsx_runtime_1.jsxs)(material_1.Grid, { item: true, children: [(0, jsx_runtime_1.jsx)(ui_1.Text, { size: "small", children: "We do not store documents. " }), (0, jsx_runtime_1.jsx)(Link_1.default, { fontSize: 12, href: 'https://github.com/RSC-Labs/medusa-documents?tab=readme-ov-file#what-means-we-do-not-store-documents', children: "Learn more what it means. " })] }), children: (0, jsx_runtime_1.jsx)(icons_1.InformationCircle, {}) }) }), (0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, children: ("Actions") })] })),
id: "actions",
Cell: ({ row }) => {
return ((0, jsx_runtime_1.jsx)(material_1.Grid, { container: true, justifyContent: 'flex-end', children: (0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, children: (0, jsx_runtime_1.jsx)(actions_dropdown_1.ActionsDropdown, { order: row.original }) }) }));
}
},
], []);
return [columns];
};
exports.default = useOrderTableColums;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWNvbHVtbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdWktY29tcG9uZW50cy9vcmRlcnMvb3JkZXItdGFibGUvdXNlLWNvbHVtbnMudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxvREFBMkI7QUFDM0IsaUNBQStCO0FBRS9CLHFDQUF5RDtBQUV6RCxtREFBK0M7QUFDL0MsNENBQW9DO0FBQ3BDLDhFQUF5RTtBQUN6RSw0RkFBZ0U7QUFDaEUsZ0ZBQXFEO0FBQ3JELDJDQUFzRTtBQUN0RSw4REFBc0M7QUFHdEM7Ozs7O0dBS0c7QUFDSCxTQUFnQixnQkFBZ0IsQ0FBQyxRQUFnQjtJQUMvQyxNQUFNLGNBQWMsR0FBRyx1QkFBVSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQTtJQUN4RSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFBO0FBQ3JDLENBQUM7QUFIRCw0Q0FHQztBQUVELFNBQWdCLGVBQWUsQ0FBQyxRQUFnQixFQUFFLE1BQWM7SUFDOUQsTUFBTSxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDMUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQTtBQUNyQyxDQUFDO0FBSEQsMENBR0M7QUFTRCxTQUFTLHNCQUFzQixDQUFDLEVBQzlCLE1BQU0sRUFDTixRQUFRLEVBQ1IsTUFBTSxFQUNOLEdBQUcsR0FBRyxDQUFDLEdBQ1U7SUFDakIsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFBO0lBRXBCLGdEQUFnRDtJQUNoRCxJQUFJLFFBQVEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxLQUFLLEVBQUU7UUFDcEMsTUFBTSxHQUFHLE9BQU8sQ0FBQTtLQUNqQjtJQUVELE1BQU0sR0FBRyxNQUFNLGFBQU4sTUFBTSxjQUFOLE1BQU0sR0FBSSx1QkFBVSxD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