Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implemented: support for completed orders(#85zrkm9e3) #177

Merged
merged 3 commits into from
Jan 31, 2023
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
"City": "City",
"Click the backdrop to dismiss.": "Click the backdrop to dismiss.",
"Color": "Color",
"Completed": "Completed",
"Confirm": "Confirm",
"Copied": "Copied { text }",
"Copy": "Copy",
Expand Down
9 changes: 9 additions & 0 deletions src/services/OrderService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,14 @@ const getPackedOrders = async (payload: any): Promise <any> => {
});
}

const getCompletedOrders = async (payload: any): Promise <any> => {
return api({
url: "solr-query",
method: "post",
data: payload
});
}

const updateShipment = async (payload: any): Promise <any> => {
return api({
url: "updateShipment",
Expand Down Expand Up @@ -51,6 +59,7 @@ const rejectOrderItem = async (payload: any): Promise <any> => {
export const OrderService = {
getOpenOrders,
getOrderDetails,
getCompletedOrders,
getPackedOrders,
quickShipEntireShipGroup,
rejectOrderItem,
Expand Down
1 change: 1 addition & 0 deletions src/store/modules/order/OrderState.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@ export default interface OrderState {
open: any;
current: any;
packed: any;
completed: any;
}
70 changes: 70 additions & 0 deletions src/store/modules/order/actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,75 @@ const actions: ActionTree<OrderState , RootState> ={
return resp;
},

async getCompletedOrders ({ commit, state }, payload) {
// Show loader only when new query and not the infinite scroll
if (payload.viewIndex === 0) emitter.emit("presentLoader");
let resp;
const orderQueryPayload = prepareOrderQuery({
...payload,
shipmentMethodTypeId: !store.state.user.preference.showShippingOrders ? 'STOREPICKUP' : '',
orderItemStatusId: "ITEM_COMPLETED",
orderTypeId: 'SALES_ORDER',
docType: 'ORDER'
})

try {
resp = await OrderService.getCompletedOrders(orderQueryPayload)
if (resp.status === 200 && resp.data.grouped?.orderId?.ngroups > 0 && !hasError(resp)) {
let orders = resp?.data?.grouped?.orderId?.groups.map((order: any) => {
const orderItem = order.doclist.docs[0]
return {
orderId: orderItem.orderId,
orderName: orderItem.orderName,
customer: {
partyId: orderItem.customerPartyId,
name: orderItem.customerPartyName,
},
statusId: orderItem.orderStatusId,
parts: order.doclist.docs.reduce((arr: Array<any>, item: any) => {
const currentOrderPart = arr.find((orderPart: any) => orderPart.orderId === item.orderId)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should gather on the basis of parts only, but while rendering create a single item list

if (!currentOrderPart) {
arr.push({
orderId: item.orderId,
items: [{
orderItemSeqId: item.orderItemSeqId,
productId: item.productId,
facilityId: item.facilityId
}]
})
} else {
currentOrderPart.items.push({
orderItemSeqId: item.orderItemSeqId,
productId: item.productId,
facilityId: item.facilityId
})
}

return arr
}, []),
placedDate: orderItem.orderDate
}
})
this.dispatch('product/getProductInformation', { orders });

const total = resp.data.grouped?.orderId?.ngroups;

if(payload.viewIndex && payload.viewIndex > 0) orders = state.completed.list.concat(orders)
commit(types.ORDER_COMPLETED_UPDATED, { orders, total })
if (payload.viewIndex === 0) emitter.emit("dismissLoader");
} else {
commit(types.ORDER_COMPLETED_UPDATED, { orders: {}, total: 0 })
showToast(translate("Orders Not Found"))
}
emitter.emit("dismissLoader");
} catch(err) {
console.error(err)
showToast(translate("Something went wrong"))
}

return resp;
},

async deliverShipment ({ state, commit }, order) {
emitter.emit("presentLoader");
const params = {
Expand Down Expand Up @@ -397,6 +466,7 @@ const actions: ActionTree<OrderState , RootState> ={
clearOrders ({ commit }) {
commit(types.ORDER_OPEN_UPDATED, {orders: {} , total: 0})
commit(types.ORDER_PACKED_UPDATED, {orders: {} , total: 0})
commit(types.ORDER_COMPLETED_UPDATED, {orders: {} , total: 0})
}
}

Expand Down
6 changes: 6 additions & 0 deletions src/store/modules/order/getters.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,12 @@ const getters: GetterTree<OrderState , RootState> = {
},
isOpenOrdersScrollable: (state) => {
return state.open.list.length > 0 && state.open.list.length < state.open.total
},
getCompletedOrders: (state) => {
return state.completed.list;
},
isCompletedOrdersScrollable: (state) => {
return state.completed.list.length > 0 && state.completed.list.length < state.completed.total
}
}

Expand Down
4 changes: 4 additions & 0 deletions src/store/modules/order/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@ const orderModule: Module<OrderState, RootState> = {
packed: {
list: {},
total: 0
},
completed: {
list: {},
total: 0
}
},
getters,
Expand Down
1 change: 1 addition & 0 deletions src/store/modules/order/mutation-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@ export const SN_ORDER = 'order'
export const ORDER_CURRENT_UPDATED = SN_ORDER + '/CURRENT_UPDATED'
export const ORDER_OPEN_UPDATED = SN_ORDER + '/OPEN_UPDATED'
export const ORDER_PACKED_UPDATED = SN_ORDER + '/PACKED_UPDATED'
export const ORDER_COMPLETED_UPDATED = SN_ORDER + '/COMPLETED_UPDATED'
4 changes: 4 additions & 0 deletions src/store/modules/order/mutations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ const mutations: MutationTree <ProductState> = {
[types.ORDER_PACKED_UPDATED] (state, payload) {
state.packed.list = payload.orders
state.packed.total = payload.total
},
[types.ORDER_COMPLETED_UPDATED] (state, payload) {
state.completed.list = payload.orders
state.completed.total = payload.total
}
}

Expand Down
6 changes: 5 additions & 1 deletion src/utils/solrHelper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ const prepareOrderQuery = (params: any) => {
"start": viewIndex * viewSize
},
"query":"(*:*)",
"filter": ["docType: OISGIR"]
"filter": [`docType: ${params.docType ? params.docType : 'OISGIR'}`]
}
} as any

Expand Down Expand Up @@ -61,6 +61,10 @@ const prepareOrderQuery = (params: any) => {
payload.json.filter.push(`orderId: ${params.orderId}`)
}

if(params.orderItemStatusId) {
payload.json.filter.push(`orderItemStatusId: ${params.orderItemStatusId}`)
}

return payload
}

Expand Down
78 changes: 72 additions & 6 deletions src/views/Orders.vue
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@
<ion-segment-button value="packed">
<ion-label>{{ $t("Packed") }}</ion-label>
</ion-segment-button>
<ion-segment-button value="completed">
<ion-label>{{ $t("Completed") }}</ion-label>
</ion-segment-button>
</ion-segment>
</div>
</ion-header>
Expand Down Expand Up @@ -95,10 +98,40 @@
</ion-card>
</div>
</div>
<div v-if="segmentSelected === 'completed'">
<div v-for="order in completedOrders" :key="order.orderId" v-show="order.parts.length > 0">
<ion-card v-for="(part, index) in order.parts" :key="index">
<ion-item lines="none">
<ion-label class="ion-text-wrap">
<h1>{{ order.customer.name }}</h1>
<p>{{ order.orderName ? order.orderName : order.orderId }}</p>
</ion-label>
<ion-badge v-if="order.placedDate" color="dark" slot="end">{{ timeFromNow(order.placedDate) }}</ion-badge>
</ion-item>

<ProductListItem v-for="item in part.items" :key="item.productId" :item="item" />

<ion-item v-if="order.customer.phoneNumber">
<ion-icon :icon="callOutline" slot="start" />
<ion-label>{{ order.customer.phoneNumber }}</ion-label>
<ion-button fill="outline" slot="end" color="medium" @click.stop="copyToClipboard(order.customer.phoneNumber)">
{{ $t("Copy") }}
</ion-button>
</ion-item>
<ion-item lines="full" v-if="order.customer.email">
<ion-icon :icon="mailOutline" slot="start" />
<ion-label>{{ order.customer.email }}</ion-label>
<ion-button fill="outline" slot="end" color="medium" @click.stop="copyToClipboard(order.customer.email)">
{{ $t("Copy") }}
</ion-button>
</ion-item>
</ion-card>
</div>
</div>
<ion-refresher slot="fixed" @ionRefresh="refreshOrders($event)">
<ion-refresher-content pullingIcon="crescent" refreshingSpinner="crescent" />
</ion-refresher>
<ion-infinite-scroll @ionInfinite="loadMoreProducts($event)" threshold="100px" :disabled="segmentSelected === 'open' ? !isOpenOrdersScrollable : !isPackedOrdersScrollable">
<ion-infinite-scroll @ionInfinite="loadMoreProducts($event)" threshold="100px" :disabled="segmentSelected === 'open' ? !isOpenOrdersScrollable : segmentSelected === 'packed' ? !isPackedOrdersScrollable : !isCompletedOrdersScrollable">
<ion-infinite-scroll-content loading-spinner="crescent" :loading-text="$t('Loading')" />
</ion-infinite-scroll>
</ion-content>
Expand Down Expand Up @@ -171,9 +204,11 @@ export default defineComponent({
...mapGetters({
orders: 'order/getOpenOrders',
packedOrders: 'order/getPackedOrders',
completedOrders: 'order/getCompletedOrders',
currentFacility: 'user/getCurrentFacility',
isPackedOrdersScrollable: 'order/isPackedOrdersScrollable',
isOpenOrdersScrollable: 'order/isOpenOrdersScrollable',
isCompletedOrdersScrollable: 'order/isCompletedOrdersScrollable',
showPackingSlip: 'user/showPackingSlip'
})
},
Expand Down Expand Up @@ -220,8 +255,10 @@ export default defineComponent({
async refreshOrders(event: any) {
if(this.segmentSelected === 'open') {
this.getPickupOrders().then(() => { event.target.complete() });
} else {
} else if (this.segmentSelected === 'packed') {
this.getPackedOrders().then(() => { event.target.complete() });
} else {
this.getCompletedOrders().then(() => { event.target.complete() });
}
},
async viewOrder (order: any, part: any) {
Expand All @@ -243,6 +280,12 @@ export default defineComponent({

await this.store.dispatch("order/getPackedOrders", { viewSize, viewIndex, queryString: this.queryString, facilityId: this.currentFacility.facilityId });
},
async getCompletedOrders (vSize?: any, vIndex?: any) {
const viewSize = vSize ? vSize : process.env.VUE_APP_VIEW_SIZE;
const viewIndex = vIndex ? vIndex : 0;

await this.store.dispatch("order/getCompletedOrders", { viewSize, viewIndex, queryString: this.queryString, facilityId: this.currentFacility.facilityId });
},
async loadMoreProducts (event: any) {
if (this.segmentSelected === 'open') {
this.getPickupOrders(
Expand All @@ -251,13 +294,20 @@ export default defineComponent({
).then(() => {
event.target.complete();
})
} else {
} else if (this.segmentSelected === 'packed') {
this.getPackedOrders(
undefined,
Math.ceil(this.packedOrders.length / process.env.VUE_APP_VIEW_SIZE).toString()
).then(() => {
event.target.complete();
})
} else {
this.getCompletedOrders(
undefined,
Math.ceil(this.completedOrders.length / process.env.VUE_APP_VIEW_SIZE).toString()
).then(() => {
event.target.complete();
})
}
},
async readyForPickup (order: any, part: any) {
Expand Down Expand Up @@ -287,7 +337,14 @@ export default defineComponent({
segmentChanged (e: CustomEvent) {
this.queryString = ''
this.segmentSelected = e.detail.value
this.segmentSelected === 'open' ? this.getPickupOrders() : this.getPackedOrders();

if(this.segmentSelected === 'open') {
this.getPickupOrders()
} else if(this.segmentSelected === 'packed') {
this.getPackedOrders()
} else {
this.getCompletedOrders()
}
},
getShipGroups (items: any) {
// To get unique shipGroup, further it will use on ion-card iteration
Expand All @@ -307,8 +364,10 @@ export default defineComponent({
async searchOrders() {
if(this.segmentSelected === 'open') {
this.getPickupOrders()
} else {
} else if(this.segmentSelected === 'packed') {
this.getPackedOrders()
} else {
this.getCompletedOrders()
}
},
selectSearchBarText(event: any) {
Expand All @@ -319,7 +378,14 @@ export default defineComponent({
},
ionViewWillEnter () {
this.queryString = '';
this.segmentSelected === 'open' ? this.getPickupOrders() : this.getPackedOrders();

if(this.segmentSelected === 'open') {
this.getPickupOrders()
} else if(this.segmentSelected === 'packed') {
this.getPackedOrders()
} else {
this.getCompletedOrders()
}
},
setup () {
const router = useRouter();
Expand Down