procurement-vuex
Version:
Commerce vuex module
536 lines (489 loc) • 23.4 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 retainProcurementApiUrl = process.env.VUE_APP_RETAINHUB_PROCUREMENT_API_URL
const doFetchList = wrapRequestWithRange(({ emailLike, poNumberLike, filterByStatus, filterByBrand, filterBySeason, filterByRetailteam, sortByDate, sortByFieldName,appId, limit, offset, purchaserBusinessEntityId, filterByCurrency, filterBySalesagentBusinessEntityId, filterByProviderBusinessEntityId, seasonType,filterByOrdersProcessingState }) => {
const requestOptions = {
method: 'GET',
headers: { 'Content-type': 'application/json', 'Prefer': 'count=exact', ...getHubAuthHeader(hubName) },
};
const params = { app_id: `eq.${appId}`, limit: limit || 100, offset: offset || 0 }
if (filterByBrand) params['metadata->>brand_id'] = `ilike.*${filterByBrand}*`
if (filterBySeason) params['metadata->>' + `${seasonType}`] = `ilike.*${filterBySeason}*`
if (emailLike) params['email'] = `ilike.*${emailLike}*`
if (filterByStatus) params['status'] = `eq.${filterByStatus}`
if (filterByOrdersProcessingState) params['state'] = `in.(${filterByOrdersProcessingState})`
if (poNumberLike) params['po_number'] = `ilike.*${poNumberLike}*`
if (sortByDate) params['order'] = `date.desc`
if (sortByFieldName) params['order'] = `${sortByFieldName}`
if (filterByCurrency) params['order_ccy'] = `ilike.*${filterByCurrency}*`
if (purchaserBusinessEntityId) params['purchaser_business_entity_id'] = `eq.${purchaserBusinessEntityId}`
if (filterByRetailteam) params['retailteam_id'] = `eq.${filterByRetailteam}`
if (filterBySalesagentBusinessEntityId) params['salesagent_business_entity_id'] = `eq.${filterBySalesagentBusinessEntityId}`
if (filterByProviderBusinessEntityId) params['provider_business_entity_id'] = `eq.${filterByProviderBusinessEntityId}`
const qs = Object.keys(params).map(key => key + '=' + params[key]).join('&');
return fetch(`${retainProcurementApiUrl}/purchase_order?${qs}`, requestOptions);
})
const doFetchListForCsvExport = wrapRequestWithRange(({ sortByDate, appId, purchaserBusinessEntityId }) => {
const requestOptions = {
method: 'GET',
headers: { 'Content-type': 'application/json', 'Prefer': 'count=exact', ...getHubAuthHeader(hubName) },
};
const params = { app_id: `eq.${appId}`}
if (sortByDate) params['order'] = `date.desc`
if (purchaserBusinessEntityId) params['purchaser_business_entity_id'] = `eq.${purchaserBusinessEntityId}`
const qs = Object.keys(params).map(key => key + '=' + params[key]).join('&');
return fetch(`${retainProcurementApiUrl}/purchase_order?${qs}`, requestOptions);
})
const doFetchOrderListByIds = wrapRequestWithRange(({ appId, orderIds, limit, offset }) => {
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 (orderIds) params['id'] = `in.(${orderIds})`
const qs = Object.keys(params).map(key => key + '=' + params[key]).join('&');
return fetch(`${retainProcurementApiUrl}/purchase_order?${qs}`, requestOptions)
})
const doPostOne = wrapRequest((orderDetails) => {
if (orderDetails && orderDetails.metadata.new_brand_name) {
delete orderDetails.metadata.brand_id
}
const requestOptions = {
method: 'POST',
headers: {
'Content-Type': 'application/json', 'Accept': 'application/vnd.pgrst.object+json',
'Prefer': 'return=representation', ...getHubAuthHeader(hubName)
},
body: JSON.stringify(orderDetails)
};
return fetch(`${retainProcurementApiUrl}/purchase_order`, requestOptions)
})
const doPatchOne = wrapRequest((orderDetails) => {
if (orderDetails && orderDetails.metadata.brand_id == '') {
delete orderDetails.metadata.brand_id
}
const requestOptions = {
method: 'PATCH',
headers: {
'Content-Type': 'application/json', 'Accept': 'application/vnd.pgrst.object+json',
'Prefer': 'return=representation', ...getHubAuthHeader(hubName)
},
body: JSON.stringify(orderDetails)
};
return fetch(`${retainProcurementApiUrl}/purchase_order?id=eq.${orderDetails.id}`, requestOptions)
})
const doPatchOneProperty = wrapRequest(({ purchaseOrderId, property }) => {
const requestOptions = {
method: 'PATCH',
headers: {
'Content-Type': 'application/json', 'Accept': 'application/vnd.pgrst.object+json',
'Prefer': 'return=representation', ...getHubAuthHeader(hubName)
},
body: JSON.stringify(property)
};
return fetch(`${retainProcurementApiUrl}/purchase_order?id=eq.${purchaseOrderId}`, requestOptions)
})
const doOrderStatusUpdate = wrapRequest(({ id, isProcessing, status, state }) => {
const params = {}
if (isProcessing) params['is_processing'] = isProcessing
if (status) params['status'] = status
if (state) params['state'] = state
const requestOptions = {
method: 'PATCH',
headers: {
'Content-Type': 'application/json', 'Accept': 'application/vnd.pgrst.object+json',
'Prefer': 'return=representation', ...getHubAuthHeader(hubName)
},
body: JSON.stringify(params)
};
return fetch(`${retainProcurementApiUrl}/purchase_order?id=eq.${id}`, requestOptions)
})
const doAssignBrandId = wrapRequest(({ id, metadata, providerId, salesagentBusinessEntityId }) => {
const params = {
'metadata': metadata,
'provider_business_entity_id': providerId,
'salesagent_business_entity_id': salesagentBusinessEntityId
}
const requestOptions = {
method: 'PATCH',
headers: {
'Content-Type': 'application/json', 'Accept': 'application/vnd.pgrst.object+json',
'Prefer': 'return=representation', ...getHubAuthHeader(hubName)
},
body: JSON.stringify(params)
};
return fetch(`${retainProcurementApiUrl}/purchase_order?id=eq.${id}`, requestOptions)
})
const doFetchOne = wrapRequest(({ purchaseOrderId }) => {
const requestOptions = {
method: 'GET',
headers: { 'Content-type': 'application/json', 'Accept': 'application/vnd.pgrst.object+json', ...getHubAuthHeader(hubName) },
};
return fetch(`${retainProcurementApiUrl}/purchase_order?id=eq.${purchaseOrderId}&select=*,provider_business_entity(*),purchaser_business_entity(name)`, requestOptions);
})
const doDeleteSelected = wrapEmptyRequest(({ purchaseOrderId }) => {
const requestOptions = {
method: 'DELETE',
headers: {
'Content-Type': 'application/json', ...getHubAuthHeader(hubName)
},
};
return fetch(`${retainProcurementApiUrl}/purchase_order?id=in.(${purchaseOrderId})`, requestOptions)
})
const doPurchaseOrderGetTimeline = wrapRequest(({ purchaseOrderId }) => {
const requestOptions = {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Prefer': 'return=representation', ...getHubAuthHeader(hubName)
},
body: JSON.stringify(
{
purchase_order_id: purchaseOrderId
}
)
};
return fetch(`${retainProcurementApiUrl}/rpc/purchase_order_get_timeline`, requestOptions)
})
const doPurchaseOrderReportChanges = wrapRequest(({ purchaseOrderId, filter }) => {
const requestOptions = {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Prefer': 'return=representation', ...getHubAuthHeader(hubName)
},
body: JSON.stringify(
{
purchase_order_id: purchaseOrderId,
filter: filter
}
)
};
return fetch(`${retainProcurementApiUrl}/rpc/purchase_order_report_changes`, requestOptions)
})
const doFetchPurchaseOrderChange = wrapRequest(({ purchaseOrderId }) => {
const requestOptions = {
method: 'GET',
headers: { 'Content-type': 'application/json', ...getHubAuthHeader(hubName) },
};
return fetch(`${retainProcurementApiUrl}/purchase_order_change?purchase_order_id=eq.${purchaseOrderId}`, requestOptions);
})
const doPatchOrderChangeResponse = wrapRequest(({ purchaserOkUuid, purchaserOk, purchaserNotes, id, providerOkUserId, providerOk, providerNotes }) => {
const params = {}
if (purchaserOkUuid) params['purchaser_ok_uuid'] = `${purchaserOkUuid}`
if (purchaserOk == false || purchaserOk) params['purchaser_ok'] = `${purchaserOk}`
if (purchaserNotes) params['purchaser_notes'] = `${purchaserNotes}`
if (providerOkUserId) params['provider_ok_user_id'] = `${providerOkUserId}`
if (providerOk == false || providerOk) params['provider_ok'] = `${providerOk}`
if (providerNotes) params['provider_notes'] = `${providerNotes}`
const requestOptions = {
method: 'PATCH',
headers: {
'Content-Type': 'application/json', 'Accept': 'application/vnd.pgrst.object+json',
'Prefer': 'return=representation', ...getHubAuthHeader(hubName)
},
body: JSON.stringify(params)
};
return fetch(`${retainProcurementApiUrl}/purchase_order_change?id=eq.${id}`, requestOptions)
})
const doPostOrderChangeResponse = wrapRequest((purchaseOrderChangeObject) => {
if (purchaseOrderChangeObject && purchaseOrderChangeObject.change_values && purchaseOrderChangeObject.change_values.new.country_iso_3) {
const iso3 = purchaseOrderChangeObject.change_values.new.country_iso_3
delete purchaseOrderChangeObject.change_values.new.country_iso_3
purchaseOrderChangeObject.change_values.new.country_iso3 = iso3
}
if (purchaseOrderChangeObject && purchaseOrderChangeObject.change_values && purchaseOrderChangeObject.change_values.old.country_iso_3) {
const iso3 = purchaseOrderChangeObject.change_values.old.country_iso_3
delete purchaseOrderChangeObject.change_values.old.country_iso_3
purchaseOrderChangeObject.change_values.old.country_iso3 = iso3
}
if (purchaseOrderChangeObject.id)
delete purchaseOrderChangeObject.id
const requestOptions = {
method: 'POST',
headers: {
'Content-Type': 'application/json', 'Accept': 'application/vnd.pgrst.object+json',
'Prefer': 'return=representation', ...getHubAuthHeader(hubName)
},
body: JSON.stringify(purchaseOrderChangeObject)
};
return fetch(`${retainProcurementApiUrl}/purchase_order_change`, requestOptions)
})
const doFetchProcurementReport = wrapRequest(({ purchaserIds, from, storeIds, to, providerIds, filters }) => {
if (!filters) {
filters = null
}
const requestOptions = {
method: 'POST',
headers: {
'Content-Type': 'application/json', 'Accept': 'application/vnd.pgrst.object+json',
'Prefer': 'return=representation', ...getHubAuthHeader(hubName)
},
/* body: JSON.stringify({ _purchaser_ids:purchaserIds, _from:from, _store_ids:storeIds, _to:to,_provider_ids:providerIds})*/
body: JSON.stringify({
_purchaser_ids: purchaserIds, _from: from, _store_ids: storeIds, _to: to, _provider_ids: providerIds,
_filters: filters
})
};
return fetch(`${retainProcurementApiUrl}/rpc/report_purchase_orders`, requestOptions)
})
const doPurchaseOrderUpdateItemsFormat = wrapRequest(({ purchaseOrderId, format }) => {
const requestOptions = {
method: 'PATCH',
headers: {
'Content-Type': 'application/json', 'Accept': 'application/vnd.pgrst.object+json',
'Prefer': 'return=representation', ...getHubAuthHeader(hubName)
},
body: JSON.stringify(format)
};
return fetch(`${retainProcurementApiUrl}/purchase_order?id=eq.${purchaseOrderId}`, requestOptions)
})
const doPurchaseOrderUpdateBusinessEntity = wrapRequest(({ purchaseOrderId, providerBusinessEntityId, metadata, salesagentBusinessEntityId }) => {
const params = {
'metadata': metadata,
'provider_business_entity_id': providerBusinessEntityId.provider_business_entity_id,
'salesagent_business_entity_id': salesagentBusinessEntityId.salesagent_business_entity_id
}
const requestOptions = {
method: 'PATCH',
headers: {
'Content-Type': 'application/json', 'Accept': 'application/vnd.pgrst.object+json',
'Prefer': 'return=representation', ...getHubAuthHeader(hubName)
},
body: JSON.stringify(params)
};
return fetch(`${retainProcurementApiUrl}/purchase_order?id=eq.${purchaseOrderId}`, requestOptions)
})
// do post imported data from csv file
const doPostImportedData = wrapRequest(({ data, format }) => {
let purchaseOrderObject = {
"id": "", "app_id": "", "provider_business_entity_id": "", "purchaser_business_entity_id": "", "import_data": "", "po_number": "", "total_amount": 0, "date": "", "status": "", "payment_advance_percent": 0, "metadata": "", "shipping_address": "", "billing_address": "", "payment_terms": "", "status_ts": "", "last_ts": "", "order_ccy": "", "is_processing": '', "shipping_cost": 0, "shipment_start_date": "", "shipment_cancel_date": "", "payment_terms_object": "", "state": "", "items_format": "sku", "discount_value": 0, "discount_pct": 0, "sum_amount": 0
}
let headers = data[0]
let purchaseOrders = []
for (let d = 1; d < data.length; d++) {
let entity = {}
if (data[d].length > 2) // to avoid last empty record
{
for (let h = 0; h < headers.length; h++) {
if (headers[h].indexOf('.') !== -1) {
let objSplitted = headers[h].split('.')
if (!entity[objSplitted[0]]) entity[objSplitted[0]] = {}
entity[objSplitted[0]][objSplitted[1]] = data[d][h] == "null" ? null : data[d][h] == "undefined" ? undefined : data[d][h]
}
if (purchaseOrderObject.hasOwnProperty(headers[h])) {
// for numeric, integer
if (['payment_advance_percent', 'total_amount', 'shipping_cost', 'discount_value', 'sum_amount', 'discount_pct'].includes(headers[h])) {
entity[headers[h]] = data[d][h] == "null" ? null : data[d][h] == "undefined" ? undefined : Number(data[d][h])
}
// for object
else if (['import_data', 'metadata', 'shipping_address', 'billing_address', 'payment_terms_object'].includes(headers[h])) {
entity[headers[h]] = data[d][h] == "null" ? null : data[d][h] == "undefined" ? undefined : !data[d][h] ? data[d][h] : JSON.parse(data[d][h])
} //for string
else {
entity[headers[h]] = data[d][h] == "null" ? null : data[d][h] == "true" ? true : data[d][h] == "false" ? false : data[d][h] == "undefined" ? undefined : data[d][h]
}
}
}
if (entity.po_number !== undefined)
purchaseOrders.push(entity)
}
}
console.log(purchaseOrders)
const requestOptions = {
method: "POST",
headers: {
"Content-Type": "application/json",
Prefer: ['resolution=merge-duplicates', 'return=representation'],
...getHubAuthHeader(hubName),
},
body: JSON.stringify(purchaseOrders),
};
return fetch(`${retainProcurementApiUrl}/purchase_order`, requestOptions);
});
const doFetchLogisticsTrackerList = wrapRequest(({ purchaseOrderId }) => {
const requestOptions = {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Prefer': 'return=representation', ...getHubAuthHeader(hubName)
},
body: JSON.stringify(
{
purchase_order_id: purchaseOrderId
}
)
};
return fetch(`${retainProcurementApiUrl}/rpc/purchase_order_get_logistics`, requestOptions)
});
const doGetPurchaseOrderChanges = wrapRequest(({ purchaseOrderId, specs }) => {
const requestOptions = {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Prefer': 'return=representation', ...getHubAuthHeader(hubName)
},
body: JSON.stringify(
{
"purchase_order_id": purchaseOrderId,
"specs": specs
}
)
};
return fetch(`${retainProcurementApiUrl}/rpc/purchase_order_get_changes`, requestOptions)
})
const doPurchaseOrderDiscardChanges = wrapRequest(({ purchaseOrderId, specs }) => {
const requestOptions = {
method: 'POST',
headers: {
'Content-Type': 'application/json', ...getHubAuthHeader(hubName)
},
body: JSON.stringify({
"purchase_order_id": purchaseOrderId,
"specs": specs
})
};
return fetch(`${retainProcurementApiUrl}/rpc/purchase_order_discard_changes`, requestOptions)
})
const doPatchPurchaseOrderChangesetOne = wrapRequest(({ one }) => {
const requestOptions = {
method: 'PATCH',
headers: {
'Content-Type': 'application/json',
'Prefer': 'return=representation', ...getHubAuthHeader(hubName)
},
body: JSON.stringify(one)
};
return fetch(`${retainProcurementApiUrl}/purchase_order_changeset?id=eq.${one.id}`, requestOptions)
})
/* discrepancy report services */
const doGetOrderChangesForReport = wrapRequest(({ changesetId }) => {
const requestOptions = {
method: 'GET',
headers: {
'Content-Type': 'application/json',
...getHubAuthHeader(hubName)
},
};
return fetch(`${retainProcurementApiUrl}/purchase_order_xchange?purchase_order_changeset_id=eq.${changesetId}&purchaser_ok=is.null`, requestOptions)
})
const doFetchPurchaseOrderDiscrepancyByChangesetId = wrapRequest(({ purchaseOrderId, purchaseOrderChangesetId, specs }) => {
const requestOptions = {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Prefer': 'return=representation', ...getHubAuthHeader(hubName)
},
body: JSON.stringify(
{
purchase_order_id : purchaseOrderId,
purchase_order_changeset_id: purchaseOrderChangesetId,
specs
}
)
};
return fetch(`${retainProcurementApiUrl}/rpc/purchase_order_report_on_changeset`, requestOptions)
})
const doPatchPurchaseOrderChangeSet = wrapRequest(({ changesetId, property }) => {
const requestOptions = {
method: 'PATCH',
headers: {
'Content-Type': 'application/json',
'Prefer': 'return=representation', ...getHubAuthHeader(hubName)
},
body: JSON.stringify({ ...property })
};
return fetch(`${retainProcurementApiUrl}/purchase_order_changeset?id=eq.${changesetId}`, requestOptions)
})
const doPatchPurchaseOrderXChange = wrapRequest(({ changeId, property }) => {
const requestOptions = {
method: 'PATCH',
headers: {
'Content-Type': 'application/json',
'Prefer': 'return=representation', ...getHubAuthHeader(hubName)
},
body: JSON.stringify({ ...property })
};
return fetch(`${retainProcurementApiUrl}/purchase_order_xchange?id=eq.${changeId}`, requestOptions)
})
const doDeleteChangesetXChange = wrapRequest(({ changeId }) => {
const requestOptions = {
method: 'DELETE',
headers: {
'Content-Type': 'application/json',
'Prefer': 'return=representation', ...getHubAuthHeader(hubName)
},
};
return fetch(`${retainProcurementApiUrl}/purchase_order_xchange?id=eq.${changeId}`, requestOptions)
})
const doDeleteChange = wrapRequest(({ purchaseOrderChangeId }) => {
debugger
const requestOptions = {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Prefer': 'resolution=merge-duplicates', ...getHubAuthHeader(hubName)
},
body: JSON.stringify({
"purchase_order_change_id":purchaseOrderChangeId
})
};
return fetch(`${retainProcurementApiUrl}/rpc/purchase_order_remove_change`, requestOptions)
})
const doPostPurchaseOrderChanges = wrapRequest(({ purchaseOrderChangesetId, change,icpData,oldIcpData }) => {
if(change && change.change_values && (change.change_values.new || change.change_values.old)){
if(icpData){
change.change_values.new.icp_data=icpData
}
if(oldIcpData){
change.change_values.old.icp_data=(oldIcpData)
}
}
const requestOptions = {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Prefer': 'resolution=merge-duplicates', ...getHubAuthHeader(hubName)
},
body: JSON.stringify({
"purchase_order_changeset_id": purchaseOrderChangesetId,
"change": change
})
};
return fetch(`${retainProcurementApiUrl}/rpc/purchase_order_add_change`, requestOptions)
})
const doGetPruchaseOrderXChanges = wrapRequest(({ purchaseOrderChangesetId}) => {
const requestOptions = {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Prefer': 'return=representation', ...getHubAuthHeader(hubName)
},
};
return fetch(`${retainProcurementApiUrl}/purchase_order_xchange?purchase_order_changeset_id=eq.${purchaseOrderChangesetId}`, requestOptions)
})
const doPostBalanceOrderPayments = wrapRequest(({ purchaseOrderId}) => {
const requestOptions = {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Prefer': 'resolution=merge-duplicates', ...getHubAuthHeader(hubName)
},
body: JSON.stringify({
"purchase_order_id":purchaseOrderId
})
};
return fetch(`${retainProcurementApiUrl}/rpc/purchase_order_balance_payments`, requestOptions)
})
export default {
doFetchOne, doFetchList,
doPostOne, doPatchOne, doDeleteSelected, doOrderStatusUpdate, doPurchaseOrderGetTimeline, doFetchPurchaseOrderChange, doPatchOrderChangeResponse, doPostOrderChangeResponse, doAssignBrandId, doFetchOrderListByIds, doFetchProcurementReport, doPurchaseOrderUpdateBusinessEntity, doPurchaseOrderUpdateItemsFormat,
doPostImportedData, doPurchaseOrderReportChanges, doPatchOneProperty, doFetchLogisticsTrackerList, doGetPurchaseOrderChanges, doFetchListForCsvExport, doPurchaseOrderDiscardChanges,
doPatchPurchaseOrderChangesetOne,
doFetchPurchaseOrderDiscrepancyByChangesetId,
doPatchPurchaseOrderXChange, doGetOrderChangesForReport,
doPatchPurchaseOrderChangeSet, doPostPurchaseOrderChanges,doGetPruchaseOrderXChanges,
doDeleteChangesetXChange,doPostBalanceOrderPayments,doDeleteChange
}