Files
wticreatorstudio/Modules/Customer/Http/Controllers/CustomerAccountController.php
T
Leonard Biano ab52f8a580 Customer Module Update
Fix update company info
2024-07-16 14:29:18 +08:00

266 lines
8.7 KiB
PHP

<?php
namespace Modules\Customer\Http\Controllers;
use App\Models\Order;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Modules\Customer\Http\Requests\ProfileRequest;
use Modules\Customer\Http\Requests\CreateAddressRequest;
use Modules\Customer\Http\Requests\UpdateProfileRequest;
use Modules\Customer\Http\Requests\UpdateCompanyInfoRequest;
use Modules\Customer\Entities\CustomerAddress;
use Modules\Customer\Rules\MatchOldPassword;
use App\Models\User;
use Illuminate\Support\Facades\Hash;
use App\Traits\ImageStore;
use Illuminate\Support\Facades\File;
use Modules\Customer\Services\CustomerService;
use App\Repositories\UserRepository;
use Brian2694\Toastr\Facades\Toastr;
use Modules\Setup\Entities\Country;
use Exception;
use Illuminate\Support\Facades\DB;
use Illuminate\Validation\Rule;
use Modules\UserActivityLog\Traits\LogActivity;
use Yajra\DataTables\Facades\DataTables;
use Modules\Subscription\Entities\UserCredit;
use Modules\Customer\Services\AugmentationService;
use Illuminate\Support\Facades\URL;
use Modules\WTIALaCarte\Entities\AlacarteOrder;
use Modules\Customer\Entities\UserCompany;
use Modules\Customer\Entities\UserAdditionalContact;
use App\Traits\SendMail;
use Illuminate\Support\Facades\Cache;
class CustomerAccountController extends Controller
{
use ImageStore, SendMail;
protected $customerService;
public function __construct(CustomerService $customerService){
$this->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 <b>". $value."</b>";
// }
// }
// if($contact->wasRecentlyCreated){
// $updates[] = "Added Additional Contact with Name: <b>". $contact->name."</b>, Email: <b>". $contact->email."</b> and Position: <b>".$contact->position."</b>";
// }
// }
// $contactsId = collect($request->additional_contacts)->pluck('id')->toArray();
// $customer->additionalContacts()
// ->whereNotIn('id', $contactsId)
// ->delete();
if(count($updates) > 0){
$changes = '';
$changes .= '<ul style="color:#55575d;font-family:Arial;font-size:13px;">';
foreach ($updates as $key => $value) {
$changes .= '<li>'.$value.'</li>';
}
$changes .= '</ul>';
$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);
}
}
}