예제 #1
0
 public function actionSerachMiles()
 {
     $companyServiceSum = array();
     $sumCompanyAdnlser = array();
     $sumadminAdnlser = array();
     // code to get the miles
     /*$theta = $lon1 - $lon2;
       $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) +  cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
       $dist = acos($dist);
       $dist = rad2deg($dist);
       $miles = $dist * 60 * 1.1515;
       */
     //echo "<pre>";print_r($_REQUEST);die;
     $requestCleaningPage = Yii::app()->session['CleaningReqst'];
     //echo "<pre>";print_r($request['Cleaning']);die;
     $ses = Yii::app()->session['CleaningDetail'];
     //echo "<pre>";print_r($ses);die;
     $serTypeId = Yii::app()->session['ServiceTypeId'];
     $zip = $ses['CleaningTime']['PostCode'];
     $cleaningDate = $ses['CleaningTime']['CleaningDate'];
     $time = $ses['CleaningTime']['time'];
     // code to calculate the postcodes within radius
     //echo "<pre>";print_r($_REQUEST);die;
     if (isset($_REQUEST['Cleaning']) && is_array($_REQUEST['Cleaning'])) {
         if (key_exists('Property', $_REQUEST['Cleaning'])) {
             $property = $_REQUEST['Cleaning']['Property'];
         } else {
             $property = '';
         }
         $baths = $_REQUEST['Cleaning']['Bathrooms'];
         $beds = $_REQUEST['Cleaning']['Bedrooms'];
     }
     // get the customer lat and long from where we want to calculate other postcodes
     $recUk = UkPostcodes::model()->findByPk($zip);
     $r = 3959;
     //earth radius in miles
     //$d=5.6;
     $d = $_REQUEST['mile'];
     //$d=$_REQUEST['mile']*60*1.1515;
     $c = count($recUk);
     if ($c > 0) {
         $lat1 = $recUk->latitude;
         $lon1 = $recUk->longitude;
         $nlat1 = deg2rad($lat1);
         $nlon1 = deg2rad($lon1);
         $latN = rad2deg(asin(sin(deg2rad($lat1)) * cos($d / $r) + cos(deg2rad($lat1)) * sin($d / $r) * cos(deg2rad(0))));
         $latS = rad2deg(asin(sin(deg2rad($lat1)) * cos($d / $r) + cos(deg2rad($lat1)) * sin($d / $r) * cos(deg2rad(180))));
         $lonE = rad2deg(deg2rad($lon1) + atan2(sin(deg2rad(90)) * sin($d / $r) * cos(deg2rad($lat1)), cos($d / $r) - sin(deg2rad($lat1)) * sin(deg2rad($latN))));
         $lonW = rad2deg(deg2rad($lon1) + atan2(sin(deg2rad(270)) * sin($d / $r) * cos(deg2rad($lat1)), cos($d / $r) - sin(deg2rad($lat1)) * sin(deg2rad($latN))));
         $query = "SELECT * from ccobs_service_user WHERE (lat <= {$latN} AND lat >= {$latS} AND longitude <= {$lonE} AND longitude >= {$lonW}) AND (lat != {$lat1} AND longitude != {$lon1}) AND city != ' ' ORDER BY   lat, longitude ";
         $dataReader = Yii::app()->db->createCommand($query)->query();
         $res = $dataReader->readAll();
         if (!empty($res)) {
             foreach ($res as $i => $noOfUsers) {
                 $noUsrId[] = $noOfUsers['id'];
                 //$compNam[]=$noOfUsers['company_name'];
                 $compNam[] = $noOfUsers['company_name'] . "+" . $noOfUsers['id'];
                 $latitude[] = $noOfUsers['lat'];
                 $longitude[] = $noOfUsers['longitude'];
                 $nlatitude = deg2rad($noOfUsers['lat']);
                 $nlongitude = deg2rad($noOfUsers['longitude']);
                 $delta_lat = $nlatitude - $nlat1;
                 $delta_lon = $nlongitude - $nlon1;
                 $temp = pow(sin($delta_lat / 2.0), 2) + cos($nlatitude) * cos($lat1) * pow(sin($delta_lon / 2.0), 2);
                 $EARTH_RADIUS = 3956;
                 $distance[] = $EARTH_RADIUS * 2 * atan2(sqrt($temp), sqrt(1 - $temp));
                 $compName = array_combine($distance, $compNam);
                 //$compName=array_combine($distance);
             }
             //echo "<pre>";print_r($compName);die;
             /* calculate the new price for updated fields here*/
             //echo $serTypeId;die;
             foreach ($res as $nearbycomp) {
                 $serviceTypePrice = PriceAdmin::model()->findAll(array('condition' => 'service_id=:service_id AND service_type_id=:service_type_id', 'params' => array(':service_id' => $nearbycomp['id'], ':service_type_id' => $serTypeId)));
                 foreach ($serviceTypePrice as $serP) {
                     $array[$serP['service_id']] = array('Bedrooms' => $serP['bedroom'], 'Bathrooms' => $serP['bathroom'], 'LivingRoom' => $serP['living_room'], 'KitchenStaircases' => $serP['kitchen_staircases'], 'CarpetsInteriorWindows' => $serP['carpets_interior_windows'], 'Property' => $serP['property'], 'Desk' => $serP['desk'], 'Cupboards' => $serP['cupboards'], 'Kitchen' => $serP['kitchen'], 'Staircases' => $serP['staircases'], 'Elevator' => $serP['elevator']);
                 }
                 $providerAdnlPrice = ProviderAdditionalprices::model()->findAll(array('condition' => 'service_id=:service_id AND service_type_id=:service_type_id', 'params' => array(':service_id' => $nearbycomp['id'], ':service_type_id' => $serTypeId)));
                 foreach ($providerAdnlPrice as $servicePro) {
                     $getIdSerTyAdnlPrice[$servicePro['service_id']][$servicePro['servicetype_additional_id']] = $servicePro['provider_adnlprice'];
                 }
                 //echo "<pre>";print_r($providerAdnlPrice);
             }
             //die;
             //echo "<pre>";print_r($getIdSerTyAdnlPrice);die;
             //price calculation for service types starts here
             foreach ($array as $companyId => $values) {
                 if (!empty($request['Cleaning'])) {
                     foreach ($request['Cleaning'] as $service => $number) {
                         $serviceVal = $values[$service];
                         $companyServiceSum[$companyId] += $number * $serviceVal;
                     }
                 } else {
                     //echo "<pre>";print_r($requestCleaningPage);die;
                     foreach ($requestCleaningPage['Cleaning'] as $service => $number) {
                         $serviceVal = $values[$service];
                         if (key_exists($companyId, $companyServiceSum)) {
                             $companyServiceSum[$companyId] += $number * $serviceVal;
                         }
                     }
                 }
             }
             //price calculation for service types ends here
             //echo "<pre>";print_r($_REQUEST);
             //echo "<pre>";print_r($getIdSerTyAdnlPrice);
             //echo "<pre>";print_r($companyServiceSum);
             //price calculation for additionl service having price added by company
             foreach ($getIdSerTyAdnlPrice as $cmpnyId => $priceCompAdnl) {
                 //$companyId[]=$cmpnyId;
                 if (!empty($request['Additional'])) {
                     foreach ($request['Additional'] as $key => $value) {
                         $adnlvalues = $priceCompAdnl[$key];
                         //echo "<pre>";print_r($key);
                         if (key_exists($cmpnyId, $sumCompanyAdnlser)) {
                             $sumCompanyAdnlser[$cmpnyId] += $value * $adnlvalues;
                         }
                     }
                 } else {
                     foreach ($requestCleaningPage['Additional'] as $key => $value) {
                         $adnlvalues = $priceCompAdnl[$key];
                         //echo "<pre>";print_r($key);
                         if (key_exists($cmpnyId, $sumCompanyAdnlser)) {
                             $sumCompanyAdnlser[$cmpnyId] += $value * $adnlvalues;
                         }
                     }
                 }
             }
             //echo "<pre>";print_r($sumCompanyAdnlser);
             //price calculation for additional service having price added by company
             $serTypel = ServicetypeAdditionalservices::model()->findAll(array('condition' => 'service_type_id=:service_type_id', 'params' => array(':service_type_id' => $serTypeId)));
             foreach ($res as $nearbycomp) {
                 foreach ($serTypel as $priceAdnlAdmin) {
                     //if($nearbycomp['id']!=)
                     $admnAdnlPrice[$nearbycomp['id']][$priceAdnlAdmin['id']] = $priceAdnlAdmin['additional_service_price'];
                 }
             }
             // echo $companyId;die;
             //echo "<pre>";print_r($admnAdnlPrice);die;
             //echo "<pre>";print_r($serTypel);die;
             foreach ($admnAdnlPrice as $Id => $priceAdminAdnl) {
                 //$companyId[]=$cmpnyId;
                 if (!empty($request['Additional'])) {
                     foreach ($request['Additional'] as $sky => $v) {
                         $adminadnlvalues = $priceAdminAdnl[$sky];
                         //echo "<pre>";print_r($key);
                         if (key_exists($Id, $sumadminAdnlser)) {
                             $sumadminAdnlser[$Id] += $v * $adminadnlvalues;
                         }
                     }
                 } else {
                     foreach ($requestCleaningPage['Additional'] as $sky => $v) {
                         $adminadnlvalues = $priceAdminAdnl[$sky];
                         //echo "<pre>";print_r($key);
                         if (key_exists($Id, $sumadminAdnlser)) {
                             $sumadminAdnlser[$Id] += $v * $adminadnlvalues;
                         }
                     }
                 }
             }
             //echo "<pre>";print_r($sumadminAdnlser);die;
             $finalAdnlvalues = array_replace($sumadminAdnlser, $sumCompanyAdnlser);
             // code to sum the service types and additional service
             $sums = array();
             foreach (array_keys($companyServiceSum + $finalAdnlvalues) as $key) {
                 $sums[$key] = (isset($companyServiceSum[$key]) ? $companyServiceSum[$key] : 0) + (isset($finalAdnlvalues[$key]) ? $finalAdnlvalues[$key] : 0);
             }
             //echo "<pre>";print_r($sums);
             //get the price for per mile
             $dist = DistanceCoverage::model()->findAll();
             foreach ($dist as $dkey => $dprice) {
                 $distprice[$dprice['service_id']] = $dprice['price_per_mile'];
             }
             $total = array();
             foreach (array_keys($sums + $distprice) as $k) {
                 $total[$k] = (isset($sums[$k]) ? $sums[$k] : 0) + (isset($distprice[$k]) ? $distprice[$k] : 0);
             }
             //echo "<pre>";print_r($total);die;
             // code to get the rating
             foreach ($compName as $ratingIds) {
                 $serIds = explode('+', $ratingIds);
                 $rateIds[] = $serIds['1'];
                 //echo "<pre>";print_r($rateIds);
             }
             //die;
             foreach ($rateIds as $ratingId) {
                 //echo "<pre>";print_r($ratingId);
                 $ratingsreview[$ratingId] = ServiceReview::model()->findAll(array("select" => "rating", 'condition' => 'service_id=:service_id', 'params' => array(':service_id' => $ratingId)));
                 // echo "<pre>";print_r($review);
             }
             //die;
             $res12 = array_combine($rateIds, $ratingsreview);
             //echo "<pre>";print_r($res12);
             $sumArrayRatingAvg = array();
             foreach ($res12 as $k1 => $sub) {
                 foreach ($sub as $id => $value) {
                     if (key_exists($k1, $sumArrayRatingAvg)) {
                         $sumArrayRatingAvg[$k1] += $value['rating'];
                     }
                 }
                 if (count($res12[$k1]) && key_exists($k1, $sumArrayRatingAvg)) {
                     $sumArrayRatingAvg[$k1] /= count($res12[$k1]);
                 }
             }
             //echo "<pre>";print_r($companyServiceSum);
             //echo "<pre>";print_r($finalAdnlvalues);
             // echo "<pre>";print_r($withinrange);
             //echo "<pre>";print_r($sums);die;
             /*calculate the price for updated fields ends here*/
             $this->renderPartial('miles', array('sums' => $total, 'CompanyName' => $compName, 'd' => $d, 'sumArrayRatingAvg' => $sumArrayRatingAvg, 'requestCleaningPage' => $requestCleaningPage));
             //echo $d;die;
         } else {
             $d = $_REQUEST['mile'];
             $this->renderPartial('milesEmpty', array('d' => $d));
         }
     } else {
         $d = $_REQUEST['mile'];
         $this->renderPartial('milesEmpty', array('d' => $d));
     }
 }
