sarga/packages/Webkul/Customer/src/Repositories/CustomerRepository.php

130 lines
3.5 KiB
PHP
Executable File

<?php
namespace Webkul\Customer\Repositories;
use Illuminate\Support\Facades\Storage;
use Webkul\Core\Eloquent\Repository;
use Webkul\Sales\Models\Order;
class CustomerRepository extends Repository
{
/**
* Specify model class name.
*
* @return string
*/
public function model(): string
{
return 'Webkul\Customer\Contracts\Customer';
}
/**
* Check if customer has order pending or processing.
*
* @param \Webkul\Customer\Models\Customer
* @return boolean
*/
public function checkIfCustomerHasOrderPendingOrProcessing($customer)
{
return $customer->all_orders->pluck('status')->contains(function ($val) {
return $val === 'pending' || $val === 'processing';
});
}
/**
* Check if bulk customers, if they have order pending or processing.
*
* @param array
* @return boolean
*/
public function checkBulkCustomerIfTheyHaveOrderPendingOrProcessing($customerIds)
{
foreach ($customerIds as $customerId) {
$customer = $this->findorFail($customerId);
if ($this->checkIfCustomerHasOrderPendingOrProcessing($customer)) {
return true;
}
}
return false;
}
/**
* Upload customer's images.
*
* @param array $data
* @param \Webkul\Customer\Models\Customer $customer
* @param string $type
* @return void
*/
public function uploadImages($data, $customer, $type = 'image')
{
if (isset($data[$type])) {
$request = request();
foreach ($data[$type] as $imageId => $image) {
$file = $type . '.' . $imageId;
$dir = 'customer/' . $customer->id;
if ($request->hasFile($file)) {
if ($customer->{$type}) {
Storage::delete($customer->{$type});
}
$customer->{$type} = $request->file($file)->store($dir);
$customer->save();
}
}
} else {
if ($customer->{$type}) {
Storage::delete($customer->{$type});
}
$customer->{$type} = null;
$customer->save();
}
}
/**
* Sync new registered customer data.
*
* @param \Webkul\Customer\Contracts\Customer $customer
* @return mixed
*/
public function syncNewRegisteredCustomerInformations($customer)
{
/**
* Setting registered customer to orders.
*/
Order::where('customer_email', $customer->email)->update([
'is_guest' => 0,
'customer_id' => $customer->id,
'customer_type' => \Webkul\Customer\Models\Customer::class,
]);
/**
* Grabbing orders by `customer_id`.
*/
$orders = Order::where('customer_id', $customer->id)->get();
/**
* Setting registered customer to associated order's relations.
*/
$orders->each(function ($order) use ($customer) {
$order->addresses()->update([
'customer_id' => $customer->id,
]);
$order->shipments()->update([
'customer_id' => $customer->id,
'customer_type' => \Webkul\Customer\Models\Customer::class,
]);
$order->downloadable_link_purchased()->update([
'customer_id' => $customer->id,
]);
});
}
}