customerService = $customerService; } public function account() { $customer = auth()->user()->load(['company','additionalContacts']); $orders = AlacarteOrder::with(['user','items.product'])->where('user_id',$customer->id)->latest()->get(); return view('customer::account')->with('customer',$customer)->with('orders',$orders); } public function updateProfile(UpdateProfileRequest $request) { try { $customer = auth()->user(); $customer->first_name = $request->first_name; $customer->last_name = $request->last_name; $customer->phone = $request->phone; $customer->date_of_birth = $request->date_of_birth; $customer->description = $request->description; $file = $request->file('avatar'); if ($request->hasFile('avatar')) { $this->deleteImage($customer->avatar); $customer->avatar= $this->saveAvatar($file,200,200); } $customer->save(); return response()->json([ 'message' => 'Profile Updated Successfully.' ]); } catch(Exception $e){ return response()->json([ 'message' => $e->getMessage() ], 500); } } public function updateCompanyInfo(UpdateCompanyInfoRequest $request) { try { $customer = auth()->user(); $company = UserCompany::updateOrCreate( [ 'user_id' => $customer->id, ], [ 'company_name' => $request->company_name, 'brand_name' => $request->brand_name, 'storefront' => $request->storefront, 'company_address' => $request->company_address, 'accounts_payable_name' => $request->accounts_payable_name, 'accounts_payable_email' => $request->accounts_payable_email, 'marketing_contact_name' => $request->marketing_contact_name, ] ); $updates = []; if (Cache::has(auth()->user()->id.'_company_info_updates')) { $updates = json_decode(Cache::pull(auth()->user()->id.'_company_info_updates')); } // foreach ($request->additional_contacts as $key => $additional_contact) { // $contact = UserAdditionalContact::updateOrCreate( // [ // 'id' => $additional_contact['id'] ?? null // ], // [ // 'user_id' => $customer->id, // 'name' => $additional_contact['name'], // 'email' => $additional_contact['email'], // 'position' => $additional_contact['position'], // ] // ); // if(!$contact->wasRecentlyCreated && $contact->wasChanged()){ // $changes = \Arr::except($contact->getChanges(), ['updated_at']); // foreach($changes as $attr => $value){ // $updates[] = "Updated Additional Contact ".str_replace(' ', '_', $attr)." to ". $value.""; // } // } // if($contact->wasRecentlyCreated){ // $updates[] = "Added Additional Contact with Name: ". $contact->name.", Email: ". $contact->email." and Position: ".$contact->position.""; // } // } // $contactsId = collect($request->additional_contacts)->pluck('id')->toArray(); // $customer->additionalContacts() // ->whereNotIn('id', $contactsId) // ->delete(); if(count($updates) > 0){ $changes = ''; $changes .= ''; $this->sendCompanyUpdates($customer->name,$customer->email,$changes); } return response()->json([ 'additional_contacts' => $customer->additionalContacts()->get(), 'message' => 'Company Information Updated Successfully.' ]); } catch(Exception $e){ return response()->json([ 'message' => $e->getMessage() ], 500); } } public function updatePassword(Request $request) { try { $request->validate([ 'current_password' => 'required|string', 'password' => 'required|min:8|confirmed', 'password_confirmation' => 'required' ], [ 'password.min' => 'Minimun password length is 8!' ]); $customer = auth()->user(); if (!Hash::check($request->current_password, $customer->password)) { return response()->json([ 'message' => 'Current password does not match.' ], 500); } $customer->password = Hash::make($request->password); $customer->save(); return response()->json([ 'message' => 'Password Change Successfully.' ]); } catch(Exception $e){ return response()->json([ 'message' => $e->getMessage() ], 500); } } public function updateEmail(Request $request) { try { $customer = auth()->user(); $request->validate([ 'email' => 'required|string|email|max:255|unique:users,email,'.$customer->id ]); $action_link = URL::temporarySignedRoute('customer.account.update-email-verify', 60 * 60, [ 'user' => encrypt($customer->id), 'email' => $request->email ]); $this->sendChangeEmailVerification($request->email, $action_link); return response()->json([ 'message' => 'Please check your email for a verification link to activate your new email adddress.' ]); } catch(Exception $e){ return response()->json([ 'message' => $e->getMessage() ], 500); } } public function verifyUpdateEmail(Request $request) { try { if (!$request->hasValidSignature()) { abort(403); } $customer = auth()->user(); if($customer->id == decrypt($request->user)){ $this->sendChangeEmailNotification($customer->email, $request->email); $customer->email = $request->email; $customer->save(); Toastr::success('New Email Successfully Verified', __('common.success')); return redirect()->to('/account'); } else { abort(403); } } catch(Exception $e){ return response()->json([ 'message' => $e->getMessage() ], 500); } } }