Files
elcaribe/app/Http/Controllers/Api/V2/Seller/ShopController.php
2023-08-07 15:52:04 -04:00

299 lines
10 KiB
PHP

<?php
namespace App\Http\Controllers\Api\V2\Seller;
use App\Http\Controllers\Api\V2\AuthController;
use App\Http\Requests\SellerRegistrationRequest;
use App\Http\Resources\V2\Seller\ProductCollection;
use App\Http\Resources\V2\Seller\ProductMiniCollection;
use App\Http\Resources\V2\Seller\CommissionHistoryResource;
use App\Http\Resources\V2\Seller\SellerPackageResource;
use App\Http\Resources\V2\Seller\SellerPaymentResource;
use App\Http\Resources\V2\ShopCollection;
use App\Http\Resources\V2\ShopDetailsCollection;
use App\Models\BusinessSetting;
use App\Models\Category;
use App\Models\CommissionHistory;
use App\Models\Order;
use App\Models\OrderDetail;
use App\Models\Payment;
use App\Models\Product;
use App\Models\Shop;
use App\Models\User;
use App\Notifications\AppEmailVerificationNotification;
use App\Notifications\EmailVerificationNotification;
use Illuminate\Http\Request;
use App\Utility\SearchUtility;
use Cache;
use Carbon\Carbon;
use DB;
use Hash;
use Illuminate\Http\Exceptions\HttpResponseException;
use Response;
class ShopController extends Controller
{
public function index(Request $request)
{
$shop_query = Shop::query();
if ($request->name != null && $request->name != "") {
$shop_query->where("name", 'like', "%{$request->name}%");
SearchUtility::store($request->name);
}
return new ShopCollection($shop_query->whereIn('user_id', verified_sellers_id())->paginate(10));
//remove this , this is for testing
//return new ShopCollection($shop_query->paginate(10));
}
public function update(Request $request)
{
$shop = Shop::where('user_id', auth()->user()->id)->first();
$successMessage = 'Shop info updated successfully';
$failedMessage = 'Shop info updated failed';
if ($request->has('name') && $request->has('address')) {
if ($request->has('shipping_cost')) {
$shop->shipping_cost = $request->shipping_cost;
}
$shop->name = $request->name;
$shop->address = $request->address;
$shop->phone = $request->phone;
$shop->slug = preg_replace('/\s+/', '-', $request->name) . '-' . $shop->id;
$shop->meta_title = $request->meta_title;
$shop->meta_description = $request->meta_description;
$shop->logo = $request->logo;
}
if ($request->has('delivery_pickup_longitude') && $request->has('delivery_pickup_latitude')) {
$shop->delivery_pickup_longitude = $request->delivery_pickup_longitude;
$shop->delivery_pickup_latitude = $request->delivery_pickup_latitude;
} elseif (
$request->has('facebook') ||
$request->has('google') ||
$request->has('twitter') ||
$request->has('youtube') ||
$request->has('instagram')
) {
$shop->facebook = $request->facebook;
$shop->instagram = $request->instagram;
$shop->google = $request->google;
$shop->twitter = $request->twitter;
$shop->youtube = $request->youtube;
} elseif (
$request->has('cash_on_delivery_status') ||
$request->has('bank_payment_status') ||
$request->has('bank_name') ||
$request->has('bank_acc_name') ||
$request->has('bank_acc_no') ||
$request->has('bank_routing_no')
) {
$shop->cash_on_delivery_status = $request->cash_on_delivery_status;
$shop->bank_payment_status = $request->bank_payment_status;
$shop->bank_name = $request->bank_name;
$shop->bank_acc_name = $request->bank_acc_name;
$shop->bank_acc_no = $request->bank_acc_no;
$shop->bank_routing_no = $request->bank_routing_no;
$successMessage = 'Payment info updated successfully';
} else {
$shop->sliders = $request->sliders;
}
if ($shop->save()) {
return $this->success(translate($successMessage));
}
return $this->failed(translate($failedMessage));
}
public function sales_stat()
{
$data = Order::where('created_at', '>=', Carbon::now()->subDays(7))
->where('seller_id', '=', auth()->user()->id)
->where('delivery_status', '=', 'delivered')
->select(DB::raw("sum(grand_total) as total, DATE_FORMAT(created_at, '%b-%d') as date"))
->groupBy(DB::raw("DATE_FORMAT(created_at, '%Y-%m-%d')"))
->get()->toArray();
//dd($data->toArray());
//$array_date = [];
$sales_array = [];
for ($i = 0; $i < 7; $i++) {
$new_date = date("M-d", strtotime(($i + 1) . " days ago"));
//$array_date[] = date("M-d", strtotime($i." days ago"));
$sales_array[$i]['date'] = $new_date;
$sales_array[$i]['total'] = 0;
if (!empty($data)) {
$key = array_search($new_date, array_column($data, 'date'));
if (is_numeric($key)) {
$sales_array[$i]['total'] = $data[$key]['total'];
}
}
}
return Response()->json($sales_array);
}
public function category_wise_products()
{
$category_wise_product = [];
$new_array = [];
foreach (Category::all() as $key => $category) {
if (count($category->products->where('user_id', auth()->user()->id)) > 0) {
$category_wise_product['name'] = $category->getTranslation('name');
$category_wise_product['banner'] = uploaded_asset($category->banner);
$category_wise_product['cnt_product'] = count($category->products->where('user_id', auth()->user()->id));
$new_array[] = $category_wise_product;
}
}
return Response()->json($new_array);
}
public function top_12_products()
{
$products = filter_products(Product::where('user_id', auth()->user()->id)
->orderBy('num_of_sale', 'desc'))
->limit(12)
->get();
return new ProductCollection($products);
}
public function info()
{
// dd(auth()->user()->shop);
return new ShopDetailsCollection(auth()->user()->shop);
}
public function pacakge()
{
$shop = auth()->user()->shop;
return response()->json([
'result' => true,
'id' => $shop->id,
'package_name' => $shop->seller_package->name,
'package_img' => uploaded_asset($shop->seller_package->logo)
]);
}
public function profile()
{
$user = auth()->user();
return response()->json([
'result' => true,
'id' => $user->id,
'type' => $user->user_type,
'name' => $user->name,
'email' => $user->email,
'avatar' => $user->avatar,
'avatar_original' => uploaded_asset($user->avatar_original),
'phone' => $user->phone
]);
}
public function payment_histories()
{
$payments = Payment::where('seller_id', auth()->user()->id)->paginate(10);
return SellerPaymentResource::collection($payments);
}
public function collection_histories()
{
$commission_history = CommissionHistory::where('seller_id', auth()->user()->id)->orderBy('created_at', 'desc')->paginate(10);
return CommissionHistoryResource::collection($commission_history);
}
public function store(SellerRegistrationRequest $request)
{
$user = new User;
$user->name = $request->name;
$user->email = $request->email;
$user->user_type = "seller";
$user->password = Hash::make($request->password);
if ($user->save()) {
$shop = new Shop;
$shop->user_id = $user->id;
$shop->name = $request->shop_name;
$shop->address = $request->address;
$shop->slug = preg_replace('/\s+/', '-', str_replace("/", " ", $request->shop_name));
$shop->save();
if (BusinessSetting::where('type', 'email_verification')->first()->value != 1) {
$user->email_verified_at = date('Y-m-d H:m:s');
$user->save();
} else {
try {
$user->notify(new AppEmailVerificationNotification());
} catch (\Exception $e) {
}
}
$authController = new AuthController();
return $authController->loginSuccess($user);
}
return $this->failed(translate('Something Wenr Wrong!'));
}
public function getVerifyForm()
{
$forms = BusinessSetting::where('type', 'verification_form')->first();
return response()->json(json_decode($forms->value));
}
public function store_verify_info(Request $request)
{
$data = array();
$i = 0;
foreach (json_decode(BusinessSetting::where('type', 'verification_form')->first()->value) as $key => $element) {
$item = array();
if ($element->type == 'text') {
$item['type'] = 'text';
$item['label'] = $element->label;
$item['value'] = $request['element_' . $i];
} elseif ($element->type == 'select' || $element->type == 'radio') {
$item['type'] = 'select';
$item['label'] = $element->label;
$item['value'] = $request['element_' . $i];
} elseif ($element->type == 'multi_select') {
$item['type'] = 'multi_select';
$item['label'] = $element->label;
$item['value'] = json_encode($request['element_' . $i]);
} elseif ($element->type == 'file') {
$item['type'] = 'file';
$item['label'] = $element->label;
$item['value'] = $request['element_' . $i]->store('uploads/verification_form');
}
array_push($data, $item);
$i++;
}
$shop = auth()->user()->shop;
$shop->verification_info = json_encode($data);
if ($shop->save()) {
return $this->success(translate('Your shop verification request has been submitted successfully!'));
}
return $this->failed(translate('Something Wenr Wrong!'));
}
}