@lodashventure/medusa-quotation 1.5.15 → 1.5.17
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/.medusa/server/src/admin/index.js +5 -2
- package/.medusa/server/src/admin/index.mjs +5 -2
- package/.medusa/server/src/api/admin/quotes/create/route.js +5 -2
- package/.medusa/server/src/api/admin/quotes/query-config.js +3 -1
- package/.medusa/server/src/api/middlewares.js +9 -2
- package/.medusa/server/src/api/store/customers/me/quotes/[id]/accept/route.js +2 -2
- package/.medusa/server/src/api/store/customers/me/quotes/[id]/download/route.js +177 -0
- package/.medusa/server/src/api/store/customers/me/quotes/[id]/preview/route.js +2 -2
- package/.medusa/server/src/api/store/customers/me/quotes/[id]/reject/route.js +2 -2
- package/.medusa/server/src/api/store/customers/me/quotes/[id]/route.js +19 -0
- package/.medusa/server/src/api/store/customers/me/quotes/query-config.js +6 -1
- package/.medusa/server/src/api/store/customers/me/quotes/route.js +26 -3
- package/.medusa/server/src/fonts/vfs_fonts.js +5 -4
- package/.medusa/server/src/modules/quote/migrations/Migration20251101100000.js +16 -0
- package/.medusa/server/src/modules/quote/models/quote.js +2 -1
- package/.medusa/server/src/utils/generate-quote-pdf.js +350 -0
- package/.medusa/server/src/workflows/admin-create-quote.js +7 -4
- package/.medusa/server/src/workflows/create-request-for-quote.js +23 -5
- package/.medusa/server/src/workflows/steps/create-quotes.js +1 -1
- package/package.json +4 -4
|
@@ -2079,6 +2079,7 @@ const useQuotePdf = () => {
|
|
|
2079
2079
|
{ text: clientInfo.address2 },
|
|
2080
2080
|
{ text: clientInfo.zipCode },
|
|
2081
2081
|
{ text: `Phone: ${clientInfo.phone}` },
|
|
2082
|
+
...clientInfo.email ? [{ text: `Email: ${clientInfo.email}` }] : [],
|
|
2082
2083
|
...clientInfo.taxId ? [{ text: `Tax ID: ${clientInfo.taxId}` }] : []
|
|
2083
2084
|
],
|
|
2084
2085
|
margin: [5, 5, 5, 5]
|
|
@@ -2514,16 +2515,18 @@ const QuoteDetails = () => {
|
|
|
2514
2515
|
address2: (store == null ? void 0 : store.address2) || "",
|
|
2515
2516
|
zipCode: (store == null ? void 0 : store.zipCode) || "",
|
|
2516
2517
|
phone: (store == null ? void 0 : store.phone) || "",
|
|
2518
|
+
email: (store == null ? void 0 : store.email) || "",
|
|
2517
2519
|
website: (store == null ? void 0 : store.website) || "",
|
|
2518
2520
|
taxId: (store == null ? void 0 : store.taxId) || "",
|
|
2519
|
-
logoUrl: (store == null ? void 0 : store.logoUrl) ||
|
|
2521
|
+
logoUrl: (store == null ? void 0 : store.logoUrl) || void 0
|
|
2520
2522
|
},
|
|
2521
2523
|
clientInfo: {
|
|
2522
2524
|
name: ((customer == null ? void 0 : customer.first_name) || "") + " " + ((customer == null ? void 0 : customer.last_name) || ""),
|
|
2523
2525
|
address1: (shippingAddress == null ? void 0 : shippingAddress.address_1) ?? "",
|
|
2524
2526
|
address2: (shippingAddress == null ? void 0 : shippingAddress.address_2) ?? "",
|
|
2525
2527
|
zipCode: (shippingAddress == null ? void 0 : shippingAddress.postal_code) ?? "",
|
|
2526
|
-
phone: (shippingAddress == null ? void 0 : shippingAddress.phone) ?? ""
|
|
2528
|
+
phone: (shippingAddress == null ? void 0 : shippingAddress.phone) ?? "",
|
|
2529
|
+
email: (customer == null ? void 0 : customer.email) ?? ""
|
|
2527
2530
|
},
|
|
2528
2531
|
quotation: {
|
|
2529
2532
|
number: new Date((quote == null ? void 0 : quote.created_at) ?? "").getTime().toString() ?? "",
|
|
@@ -2075,6 +2075,7 @@ const useQuotePdf = () => {
|
|
|
2075
2075
|
{ text: clientInfo.address2 },
|
|
2076
2076
|
{ text: clientInfo.zipCode },
|
|
2077
2077
|
{ text: `Phone: ${clientInfo.phone}` },
|
|
2078
|
+
...clientInfo.email ? [{ text: `Email: ${clientInfo.email}` }] : [],
|
|
2078
2079
|
...clientInfo.taxId ? [{ text: `Tax ID: ${clientInfo.taxId}` }] : []
|
|
2079
2080
|
],
|
|
2080
2081
|
margin: [5, 5, 5, 5]
|
|
@@ -2510,16 +2511,18 @@ const QuoteDetails = () => {
|
|
|
2510
2511
|
address2: (store == null ? void 0 : store.address2) || "",
|
|
2511
2512
|
zipCode: (store == null ? void 0 : store.zipCode) || "",
|
|
2512
2513
|
phone: (store == null ? void 0 : store.phone) || "",
|
|
2514
|
+
email: (store == null ? void 0 : store.email) || "",
|
|
2513
2515
|
website: (store == null ? void 0 : store.website) || "",
|
|
2514
2516
|
taxId: (store == null ? void 0 : store.taxId) || "",
|
|
2515
|
-
logoUrl: (store == null ? void 0 : store.logoUrl) ||
|
|
2517
|
+
logoUrl: (store == null ? void 0 : store.logoUrl) || void 0
|
|
2516
2518
|
},
|
|
2517
2519
|
clientInfo: {
|
|
2518
2520
|
name: ((customer == null ? void 0 : customer.first_name) || "") + " " + ((customer == null ? void 0 : customer.last_name) || ""),
|
|
2519
2521
|
address1: (shippingAddress == null ? void 0 : shippingAddress.address_1) ?? "",
|
|
2520
2522
|
address2: (shippingAddress == null ? void 0 : shippingAddress.address_2) ?? "",
|
|
2521
2523
|
zipCode: (shippingAddress == null ? void 0 : shippingAddress.postal_code) ?? "",
|
|
2522
|
-
phone: (shippingAddress == null ? void 0 : shippingAddress.phone) ?? ""
|
|
2524
|
+
phone: (shippingAddress == null ? void 0 : shippingAddress.phone) ?? "",
|
|
2525
|
+
email: (customer == null ? void 0 : customer.email) ?? ""
|
|
2523
2526
|
},
|
|
2524
2527
|
quotation: {
|
|
2525
2528
|
number: new Date((quote == null ? void 0 : quote.created_at) ?? "").getTime().toString() ?? "",
|
|
@@ -5,7 +5,10 @@ const utils_1 = require("@medusajs/framework/utils");
|
|
|
5
5
|
const admin_create_quote_1 = require("../../../../workflows/admin-create-quote");
|
|
6
6
|
const POST = async (req, res) => {
|
|
7
7
|
const { result: { quote: createdQuote }, } = await (0, admin_create_quote_1.adminCreateQuoteWorkflow)(req.scope).run({
|
|
8
|
-
input:
|
|
8
|
+
input: {
|
|
9
|
+
...req.validatedBody,
|
|
10
|
+
user_id: req.auth_context.actor_id,
|
|
11
|
+
},
|
|
9
12
|
});
|
|
10
13
|
const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
11
14
|
const { data: [quote], } = await query.graph({
|
|
@@ -16,4 +19,4 @@ const POST = async (req, res) => {
|
|
|
16
19
|
return res.json({ quote });
|
|
17
20
|
};
|
|
18
21
|
exports.POST = POST;
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3F1b3Rlcy9jcmVhdGUvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUEscURBQXNFO0FBQ3RFLGlGQUFvRjtBQUc3RSxNQUFNLElBQUksR0FBRyxLQUFLLEVBQ3ZCLEdBQXFELEVBQ3JELEdBQW1CLEVBQ25CLEVBQUU7SUFDRixNQUFNLEVBQ0osTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxHQUNoQyxHQUFHLE1BQU0sSUFBQSw2Q0FBd0IsRUFBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ2hELEtBQUssRUFBRTtZQUNMLEdBQUcsR0FBRyxDQUFDLGFBQWE7WUFDcEIsT0FBTyxFQUFFLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUTtTQUNuQztLQUNGLENBQUMsQ0FBQztJQUVILE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWpFLE1BQU0sRUFDSixJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FDZCxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FDbkI7UUFDRSxNQUFNLEVBQUUsT0FBTztRQUNmLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxlQUFlLEVBQUUsWUFBWSxDQUFDO1FBQzVDLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFFO0tBQ2pDLEVBQ0QsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsQ0FDN0IsQ0FBQztJQUVGLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDN0IsQ0FBQyxDQUFDO0FBM0JXLFFBQUEsSUFBSSxRQTJCZiJ9
|
|
@@ -3,7 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.listAdminQuoteQueryConfig = exports.retrieveAdminQuoteQueryConfig = exports.quoteFields = void 0;
|
|
4
4
|
exports.quoteFields = [
|
|
5
5
|
"id",
|
|
6
|
+
"doc_no",
|
|
6
7
|
"status",
|
|
8
|
+
"user_id",
|
|
7
9
|
"created_at",
|
|
8
10
|
"updated_at",
|
|
9
11
|
"*customer",
|
|
@@ -53,4 +55,4 @@ exports.listAdminQuoteQueryConfig = {
|
|
|
53
55
|
defaults: exports.quoteFields,
|
|
54
56
|
isList: true,
|
|
55
57
|
};
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwaS9hZG1pbi9xdW90ZXMvcXVlcnktY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFhLFFBQUEsV0FBVyxHQUFHO0lBQ3pCLElBQUk7SUFDSixRQUFRO0lBQ1IsUUFBUTtJQUNSLFNBQVM7SUFDVCxZQUFZO0lBQ1osWUFBWTtJQUNaLFdBQVc7SUFDWCxTQUFTO0lBQ1QsZ0JBQWdCO0lBQ2hCLDJCQUEyQjtJQUMzQix3QkFBd0I7SUFDeEIsdUJBQXVCO0lBQ3ZCLG9CQUFvQjtJQUNwQixxQkFBcUI7SUFDckIscUJBQXFCO0lBQ3JCLG1CQUFtQjtJQUNuQixzQkFBc0I7SUFDdEIsdUJBQXVCO0lBQ3ZCLDBCQUEwQjtJQUMxQiw0QkFBNEI7SUFDNUIsZ0NBQWdDO0lBQ2hDLDRCQUE0QjtJQUM1QixnQ0FBZ0M7SUFDaEMsd0JBQXdCO0lBQ3hCLDJCQUEyQjtJQUMzQiw0QkFBNEI7SUFDNUIsaUNBQWlDO0lBQ2pDLG9DQUFvQztJQUNwQyxxQ0FBcUM7SUFDckMsNEJBQTRCO0lBQzVCLCtCQUErQjtJQUMvQixnQ0FBZ0M7SUFDaEMseUNBQXlDO0lBQ3pDLHdDQUF3QztJQUN4QyxxQ0FBcUM7SUFDckMsd0JBQXdCO0lBQ3hCLHdCQUF3QjtJQUN4QixvQkFBb0I7SUFDcEIsOEJBQThCO0lBQzlCLGdDQUFnQztJQUNoQyw0QkFBNEI7SUFDNUIsb0NBQW9DO0lBQ3BDLDJCQUEyQjtJQUMzQix1QkFBdUI7Q0FDeEIsQ0FBQztBQUVXLFFBQUEsNkJBQTZCLEdBQUc7SUFDM0MsUUFBUSxFQUFFLG1CQUFXO0lBQ3JCLE1BQU0sRUFBRSxLQUFLO0NBQ2QsQ0FBQztBQUVXLFFBQUEseUJBQXlCLEdBQUc7SUFDdkMsUUFBUSxFQUFFLG1CQUFXO0lBQ3JCLE1BQU0sRUFBRSxJQUFJO0NBQ2IsQ0FBQyJ9
|
|
@@ -18,11 +18,18 @@ exports.default = (0, http_1.defineMiddlewares)({
|
|
|
18
18
|
middlewares: [(0, http_1.validateAndTransformBody)(validators_2.AdminCreateQuote)],
|
|
19
19
|
},
|
|
20
20
|
{
|
|
21
|
-
|
|
21
|
+
method: ["GET"],
|
|
22
|
+
matcher: "/store/customers/me/quotes",
|
|
22
23
|
middlewares: [
|
|
23
24
|
(0, http_1.validateAndTransformQuery)(validators_1.GetQuoteParams, query_config_2.listStoreQuoteQueryConfig),
|
|
24
25
|
],
|
|
25
26
|
},
|
|
27
|
+
{
|
|
28
|
+
matcher: "/store/customers/me/quotes/:id*",
|
|
29
|
+
middlewares: [
|
|
30
|
+
(0, http_1.validateAndTransformQuery)(validators_1.GetQuoteParams, query_config_2.retrieveStoreQuoteQueryConfig),
|
|
31
|
+
],
|
|
32
|
+
},
|
|
26
33
|
{
|
|
27
34
|
matcher: "/admin/quotes*",
|
|
28
35
|
middlewares: [
|
|
@@ -31,4 +38,4 @@ exports.default = (0, http_1.defineMiddlewares)({
|
|
|
31
38
|
},
|
|
32
39
|
],
|
|
33
40
|
});
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbURBSWtDO0FBQ2xDLG1EQUFpRTtBQUNqRSw4REFBd0U7QUFDeEUsMERBR21DO0FBQ25DLDJFQUdrRDtBQUVsRCxrQkFBZSxJQUFBLHdCQUFpQixFQUFDO0lBQy9CLE1BQU0sRUFBRTtRQUNOO1lBQ0UsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ2hCLE9BQU8sRUFBRSw0QkFBNEI7WUFDckMsV0FBVyxFQUFFLENBQUMsSUFBQSwrQkFBd0IsRUFBQyx3QkFBa0IsQ0FBQyxDQUFDO1NBQzVEO1FBQ0Q7WUFDRSxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDaEIsT0FBTyxFQUFFLHNCQUFzQjtZQUMvQixXQUFXLEVBQUUsQ0FBQyxJQUFBLCtCQUF3QixFQUFDLDZCQUF1QixDQUFDLENBQUM7U0FDakU7UUFDRDtZQUNFLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNmLE9BQU8sRUFBRSw0QkFBNEI7WUFDckMsV0FBVyxFQUFFO2dCQUNYLElBQUEsZ0NBQXlCLEVBQ3ZCLDJCQUFxQixFQUNyQix3Q0FBeUIsQ0FDMUI7YUFDRjtTQUNGO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsaUNBQWlDO1lBQzFDLFdBQVcsRUFBRTtnQkFDWCxJQUFBLGdDQUF5QixFQUN2QiwyQkFBcUIsRUFDckIsNENBQTZCLENBQzlCO2FBQ0Y7U0FDRjtRQUNEO1lBQ0UsT0FBTyxFQUFFLGdCQUFnQjtZQUN6QixXQUFXLEVBQUU7Z0JBQ1gsSUFBQSxnQ0FBeUIsRUFDdkIsZ0NBQTBCLEVBQzFCLHdDQUF5QixDQUMxQjthQUNGO1NBQ0Y7S0FDRjtDQUNGLENBQUMsQ0FBQyJ9
|
|
@@ -14,10 +14,10 @@ const POST = async (req, res) => {
|
|
|
14
14
|
});
|
|
15
15
|
const { data: [quote], } = await query.graph({
|
|
16
16
|
entity: "quote",
|
|
17
|
-
filters: { id },
|
|
17
|
+
filters: { id, customer_id: req.auth_context.actor_id },
|
|
18
18
|
fields: req.queryConfig.fields,
|
|
19
19
|
}, { throwIfKeyNotFound: true });
|
|
20
20
|
return res.json({ quote });
|
|
21
21
|
};
|
|
22
22
|
exports.POST = POST;
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9tZS9xdW90ZXMvW2lkXS9hY2NlcHQvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUEscURBQXNFO0FBQ3RFLGdHQUFtRztBQUU1RixNQUFNLElBQUksR0FBRyxLQUFLLEVBQ3ZCLEdBQStCLEVBQy9CLEdBQW1CLEVBQ25CLEVBQUU7SUFDRixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUUxQixNQUFNLElBQUEsbURBQTJCLEVBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUMvQyxLQUFLLEVBQUU7WUFDTCxRQUFRLEVBQUUsRUFBRTtZQUNaLFdBQVcsRUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLFFBQVE7U0FDdkM7S0FDRixDQUFDLENBQUM7SUFFSCxNQUFNLEVBQ0osSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQ2QsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQ25CO1FBQ0UsTUFBTSxFQUFFLE9BQU87UUFDZixPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFO1FBQ3ZELE1BQU0sRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU07S0FDL0IsRUFDRCxFQUFFLGtCQUFrQixFQUFFLElBQUksRUFBRSxDQUM3QixDQUFDO0lBRUYsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUM3QixDQUFDLENBQUM7QUExQlcsUUFBQSxJQUFJLFFBMEJmIn0=
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const quote_1 = require("../../../../../../../modules/quote");
|
|
6
|
+
const generate_quote_pdf_1 = require("../../../../../../../utils/generate-quote-pdf");
|
|
7
|
+
const formatCurrency = (amount, currency) => {
|
|
8
|
+
if (typeof amount !== "number" || Number.isNaN(amount)) {
|
|
9
|
+
return "-";
|
|
10
|
+
}
|
|
11
|
+
const normalized = amount / 100;
|
|
12
|
+
try {
|
|
13
|
+
return new Intl.NumberFormat("th-TH", {
|
|
14
|
+
style: "currency",
|
|
15
|
+
currency: (currency || "THB").toUpperCase(),
|
|
16
|
+
}).format(normalized);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return `${normalized.toFixed(2)} ${currency || "THB"}`;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
const extractClientInfo = (quote) => {
|
|
23
|
+
const shipping = quote?.draft_order?.shipping_address;
|
|
24
|
+
const billing = quote?.draft_order?.billing_address;
|
|
25
|
+
const fallback = shipping || billing || {};
|
|
26
|
+
const customer = quote?.draft_order?.customer;
|
|
27
|
+
const nameParts = [
|
|
28
|
+
fallback.first_name || customer?.first_name || "",
|
|
29
|
+
fallback.last_name || customer?.last_name || "",
|
|
30
|
+
].filter(Boolean);
|
|
31
|
+
const name = nameParts.join(" ").trim() ||
|
|
32
|
+
fallback.company ||
|
|
33
|
+
customer?.email ||
|
|
34
|
+
"Customer";
|
|
35
|
+
return {
|
|
36
|
+
name,
|
|
37
|
+
address1: fallback.address_1 || "",
|
|
38
|
+
address2: fallback.address_2 || "",
|
|
39
|
+
zipCode: fallback.postal_code || "",
|
|
40
|
+
phone: fallback.phone || customer?.phone || "",
|
|
41
|
+
email: customer?.email || "",
|
|
42
|
+
taxId: fallback.metadata?.tax_id || "",
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
const extractItems = (quote, currency) => {
|
|
46
|
+
const items = quote?.draft_order?.items ?? [];
|
|
47
|
+
return items.map((item, index) => {
|
|
48
|
+
const code = item?.variant?.sku ||
|
|
49
|
+
item?.variant?.id ||
|
|
50
|
+
item?.product_handle ||
|
|
51
|
+
`ITEM-${index + 1}`;
|
|
52
|
+
const description = item?.title ||
|
|
53
|
+
item?.variant?.product?.title ||
|
|
54
|
+
item?.description ||
|
|
55
|
+
"สินค้า";
|
|
56
|
+
const qty = item?.detail?.quantity ?? item?.quantity ?? 1;
|
|
57
|
+
const unitPrice = item?.detail?.unit_price ??
|
|
58
|
+
item?.unit_price ??
|
|
59
|
+
item?.subtotal ??
|
|
60
|
+
item?.total ??
|
|
61
|
+
0;
|
|
62
|
+
const totalPrice = item?.total ?? unitPrice * qty;
|
|
63
|
+
return {
|
|
64
|
+
code,
|
|
65
|
+
description,
|
|
66
|
+
qty,
|
|
67
|
+
price: formatCurrency(unitPrice, currency),
|
|
68
|
+
total: formatCurrency(totalPrice, currency),
|
|
69
|
+
};
|
|
70
|
+
});
|
|
71
|
+
};
|
|
72
|
+
const extractTotals = (quote, currency) => {
|
|
73
|
+
const summary = quote?.draft_order?.summary ?? {};
|
|
74
|
+
const subtotal = summary.current_subtotal ??
|
|
75
|
+
summary.current_items_total ??
|
|
76
|
+
quote?.draft_order?.item_total ??
|
|
77
|
+
quote?.draft_order?.subtotal ??
|
|
78
|
+
0;
|
|
79
|
+
const discount = summary.current_discount_total ??
|
|
80
|
+
quote?.draft_order?.discount_total ??
|
|
81
|
+
0;
|
|
82
|
+
const total = summary.current_total ?? quote?.draft_order?.total ?? subtotal - discount;
|
|
83
|
+
const vat = summary.current_tax_total ?? quote?.draft_order?.tax_total ?? 0;
|
|
84
|
+
const totalDue = summary.current_total ?? quote?.draft_order?.total ?? total;
|
|
85
|
+
const vatRate = subtotal > 0 && vat > 0
|
|
86
|
+
? `${((vat / subtotal) * 100).toFixed(2)}%`
|
|
87
|
+
: "-";
|
|
88
|
+
return {
|
|
89
|
+
subtotal: formatCurrency(subtotal, currency),
|
|
90
|
+
discount: formatCurrency(discount, currency),
|
|
91
|
+
discountRate: discount > 0 && subtotal > 0
|
|
92
|
+
? `${((discount / subtotal) * 100).toFixed(2)}%`
|
|
93
|
+
: "0%",
|
|
94
|
+
total: formatCurrency(total, currency),
|
|
95
|
+
vat: formatCurrency(vat, currency),
|
|
96
|
+
vatRate,
|
|
97
|
+
totalDue: formatCurrency(totalDue, currency),
|
|
98
|
+
};
|
|
99
|
+
};
|
|
100
|
+
const formatQuoteDate = (value) => {
|
|
101
|
+
if (!value) {
|
|
102
|
+
return "-";
|
|
103
|
+
}
|
|
104
|
+
const date = value instanceof Date ? value : new Date(value);
|
|
105
|
+
if (Number.isNaN(date.getTime())) {
|
|
106
|
+
return "-";
|
|
107
|
+
}
|
|
108
|
+
try {
|
|
109
|
+
return new Intl.DateTimeFormat("th-TH", {
|
|
110
|
+
dateStyle: "medium",
|
|
111
|
+
}).format(date);
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return date.toISOString().split("T")[0] ?? "-";
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
const buildPdfPayload = (quote, store) => {
|
|
118
|
+
const currency = quote?.draft_order?.currency_code || "THB";
|
|
119
|
+
const amountDue = quote?.draft_order?.summary?.current_total ??
|
|
120
|
+
quote?.draft_order?.total;
|
|
121
|
+
return {
|
|
122
|
+
companyInfo: {
|
|
123
|
+
name: store?.name || "",
|
|
124
|
+
address1: store?.address1 || "",
|
|
125
|
+
address2: store?.address2 || "",
|
|
126
|
+
zipCode: store?.zipCode || "",
|
|
127
|
+
phone: store?.phone || "",
|
|
128
|
+
email: store?.email || "",
|
|
129
|
+
website: store?.website || "",
|
|
130
|
+
taxId: store?.taxId || "",
|
|
131
|
+
logoUrl: store?.logoUrl || "",
|
|
132
|
+
},
|
|
133
|
+
clientInfo: extractClientInfo(quote),
|
|
134
|
+
quotation: {
|
|
135
|
+
number: quote?.doc_no || quote?.draft_order?.display_id || quote?.id,
|
|
136
|
+
amountDue: formatCurrency(amountDue, currency),
|
|
137
|
+
date: formatQuoteDate(quote?.created_at),
|
|
138
|
+
},
|
|
139
|
+
items: extractItems(quote, currency),
|
|
140
|
+
totals: extractTotals(quote, currency),
|
|
141
|
+
note: "",
|
|
142
|
+
};
|
|
143
|
+
};
|
|
144
|
+
const GET = async (req, res) => {
|
|
145
|
+
const { id } = req.params;
|
|
146
|
+
const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
147
|
+
const { data: [quote], } = await query.graph({
|
|
148
|
+
entity: "quote",
|
|
149
|
+
fields: req.queryConfig.fields,
|
|
150
|
+
filters: {
|
|
151
|
+
id,
|
|
152
|
+
customer_id: req.auth_context.actor_id,
|
|
153
|
+
},
|
|
154
|
+
}, { throwIfKeyNotFound: true });
|
|
155
|
+
const storeService = req.scope.resolve(utils_1.Modules.STORE);
|
|
156
|
+
const stores = await storeService.listStores();
|
|
157
|
+
if (!stores.length) {
|
|
158
|
+
return res.status(404).json({ message: "Store not configured" });
|
|
159
|
+
}
|
|
160
|
+
const quoteModuleService = req.scope.resolve(quote_1.QUOTE_MODULE);
|
|
161
|
+
const [storeDetail] = await quoteModuleService.listQuoteStoreDetails({
|
|
162
|
+
store_id: stores[0].id,
|
|
163
|
+
});
|
|
164
|
+
if (!storeDetail) {
|
|
165
|
+
return res.status(400).json({
|
|
166
|
+
message: "Quote store information is not configured.",
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
const pdfPayload = buildPdfPayload(quote, storeDetail);
|
|
170
|
+
const pdfBuffer = await (0, generate_quote_pdf_1.generateQuotePdf)(pdfPayload);
|
|
171
|
+
const filename = `quotation-${pdfPayload.quotation.number}.pdf`;
|
|
172
|
+
res.setHeader("Content-Type", "application/pdf");
|
|
173
|
+
res.setHeader("Content-Disposition", `attachment; filename="${filename}"`);
|
|
174
|
+
return res.send(pdfBuffer);
|
|
175
|
+
};
|
|
176
|
+
exports.GET = GET;
|
|
177
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9tZS9xdW90ZXMvW2lkXS9kb3dubG9hZC9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSxxREFBK0U7QUFDL0UsOERBQWtFO0FBRWxFLHNGQUFpRjtBQUdqRixNQUFNLGNBQWMsR0FBRyxDQUFDLE1BQXNCLEVBQUUsUUFBaUIsRUFBRSxFQUFFO0lBQ25FLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUN2RCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxNQUFNLFVBQVUsR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDO0lBRWhDLElBQUksQ0FBQztRQUNILE9BQU8sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRTtZQUNwQyxLQUFLLEVBQUUsVUFBVTtZQUNqQixRQUFRLEVBQUUsQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFO1NBQzVDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsSUFBSSxLQUFLLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEtBQVUsRUFBRSxFQUFFO0lBQ3ZDLE1BQU0sUUFBUSxHQUFHLEtBQUssRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLENBQUM7SUFDdEQsTUFBTSxPQUFPLEdBQUcsS0FBSyxFQUFFLFdBQVcsRUFBRSxlQUFlLENBQUM7SUFDcEQsTUFBTSxRQUFRLEdBQUcsUUFBUSxJQUFJLE9BQU8s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
|
|
@@ -7,7 +7,7 @@ const GET = async (req, res) => {
|
|
|
7
7
|
const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
8
8
|
const { data: [quote], } = await query.graph({
|
|
9
9
|
entity: "quote",
|
|
10
|
-
filters: { id },
|
|
10
|
+
filters: { id, customer_id: req.auth_context.actor_id },
|
|
11
11
|
fields: req.queryConfig.fields,
|
|
12
12
|
}, { throwIfKeyNotFound: true });
|
|
13
13
|
const orderModuleService = req.scope.resolve(utils_1.Modules.ORDER);
|
|
@@ -20,4 +20,4 @@ const GET = async (req, res) => {
|
|
|
20
20
|
});
|
|
21
21
|
};
|
|
22
22
|
exports.GET = GET;
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9tZS9xdW90ZXMvW2lkXS9wcmV2aWV3L3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLHFEQUErRTtBQUV4RSxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQ3RCLEdBQStCLEVBQy9CLEdBQW1CLEVBQ25CLEVBQUU7SUFDRixNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUMxQixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDN0IsaUNBQXlCLENBQUMsS0FBSyxDQUNoQyxDQUFDO0lBRUYsTUFBTSxFQUNKLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUNkLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUNuQjtRQUNFLE1BQU0sRUFBRSxPQUFPO1FBQ2YsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRTtRQUN2RCxNQUFNLEVBQUUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNO0tBQy9CLEVBQ0QsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsQ0FDN0IsQ0FBQztJQUVGLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQzFDLGVBQU8sQ0FBQyxLQUFLLENBQ2QsQ0FBQztJQUVGLE1BQU0sT0FBTyxHQUFHLE1BQU0sa0JBQWtCLENBQUMsa0JBQWtCLENBQ3pELEtBQUssQ0FBQyxjQUFjLENBQ3JCLENBQUM7SUFFRixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNuQixLQUFLLEVBQUU7WUFDTCxHQUFHLEtBQUs7WUFDUixhQUFhLEVBQUUsT0FBTztTQUN2QjtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQWxDVyxRQUFBLEdBQUcsT0FrQ2QifQ==
|
|
@@ -14,10 +14,10 @@ const POST = async (req, res) => {
|
|
|
14
14
|
});
|
|
15
15
|
const { data: [quote], } = await query.graph({
|
|
16
16
|
entity: "quote",
|
|
17
|
-
filters: { id },
|
|
17
|
+
filters: { id, customer_id: req.auth_context.actor_id },
|
|
18
18
|
fields: req.queryConfig.fields,
|
|
19
19
|
}, { throwIfKeyNotFound: true });
|
|
20
20
|
return res.json({ quote });
|
|
21
21
|
};
|
|
22
22
|
exports.POST = POST;
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9tZS9xdW90ZXMvW2lkXS9yZWplY3Qvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EscURBQXNFO0FBQ3RFLGdHQUFtRztBQUU1RixNQUFNLElBQUksR0FBRyxLQUFLLEVBQ3ZCLEdBQStCLEVBQy9CLEdBQW1CLEVBQ25CLEVBQUU7SUFDRixNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUMxQixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDN0IsaUNBQXlCLENBQUMsS0FBSyxDQUNoQyxDQUFDO0lBRUYsTUFBTSxJQUFBLG1EQUEyQixFQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDL0MsS0FBSyxFQUFFO1lBQ0wsUUFBUSxFQUFFLEVBQUU7WUFDWixXQUFXLEVBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxRQUFRO1NBQ3ZDO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsTUFBTSxFQUNKLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUNkLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUNuQjtRQUNFLE1BQU0sRUFBRSxPQUFPO1FBQ2YsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRTtRQUN2RCxNQUFNLEVBQUUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNO0tBQy9CLEVBQ0QsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsQ0FDN0IsQ0FBQztJQUVGLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDN0IsQ0FBQyxDQUFDO0FBNUJXLFFBQUEsSUFBSSxRQTRCZiJ9
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const GET = async (req, res) => {
|
|
6
|
+
const { id } = req.params;
|
|
7
|
+
const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
8
|
+
const { data: [quote], } = await query.graph({
|
|
9
|
+
entity: "quote",
|
|
10
|
+
fields: req.queryConfig.fields,
|
|
11
|
+
filters: {
|
|
12
|
+
id,
|
|
13
|
+
customer_id: req.auth_context.actor_id,
|
|
14
|
+
},
|
|
15
|
+
}, { throwIfKeyNotFound: true });
|
|
16
|
+
return res.json({ quote });
|
|
17
|
+
};
|
|
18
|
+
exports.GET = GET;
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9tZS9xdW90ZXMvW2lkXS9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSxxREFBc0U7QUFFL0QsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUN0QixHQUErQixFQUMvQixHQUFtQixFQUNuQixFQUFFO0lBQ0YsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFDMUIsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFakUsTUFBTSxFQUNKLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUNkLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUNuQjtRQUNFLE1BQU0sRUFBRSxPQUFPO1FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTTtRQUM5QixPQUFPLEVBQUU7WUFDUCxFQUFFO1lBQ0YsV0FBVyxFQUFFLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUTtTQUN2QztLQUNGLEVBQ0QsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsQ0FDN0IsQ0FBQztJQUVGLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDN0IsQ0FBQyxDQUFDO0FBdEJXLFFBQUEsR0FBRyxPQXNCZCJ9
|
|
@@ -3,7 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.listStoreQuoteQueryConfig = exports.retrieveStoreQuoteQueryConfig = exports.quoteFields = void 0;
|
|
4
4
|
exports.quoteFields = [
|
|
5
5
|
"id",
|
|
6
|
+
"doc_no",
|
|
6
7
|
"status",
|
|
8
|
+
"user_id",
|
|
7
9
|
"*customer",
|
|
8
10
|
"cart.id",
|
|
9
11
|
"draft_order.id",
|
|
@@ -24,6 +26,9 @@ exports.quoteFields = [
|
|
|
24
26
|
"draft_order.item_total",
|
|
25
27
|
"draft_order.item_subtotal",
|
|
26
28
|
"draft_order.item_tax_total",
|
|
29
|
+
"draft_order.shipping_address.*",
|
|
30
|
+
"draft_order.billing_address.*",
|
|
31
|
+
"draft_order.customer.*",
|
|
27
32
|
"draft_order.original_item_total",
|
|
28
33
|
"draft_order.original_item_subtotal",
|
|
29
34
|
"draft_order.original_item_tax_total",
|
|
@@ -52,4 +57,4 @@ exports.listStoreQuoteQueryConfig = {
|
|
|
52
57
|
defaults: exports.quoteFields,
|
|
53
58
|
isList: true,
|
|
54
59
|
};
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwaS9zdG9yZS9jdXN0b21lcnMvbWUvcXVvdGVzL3F1ZXJ5LWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBYSxRQUFBLFdBQVcsR0FBRztJQUN6QixJQUFJO0lBQ0osUUFBUTtJQUNSLFFBQVE7SUFDUixTQUFTO0lBQ1QsV0FBVztJQUNYLFNBQVM7SUFDVCxnQkFBZ0I7SUFDaEIsMkJBQTJCO0lBQzNCLHdCQUF3QjtJQUN4Qix1QkFBdUI7SUFDdkIsb0JBQW9CO0lBQ3BCLHFCQUFxQjtJQUNyQixxQkFBcUI7SUFDckIsbUJBQW1CO0lBQ25CLHNCQUFzQjtJQUN0Qix1QkFBdUI7SUFDdkIsMEJBQTBCO0lBQzFCLDRCQUE0QjtJQUM1QixnQ0FBZ0M7SUFDaEMsNEJBQTRCO0lBQzVCLGdDQUFnQztJQUNoQyx3QkFBd0I7SUFDeEIsMkJBQTJCO0lBQzNCLDRCQUE0QjtJQUM1QixnQ0FBZ0M7SUFDaEMsK0JBQStCO0lBQy9CLHdCQUF3QjtJQUN4QixpQ0FBaUM7SUFDakMsb0NBQW9DO0lBQ3BDLHFDQUFxQztJQUNyQyw0QkFBNEI7SUFDNUIsK0JBQStCO0lBQy9CLGdDQUFnQztJQUNoQyx5Q0FBeUM7SUFDekMsd0NBQXdDO0lBQ3hDLHFDQUFxQztJQUNyQyx3QkFBd0I7SUFDeEIsd0JBQXdCO0lBQ3hCLG9CQUFvQjtJQUNwQiw4QkFBOEI7SUFDOUIsZ0NBQWdDO0lBQ2hDLDRCQUE0QjtJQUM1QixvQ0FBb0M7SUFDcEMsMkJBQTJCO0lBQzNCLGtDQUFrQztJQUNsQyx1QkFBdUI7Q0FDeEIsQ0FBQztBQUVXLFFBQUEsNkJBQTZCLEdBQUc7SUFDM0MsUUFBUSxFQUFFLG1CQUFXO0lBQ3JCLE1BQU0sRUFBRSxLQUFLO0NBQ2QsQ0FBQztBQUVXLFFBQUEseUJBQXlCLEdBQUc7SUFDdkMsUUFBUSxFQUFFLG1CQUFXO0lBQ3JCLE1BQU0sRUFBRSxJQUFJO0NBQ2IsQ0FBQyJ9
|
|
@@ -1,22 +1,45 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.POST = void 0;
|
|
3
|
+
exports.POST = exports.GET = void 0;
|
|
4
4
|
const utils_1 = require("@medusajs/framework/utils");
|
|
5
5
|
const create_request_for_quote_1 = require("../../../../../workflows/create-request-for-quote");
|
|
6
|
+
const GET = async (req, res) => {
|
|
7
|
+
const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
8
|
+
const queryConfig = req.queryConfig;
|
|
9
|
+
const { data: quotes, metadata } = await query.graph({
|
|
10
|
+
entity: "quote",
|
|
11
|
+
...queryConfig,
|
|
12
|
+
filters: {
|
|
13
|
+
...(queryConfig.filters ?? {}),
|
|
14
|
+
customer_id: req.auth_context.actor_id,
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
return res.json({
|
|
18
|
+
quotes,
|
|
19
|
+
count: metadata?.count ?? quotes.length,
|
|
20
|
+
offset: metadata?.skip ?? 0,
|
|
21
|
+
limit: metadata?.take ?? quotes.length,
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
exports.GET = GET;
|
|
6
25
|
const POST = async (req, res) => {
|
|
7
26
|
const { result: { quote: createdQuote }, } = await (0, create_request_for_quote_1.createRequestForQuoteWorkflow)(req.scope).run({
|
|
8
27
|
input: {
|
|
9
28
|
...req.validatedBody,
|
|
10
29
|
customer_id: req.auth_context.actor_id,
|
|
30
|
+
user_id: req.auth_context.actor_id,
|
|
11
31
|
},
|
|
12
32
|
});
|
|
13
33
|
const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
14
34
|
const { data: [quote], } = await query.graph({
|
|
15
35
|
entity: "quote",
|
|
16
36
|
fields: req.queryConfig.fields,
|
|
17
|
-
filters: {
|
|
37
|
+
filters: {
|
|
38
|
+
id: createdQuote.id,
|
|
39
|
+
customer_id: req.auth_context.actor_id,
|
|
40
|
+
},
|
|
18
41
|
}, { throwIfKeyNotFound: true });
|
|
19
42
|
return res.json({ quote });
|
|
20
43
|
};
|
|
21
44
|
exports.POST = POST;
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9tZS9xdW90ZXMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUEscURBQXNFO0FBQ3RFLGdHQUUyRDtBQUdwRCxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQ3RCLEdBQW1ELEVBQ25ELEdBQW1CLEVBQ25CLEVBQUU7SUFDRixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRSxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsV0FFdkIsQ0FBQztJQUVGLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztRQUNuRCxNQUFNLEVBQUUsT0FBTztRQUNmLEdBQUcsV0FBVztRQUNkLE9BQU8sRUFBRTtZQUNQLEdBQUcsQ0FBQyxXQUFXLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUM5QixXQUFXLEVBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxRQUFRO1NBQ3ZDO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ2QsTUFBTTtRQUNOLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNO1FBQ3ZDLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxJQUFJLENBQUM7UUFDM0IsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLElBQUksTUFBTSxDQUFDLE1BQU07S0FDdkMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBeEJXLFFBQUEsR0FBRyxPQXdCZDtBQUVLLE1BQU0sSUFBSSxHQUFHLEtBQUssRUFDdkIsR0FBZ0QsRUFDaEQsR0FBbUIsRUFDbkIsRUFBRTtJQUNGLE1BQU0sRUFDSixNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLEdBQ2hDLEdBQUcsTUFBTSxJQUFBLHdEQUE2QixFQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDckQsS0FBSyxFQUFFO1lBQ0wsR0FBRyxHQUFHLENBQUMsYUFBYTtZQUNwQixXQUFXLEVBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxRQUFRO1lBQ3RDLE9BQU8sRUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLFFBQVE7U0FDbkM7S0FDRixDQUFDLENBQUM7SUFFSCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDN0IsaUNBQXlCLENBQUMsS0FBSyxDQUNoQyxDQUFDO0lBRUYsTUFBTSxFQUNKLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUNkLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUNuQjtRQUNFLE1BQU0sRUFBRSxPQUFPO1FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTTtRQUM5QixPQUFPLEVBQUU7WUFDUCxFQUFFLEVBQUUsWUFBWSxDQUFDLEVBQUU7WUFDbkIsV0FBVyxFQUFFLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUTtTQUN2QztLQUNGLEVBQ0QsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsQ0FDN0IsQ0FBQztJQUVGLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDN0IsQ0FBQyxDQUFDO0FBakNXLFFBQUEsSUFBSSxRQWlDZiJ9
|