Skip to content

Commit

Permalink
Improved: Migrated open orders page to use APIs from maarg (#905).
Browse files Browse the repository at this point in the history
  • Loading branch information
ravilodhi committed Jan 28, 2025
1 parent 43a2a29 commit 081cbea
Show file tree
Hide file tree
Showing 12 changed files with 400 additions and 48 deletions.
89 changes: 89 additions & 0 deletions src/services/MaargOrderService.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
import { api, client, hasError } from '@/adapter';
import store from '@/store';
import { showToast } from '@/utils';
import { translate } from '@hotwax/dxp-components';
import logger from '@/logger'
import { cogOutline } from 'ionicons/icons';

const findOpenOrders = async (query: any): Promise<any> => {
return api({
// TODO: We can replace this with any API
url: "solr-query",
method: "post",
data: query
});
}

const createPicklist = async (payload: any): Promise <any> => {
const omsRedirectionInfo = store.getters['user/getOmsRedirectionInfo'];
const baseURL = store.getters['user/getMaargBaseUrl'];

return client({
url: `createOrderFulfillmentWave`,
method: "POST",
baseURL,
headers: {
"api_key": omsRedirectionInfo.token,
"Content-Type": "application/json"
},
data: payload,
});
}

const printPicklist = async (picklistId: string): Promise <any> => {
const omsRedirectionInfo = store.getters['user/getOmsRedirectionInfo'];
const baseURL = store.getters['user/getMaargBaseUrl'];

try {
const resp = await client({
url: "printPicklist.pdf",
method: "GET",
baseURL,
headers: {
"Content-Type": "application/json"
},
responseType: "blob"
});

if (!resp || resp.status !== 200 || hasError(resp)) {
throw resp.data;
}

// Generate local file URL for the blob received
const pdfUrl = window.URL.createObjectURL(resp.data);
// Open the file in new tab
try {
(window as any).open(pdfUrl, "_blank").focus();
}
catch {
showToast(translate('Unable to open as browser is blocking pop-ups.', {documentName: 'picklist'}), { icon: cogOutline });
}
} catch (err) {
showToast(translate('Failed to print picklist'))
logger.error("Failed to print picklist", err)
}
}

const recycleOutstandingOrders = async(payload: any): Promise<any> => {

const omsRedirectionInfo = store.getters['user/getOmsRedirectionInfo'];
const baseURL = store.getters['user/getMaargBaseUrl'];

return client({
url: `bulkRejectStoreOutstandingOrders`,
method: "POST",
baseURL,
headers: {
"api_key": omsRedirectionInfo.token,
"Content-Type": "application/json"
},
data: payload,
});
}

export const MaargOrderService = {
createPicklist,
findOpenOrders,
printPicklist,
recycleOutstandingOrders
}
9 changes: 1 addition & 8 deletions src/services/UserService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -106,13 +106,7 @@ const recycleInProgressOrders = async(payload: any): Promise<any> => {
})
}

const recycleOutstandingOrders = async(payload: any): Promise<any> => {
return api({
url: "service/bulkRejectStoreOutstandingOrders",
method: "post",
data: payload
})
}


