/**
  * Ajax handler
  * @param Request $request
  * @throws \FlashSale\Http\Modules\Supplier\Models\Exception
  * @since 09-12-2015
  * @author Dinanath Thakur <*****@*****.**>
  */
 public function ajaxHandler(Request $request)
 {
     $objModelUser = User::getInstance();
     $objModelUsersmeta = Usersmeta::getInstance();
     $userId = Session::get('fs_supplier')['id'];
     $where['user_id'] = $userId;
     $usersMetaDetails = $objModelUsersmeta->getUsersMetaDetailsWhere($where);
     $field = $request->input('name');
     if ($field) {
         $formEditableMethod = explode('/', $field);
         $method = $formEditableMethod[0];
     } else {
         $method = $request->input('method');
     }
     $objLocationModel = Location::getInstance();
     $objshopModal = Shop::getInstance();
     $objshopMetadataModal = ShopMetadata::getInstance();
     switch ($method) {
         case 'checkContactNumber':
             $validator = Validator::make($request->all(), ['contact_number' => 'required|unique:usersmeta,phone,' . $usersMetaDetails->id]);
             if ($validator->fails()) {
                 echo json_encode(false);
             } else {
                 echo json_encode(true);
             }
             break;
         case 'updateProfileInfo':
             //NOT YET COMPLETE, NEED COUNTRY DETAILS
             $rules = array('first_name' => 'required|max:255', 'last_name' => 'required|max:255', 'city' => 'required', 'state' => 'required', 'zipcode' => 'required', 'country' => 'required', 'contact_number' => 'required|unique:usersmeta,phone,' . $usersMetaDetails->id);
             $validator = Validator::make($request->all(), $rules);
             if ($validator->fails()) {
                 echo json_encode(array('status' => 2, 'message' => $validator->messages()->all()));
             } else {
                 $whereForUpdate['id'] = $userId;
                 $updateData['name'] = $request->input('first_name');
                 $updateData['last_name'] = $request->input('last_name');
                 $updatedResult = $objModelUser->updateUserWhere($updateData, $whereForUpdate);
                 $updateMetaData['addressline1'] = $request->input('address_line_1');
                 $updateMetaData['addressline2'] = $request->input('address_line_2');
                 $updateMetaData['city'] = $request->input('city');
                 $updateMetaData['state'] = $request->input('state');
                 $updateMetaData['country'] = $request->input('country');
                 //COUNTRY DETAILS IN DATABASE
                 $updateMetaData['zipcode'] = $request->input('zipcode');
                 $updateMetaData['phone'] = $request->input('contact_number');
                 $whereForUpdateMetaData['id'] = $usersMetaDetails->id;
                 $updatedMetaDataResult = $objModelUsersmeta->updateUsersMetaDetailsWhere($updateMetaData, $whereForUpdateMetaData);
                 if ($updatedResult || $updatedMetaDataResult) {
                     echo json_encode(array('status' => 1, 'message' => 'Successfully updated profile data.'));
                 } else {
                     echo json_encode(array('status' => 0, 'message' => 'Nothing to update.'));
                 }
             }
             break;
         case 'updateAvatar':
             if (Input::hasFile('file')) {
                 $validator = Validator::make($request->all(), ['file' => 'image']);
                 if ($validator->fails()) {
                     echo json_encode(array('status' => 2, 'message' => $validator->messages()->all()));
                 } else {
                     $filePath = uploadImageToStoragePath(Input::file('file'), 'useravatar', 'useravatar_' . $userId . '_' . time() . ".jpg");
                     if ($filePath) {
                         $updateData['profilepic'] = $filePath;
                         $whereForUpdate['id'] = $userId;
                         $updatedResult = $objModelUser->updateUserWhere($updateData, $whereForUpdate);
                         if ($updatedResult) {
                             if (!strpos(Session::get('fs_supplier')['profilepic'], 'placeholder')) {
                                 deleteImageFromStoragePath(Session::get('fs_supplier')['profilepic']);
                             }
                             Session::put('fs_supplier.profilepic', $filePath);
                             echo json_encode(array('status' => 1, 'message' => 'Successfully updated profile image . '));
                         } else {
                             echo json_encode(array('status' => 0, 'message' => 'Something went wrong, please reload the page and try again.'));
                         }
                     } else {
                         echo json_encode(array('status' => 0, 'message' => 'Something went wrong, please reload the page and try again.'));
                     }
                 }
             } else {
                 echo json_encode(array('status' => 2, 'message' => 'Please select file first.'));
             }
             break;
         case 'updatePassword':
             Validator::extend('passwordCheck', function ($attribute, $value, $parameters) {
                 return Hash::check($value, Auth::user()->getAuthPassword());
             }, 'Your current password is incorrect . ');
             $passwordRules = array('current_password' => 'required | passwordCheck', 'new_password' => 'required', 'confirm_password' => 'required | same:new_password');
             $passwordValidator = Validator::make($request->all(), $passwordRules);
             if ($passwordValidator->fails()) {
                 echo json_encode(array('status' => 2, 'message' => $passwordValidator->messages()->all()));
             } else {
                 $user = Auth::user();
                 $user->password = Hash::make($request->input('new_password'));
                 $user->save();
                 echo json_encode(array('status' => 1, 'message' => 'Your password has been successfully updated . '));
             }
             break;
         case 'getState':
             $countryId = $request->input('countryId');
             $where = ['rawQuery' => 'is_visible =? and location_type =? and parent_id =?', 'bindParams' => [0, 1, $countryId]];
             $allstates = $objLocationModel->getAllLocationsWhere($where);
             echo json_encode($allstates);
             break;
         case 'getCity':
             $stateId = $request->input('stateId');
             $where = ['rawQuery' => 'is_visible =? and location_type =? and parent_id =?', 'bindParams' => [0, 2, $stateId]];
             $allcities = $objLocationModel->getAllLocationsWhere($where);
             echo json_encode($allcities);
             break;
         case 'available_Shop':
             $available_Shops = $objshopModal->getAvailableShopDetails($userId);
             //echo "<pre>";print_r($available_Shops);die;
             return Datatables::of($available_Shops)->addColumn('action', function ($available_Shops) {
                 return '<span class="tooltips" title="Edit Shop Details." data-placement="top"> <a href="/supplier/editShop/' . $available_Shops->shop_id . '" class="btn btn-sm grey-cascade">
                                                 <i class="fa fa-pencil-square-o"></i>
                                             </a>
                                         </span> &nbsp;&nbsp;
                                         ';
             })->addColumn('status', function ($available_Shops) {
                 $button = '<td style="text-align: center">';
                 $button .= '<button class="btn ' . ($available_Shops->shop_status == "1" || $available_Shops->shop_status == "2" ? $available_Shops->shop_status == "1" ? "btn-success" : "btn-danger" : "btn-default") . ' customer-status" data-id="' . $available_Shops->shop_id . '"' . ($available_Shops->shop_status == "0" || $available_Shops->shop_status == "3" ? "disabled" : "") . '>' . ($available_Shops->shop_status == "1" || $available_Shops->shop_status == "2" ? $available_Shops->shop_status == "1" ? "Active" : "Inactive" : ($available_Shops->shop_status == "0" ? "Pending" : "Rejected")) . ' </button>';
                 $button .= '</td>';
                 return $button;
             })->removeColumn('shop_status')->make();
             break;
         case 'changeShopStatus':
             $Shop_Id = $request->input('ShopId');
             $Status = $request->input('status');
             $data1['shop_status'] = $Status;
             $where1 = ['rawQuery' => 'shop_id =? ', 'bindParams' => [$Shop_Id]];
             $updateResult = $objshopModal->updateShopWhere($data1, $where1);
             if ($updateResult) {
                 echo json_encode(['status' => 'success', 'msg' => 'Status has been changed.']);
             } else {
                 echo json_encode(['status' => 'error', 'msg' => 'Something went wrong, please reload the page and try again.']);
             }
             break;
         case 'updateStoreDetails':
             $field = $request->input('name');
             $field = explode('/', $field);
             $fieldName = $field[1];
             $store_metadata_id = $request->input('pk');
             $value = $request->input('value');
             $shopFlag = true;
             $data = array($fieldName => $value);
             //                echo "<pre>";print_r($store_metadata_id);die;
             if ($fieldName == 'shop_type' && $value == '0') {
                 //change shop_type to main
                 $merchantId = $field[2];
                 $shopId = $field[3];
                 $whereforShop = ['rawQuery' => 'shop_id =?', 'bindParams' => [$shopId]];
                 $data1 = array('shop_type' => 1);
                 $updateStoreType = $objshopMetadataModal->updateShopMetadataWhere($data1, $whereforShop);
             }
             if ($fieldName == 'shop_type' && $value == '1') {
                 //change shop_type to secondary
                 $merchantId = $field[2];
                 $shopId = $field[3];
                 $whereforShop = ['rawQuery' => 'shop_id =? and shop_metadata_id != ?', 'bindParams' => [$shopId, $store_metadata_id]];
                 $merchantStoreDetails = $objshopMetadataModal->getAllshopsMetadataWhere($whereforShop);
                 if (!empty($merchantStoreDetails)) {
                     $dataforstype = array('shop_type' => 0);
                     $whereforShopt = ['rawQuery' => 'shop_id =? and shop_metadata_id = ?', 'bindParams' => [$merchantStoreDetails[0]->shop_id, $merchantStoreDetails[0]->shop_metadata_id]];
                     $merchantStoreDetails = $objshopMetadataModal->updateShopMetadataWhere($dataforstype, $whereforShopt);
                 } else {
                     $shopFlag = false;
                     echo json_encode("You cant change main shop to secondary");
                     break;
                 }
             }
             if ($shopFlag) {
                 $whereforShopMeta = ['rawQuery' => 'shop_metadata_id =?', 'bindParams' => [$store_metadata_id]];
                 $updateResult = $objshopMetadataModal->updateShopMetadataWhere($data, $whereforShopMeta);
                 if ($updateResult) {
                     echo json_encode($updateResult);
                 }
             }
             break;
         case 'updateShopBanner':
             $shop_id = $request->input('shop_id');
             $whereforShop = ['rawQuery' => 'shop_id =? ', 'bindParams' => [$shop_id]];
             $selectedColumns = array('shop_id', 'shop_banner');
             $shopDetails = $objshopModal->getAllshopsWhere($whereforShop, $selectedColumns);
             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");
             }
             $shopdata = array('shop_banner' => $bannerFilePath);
             $updateBanner = $objshopModal->updateShopWhere($shopdata, $whereforShop);
             if ($updateBanner) {
                 deleteImageFromStoragePath($shopDetails[0]->shop_banner);
                 echo json_encode($updateBanner);
             }
             break;
         case 'updateShopLogo':
             $shop_id = $request->input('shop_id');
             $whereforShop = ['rawQuery' => 'shop_id =? ', 'bindParams' => [$shop_id]];
             $selectedColumns = array('shop_id', 'shop_logo');
             $shopDetails = $objshopModal->getAllshopsWhere($whereforShop, $selectedColumns);
             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");
             }
             $shopdata = array('shop_logo' => $logoFilePath);
             $updatelogo = $objshopModal->updateShopWhere($shopdata, $whereforShop);
             if ($updatelogo) {
                 deleteImageFromStoragePath($shopDetails[0]->shop_logo);
                 echo json_encode($updatelogo);
             }
             break;
         case 'updateSellerShop':
             $field = $request->input('name');
             $fieldName = explode('/', $field);
             $fieldName = $fieldName[1];
             $shop_id = $request->input('pk');
             $value = $request->input('value');
             $data = array($fieldName => $value);
             $whereforShop = ['rawQuery' => 'shop_id =? ', 'bindParams' => [$shop_id]];
             $updateResult = $objshopModal->updateShopWhere($data, $whereforShop);
             if ($updateResult) {
                 echo json_encode($updateResult);
             }
             break;
         case 'updateShopStatus':
             $shopMetaId = $request->input('shopMetaId');
             $status = $request->input('value');
             $supplierId = $request->input('supplierId');
             $data = array('sm_status_set_by' => $supplierId, 'shop_metadata_status' => $status);
             $whereforShopMeta = ['rawQuery' => 'shop_metadata_id =? ', 'bindParams' => [$shopMetaId]];
             $updateResult = $objshopMetadataModal->updateShopMetadataWhere($data, $whereforShopMeta);
             if ($updateResult) {
                 echo json_encode($updateResult);
             }
             break;
         default:
             break;
     }
 }
 public function ajaxHandler(Request $request)
 {
     $objModelUser = User::getInstance();
     $objModelUsersmeta = Usersmeta::getInstance();
     $userId = Session::get('fs_supplier')['id'];
     $where['user_id'] = $userId;
     $usersMetaDetails = $objModelUsersmeta->getUsersMetaDetailsWhere($where);
     $method = $request->input('method');
     switch ($method) {
         case 'checkContactNumber':
             $validator = Validator::make($request->all(), ['contact_number' => 'required|unique:usersmeta,phone,' . $usersMetaDetails->id]);
             if ($validator->fails()) {
                 echo json_encode(false);
             } else {
                 echo json_encode(true);
             }
             break;
         case 'updateProfileInfo':
             //NOT YET COMPLETE, NEED COUNTRY DETAILS
             $rules = array('first_name' => 'required|max:255', 'last_name' => 'required|max:255', 'city' => 'required', 'state' => 'required', 'zipcode' => 'required', 'country' => 'required', 'contact_number' => 'required|unique:usersmeta,phone,' . $usersMetaDetails->id);
             $validator = Validator::make($request->all(), $rules);
             if ($validator->fails()) {
                 echo json_encode(array('status' => 2, 'message' => $validator->messages()->all()));
             } else {
                 $whereForUpdate['id'] = $userId;
                 $updateData['name'] = $request->input('first_name');
                 $updateData['last_name'] = $request->input('last_name');
                 $updatedResult = $objModelUser->updateUserWhere($updateData, $whereForUpdate);
                 $updateMetaData['addressline1'] = $request->input('address_line_1');
                 $updateMetaData['addressline2'] = $request->input('address_line_2');
                 $updateMetaData['city'] = $request->input('city');
                 $updateMetaData['state'] = $request->input('state');
                 $updateMetaData['country'] = $request->input('country');
                 //COUNTRY DETAILS IN DATABASE
                 $updateMetaData['zipcode'] = $request->input('zipcode');
                 $updateMetaData['phone'] = $request->input('contact_number');
                 $whereForUpdateMetaData['id'] = $usersMetaDetails->id;
                 $updatedMetaDataResult = $objModelUsersmeta->updateUsersMetaDetailsWhere($updateMetaData, $whereForUpdateMetaData);
                 if ($updatedResult || $updatedMetaDataResult) {
                     echo json_encode(array('status' => 1, 'message' => 'Successfully updated profile data.'));
                 } else {
                     echo json_encode(array('status' => 0, 'message' => 'Nothing to update.'));
                 }
             }
             break;
         case 'updateAvatar':
             if (Input::hasFile('file')) {
                 $validator = Validator::make($request->all(), ['file' => 'image']);
                 if ($validator->fails()) {
                     echo json_encode(array('status' => 2, 'message' => $validator->messages()->all()));
                 } else {
                     $destinationPath = 'uploads/useravatar/';
                     $filename = $userId . '_' . time() . ".jpg";
                     File::makeDirectory(storage_path($destinationPath), 0777, true, true);
                     //                        $filePath = '/' . $destinationPath . $filename;
                     $filePath = "useravatar_" . $filename;
                     $fileval = '/' . $destinationPath . $filePath;
                     //                         echo"<pre>";print_r($filePath);die("fch");
                     //                        $filtemp = 'uploads_useravatar_' . $filename;
                     $quality = $this->imageQuality(Input::file('file'));
                     Image::make(Input::file('file'))->resize($this->imageWidth, $this->imageHeight, function ($constraint) {
                         $constraint->aspectRatio();
                     })->save(storage_path($destinationPath . $filePath), $quality);
                     $whereForUpdate['id'] = $userId;
                     $updateData['profilepic'] = $filePath;
                     // echo"<pre>";print_r($updateData);die("xcgf");
                     $updatedResult = $objModelUser->updateUserWhere($updateData, $whereForUpdate);
                     if ($updatedResult) {
                         if (!strpos(Session::get('fs_supplier')['profilepic'], 'placeholder')) {
                             File::delete(storage_path() . Session::get('fs_supplier')['profilepic']);
                         }
                         //                            $path = storage_path().$filePath ;
                         //                            echo"<pre>";print_r($path);die("fch");
                         Session::put('fs_supplier . profilepic', $filePath);
                         echo json_encode(array('status' => 1, 'message' => 'Successfully updated profile image . '));
                     } else {
                         echo json_encode(array('status' => 0, 'message' => 'Something went wrong, please reload the page and try again . '));
                     }
                 }
             } else {
                 echo json_encode(array('status' => 2, 'message' => 'Please select file first . '));
             }
             break;
         case 'updatePassword':
             Validator::extend('passwordCheck', function ($attribute, $value, $parameters) {
                 return Hash::check($value, Auth::user()->getAuthPassword());
             }, 'Your current password is incorrect . ');
             $passwordRules = array('current_password' => 'required | passwordCheck', 'new_password' => 'required', 'confirm_password' => 'required | same:new_password');
             $passwordValidator = Validator::make($request->all(), $passwordRules);
             if ($passwordValidator->fails()) {
                 echo json_encode(array('status' => 2, 'message' => $passwordValidator->messages()->all()));
             } else {
                 $user = Auth::user();
                 $user->password = Hash::make($request->input('new_password'));
                 $user->save();
                 echo json_encode(array('status' => 1, 'message' => 'Your password has been successfully updated . '));
             }
             break;
         default:
             break;
     }
 }