PATH:
home
/
lab2454c
/
costbloc.com
/
app
/
Http
/
Controllers
/
Vendor
<?php /** * @package ProductController * @author TechVillage <support@techvill.org> * @contributor Sakawat Hossain Rony <[sakawat.techvill@gmail.com]> * @contributor Al Mamun <[almamun.techvill@gmail.com]> * @created 19-12-2021 */ namespace App\Http\Controllers\Vendor; use App\DataTables\VendorProductDataTable; use App\Http\Controllers\Controller; use App\Http\Resources\AjaxSelectSearchResource; use App\Http\Resources\ProductResource; use App\Models\{ Brand, Category, Product, ProductCategory, Vendor, Attribute, ProductMeta, Tag }; use App\Services\Actions\Facades\VendorProductActionFacade as VendorProductAction; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Session; use Modules\Shipping\Entities\ShippingClass; use Modules\Tax\Entities\TaxClass; class ProductController extends Controller { /** * Product List * @param ProductListDataTable $dataTable * @return mixed */ public function index(VendorProductDataTable $dataTable) { $vendorId = optional(auth()->user()->vendor())->vendor_id; if (is_null($vendorId)) { abort(403); } $data['productBrands'] = Product::join("brands", "products.brand_id", "brands.id") ->where("products.vendor_id", $vendorId) ->selectRaw("brands.name, brands.id") ->distinct() ->get(); $data['productCategories'] = ProductCategory::join("categories", "product_categories.category_id", "categories.id") ->join("products", "products.id", "product_categories.product_id") ->where("products.vendor_id", $vendorId) ->selectRaw("categories.name, categories.id") ->distinct() ->get(); return $dataTable->render('vendor.product.index', $data); } public function createProduct(Request $request) { if ($this->ncpc()) { Session::flush(); return view('errors.installer-error', ['message' => __("This product is facing license validation issue.<br>Please contact admin to fix the issue.")]); } if ($request->isMethod('get')) { $data['brands'] = Brand::getAll()->where('status', 'Active'); $data['vendors'] = Vendor::getAll()->where('status', 'Active'); $data['categories'] = Category::getAll()->whereNull('parent_id')->where('status', 'Active'); $data['attributeList'] = Attribute::getAll()->unique('name'); if (isActive('Shipping')) { $data['shippings'] = ShippingClass::getAll(); } $data['taxes'] = TaxClass::getAll(); $data['tags'] = []; return view('vendor.product.product', $data); } $vendor = auth()->user()->vendor(); if (!$vendor || !$vendor->vendor_id) { if ($request->wantsJson()) { return $this->notFoundResponse([], __('Vendor not found.')); } else { Session::flash('fail', __('Vendor not found.')); return redirect()->route('vendor.products'); } } $product = Product::create([ 'name' => $request->name ?? 'Untitled product', 'status' => 'Draft', 'vendor_id' => $vendor->vendor_id ]); (new ProductCategory)->store([ 'product_id' => $product->id, 'category_id' => 1 ]); $request->request->add([ 'permalink' => $product->name, 'code' => $product->code, ]); $response = VendorProductAction::execute('updatePermalink', $request); if ($request->action) { $response = VendorProductAction::execute($request->action, $request); if (!$response instanceof JsonResponse) { return $response; } } $data = json_decode($response->getContent(), true); $product = Product::where('id', $product->id)->first(); $data['response']['url'] = route('vendor.product.edit-action', ['code' => $product->code]); $data['response']['permalink'] = $product->slug; $data['response']['previewUrl'] = route('site.productDetails', ['slug' => $product->slug]); $data['response']['name'] = $product->name; $response->setContent(json_encode($data)); return $response; } public function editProductAction(Request $request) { /** * Action names * 1. update_product_basic_info * 2. add_new_attribute * 3. get_attributes * 4. add_product_variation * 5. save-_product_variation * 6. get_attribute_form * 7. load_product_variations * 8. update_tags */ if (!$request->action) { return $this->unprocessableResponse([], __('Action name required.')); } if ($request->action == 'update_basic_info_web') { if ($this->ncpc()) { Session::flush(); return view('errors.installer-error', ['message' => __("This product is facing license validation issue.<br>Please contact admin to fix the issue.")]); } } return VendorProductAction::execute($request->action, $request); } public function edit(Request $request) { $product = VendorProductAction::editModeOn()->execute('getProductWithAttributeAndVariations', $request); if (!$product || $product instanceof JsonResponse) { Session::flash('fail', __('Product not found.')); return redirect()->route('vendor.products'); } $vendor = auth()->user()->vendor(); if (!$vendor || !$vendor->vendor_id || $product->vendor_id != $vendor->vendor_id) { abort(403); } /** * Product edit code */ $upsaleId = $product->getUpSaleIds(); $crossSaleId = $product->getCrossSaleIds(); $relatedProductIds = $product->getRelatedProductIds(); $groupedId = $product->getGroupedProductIds(); $relatedIds = array_unique(array_merge( $upsaleId, $crossSaleId, $relatedProductIds, $groupedId )); $productsCollection = Product::whereIn('id', $relatedIds)->get(); $data['productUpsells'] = $productsCollection->whereIn('id', $upsaleId)->pluck('name', 'id')->toArray(); $data['productCrossSells'] = $productsCollection->whereIn('id', $crossSaleId)->pluck('name', 'id')->toArray(); $data['productRelatedProducts'] = $productsCollection->whereIn('id', $relatedProductIds)->pluck('name', 'id')->toArray(); $data['groupedProducts'] = $productsCollection->whereIn('id', $groupedId)->pluck('name', 'id')->toArray(); $data['attributeList'] = Attribute::getAll()->unique('name'); $data['product'] = $product; // Old codes $data['vendors'] = Vendor::getAll()->where('status', 'Active'); $data['taxes'] = TaxClass::getAll(); $data['brands'] = Brand::getAll()->where('status', 'Active'); if (isActive('Shipping')) { $data['shippings'] = ShippingClass::getAll(); } //product tag $data['tags'] = $product->tags()->pluck('name', 'id')->toArray(); // Category options $category = Category::getAll()->where('id', optional($product->productCategory)->category_id)->first(); $parent[] = !empty($category) ? $category->name : null; $parentId[] = !empty($category) ? $category->id : null; while (1) { if (!empty($category->category)) { $category = $category->category; $parent[] = $category->name; $parentId[] = $category->id; } else { break; } } if (is_array($parent) && count($parent) > 0) { $parent = array_reverse($parent); $parentId = array_reverse($parentId); $parent = implode(" / ", $parent); } $data['parentCategory'] = $parent; $data['parentCategoryId'] = $parentId; $data['categories'] = Category::getAll()->whereNull('parent_id')->where('status', 'Active'); return view('vendor.product.product', $data); } public function findProductAjaxQuery(Request $request) { if (!$vendor = $this->getVendor()) { return false; } $qString = $request->q; $productCode = $request->code; $result = Product::select('id', 'name') ->where('vendor_id', $vendor->vendor_id) ->where( function ($query) use ($qString) { $query->whereBeginsWith('name', $qString) ->orWhereLike('name', $qString) ->orWhereBeginsWith('slug', $qString) ->orWhereLike('slug', $qString); } ) ->published() ->isAvailable() ->notVariation() ->limit(Product::getLimit()); if ($productCode) { $result->where("code", "!=", $productCode); } $result = $result->get(); return AjaxSelectSearchResource::collection($result); } public function findTagsAjaxQuery(Request $request) { $result = Tag::whereLike('name', $request->q)->limit(Product::getLimit())->get(); return AjaxSelectSearchResource::collection($result); } public function productJson(Request $request) { $product = Product::where('code', $request->code)->first(); return new ProductResource($product); } public function deleteProduct(Request $request) { $product = Product::whereCode($request->code)->first(); if (!$product) { Session::flash('fail', __('Something went wrong. Product not found.')); return back(); } $product->delete(); Session::flash('success', __('Product has been trashed.')); return redirect()->route('vendor.products'); } public function forceDeleteProduct(Request $request) { $product = Product::withTrashed()->whereCode($request->code)->first(); if (!$product) { Session::flash('fail', __('Something went wrong. Product not found.')); return back(); } $productIds = Product::withTrashed()->where('parent_id', $product->id)->get()->pluck('id')->toArray(); if (count($productIds) > 0) { Product::withTrashed()->whereIn('id', $productIds)->delete(); } array_push($productIds, $product->id); $product->forceDelete(); ProductMeta::whereIn('product_id', $productIds)->delete(); Session::flash('success', __('Product deleted permanently.')); return redirect()->route('product.index'); } private function getVendor() { $vendor = auth()->user()->vendor(); return $vendor ?? null; } public function ncpc() { if (!g_e_v()) { return true; } if (!g_c_v()) { try { $d_ = g_d(); $e_ = g_e_v(); $e_ = explode('.', $e_); $c_ = md5($d_ . $e_[1]); if ($e_[0] == $c_) { p_c_v(); return false; } return true; } catch (\Exception $e) { return true; } } return false; } /** * find downloadable products * * @param Request $request * @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection */ public function findDownloadProducts(Request $request) { $products = Product::published()->isAvailable()->whereLike('name', $request->q)->where('vendor_id', auth()->user()->vendor()->vendor_id)->whereHas('metadata', function ($query) { $query->where('key', 'meta_downloadable')->where('value', 1); })->limit(10)->get(); return AjaxSelectSearchResource::collection($products); } }
[-] ImportController.php
[edit]
[-] WithdrawalController.php
[edit]
[-] ExportController.php
[edit]
[+]
..
[-] VendorTransactionController.php
[edit]
[-] ReviewController.php
[edit]
[-] VendorController.php
[edit]
[-] VendorOrderController.php
[edit]
[-] ProductController.php
[edit]
[-] DashboardController.php
[edit]