const getPreferredStore = async (token: any): Promise<any> => {
const baseURL = store.getters['user/getBaseUrl'];
Expand Down Expand Up @@ -437,7 +431,6 @@ export const UserService = {
isEnumExists,
moquiLogin,
recycleInProgressOrders,
recycleOutstandingOrders,
setUserPreference,
getUserPermissions,
updateAffectQohConfig,
Expand Down
2 changes: 2 additions & 0 deletions src/store/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import createPersistedState from "vuex-persistedstate";
import userModule from './modules/user';
import productModule from "./modules/product"
import orderModule from "./modules/order"
import maargorderModule from "./modules/maargorder"
import transferOrderModule from "./modules/transferorder"
import utilModule from "./modules/util"
import stockModule from "./modules/stock"
Expand Down Expand Up @@ -41,6 +42,7 @@ const store = createStore<RootState>({
'user': userModule,
'product': productModule,
'order': orderModule,
'maargorder': maargorderModule,
'orderLookup': orderLookupModule,
'util': utilModule,
'stock': stockModule,
Expand Down
34 changes: 34 additions & 0 deletions src/store/modules/maargorder/MaargOrderState.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
export default interface OrderState {
open: {
list: any,
total: number,
query: {
viewIndex: number,
viewSize: any,
queryString: string,
selectedShipmentMethods: Array<string>
}
},
completed: {
list: any,
total: number,
query: {
viewIndex: number,
viewSize: any,
queryString: string,
selectedCarrierPartyIds: Array<string>,
selectedShipmentMethods: Array<string>
}
},
inProgress: {
list: any,
total: number,
query: {
viewIndex: number,
viewSize: any,
selectedPicklist: string,
queryString: string
}
},
current: any,
}
93 changes: 93 additions & 0 deletions src/store/modules/maargorder/actions.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
import { ActionTree } from 'vuex'
import RootState from '@/store/RootState'
import OrderState from './MaargOrderState'
import emitter from '@/event-bus'
import { MaargOrderService } from '@/services/MaargOrderService'
import { hasError } from '@/adapter'
import * as types from './mutation-types'
import { escapeSolrSpecialChars, prepareOrderQuery } from '@/utils/solrHelper'
import logger from '@/logger'
import { removeKitComponents } from '@/utils/order'
import { getCurrentFacilityId, getProductStoreId } from '@/utils'

const actions: ActionTree<OrderState, RootState> = {

// get open orders
async findOpenOrders ({ commit, state }, payload = {}) {
emitter.emit('presentLoader');
let resp;

const openOrderQuery = JSON.parse(JSON.stringify(state.open.query))

const params = {
...payload,
docType: 'ORDER',
queryString: openOrderQuery.queryString,
queryFields: 'productId productName parentProductName orderId orderName customerEmailId customerPartyId customerPartyName search_orderIdentifications goodIdentifications',
viewSize: openOrderQuery.viewSize,
sort: payload.sort ? payload.sort : "orderDate asc",
filters: {
'-shipmentMethodTypeId': { value: 'STOREPICKUP' },
'-fulfillmentStatus': { value: 'created'},
orderStatusId: { value: 'ORDER_APPROVED' },
orderTypeId: { value: 'SALES_ORDER' },
facilityId: { value: escapeSolrSpecialChars(getCurrentFacilityId()) },
productStoreId: { value: getProductStoreId() }
}
}

// only adding shipmentMethods when a method is selected
if(openOrderQuery.selectedShipmentMethods.length) {
params.filters['shipmentMethodTypeId'] = { value: openOrderQuery.selectedShipmentMethods, op: 'OR' }
}

const orderQueryPayload = prepareOrderQuery(params)
let orders = [];
let total = 0;

try {
resp = await MaargOrderService.findOpenOrders(orderQueryPayload);
if (!hasError(resp) && resp.data.grouped?.orderId.matches > 0) {
total = resp.data.grouped.orderId.ngroups
orders = resp.data.grouped.orderId.groups
await this.dispatch('product/getProductInformation', { orders })

orders = orders.map((order: any) => {
const orderItem = order.doclist.docs[0];

return {
category: 'open',
customerId: orderItem.customerPartyId,
customerName: orderItem.customerPartyName,
orderId: orderItem.orderId,
orderDate: orderItem.orderDate,
orderName: orderItem.orderName,
groupValue: order.groupValue,
items: removeKitComponents({items: order.doclist.docs}),
shipGroupSeqId: orderItem.shipGroupSeqId,
shipmentMethodTypeId: orderItem.shipmentMethodTypeId,
reservedDatetime: orderItem.reservedDatetime
}
})
} else {
throw resp.data
}
} catch (err) {
logger.error('No outstanding orders found', err)
}

openOrderQuery.viewSize = orders.length

commit(types.ORDER_OPEN_QUERY_UPDATED, { ...openOrderQuery })
commit(types.ORDER_OPEN_UPDATED, {list: orders, total})

emitter.emit('dismissLoader');
return resp;
},
async updateOpenQuery({ commit, dispatch }, payload) {
commit(types.ORDER_OPEN_QUERY_UPDATED, payload)
await dispatch('findOpenOrders');
},
}

export default actions;
19 changes: 19 additions & 0 deletions src/store/modules/maargorder/getters.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { GetterTree } from "vuex";
import OrderState from "./MaargOrderState";
import RootState from "../../RootState";

const getters: GetterTree<OrderState, RootState> = {
getOpenOrders (state) {
return state.open;
},
getInProgressOrders (state) {
return state.inProgress;
},
getCompletedOrders (state) {
return state.completed;
},
getCurrent (state) {
return state.current
}
};
export default getters;
49 changes: 49 additions & 0 deletions src/store/modules/maargorder/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import actions from './actions'
import getters from './getters'
import mutations from './mutations'
import { Module } from 'vuex'
import OrderState from './MaargOrderState'
import RootState from '../../RootState'

const orderModule: Module<OrderState, RootState> = {
namespaced: true,
state: {
open: {
list: [],
total: 0,
query: {
viewIndex: 0,
viewSize: process.env.VUE_APP_VIEW_SIZE,
queryString: '',
selectedShipmentMethods: []
}
},
completed: {
list: [],
total: 0,
query: {
viewIndex: 0,
viewSize: process.env.VUE_APP_VIEW_SIZE,
queryString: '',
selectedCarrierPartyIds: [],
selectedShipmentMethods: []
}
},
inProgress: {
list: [],
total: 0,
query: {
viewIndex: 0,
viewSize: process.env.VUE_APP_VIEW_SIZE,
selectedPicklist: '',
queryString: ''
}
},
current: {}
},
getters,
actions,
mutations
}

export default orderModule;
11 changes: 11 additions & 0 deletions src/store/modules/maargorder/mutation-types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
export const SN_ORDER = 'order'
export const ORDER_OPEN_UPDATED = SN_ORDER + '/OPEN_UPDATED'
export const ORDER_OPEN_QUERY_UPDATED = SN_ORDER + '/OPEN_QUERY_UPDATED'
export const ORDER_OPEN_CLEARED = SN_ORDER + '/OPEN_CLEARED'
export const ORDER_INPROGRESS_UPDATED = SN_ORDER + '/INPROGRESS_UPDATED'
export const ORDER_INPROGRESS_QUERY_UPDATED = SN_ORDER + '/INPROGRESS_QUERY_UPDATED'
export const ORDER_INPROGRESS_CLEARED = SN_ORDER + '/INPROGRESS_CLEARED'
export const ORDER_COMPLETED_UPDATED = SN_ORDER + '/COMPLETED_UPDATED'
export const ORDER_COMPLETED_QUERY_UPDATED = SN_ORDER + '/COMPLETED_QUERY_UPDATED'
export const ORDER_COMPLETED_CLEARED = SN_ORDER + '/COMPLETED_CLEARED'
export const ORDER_CURRENT_UPDATED = SN_ORDER + '/CURRENT_UPDATED'
Loading

0 comments on commit 081cbea

Please sign in to comment.