From 341e9423ce1a53b32726d238d1a740373a1e2ba9 Mon Sep 17 00:00:00 2001 From: Sebastian Rindom Date: Tue, 11 Aug 2020 21:53:00 +0200 Subject: [PATCH] Pretty order numbers --- .../src/services/brightpearl.js | 2 +- packages/medusa/src/loaders/defaults.js | 2 ++ packages/medusa/src/models/counter.js | 13 ++++++++ packages/medusa/src/models/order.js | 1 + packages/medusa/src/services/counter.js | 33 +++++++++++++++++++ packages/medusa/src/services/order.js | 8 +++-- 6 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 packages/medusa/src/models/counter.js create mode 100644 packages/medusa/src/services/counter.js diff --git a/packages/medusa-plugin-brightpearl/src/services/brightpearl.js b/packages/medusa-plugin-brightpearl/src/services/brightpearl.js index 1a3aea51cb..76cbd143d8 100644 --- a/packages/medusa-plugin-brightpearl/src/services/brightpearl.js +++ b/packages/medusa-plugin-brightpearl/src/services/brightpearl.js @@ -374,7 +374,7 @@ class BrightpearlService extends BaseService { currency: { code: fromOrder.currency_code, }, - ref: fromOrder._id, + ref: fromOrder.display_id, externalRef: fromOrder._id, channelId: this.options.channel_id || `1`, installedIntegrationInstanceId: authData.installation_instance_id, diff --git a/packages/medusa/src/loaders/defaults.js b/packages/medusa/src/loaders/defaults.js index de1ac5edf6..4dcd590880 100644 --- a/packages/medusa/src/loaders/defaults.js +++ b/packages/medusa/src/loaders/defaults.js @@ -1,4 +1,5 @@ export default async ({ container }) => { + const counterService = container.resolve("counterService") const storeService = container.resolve("storeService") const profileService = container.resolve("shippingProfileService") @@ -23,6 +24,7 @@ export default async ({ container }) => { payment_providers: payIds, }) + await counterService.createDefaults() await profileService.createDefault() await profileService.createGiftCardDefault() } diff --git a/packages/medusa/src/models/counter.js b/packages/medusa/src/models/counter.js new file mode 100644 index 0000000000..16b9a9ea7a --- /dev/null +++ b/packages/medusa/src/models/counter.js @@ -0,0 +1,13 @@ +import mongoose from "mongoose" +import { BaseModel } from "medusa-interfaces" + +class CounterModel extends BaseModel { + static modelName = "Counter" + + static schema = { + _id: String, + next: Number, + } +} + +export default CounterModel diff --git a/packages/medusa/src/models/order.js b/packages/medusa/src/models/order.js index 4749413b07..e15211c9b3 100644 --- a/packages/medusa/src/models/order.js +++ b/packages/medusa/src/models/order.js @@ -15,6 +15,7 @@ class OrderModel extends BaseModel { static modelName = "Order" static schema = { + display_id: { type: String, required: true, unique: true }, // pending, completed, archived, cancelled status: { type: String, default: "pending" }, // not_fulfilled, partially_fulfilled (some line items have been returned), fulfilled, returned, diff --git a/packages/medusa/src/services/counter.js b/packages/medusa/src/services/counter.js new file mode 100644 index 0000000000..db9b8828b6 --- /dev/null +++ b/packages/medusa/src/services/counter.js @@ -0,0 +1,33 @@ +import _ from "lodash" +import { Validator, MedusaError } from "medusa-core-utils" +import { BaseService } from "medusa-interfaces" + +/** + * Provides layer to manipulate carts. + * @implements BaseService + */ +class CounterService extends BaseService { + constructor({ counterModel }) { + super() + + /** @private @const {CartModel} */ + this.counterModel_ = counterModel + } + + async createDefaults() { + const orderCounter = await this.counterModel_.findOne({ _id: "orders" }) + if (!orderCounter) { + await this.counterModel_.create({ _id: "orders", next: 1000 }) + } + } + + async getNext(id) { + const counter = await this.counterModel_.updateOne( + { _id: id }, + { $inc: { next: 1 } } + ) + return counter.next + } +} + +export default CounterService diff --git a/packages/medusa/src/services/order.js b/packages/medusa/src/services/order.js index 686f8e18d4..9282d776c1 100644 --- a/packages/medusa/src/services/order.js +++ b/packages/medusa/src/services/order.js @@ -17,6 +17,7 @@ class OrderService extends BaseService { constructor({ orderModel, + counterService, paymentProviderService, shippingProfileService, discountService, @@ -54,6 +55,8 @@ class OrderService extends BaseService { /** @private @const {EventBus} */ this.eventBus_ = eventBusService + + this.counterService_ = counterService } /** @@ -343,6 +346,7 @@ class OrderService extends BaseService { ) const o = { + display_id: await this.counterService_.getNext("orders"), payment_method: { provider_id: paymentSession.provider_id, data: paymentData, @@ -789,8 +793,8 @@ class OrderService extends BaseService { } return { ...i, - returned_quantity: returnedQuantity - returned + returned_quantity: returnedQuantity, + returned, } } else { if (!i.returned) {