Files
old-new-wiaas/frontend/src/actions/cart/cartActions.js
2018-10-03 16:46:41 +02:00

355 lines
12 KiB
JavaScript

import {API_SERVER} from '../../config';
import HtmlClient from '../../helpers/HtmlClient';
import {
REQUEST_SHOP_CART_COUNT,
RECEIVE_SHOP_CART_COUNT,
REQUEST_SHOP_CART_ITEMS,
RECEIVE_SHOP_CART_ITEMS,
SET_CURRENT_STEP,
RESET_STEPS,
GO_TO_NEXT_STEP,
GO_TO_PREVIOUS_STEP,
LOAD_CART_STEPS,
cartSteps,
UPLOAD_DOCUMENT,
REQUEST_CART_DOCUMENTS,
RECEIVE_CART_DOCUMENTS,
REQUEST_CUSTOMER_DETAILS,
RECEIVE_CUSTOMER_DETAILS,
SELECT_COUNTRY_DELIVERY,
SELECT_COUNTRY_BILLING,
SET_ORDER_INFO,
IS_CART_ITEMS_DISABLED,
RECEIVE_ORDER_TOTAL_PRICE,
UPDATE_CART_ITEMS,
SET_NEXT_STEP,
SET_PREV_STEP,
SET_ORDER_PLACED,
SET_ORDER_PLACED_REDIRECT,
cartMessages
} from '../../constants/cartConstants';
import {updateMessages} from '../notification/notificationActions';
import { fromWCCartItems } from '../../helpers/CartHelper';
const client = new HtmlClient();
export const requestShopCartCount = () => ({type: REQUEST_SHOP_CART_COUNT});
export const receiveShopCartCount = (json) => ({type: RECEIVE_SHOP_CART_COUNT, cartCount: json});
export const requestShopCartItems = () => ({
type: REQUEST_SHOP_CART_ITEMS,
isLoading: true
});
export const receiveShopCartItems = (json) => ({
type: RECEIVE_SHOP_CART_ITEMS,
isLoading: false,
cartItems: json
});
export const requestCustomerDetails = () => ({
type: REQUEST_CUSTOMER_DETAILS,
isLoading: true
});
export const receiveCustomerDetails = (json) => ({
type: RECEIVE_CUSTOMER_DETAILS,
isLoading: false,
customerDetails: json
});
export const fetchCartCount = () => {
return dispatch => {
dispatch(requestShopCartCount());
return client.fetch({url: `${API_SERVER}/wp-json/wiaas/cart/count`}).then(response => {
if (typeof response.data !== 'undefined' && 'count' in response.data) {
dispatch(receiveShopCartCount(response.data.count));
}
}).catch(error => {
client.onError(error, dispatch);
});
}
}
export const fetchCartItems = (isForSteps = false) => {
return dispatch => {
dispatch(requestShopCartItems());
return client.fetch({url: `${API_SERVER}/wp-json/wiaas/cart/items`}).then(response => {
if (typeof response.data !== 'undefined' && 'items' in response.data) {
const cartItems = response.data.items.map(wcCartItem => fromWCCartItems(wcCartItem));
dispatch(receiveShopCartItems(cartItems));
dispatch(fetchCartDocuments(cartItems.map((cartItem) => cartItem.idPackage), isForSteps));
dispatch(updateOrderTotalPrice(cartItems));
}
}).catch(error => {
client.onError(error, dispatch);
});
}
}
const updateOrderTotalPrice = (cartItems) => ({type: RECEIVE_ORDER_TOTAL_PRICE, cartItems});
const updateCartItems = (newItem)=>(
{type: UPDATE_CART_ITEMS, newItem}
);
export const updateQuantity = (cartItem, quantity, updateCartAllItems) => {
return dispatch => {
return client.fetch({
url: `${API_SERVER}/wp-json/wiaas/cart/items/${cartItem.key}`,
method: 'post',
data: {
quantity
}
}).then(response => {
if (typeof response.data !== 'undefined' && 'messages' in response.data) {
const filteredMessages = response.data.messages.filter(message => {
return message.code === 'error';
});
if(filteredMessages.length > 0){
dispatch(updateMessages(filteredMessages, cartMessages));
}else{
cartItem.quantity = quantity;
dispatch(updateCartItems(cartItem));
}
}
}).catch(error => {
client.onError(error, dispatch);
});
}
}
export const removeCartItem = (cartItemKey) => {
return dispatch => {
return client.fetch({
url: `${API_SERVER}/wp-json/wiaas/cart/items/${cartItemKey}`,
method: 'delete',
}).then(response => {
if (typeof response.data !== 'undefined' && 'messages' in response.data) {
dispatch(updateMessages(response.data.messages, cartMessages));
response.data.messages.forEach(messageObject => {
if (messageObject.code === 'success') {
dispatch(fetchCartCount());
dispatch(fetchCartItems(true));
}
})
}
}).catch(error => {
client.onError(error, dispatch);
});
}
}
const getSteps = (whitoutUploadDoc) => {
const newSteps = Object.assign({}, cartSteps());
if(whitoutUploadDoc) {
delete newSteps.cartUploadDocuments;
newSteps.cartCustomerDetails.previous = null;
newSteps.cartCustomerDetails.status = 'active';
}
return {
type: LOAD_CART_STEPS,
cartSteps: newSteps
};
};
export const loadSteps = (whitoutUploadDoc) => {
const firstStep = whitoutUploadDoc ? 'cartCustomerDetails' : 'cartUploadDocuments';
return dispatch => {
dispatch(getSteps(whitoutUploadDoc));
dispatch(selectStep(firstStep));
dispatch(resetSteps());
dispatch(setCartItemsDisabled(false));
}
}
export const selectStep = (step, params={}) => {
return {type: SET_CURRENT_STEP, currentStep: step, params};
}
const resetSteps = () => ({type: RESET_STEPS});
export const getCustomerDetails = () => {
return dispatch => {
dispatch(receiveCustomerDetails({
"companyName": "Coor Service Management AB",
"vatCode": "556084-6783",
"details": {
"idBillingAddress": null,
"idDeliveryAddress": null,
"idProject": null,
"reference": null,
"tender": null
},
"billing": [
{
"id": 1,
"city": "Göteborg",
"countryName": "SE",
"detailedAddress": "Lilla Bommen 2",
"firstName": "Customer",
"lastName": "User",
"zipCode": "12323"
}
],
"deliveryAddresses": [
{
"id": 1,
"city": "Göteborg",
"countryName": "Göteborg",
"detailedAddress": "Lilla Bommen 2",
"zipCode": "12323"
}
]
}));
// return client.fetch({url: `${API_SERVER}/wp-json/wiaas/cart/customer-details`})
// .then(response => {
// if (typeof response.data !== 'undefined' && response.data.customerDetails) {
// const customerDetails = response.data.customerDetails;
// dispatch(receiveCustomerDetails(customerDetails));
// }
// }).catch(error => {
// client.onError(error, dispatch);
// });
}
}
export const nextStep = (step) => ({type: GO_TO_NEXT_STEP});
export const previousStep = (params) => ({type: GO_TO_PREVIOUS_STEP, params});
export const uploadDocumnet = () => ({type: UPLOAD_DOCUMENT});
export const uploadOrderDocument = (packageCartKey, idDocumentType, file, packages) => {
return dispatch => {
dispatch(uploadDocumnet());
return client.uploadFile(file, {
url: `${API_SERVER}/wp-json/wiaas/cart/documents`,
data: {
'doc_type': idDocumentType,
'package_key': packageCartKey
}
}).then(response => {
if (typeof response.data !== 'undefined' && 'messages' in response.data) {
dispatch(updateMessages(response.data.messages, cartMessages));
dispatch(fetchCartDocuments(packages));
}
}).catch(error => {
client.onError(error, dispatch);
});
}
}
export const badFile = () =>{
return dispatch => {
dispatch(updateMessages([{code: 'warning', message: 'INVALID_FILE'}], cartMessages));
}
}
export const requestCartDocuments = () => ({
type: REQUEST_CART_DOCUMENTS,
isLoading: true
});
export const receiveCartDocuments = (json) => ({
type: RECEIVE_CART_DOCUMENTS,
isLoading: false,
cartDocuments: json
});
export const fetchCartDocuments = (packages, isForSteps = false) => {
return dispatch => {
dispatch(requestCartDocuments());
return client.fetch({
url: `${API_SERVER}/wp-json/wiaas/cart/documents`,
method: 'get',
data: {packages}
}).then(response => {
if (response.data) {
dispatch(receiveCartDocuments(response.data));
if(isForSteps) {
const whitoutUploadDoc = response.data.templates.length === 0;
dispatch(loadSteps(whitoutUploadDoc));
}
}
}).catch(error => {
client.onError(error, dispatch);
});
}
}
export const selectCountryDelivery = (country) => ({type: SELECT_COUNTRY_DELIVERY, selectedCountryDelivery: country});
export const selectCountryBilling = (country) => ({type: SELECT_COUNTRY_BILLING, selectedCountryBilling: country});
export const saveOrderDetails = (orderDetails, cartItems) => {
const orderInfo = {orderDetails, cartItems};
return dispatch => {
dispatch(getCustomerDetails());
dispatch(setOrderInfo(orderInfo));
// return client.fetch({
// url: `${API_SERVER}/cart/api/saveOrderDetails`,
// method: 'post',
// data: {orderDetails, cartItems}
// }).then(response => {
// if (typeof response.data !== 'undefined' && 'messages' in response.data) {
// dispatch(getCustomerDetails());
// dispatch(setOrderInfo(orderInfo));
// }
// }).catch(error => {
// client.onError(error, dispatch);
// });
}
}
export const setOrderInfo = (info) => ({type: SET_ORDER_INFO, orderInfo: info});
export const setOrderPlacedFlag = (flag) => ({type: SET_ORDER_PLACED, orderPlaced: flag});
export const setOrderPlacedRedirectFlag = (flag) => ({type: SET_ORDER_PLACED_REDIRECT, orderPlacedRedirect: flag});
export const placeOrder = (orderInfo) => {
const {orderDetails, cartItems} = orderInfo;
return dispatch => {
return client.fetch({
url: `${API_SERVER}/wp-json/wiaas/cart/checkout`,
method: 'post',
data: {
vat: orderDetails.vatCode,
company: orderDetails.companyName,
reference: orderDetails.details.reference,
tender: orderDetails.details.tender,
project_id: orderDetails.details.idProject,
delivery_address_id: orderDetails.delivery.id,
billing_address_id: orderDetails.billing.id,
}
}).then(response => {
if (typeof response.data !== 'undefined' && 'messages' in response.data) {
dispatch(updateMessages(response.data.messages, cartMessages));
if(!checkIfErrorMessageExists(response.data.messages)) {
dispatch(fetchCartCount());
dispatch(setOrderPlacedFlag(true));
dispatch(setOrderPlacedRedirectFlag(true));
}
}
}).catch(error => {
client.onError(error, dispatch);
});
}
}
const checkIfErrorMessageExists = (messagesArray) => {
return messagesArray.some(messageObj => {
return messageObj.code === 'error';
});
}
export const setCartItemsDisabled = (flag) => ({type: IS_CART_ITEMS_DISABLED, isCartItemsDisabled: flag});
export const setNextActionFct = (fct) => ({type: SET_NEXT_STEP, nextStepAction: fct});
export const setPrevActionFct = (fct) => ({type: SET_PREV_STEP, prevStepAction: fct});