wholesale-vuex
Version:
Commerce vuex module
132 lines (120 loc) • 5.32 kB
JavaScript
import { auth, nav } from 'oak-vuex'
const { getHubAuthHeader } = auth
const { wrapRequest, wrapRequestWithRange,wrapEmptyRequest } = nav
const hubName = process.env.VUE_APP_RETAINHUB_NAME
const retainWholesaleApiUrl = process.env.VUE_APP_RETAINHUB_WHOLESALE_API_URL
const excelSlsApiUrl = process.env.VUE_APP_EXCEL_SLS_API_URL
const doFetchList = wrapRequestWithRange(( {nameLike, wholesaleOrderId, appId, limit, offset ,date,styleRef}) => {
const requestOptions = {
method: 'GET',
headers: { 'Content-type': 'application/json', 'Prefer': 'count=exact', ...getHubAuthHeader(hubName) }
}
const params = { app_id:`eq.${appId}`, limit: limit || 50, offset: offset || 0 }
if (nameLike) params['name'] = `ilike.*${nameLike}*`
if (wholesaleOrderId) params['wholesale_order_id'] = `eq.${wholesaleOrderId}`
if (styleRef) params['variants_ref_code'] = `eq.${styleRef}`
if (date){
params['shipment_start_date'] = `eq.${date[0]}`;
params['shipment_cancel_date'] = `eq.${date[1]}`
}
const qs = Object.keys(params).map(key => key + '=' + params[key]).join('&');
return fetch(`${retainWholesaleApiUrl}/wholesale_order_item?${qs}`, requestOptions);
//&select=*,brand_product(name),brand_product_id(name,price_wholesale)
})
const doPostOne = wrapRequest((orderItem) => {
const requestOptions = {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/vnd.pgrst.object+json',
'Prefer': 'return=representation',
...getHubAuthHeader(hubName)
},
body: JSON.stringify(orderItem)
}
return fetch(`${retainWholesaleApiUrl}/wholesale_order_item`, requestOptions)
})
const doFetchItemsByIds = wrapRequest(({ids}) => {
const requestOptions = {
method: 'GET',
headers: { 'Content-Type': 'application/json', ...getHubAuthHeader(hubName) }
};
return fetch(`${retainWholesaleApiUrl}/wholesale_order_item?wholesale_order_id=in.(${ids})&select=*,brand!brand_id(name)`, requestOptions)
})
const doPatchOne = wrapRequest((orderItem) => {
const requestOptions = {
method: 'PATCH',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/vnd.pgrst.object+json',
'Prefer': 'return=representation',
...getHubAuthHeader(hubName)
},
body: JSON.stringify(orderItem)
}
return fetch(`${retainWholesaleApiUrl}/wholesale_order_item?id=eq.${orderItem.id}`, requestOptions)
})
const doFetchOne = wrapRequest(({ wholesaleOrderItemId,appId }) => {
const requestOptions = {
method: 'GET',
headers: { 'Content-type': 'application/json', 'Accept': 'application/vnd.pgrst.object+json', ...getHubAuthHeader(hubName) }
}
return fetch(`${retainWholesaleApiUrl}/wholesale_order_item?id=eq.${wholesaleOrderItemId}&app_id=eq.${appId}`, requestOptions)
})
const doDeleteSelected = wrapEmptyRequest(({wholesaleOrderItemId}) => {
const requestOptions = {
method: 'DELETE',
headers: {
'Content-Type': 'application/json', ...getHubAuthHeader(hubName)
},
};
return fetch(`${retainWholesaleApiUrl}/wholesale_order_item?id=in.(${wholesaleOrderItemId})`, requestOptions)
})
const doFetchStyleRefItems = wrapRequestWithRange(( {nameLike, wholesaleOrderId, appId, styleRefItems }) => {
const requestOptions = {
method: 'GET',
headers: { 'Content-type': 'application/json', ...getHubAuthHeader(hubName) }
}
const params = { app_id:`eq.${appId}` }
if (nameLike) params['name'] = `ilike.*${nameLike}*`
if (wholesaleOrderId) params['wholesale_order_id'] = `eq.${wholesaleOrderId}`
if (styleRefItems) params['variants_ref_code'] = `eq.${styleRefItems}`
const qs = Object.keys(params).map(key => key + '=' + params[key]).join('&');
return fetch(`${retainWholesaleApiUrl}/wholesale_order_item?${qs}`, requestOptions);
})
const doExportPurchaseOrderItemsInExcel = async ({ salesOrderId, businessEntityId, preTemplateId }) => {
const requestOptions = {
method: 'POST',
headers: {
//'Content-Type': 'application/json',
'Accept': 'text/csv',
...getHubAuthHeader(hubName)
},
body: JSON.stringify({ sales_order_id: salesOrderId, business_entity_id: businessEntityId, pre_template_id :preTemplateId })
};
let response = await fetch(`${excelSlsApiUrl}/export-sales-order-items-to-xlsx`, requestOptions)
try{
const contentType = response.headers.get("content-type");
if (contentType && contentType.indexOf("application/json") !== -1) {
return response.json().then(async data => {
console.log('data', data)
if(data.error){
return { errorMessage: data.message }
} else {
let blob = await data.blob()
return { blob, errorMessage: null }
}
});
}
else {
let blob = await response.blob()
return { blob, errorMessage: null }
}
} catch(error){
return await handleError(error)
}
}
export default {
doFetchOne, doFetchList,
doPostOne, doPatchOne, doDeleteSelected,doFetchItemsByIds,doFetchStyleRefItems, doExportPurchaseOrderItemsInExcel
}