/**
  * Edit Dailyspecail And Campaign Action
  * @param Request $request
  * @param $did
  * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  * @throws \Exception
  * @author: Vini Dubey<*****@*****.**>
  * @since: xx-xx-xxxx
  */
 public function editDailyspecial(Request $request, $did)
 {
     $objProductCategory = ProductCategory::getInstance();
     $objCampaignModel = Campaigns::getInstance();
     $objProductModel = Products::getInstance();
     $supplierId = Session::get('fs_supplier')['id'];
     if ($request->isMethod('post')) {
         $rules = array('campaign_name' => 'unique:campaigns,campaign_name,' . $did . ',campaign_id', 'dailyspecial_image' => 'image');
         $validator = Validator::make($request->all(), $rules);
         if ($validator->fails()) {
             return Redirect::back()->withErrors($validator)->withInput();
         }
         $postData = $request->all();
         if (sizeof($postData['product']) >= 10) {
             if (Input::hasFile('dailyspecial_image')) {
                 $filePath = uploadImageToStoragePath(Input::file('dailyspecial_image'), 'flashsale', 'flashsale_' . $supplierId . '_' . time() . ".jpg");
                 $data['campaign_banner'] = $filePath;
             }
             $data['campaign_name'] = $postData['campaign_name'];
             $data['campaign_type'] = 2;
             $data['discount_type'] = '2';
             //            if ($data['discount_type'] == '1') {
             //                $data['discount_value'] = $postData['flatdiscount'];
             //            } else {
             $data['discount_value'] = $postData['percentagediscount'];
             //            }
             $validFrom = strtotime(str_replace("-", "", $postData['availablefromdate']));
             $validTo = strtotime(str_replace("-", "", $postData['availableuptodate']));
             $data['available_from'] = $validFrom;
             $data['available_upto'] = $validTo;
             $categ = $postData['productcategories'];
             if (isset($postData['productsubcategories'])) {
                 $subcat = $postData['productsubcategories'];
             } else {
                 $subcat = [];
             }
             $tmp = [];
             foreach ($categ as $index => $item) {
                 $tmp[$item] = array_values(array_filter(array_map(function ($cat) use($item) {
                     if (explode('_', $cat)[0] == $item) {
                         return explode('_', $cat)[1];
                     }
                 }, $subcat)));
             }
             $data['for_category_ids'] = json_encode($tmp);
             $data['by_user_id'] = $supplierId;
             //                $product = $postData['product'];
             $data['for_product_ids'] = implode(",", $postData['product']);
             $where = ['rawQuery' => 'campaign_id = ?', 'bindParams' => [$did]];
             $campaigns = 'Flashsale';
             //                print_a($data);
         } else {
             if (Input::hasFile('dailyspecial_image')) {
                 $filePath = uploadImageToStoragePath(Input::file('dailyspecial_image'), 'dailyspecial', 'dailyspecial_' . $supplierId . '_' . time() . ".jpg");
                 $data['campaign_banner'] = $filePath;
             }
             $data['campaign_name'] = $postData['campaign_name'];
             $data['campaign_type'] = $postData['campaign_type'];
             $data['discount_type'] = '2';
             $data['discount_value'] = $postData['percentagediscount'];
             $validFrom = strtotime(str_replace("-", "", $postData['availablefromdate']));
             $validTo = strtotime(str_replace("-", "", $postData['availableuptodate']));
             $data['available_from'] = $validFrom;
             $data['available_upto'] = $validTo;
             $categ = $postData['productcategories'];
             if (isset($postData['productsubcategories'])) {
                 $subcat = $postData['productsubcategories'];
             } else {
                 $subcat = [];
             }
             //                print_r($categ);
             //                print_a($subcat);
             $tmp = [];
             foreach ($categ as $index => $item) {
                 $tmp[$item] = array_values(array_filter(array_map(function ($cat) use($item) {
                     if (explode('_', $cat)[0] == $item) {
                         return explode('_', $cat)[1];
                     }
                 }, $subcat)));
             }
             //                print_a(json_encode($tmp));
             $data['for_category_ids'] = json_encode($tmp);
             $data['by_user_id'] = $supplierId;
             //                $product = $postData['product'];
             $data['for_product_ids'] = implode(",", $postData['product']);
             //                $data['for_product_ids'] = $postData['product'][0];
             $where = ['rawQuery' => 'campaign_id = ?', 'bindParams' => [$did]];
             $campaigns = 'Dailyspecial';
             //                print_a($data);
         }
         $campaignUpdate = $objCampaignModel->updateFlashsaleStatus($data, $where);
         if ($campaignUpdate) {
             if (isset($filePath)) {
                 deleteImageFromStoragePath($postData['oldImage']);
             }
             return Redirect::back()->with(['status' => 'success', 'msg' => $campaigns . ' ' . 'Updated Successfully.']);
         } else {
             return Redirect::back()->with(['status' => 'error', 'msg' => $campaigns . ' ' . 'Some Error try again.']);
         }
     }
     $where = ['rawQuery' => 'campaign_id = ? AND by_user_id = ?', 'bindParams' => [$did, $supplierId]];
     $selectedColumn = ['campaigns.*', 'users.username'];
     $dailyspecialInfo = $objCampaignModel->getAllFlashsaleDetails($where, $selectedColumn);
     //        print_a($dailyspecialInfo);
     if (isset($dailyspecialInfo) && !empty($dailyspecialInfo)) {
         foreach ($dailyspecialInfo as $flashkey => $flashval) {
             $categoryIds = json_decode($flashval->for_category_ids, true);
             $categoryMerg = array_merge(array_keys($categoryIds));
             $categoryMergee = array_merge(array_flatten($categoryIds));
             $categoryMerge = array_merge(array_keys($categoryIds), array_flatten($categoryIds));
             //                echo'<pre>';print_r($categoryMerg);
             //                echo'<pre>';print_r($categoryMergee);
             //                print_a($categoryMerge);
             $where = ['rawQuery' => 'category_id IN(' . implode(",", $categoryMerge) . ')'];
             $selectedColumn = [DB::raw('GROUP_CONCAT(DISTINCT category_name) AS category_name'), DB::raw('GROUP_CONCAT(DISTINCT category_id) AS category_id')];
             $getcategory = $objProductCategory->getCategoryNameById($where, $selectedColumn);
             foreach ($getcategory as $catkey => $catval) {
                 $dailyspecialInfo[$flashkey]->category = $catval->category_name;
                 $dailyspecialInfo[$flashkey]->category_ids = $catval->category_id;
             }
             $whereProduct = ['rawQuery' => 'product_id IN(' . $flashval->for_product_ids . ')'];
             $selectedColumn = [DB::raw('GROUP_CONCAT(DISTINCT product_name) AS product_name'), DB::raw('GROUP_CONCAT(DISTINCT product_id) AS product_id')];
             $getproduct = $objProductModel->getProductNameById($whereProduct, $selectedColumn);
             foreach ($getproduct as $prodkey => $prodval) {
                 $dailyspecialInfo[$flashkey]->product_name = $prodval->product_name;
                 $dailyspecialInfo[$flashkey]->product_id = $prodval->product_id;
             }
         }
         $where = ['rawQuery' => 'category_status = ? AND parent_category_id = ?', 'bindParams' => [1, 0]];
         $selectedColumn = ['category_id', 'category_name', 'category_status', 'for_shop_id'];
         $allactivecategories = $objProductCategory->getAllMainCategories($where, $selectedColumn);
         $where = ['rawQuery' => 'category_status = ?', 'bindParams' => [1]];
         $selectedColumn = ['product_categories.*', DB::raw('GROUP_CONCAT(category_id)AS main_category_id'), DB::raw('GROUP_CONCAT(category_name)AS main_category_name')];
         $allActiveSubcategories = $objProductCategory->getSubCategoriesForMaincategory($where, $selectedColumn);
         $mainCategory = array_filter(array_map(function ($category) {
             if ($category->parent_category_id == 0) {
                 return $category;
             }
         }, $allActiveSubcategories))[0];
         $finalCatData = [];
         foreach (explode(',', $mainCategory->main_category_id) as $index => $mainCatID) {
             foreach ($allActiveSubcategories as $subCatKey => $allActiveSubcategory) {
                 if ($allActiveSubcategory->parent_category_id == $mainCatID) {
                     $allActiveSubcategory->main_cat_name = explode(',', $mainCategory->main_category_name)[$index];
                     $finalCatData[$mainCatID] = $allActiveSubcategory;
                 }
             }
         }
         $where = ['rawQuery' => 'added_by = ? AND product_type = ?', 'bindParams' => [$supplierId, 0]];
         $selectedColumn = ['product_id', 'product_name'];
         $allproducts = $objProductModel->getAllSupplierProducts($where, $selectedColumn);
         return view('Supplier/Views/dailyspecial/editDailySpecial', ['dailyspecialInfo' => $dailyspecialInfo[0], 'activeCategory' => $allactivecategories, 'allProducts' => $allproducts, 'allcategories' => $finalCatData]);
     } else {
         return view('Supplier/Views/dailyspecial/editDailySpecial');
     }
 }
 /**
  * @param Request $request
  * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  */
 public function addNewShop(Request $request)
 {
     $userId = Session::get('fs_supplier')['id'];
     $objCategoryModel = ProductCategory::getInstance();
     $objLocationModel = Location::getInstance();
     $objShopModel = Shop::getInstance();
     $objShopMetadataModel = ShopMetadata::getInstance();
     $whereforCategory = ['rawQuery' => 'category_status =? and parent_category_id =?', 'bindParams' => [1, 0]];
     $allCategories = $objCategoryModel->getAllCategoriesWhere($whereforCategory);
     $whereforCountry = ['rawQuery' => 'is_visible =? and location_type =?', 'bindParams' => [0, 0]];
     $allCountry = $objLocationModel->getAllLocationsWhere($whereforCountry);
     $whereforShop = ['rawQuery' => 'user_id =?', 'bindParams' => [$userId]];
     $allShop = $objShopModel->getAllshopsWhere($whereforShop);
     //echo "<pre>";print_r($allShop);die;
     /////////////////////////////Flag Set By admin side///////////////Todo- Flag Set By admin side
     $multiple_store_flag = 1;
     // Value 1 if flag is set
     $sub_store_flag = 1;
     // Value 1 if flag is set
     $parent_category_flag = 1;
     // Value 1 if flag is set
     /////////////////////////////////////////////////////////////////
     $flag['multiple_store_flag'] = $multiple_store_flag;
     $flag['sub_store_flag'] = $sub_store_flag;
     $flag['parent_category_flag'] = $parent_category_flag;
     $data['allCategories'] = $allCategories;
     $data['Country'] = $allCountry;
     $data['Shop'] = $allShop;
     if (!empty($allShop) && $multiple_store_flag != 1) {
         //Error msg if multiple shop not allowed and shopeady added
         return view("Supplier/Views/supplier/addNewShop", ['multiple_store_err' => "Shop already added, Can not add Multiple Shop"]);
     } else {
         $parentCategoryId = 0;
         if (isset($request['parent_category']) && !empty($request['parent_category'])) {
             $parentCategoryId = $request['parent_category'];
         }
         $parentShopId = "";
         if (isset($request['parent_shop']) && !empty($request['parent_shop'])) {
             $parentShopId = $request['parent_shop'];
         }
         if ($request->isMethod('post')) {
             if ($parentShopId == '') {
                 //Sub store flag is not set
                 $rules = array('shop_name' => 'required');
             } else {
                 //Sub store flag is set
                 $rules = array();
             }
             $validator = Validator::make($request->all(), $rules);
             if ($validator->fails()) {
                 return Redirect::back()->withErrors($validator)->withInput();
             } else {
                 try {
                     $addressLine1 = "";
                     if (isset($request['address_line_1'])) {
                         $addressLine1 = $request['address_line_1'];
                     }
                     $addressLine2 = "";
                     if (isset($request['address_line_2'])) {
                         $addressLine2 = $request['address_line_2'];
                     }
                     $country = "";
                     if (isset($request['country'])) {
                         $country = $request['country'];
                     }
                     $state = "";
                     if (isset($request['state'])) {
                         $state = $request['state'];
                     }
                     $city = "";
                     if (isset($request['city'])) {
                         $city = $request['city'];
                     }
                     $zipcode = "";
                     if (isset($request['zipcode'])) {
                         $zipcode = $request['zipcode'];
                     }
                     $shop_flag = 1;
                     if (isset($request['shop_flag'])) {
                         $shop_flag = $request['shop_flag'];
                     }
                     $show_shop = 2;
                     if (isset($request['show_shop'])) {
                         $show_shop = $request['show_shop'];
                     }
                     ////////////Upload Shop Banner Start///////////////////////
                     if (isset($_FILES["shop_banner"]["name"]) && !empty($_FILES["shop_banner"]["name"])) {
                         $bannerFilePath = uploadImageToStoragePath(Input::file('shop_banner'), 'shopbanner', 'shopbanner_' . $userId . '_' . time() . ".jpg");
                     } else {
                         $bannerFilePath = uploadImageToStoragePath($_SERVER['DOCUMENT_ROOT'] . "/assets/images/no-image.png", 'shopbanner', 'shopbanner_' . $userId . '_' . time() . ".jpg");
                     }
                     ////////////Upload Shop banner End///////////////////////
                     ////////////Upload Shop Logo Start///////////////////////
                     if (isset($_FILES["shop_logo"]["name"]) && !empty($_FILES["shop_logo"]["name"])) {
                         $logoFilePath = uploadImageToStoragePath(Input::file('shop_logo'), 'shoplogo', 'shoplogo_' . $userId . '_' . time() . ".jpg");
                     } else {
                         $logoFilePath = uploadImageToStoragePath($_SERVER['DOCUMENT_ROOT'] . "/assets/images/no-image.png", 'shoplogo', 'shoplogo_' . $userId . '_' . time() . ".jpg");
                     }
                     ////////////Upload Shop Logo End///////////////////////
                     if ($parentShopId == "") {
                         //Sub store flag is not set
                         $shopdata = array('user_id' => $userId, 'shop_name' => $request['shop_name'], 'shop_banner' => $bannerFilePath, 'shop_logo' => $logoFilePath, 'parent_category_id' => $parentCategoryId, 'shop_flag' => $shop_flag);
                         $addShop = $objShopModel->addShop($shopdata);
                         $shop_id = $addShop;
                         $shopType = "0";
                     } else {
                         //Sub store flag is set
                         $shopType = "1";
                         $shop_id = $parentShopId;
                     }
                     $shopMatadata = array('shop_id' => $shop_id, 'shop_type' => $shopType, 'address_line_1' => $addressLine1, 'address_line_2' => $addressLine2, 'city' => $city, 'state' => $state, 'country' => $country, 'zipcode' => $zipcode, 'added_date' => time(), 'show_shop_address' => $show_shop, 'shop_metadata_status' => 1);
                     $addShop = $objShopMetadataModel->addShopMetadata($shopMatadata);
                     if ($addShop) {
                         if ($parentShopId == "") {
                             return redirect()->back()->with('shop_success_msg', 'Shop Added Successfully, Waiting for Admin Approval.');
                         } else {
                             return redirect()->back()->with('shop_success_msg', 'Shop Added Successfully.');
                         }
                     }
                 } catch (\Exception $ex) {
                     return redirect()->back()->with('exception', 'An exception occurred, please reload the page and try again.');
                 }
             }
         }
         return view("Supplier/Views/supplier/addNewShop", ['data' => $data], ['flag' => $flag]);
     }
 }
 public function editFlashsale(Request $request, $fid)
 {
     $objCategoryModel = ProductCategory::getInstance();
     $objCampaignModel = Campaigns::getInstance();
     $postData = $request->all();
     $supplierId = Session::get('fs_supplier')['id'];
     if ($request->isMethod('POST')) {
         $rules = array('campaign_name' => 'unique:campaigns,campaign_name,' . $fid . ',campaign_id', 'flashsale_image' => 'image');
         $validator = Validator::make($request->all(), $rules);
         if ($validator->fails()) {
             return Redirect::back()->withErrors($validator)->withInput();
         } else {
             if (Input::hasFile('flashsale_image')) {
                 $filePath = uploadImageToStoragePath(Input::file('flashsale_image'), 'flashsale', 'flashsale_' . $supplierId . '_' . time() . ".jpg");
                 $data['campaign_banner'] = $filePath;
             }
             $postData = $request->all();
             $data['campaign_name'] = $postData['campaign_name'];
             $data['for_shop_id'] = $postData['suppliershop'];
             $data['discount_type'] = $postData['discounttype'];
             if ($postData['discounttype'] == 1) {
                 $data['discount_value'] = $postData['flatdiscount'];
             } else {
                 $data['discount_value'] = $postData['percentagediscount'];
             }
             $validFrom = strtotime(str_replace("-", "", $postData['availablefromdate']));
             $validTo = strtotime(str_replace("-", "", $postData['availableuptodate']));
             $data['available_from'] = $validFrom;
             $data['available_upto'] = $validTo;
             $categ = $postData['productcategories'];
             $data['for_category_ids'] = implode(",", $categ);
             $where = ['rawQuery' => 'campaign_id = ?', 'bindParams' => [$fid]];
             $campaignUpdate = $objCampaignModel->updateFlashsaleStatus($data, $where);
             if ($campaignUpdate) {
                 if (isset($filePath)) {
                     deleteImageFromStoragePath($postData['oldImage']);
                 }
                 return Redirect::back()->with(['status' => 'success', 'msg' => 'FlashSale Added Successfully.']);
             } else {
                 return Redirect::back()->with(['status' => 'error', 'msg' => 'Some Error try again.']);
             }
         }
     }
     $where = ['rawQuery' => 'campaign_id = ?', 'bindParams' => [$fid]];
     $selectedColumn = ['campaigns.*', 'users.username'];
     $flashsaleInfo = $objCampaignModel->getAllFlashsaleDetails($where, $selectedColumn);
     if (isset($flashsaleInfo) && !empty($flashsaleInfo)) {
         foreach ($flashsaleInfo as $flashkey => $flashval) {
             $categoryIds = $flashval->for_category_ids;
             $where = ['rawQuery' => 'category_id IN(' . $categoryIds . ')'];
             $getcategory = $objCategoryModel->getCategoryNameById($where);
             foreach ($getcategory as $catkey => $catval) {
                 $flashsaleInfo[$flashkey]->category = $catval->category_name;
             }
         }
         //            echo'<pre>';print_r($flashsaleInfo);die("dxv");
         $where = ['rawQuery' => 'category_status = ? AND parent_category_id = ?', 'bindParams' => [1, 0]];
         $selectedColumn = ['category_id', 'category_name', 'category_status', 'for_shop_id'];
         $allactivecategories = $objCategoryModel->getAllMainCategories($where, $selectedColumn);
         return view('Supplier/Views/flashsale/editFlashsale', ['flashsaleDetails' => $flashsaleInfo[0], 'activeflashsale' => $allactivecategories]);
     } else {
         return view('Supplier/Views/flashsale/editFlashsale');
     }
 }
 /**
  * Edit category action
  * @param Request $request
  * @param $id Category id
  * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  * @throws \FlashSale\Http\Modules\Supplier\Models\Exception
  * @since 29-01-2016
  * @author Dinanath Thakur <*****@*****.**>
  */
 public function editCategory(Request $request, $id)
 {
     $objCategoryModel = ProductCategory::getInstance();
     $userId = Session::get('fs_supplier')['id'];
     if ($request->isMethod('post')) {
         Validator::extend('word_count', function ($field, $value, $parameters) {
             if (count(explode(' ', $value)) > 10) {
                 return false;
             }
             return true;
         }, 'Meta keywords should not contain more than 10 words.');
         $rules = array('category_name' => 'required|max:50|unique:product_categories,category_name,' . $id . ',category_id', 'category_desc' => 'max:255', 'status' => 'required', 'seo_name' => 'max:100', 'page_title' => 'max:70', 'meta_desc' => 'max:160', 'meta_keywords' => 'word_count');
         $validator = Validator::make($request->all(), $rules);
         if ($validator->fails()) {
             return Redirect::back()->with(["status" => 'error', 'msg' => 'Please correct the following errors.'])->withErrors($validator)->withInput();
         } else {
             if (Input::hasFile('category_image')) {
                 $filePath = uploadImageToStoragePath(Input::file('category_image'), 'category');
                 if ($filePath) {
                     $dataToUpdate['category_banner_url'] = $filePath;
                 }
             }
             $dataToUpdate['category_name'] = $request->input('category_name');
             $dataToUpdate['category_desc'] = $request->input('category_desc');
             $dataToUpdate['category_status'] = $request->input('status');
             $dataToUpdate['parent_category_id'] = $request->input('parent_category');
             $dataToUpdate['page_title'] = $request->input('page_title');
             $dataToUpdate['meta_description'] = $request->input('meta_desc');
             $dataToUpdate['meta_keywords'] = $request->input('meta_keywords');
             $whereForUpdate = ['rawQuery' => 'category_id =?', 'bindParams' => [$id]];
             $updateResult = $objCategoryModel->updateCategoryWhere($dataToUpdate, $whereForUpdate);
             if ($updateResult > 0) {
                 if (isset($filePath)) {
                     deleteImageFromStoragePath($request->input('old_image'));
                 }
                 return Redirect::back()->with(['status' => 'success', 'msg' => 'Category details has been updated.']);
             } else {
                 return Redirect::back()->with(['status' => 'info', 'msg' => 'Nothing to update.']);
             }
         }
     }
     $where = ['rawQuery' => 'category_id =? AND category_status IN(0,1,2) AND created_by=?', 'bindParams' => [$id, $userId]];
     $categoryDetails = $objCategoryModel->getCategoryDetailsWhere($where);
     $allCategories = '';
     if ($categoryDetails) {
         $allCategories = $objCategoryModel->getAllCategoriesWhere(['rawQuery' => 'created_by IN (' . DB::raw("SELECT `id` FROM `users` WHERE `role` IN(4,5)") . ') OR created_by=? AND  category_status IN(0,1,2)', 'bindParams' => [$userId]]);
     }
     return view('Supplier/Views/category/editCategory', ['categoryDetails' => $categoryDetails, 'allCategories' => $allCategories]);
 }
 public function editFeature(Request $request, $featureId)
 {
     $objModelFeatures = ProductFeatures::getInstance();
     $objModelCategory = ProductCategory::getInstance();
     $objModelFeatureVariants = ProductFeatureVariants::getInstance();
     $whereForFeatureGroup = ['rawQuery' => 'group_flag =? and status = ?', 'bindParams' => [1, 1]];
     $allFeatureGroups = $objModelFeatures->getAllFeaturesWhere($whereForFeatureGroup);
     $whereForFeature = ['rawQuery' => 'feature_id = ? and group_flag=?', 'bindParams' => [$featureId, 0]];
     $featureDetails = $objModelFeatures->getFeatureWhere($whereForFeature);
     $whereForCat = ['rawQuery' => 'category_status =?', 'bindParams' => [1]];
     $allCategories = $objModelCategory->getAllCategoriesWhere($whereForCat);
     $whereForFV = ['rawQuery' => 'feature_id = ?', 'bindParams' => [$featureId]];
     $fvData = $objModelFeatureVariants->getAllFeatureVariantsWhere($whereForFV);
     if ($request->isMethod('post')) {
         //            echo "<pre>"; print_r($request->input()); die;
         $dataUpdateFeature = array();
         $dataUpdateFeature['parent_id'] = (string) json_decode($featureDetails, true)['data']['parent_id'];
         if ($request->input('parent_id') != null) {
             $dataUpdateFeature['parent_id'] = $request->input('parent_id');
         }
         $rulesEditdFeature = ['feature_name' => 'required|regex:/(^[A-Za-z0-9 ]+$)+/|max:255|unique:product_features,feature_name,' . $featureId . ',feature_id,parent_id,' . $dataUpdateFeature['parent_id'] . ',group_flag,0', 'full_description' => 'max:255', 'feature_type' => 'required', 'for_categories' => 'required'];
         $messagesEditFeature = ['feature_name.required' => 'Please enter a name', 'feature_name.alpha_num' => 'Please enter a valid name', 'full_description.max' => 'Description should not exceed 255 characters', 'feature_type.required' => 'Please select a feature type', 'for_categories.required' => 'Please select atleast one category'];
         $featureVariants = $request->input('feature_variant')['name'];
         $featureVariantsDesc = $request->input('feature_variant')['description'];
         $featureVariantIds = $request->input('feature_variant')['variant_id'];
         //            echo '<pre>'; print_r($featureVariantIds); die;
         foreach ($featureVariants as $keyFV => $valueFV) {
             //NEED MORE VALIDATION HERE
             $rulesEditdFeature['feature_variant.name.' . $keyFV] = 'regex:/(^[A-Za-z0-9 ]+$)+/|max:255|unique:product_feature_variants,variant_name,' . (isset($featureVariantIds[$keyFV]) ? $featureVariantIds[$keyFV] : 'NULL') . ',variant_id,feature_id,' . $featureId;
             $rulesEditdFeature['feature_variant.description.' . $keyFV] = 'regex:/(^[A-Za-z0-9 ]+$)+/|max:255';
             $messagesEditFeature['feature_variant.name.' . $keyFV . '.regex'] = 'Name can contain alphanumeric characters and spaces only';
             $messagesEditFeature['feature_variant.name.' . $keyFV . '.max'] = 'Name is too long to use. 255 characters max.';
             $messagesEditFeature['feature_variant.name.' . $keyFV . '.unique'] = 'Variant name already in use.';
             $messagesEditFeature['feature_variant.description.' . $keyFV . '.regex'] = 'Invalid description.';
         }
         //            $this->validate($request, $rulesEditdFeature, $messagesEditFeature);
         $validator = Validator::make($request->all(), $rulesEditdFeature, $messagesEditFeature);
         if ($validator->fails()) {
             return Redirect::back()->with(["code" => '400', 'message' => 'Please correct the following errors.'])->withErrors($validator)->withInput();
         } else {
             $dataUpdateFeature['feature_name'] = $request->input('feature_name');
             $dataUpdateFeature['full_description'] = $request->input('full_description');
             $dataUpdateFeature['feature_type'] = $request->input('feature_type');
             $selectedCategories = $request->input('for_categories');
             $dataUpdateFeature['for_categories'] = implode(',', array_keys($selectedCategories));
             $dataUpdateFeature['display_on_product'] = 0;
             if ($request->input('display_on_product') != null) {
                 $dataUpdateFeature['display_on_product'] = 1;
             }
             $dataUpdateFeature['display_on_catalog'] = 0;
             if ($request->input('display_on_catalog') != null) {
                 $dataUpdateFeature['display_on_catalog'] = 1;
             }
             $dataUpdateFeature['group_flag'] = 0;
             $whereForFeatureUpdate = ['rawQuery' => 'feature_id = ?', 'bindParams' => [$featureId]];
             $updatedFeature = json_decode($objModelFeatures->updateFeatureWhere($dataUpdateFeature, $whereForFeatureUpdate), true);
             //CODE TO INSERT VARIANTS HERE
             $whereForVariantId = ['rawQuery' => 'feature_id =?', 'bindParams' => [$featureId]];
             $selectedVariantColumn = array(DB::raw('GROUP_CONCAT(variant_id) AS variant_ids'));
             $oldVariantIds = explode(',', json_decode($objModelFeatureVariants->getFeatureVariantWhere($whereForVariantId, $selectedVariantColumn), true)['data']['variant_ids']);
             $inputVariantIds = array();
             $updateVariantResultFlag = false;
             $newVariantResultFlag = false;
             $deletedVariantResultFlag = false;
             $variantIdsToDelete = $oldVariantIds;
             if ($dataUpdateFeature['feature_type'] != 0) {
                 foreach ($featureVariants as $keyFV => $valueFV) {
                     if ($valueFV != '') {
                         if (isset($featureVariantIds[$keyFV]) && in_array($featureVariantIds[$keyFV], $oldVariantIds)) {
                             //UPDATE VARIANT DETAILS
                             $inputVariantIds[] = $featureVariantIds[$keyFV];
                             $updateVariantData = '';
                             $updateVariantData['variant_name'] = $valueFV;
                             $updateVariantData['description'] = $featureVariantsDesc[$keyFV];
                             $whereForUpdateVariant = ['rawQuery' => 'variant_id =?', 'bindParams' => [$featureVariantIds[$keyFV]]];
                             $updateVariantResult = $objModelFeatureVariants->updateFeatureVariantWhere($updateVariantData, $whereForUpdateVariant);
                             if ($updateVariantResult) {
                                 $updateVariantResultFlag = true;
                             }
                         } else {
                             //ADD NEW VARIANT DETAILS
                             $newVariantData['feature_id'] = $featureId;
                             $newVariantData['variant_name'] = $valueFV;
                             //                            $newVariantData['added_by'] = $userId;
                             $newVariantData['description'] = $featureVariantsDesc[$keyFV];
                             $newInsertedVariantId = $objModelFeatureVariants->addFeatureVariant($newVariantData);
                             if ($newInsertedVariantId) {
                                 $newVariantResultFlag = true;
                             }
                         }
                     }
                 }
                 $variantIdsToDelete = array_diff($oldVariantIds, $inputVariantIds);
             }
             if (!empty($variantIdsToDelete)) {
                 $whereForDeleteVariant = ['rawQuery' => 'variant_id IN (?)', 'bindParams' => [implode(',', $variantIdsToDelete)]];
                 $deletedVariantResult = $objModelFeatureVariants->deleteFeatureVariantWhere($whereForDeleteVariant);
                 if ($deletedVariantResult) {
                     $deletedVariantResultFlag = true;
                 }
             }
             if (isset($updatedFeature) && $updatedFeature['code'] == 200 || isset($updateVariantResultFlag) && $updateVariantResultFlag || isset($newVariantResultFlag) && $newVariantResultFlag || isset($deletedVariantResultFlag) && $deletedVariantResultFlag) {
                 //ALL DETAILS UPDATED
                 return Redirect::back()->with(['code' => '200', 'message' => 'Changes saved successfully.']);
             } else {
                 //NOTHING TO UPDATE
                 return Redirect::back()->with(['code' => '200', 'message' => 'Nothing to update.']);
             }
         }
     }
     return view('Supplier/Views/features/editFeature', ['code' => '', 'featureGroups' => json_decode($allFeatureGroups, true), 'allCategories' => $allCategories, 'featureDetails' => json_decode($featureDetails, true), 'fvData' => json_decode($fvData, true)]);
     //, ['successMsg' => $successMsg, 'errMsg' => $errMsg]
 }