diff --git a/backend/app/plugins/wiaas/includes/class-wiaas-user.php b/backend/app/plugins/wiaas/includes/class-wiaas-user.php index 5bda54c..f0da2e0 100644 --- a/backend/app/plugins/wiaas/includes/class-wiaas-user.php +++ b/backend/app/plugins/wiaas/includes/class-wiaas-user.php @@ -8,9 +8,11 @@ defined( 'ABSPATH' ) || exit; class Wiaas_User { public static function init() { + include_once dirname( __FILE__ ) . '/user/class-wiaas-user-profile.php'; + add_action('init', array(__CLASS__, 'load_user_organization')); add_action('plugins_loaded', array(__CLASS__, 'remove_default_user_groups'), 30); - add_action('woocommerce_rest_insert_customer', array(__CLASS__, 'test_method'), 10, 3); + add_action('woocommerce_rest_insert_customer', array(__CLASS__, 'add_meta_data_to_customer'), 10, 3); add_filter('woocommerce_rest_prepare_customer', array(__CLASS__, 'transform_rest_customer'), 10, 3); add_filter('jwt_auth_token_before_dispatch', array(__CLASS__, 'transform_jwt_token_response'), 10, 2); @@ -23,7 +25,7 @@ class Wiaas_User { * @param WP_REST_Request $request Request object. * @param boolean $creating True when creating customer, false when updating customer. */ - public static function test_method($customer, $request, $creating){ + public static function add_meta_data_to_customer($customer, $request, $creating){ if (isset($request['phone'])){ update_user_meta( $customer->ID, 'phone', $request['phone'] ); } @@ -35,6 +37,118 @@ class Wiaas_User { if (isset($request['companyName'])){ update_user_meta( $customer->ID, 'company_name', $request['companyName']); } + + if (isset($request['deliveryAddress'])){ + $received_address = json_decode($request['deliveryAddress']); + $delivery_addresses = get_user_meta($customer->ID, 'delivery_addresses', true) ?: []; + + if ($received_address->id){ + $updated = array( + 'id' => $received_address->id, + 'countryName' => Wiaas_User_Profile::get_country_name_by_id($received_address->idCountrySelected), + 'deliveryMail' => $received_address->deliveryMail, + 'idCountrySelected' => $received_address->idCountrySelected, + 'city' => $received_address->city, + 'detailedAddress' => $received_address->detailedAddress, + 'zipCode' => $received_address->zipCode + ); + foreach($delivery_addresses as $key => $address){ + if ($address['id'] === $received_address->id){ + $delivery_addresses[$key] = $updated; + break; + } + } + }else{ + $new_delivery_address = array( + 'id' => time(), + 'countryName' => Wiaas_User_Profile::get_country_name_by_id($received_address->idCountrySelected), + 'deliveryMail' => $received_address->deliveryMail, + 'idCountrySelected' => $received_address->idCountrySelected, + 'city' => $received_address->city, + 'detailedAddress' => $received_address->detailedAddress, + 'zipCode' => $received_address->zipCode + ); + + array_push($delivery_addresses, $new_delivery_address); + } + + update_user_meta( $customer->ID, 'delivery_addresses', $delivery_addresses); + //delete_user_meta ($customer->ID, 'delivery_addresses'); + } + + if (isset($request['billingAddress'])){ + $received_address = json_decode($request['billingAddress']); + $billing_addresses = get_user_meta($customer->ID, 'billing_addresses', true) ?: []; + + if ($received_address->id){ + $updated = array( + 'id' => $received_address->id, + 'countryName' => Wiaas_User_Profile::get_country_name_by_id($received_address->idCountrySelected), + 'deliveryMail' => $received_address->deliveryMail, + 'idCountrySelected' => $received_address->idCountrySelected, + 'city' => $received_address->city, + 'detailedAddress' => $received_address->detailedAddress, + 'zipCode' => $received_address->zipCode, + 'firstName' => $received_address->firstName, + 'lastName' => $received_address->lastName, + 'invoiceMail' => $received_address->invoiceMail + ); + foreach($billing_addresses as $key => $address){ + if ($address['id'] === $received_address->id){ + $billing_addresses[$key] = $updated; + break; + } + } + }else{ + $new_billing_address = array( + 'id' => time(), + 'countryName' => Wiaas_User_Profile::get_country_name_by_id($received_address->idCountrySelected), + 'deliveryMail' => $received_address->deliveryMail, + 'idCountrySelected' => $received_address->idCountrySelected, + 'city' => $received_address->city, + 'detailedAddress' => $received_address->detailedAddress, + 'zipCode' => $received_address->zipCode, + 'firstName' => $received_address->firstName, + 'lastName' => $received_address->lastName, + 'invoiceMail' => $received_address->invoiceMail + ); + + array_push($billing_addresses, $new_billing_address); + } + + update_user_meta( $customer->ID, 'billing_addresses', $billing_addresses); + //delete_user_meta ($customer->ID, 'delivery_addresses'); + } + + if (isset($request['removeDeliveryAddress'])){ + $addressID = $request['removeDeliveryAddress']; + $delivery_addresses = get_user_meta($customer->ID, 'delivery_addresses', true) ?: []; + $counter = 0; + foreach($delivery_addresses as $key => $address){ + if ($address['id'] == $addressID){ + array_splice($delivery_addresses, $counter, 1); + break; + } + $counter++; + } + update_user_meta( $customer->ID, 'delivery_addresses', $delivery_addresses); + } + + if (isset($request['removeBillingAddress'])){ + $addressID = $request['removeBillingAddress']; + $billing_addresses = get_user_meta($customer->ID, 'billing_addresses', true) ?: []; + $counter = 0; + foreach($billing_addresses as $key => $address){ + if ($address['id'] == $addressID){ + array_splice($billing_addresses, $counter, 1); + break; + } + $counter++; + } + + update_user_meta( $customer->ID, 'billing_addresses', $billing_addresses); + } + } public static function load_user_organization() { @@ -71,8 +185,8 @@ class Wiaas_User { 'phone' => get_user_meta($user_id, 'phone', true), 'companyName' => get_user_meta($user_id, 'company_name', true), 'vatCode' => get_user_meta($user_id, 'vat_code', true), - 'billingAddresses' => [], - 'profileAddresses' => [], + 'billingAddresses' => get_user_meta($user_id, 'billing_addresses', true) ?: [], + 'deliveryAddresses' => get_user_meta($user_id, 'delivery_addresses', true) ?: [], 'userType' => $data['role'] ); diff --git a/frontend/src/actions/profileSettings/addressActions.js b/frontend/src/actions/profileSettings/addressActions.js index fc4f2df..8b11aff 100644 --- a/frontend/src/actions/profileSettings/addressActions.js +++ b/frontend/src/actions/profileSettings/addressActions.js @@ -9,9 +9,9 @@ import { REQUEST_SAVE_BILLING_ADDRESS, profileTexts } from '../../constants/profileSettingsConstants'; -import {fetchProfileInfo} from './profileSettingsActions'; import {updateMessages} from '../notification/notificationActions'; import {setDialogOpenFlag} from '../dialog/dialogActions'; +import {recieveProfileInfo} from './profileSettingsActions'; const client = new HtmlClient(); @@ -23,18 +23,26 @@ export const saveProfileAddress = (idUser, profileAddress) => { return dispatch => { dispatch(requestSaveAddress()); return client.fetch({ - url: `${API_SERVER}/profileSettings/api/saveProfileAddress`, - method: 'post', - data: {profileAddress: JSON.stringify(profileAddress)} + url: `${API_SERVER}/wp-json/wc/v2/customers/${idUser}`, + method: 'put', + data: {deliveryAddress: JSON.stringify(profileAddress)} }) .then(response => { - if(response.data && response.data.messages){ - dispatch(updateMessages(response.data.messages, profileTexts.messages)); - if(response.data.messages[0].code === 'success'){ - dispatch(fetchProfileInfo(idUser)); - dispatch(setDialogOpenFlag(false)); - } + let messages = []; + if(response.data){ + dispatch(recieveProfileInfo(response.data)); + dispatch(setDialogOpenFlag(false)); + messages.push({ + code:'success', + message:'PROFILE_ADDRESS_UPDATED' + }); + }else{ + messages.push({ + code:'error', + message:'INTERNAL_SERVER_ERROR' + }); } + dispatch(updateMessages(messages, profileTexts.messages)); }) .catch(error => { client.onError(error, dispatch); @@ -50,15 +58,25 @@ export const removeProfileAddress = (idUser, idProfileAddress) => { return dispatch => { dispatch(requestRemoveAddress()); return client.fetch({ - url: `${API_SERVER}/profileSettings/api/removeProfileAddress`, - method: 'post', - data: {idProfileAddress} + url: `${API_SERVER}/wp-json/wc/v2/customers/${idUser}`, + method: 'put', + data: {removeDeliveryAddress:idProfileAddress} }) .then(response => { - if(response.data && response.data.messages){ - dispatch(updateMessages(response.data.messages, profileTexts.messages)); - dispatch(fetchProfileInfo(idUser)); + let messages = []; + if(response.data){ + dispatch(recieveProfileInfo(response.data)); + messages.push({ + code:'success', + message:'ADDRESS_REMOVED' + }); + }else{ + messages.push({ + code:'error', + message:'INTERNAL_SERVER_ERROR' + }); } + dispatch(updateMessages(messages, profileTexts.messages)); }) .catch(error => { client.onError(error, dispatch); @@ -70,22 +88,30 @@ const requestSaveBillingAddress = () => ({ type: REQUEST_SAVE_BILLING_ADDRESS }); -export const saveBillingAddress = (idUser, idCompany, billingAddress) => { +export const saveBillingAddress = (idUser, billingAddress) => { return dispatch => { dispatch(requestSaveBillingAddress()); return client.fetch({ - url: `${API_SERVER}/profileSettings/api/saveBillingAddress`, - method: 'post', - data: {idCompany, billingAddress: JSON.stringify(billingAddress)} + url: `${API_SERVER}/wp-json/wc/v2/customers/${idUser}`, + method: 'put', + data: {billingAddress: JSON.stringify(billingAddress)} }) .then(response => { - if(response.data && response.data.messages){ - dispatch(updateMessages(response.data.messages, profileTexts.messages)); - if(response.data.messages[0].code === 'success'){ - dispatch(fetchProfileInfo(idUser)); - dispatch(setDialogOpenFlag(false)); - } + let messages = []; + if(response.data){ + dispatch(recieveProfileInfo(response.data)); + dispatch(setDialogOpenFlag(false)); + messages.push({ + code:'success', + message:'BILLING_ADDRESS_UPDATED' + }); + }else{ + messages.push({ + code:'error', + message:'INTERNAL_SERVER_ERROR' + }); } + dispatch(updateMessages(messages, profileTexts.messages)); }) .catch(error => { client.onError(error, dispatch); @@ -101,15 +127,25 @@ export const removeBillingAddress = (idUser, idBillingAddress) => { return dispatch => { dispatch(requestRemoveBillingAddress()); return client.fetch({ - url: `${API_SERVER}/profileSettings/api/removeBillingAddress`, - method: 'post', - data: {idBillingAddress} + url: `${API_SERVER}/wp-json/wc/v2/customers/${idUser}`, + method: 'put', + data: {removeBillingAddress:idBillingAddress} }) .then(response => { - if(response.data && response.data.messages){ - dispatch(updateMessages(response.data.messages, profileTexts.messages)); - dispatch(fetchProfileInfo(idUser)); + let messages = []; + if(response.data){ + dispatch(recieveProfileInfo(response.data)); + messages.push({ + code:'success', + message:'BILLING_ADDRESS_REMOVED' + }); + }else{ + messages.push({ + code:'error', + message:'INTERNAL_SERVER_ERROR' + }); } + dispatch(updateMessages(messages, profileTexts.messages)); }) .catch(error => { client.onError(error, dispatch); diff --git a/frontend/src/actions/profileSettings/profileSettingsActions.js b/frontend/src/actions/profileSettings/profileSettingsActions.js index 16a61cd..2f7ad65 100644 --- a/frontend/src/actions/profileSettings/profileSettingsActions.js +++ b/frontend/src/actions/profileSettings/profileSettingsActions.js @@ -38,19 +38,6 @@ export const fetchProfileInfo = (idUser) => { dispatch(recieveProfileInfo(response.data)); } }); - // return client.fetch({ - // url: `${API_SERVER}/wp-json/wiaas/cart/customer-info`, - // method: 'get', - // data: {idUser} - // }) - // .then(response => { - // if(response.data){ - // dispatch(recieveProfileInfo(response.data)); - // } - // }) - // .catch(error => { - // client.onError(error, dispatch); - // }); } }; @@ -72,10 +59,20 @@ export const saveProfileInfo = (idUser, profile) => { } }) .then(response => { - if(response.data && response.data.messages){ - dispatch(updateMessages(response.data.messages, profileTexts.messages)); - dispatch(fetchProfileInfo(idUser)); + let messages = []; + if(response.data){ + dispatch(recieveProfileInfo(response.data)); + messages.push({ + code:'success', + message:'PROFILE_UPDATED' + }); + }else{ + messages.push({ + code:'error', + message:'INTERNAL_SERVER_ERROR' + }); } + dispatch(updateMessages(messages, profileTexts.messages)); }) .catch(error => { client.onError(error, dispatch); @@ -99,10 +96,20 @@ export const saveCompanyInfo = (idUser, companyInfo) => { } }) .then(response => { - if(response.data && response.data.messages){ - dispatch(updateMessages(response.data.messages, profileTexts.messages)); - dispatch(fetchProfileInfo(idUser)); + let messages = []; + if(response.data){ + dispatch(recieveProfileInfo(response.data)); + messages.push({ + code:'success', + message:'COMPANY_UPDATED' + }); + }else{ + messages.push({ + code:'error', + message:'INTERNAL_SERVER_ERROR' + }); } + dispatch(updateMessages(messages, profileTexts.messages)); }) .catch(error => { client.onError(error, dispatch); diff --git a/frontend/src/constants/profileSettingsConstants.js b/frontend/src/constants/profileSettingsConstants.js index cd4a7de..4abb1b2 100644 --- a/frontend/src/constants/profileSettingsConstants.js +++ b/frontend/src/constants/profileSettingsConstants.js @@ -77,6 +77,7 @@ export const profileTexts = { ADD_FIRST_NAME: 'The first name field can not be empty', ADD_LAST_NAME: 'The last name field can not be empty', ADD_INVOICE_MAIL: 'The invoice mail field can not be empty', - INVALID_INVOICE_MAIL: 'Invalid invoice mail address' + INVALID_INVOICE_MAIL: 'Invalid invoice mail address', + INTERNAL_SERVER_ERROR: 'Error occured. Please try again' } };