예제 #2
0
 public function actionSaveAdnlPriceCompany()
 {
     //echo "<pre>";print_r($_REQUEST);die;
     $loggedId = Yii::app()->session['loggedId'];
     $proPrice = ProviderAdditionalprices::model()->findAll(array('condition' => 'service_id=:service_id AND service_type_id=:service_type_id ', 'params' => array(':service_id' => $loggedId, ':service_type_id' => $_REQUEST['type'])));
     if (empty($proPrice)) {
         foreach ($_REQUEST['ServicetypeAdditionalservices'] as $k => $value) {
             $proadnlPrice = new ProviderAdditionalprices();
             $proadnlPrice->date = date('Y-m-d');
             $proadnlPrice->service_id = $loggedId;
             $proadnlPrice->service_type_id = $_REQUEST['type'];
             $proadnlPrice->servicetype_additional_id = $k;
             $proadnlPrice->provider_adnlprice = $value;
             $proadnlPrice->provideradditional_service_name = $proadnlPrice->servicetypeAdditional['additional_service_name'];
             $proadnlPrice->save(false);
         }
         echo "success1";
         die;
     } else {
         //echo "<pre>";print_r($_REQUEST['ServicetypeAdditionalservices']);die;
         foreach ($proPrice as $price) {
             $serviceTypeId = $price['servicetype_additional_id'];
             $newVal = $_REQUEST['ServicetypeAdditionalservices'][$serviceTypeId];
             $price->provider_adnlprice = $newVal;
             $price->save(false);
         }
         echo "success";
         die;
     }
 }