@medusajs/order
Version:
Medusa Order module
71 lines • 2.88 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.receiveReturn = receiveReturn;
const utils_1 = require("@medusajs/framework/utils");
function createReturnItems(data) {
return data.items.map((item) => ({
action: utils_1.ChangeActionType.RECEIVE_RETURN_ITEM,
internal_note: item.internal_note,
reference: data.reference,
reference_id: data.reference_id,
details: {
reference_id: item.id,
quantity: item.quantity,
},
}));
}
async function createOrderChange(service, data, returnEntry, items, sharedContext) {
return await service.createOrderChange_({
order_id: returnEntry.order_id,
return_id: returnEntry.id,
reference: "return",
reference_id: returnEntry.id,
change_type: utils_1.OrderChangeType.RETURN_RECEIVE,
description: data.description,
internal_note: data.internal_note,
created_by: data.created_by,
metadata: data.metadata,
actions: items,
}, sharedContext);
}
function updateReturnItems(returnEntry, items) {
return returnEntry.items
.map((item) => {
const data = items.find((i) => i.details.reference_id === item.item_id);
if (!data)
return;
const receivedQuantity = utils_1.MathBN.add(item.received_quantity || 0, data.details.quantity);
item.received_quantity = receivedQuantity;
return {
id: item.id,
received_quantity: receivedQuantity,
};
})
.filter(Boolean);
}
function checkAllItemsReceived(returnEntry) {
return returnEntry.items.every((item) => utils_1.MathBN.eq(item.received_quantity, item.quantity));
}
function getReturnUpdateData(hasReceivedAllItems) {
return hasReceivedAllItems
? { status: utils_1.ReturnStatus.RECEIVED, received_at: new Date() }
: { status: utils_1.ReturnStatus.PARTIALLY_RECEIVED };
}
async function receiveReturn(data, sharedContext) {
const returnEntry = await this.retrieveReturn(data.return_id, {
select: ["id", "order_id"],
relations: ["items", "items.item"],
}, sharedContext);
const items = createReturnItems(data);
const change = await createOrderChange(this, data, returnEntry, items, sharedContext);
await this.confirmOrderChange(change[0].id, sharedContext);
const retItemsToUpdate = updateReturnItems(returnEntry, items);
const hasReceivedAllItems = checkAllItemsReceived(returnEntry);
const retData = getReturnUpdateData(hasReceivedAllItems);
const [returnRef] = await (0, utils_1.promiseAll)([
this.updateReturns({ selector: { id: returnEntry.id }, data: retData }, sharedContext),
this.updateReturnItems(retItemsToUpdate, sharedContext),
]);
return returnRef;
}
//# sourceMappingURL=receive-return.js.map
;