Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- class Webkul_Mpperproductshipping_Model_Carrier_LocalDelivery extends Mage_Shipping_Model_Carrier_Abstract
- {
- /* Use group alias */
- protected $_code = 'mpperproductshipping';
- public function collectRates(Mage_Shipping_Model_Rate_Request $request){
- //skip if not enabled
- $postCode = $request->setDestPostcode();
- $restrictedCodes = array(1); //restricted values. they can come from anywhere
- if (in_array($postCode, $restrictedCodes)) {
- return false;
- }
- if (!Mage::getStoreConfig('carriers/'.$this->_code.'/active')||Mage::getStoreConfig('carriers/mp_multi_shipping/active')){
- return false;
- }
- $result = Mage::getModel('shipping/rate_result');
- $session = Mage::getSingleton('checkout/session');
- $postcode=$session->getQuote()->getShippingAddress()->getPostcode();
- $countrycode=$session->getQuote()->getShippingAddress()->getCountry();
- $postcode=str_replace('-', '', $postcode);
- $shippingdetail=array();
- $shippostaldetail=array('countrycode'=>$countrycode,'postalcode'=>$postcode);
- /****/
- foreach($session->getQuote()->getAllVisibleItems() as $item) {
- $proid=$item->getProductId();
- $options=$item->getProductOptions();
- $mpassignproductId=$options['info_buyRequest']['mpassignproduct_id'];
- if(!$mpassignproductId) {
- foreach($item->getOptions() as $option) {
- $temp=unserialize($option['value']);
- if($temp['mpassignproduct_id']) {
- $mpassignproductId=$temp['mpassignproduct_id'];
- }
- }
- }
- if($mpassignproductId) {
- $mpassignModel = Mage::getModel('mpassignproduct/mpassignproduct')->load($mpassignproductId);
- $partner = $mpassignModel->getSellerId();
- } else {
- $collection=Mage::getModel('marketplace/product')
- ->getCollection()->addFieldToFilter('mageproductid',array('eq'=>$proid));
- foreach($collection as $temp) {
- $partner=$temp->getUserid();
- }
- }
- $product=Mage::getModel('catalog/product')->load($proid)->getWeight();
- $weight=$product*$item->getQty();
- if(count($shippingdetail)==0){
- array_push($shippingdetail,array('seller_id'=>$partner,'items_weight'=>$weight,'product_name'=>$item->getName(),'qty'=>$item->getQty(),'item_id'=>$item->getId()));
- }else{
- $shipinfoflag=true;
- $index=0;
- foreach($shippingdetail as $itemship){
- if($itemship['seller_id']==$partner){
- $itemship['items_weight']=$itemship['items_weight']+$weight;
- $itemship['product_name']=$itemship['product_name'].",".$item->getName();
- $itemship['item_id']=$itemship['item_id'].",".$item->getId();
- $itemship['qty']=$itemship['qty']+$item->getQty();
- $shippingdetail[$index]=$itemship;
- $shipinfoflag=false;
- }
- $index++;
- }
- if($shipinfoflag==true){
- array_push($shippingdetail,array('seller_id'=>$partner,'items_weight'=>$weight,'product_name'=>$item->getName(),'qty'=>$item->getQty(),'item_id'=>$item->getId()));
- }
- }
- }
- $shippingpricedetail=$this->getShippingPricedetail($shippingdetail,$shippostaldetail);
- if($shippingpricedetail['errormsg']!==""){
- Mage::getSingleton('core/session')->setShippingCustomError($shippingpricedetail['errormsg']);
- return $result;
- }
- /*store shipping in session*/
- $shippingAll=Mage::getSingleton('core/session')->getData('shippinginfo');
- $shippingAll[$this->_code]=$shippingpricedetail['shippinginfo'];
- Mage::getSingleton('core/session')->setData('shippinginfo',$shippingAll);
- $method = Mage::getModel('shipping/rate_result_method');
- $method->setCarrier($this->_code);
- $method->setCarrierTitle(Mage::getStoreConfig('carriers/'.$this->_code.'/title'));
- /* Use method name */
- $method->setMethod($this->_code);
- $method->setMethodTitle(Mage::getStoreConfig('carriers/'.$this->_code.'/name'));
- $method->setCost($shippingpricedetail['handlingfee']);
- $method->setPrice($shippingpricedetail['handlingfee']);
- $result->append($method);
- return $result;
- }
- public function getShippingPricedetail($shippingdetail,$shippostaldetail) {
- $shippinginfo=array();
- $handling=0;
- $session = Mage::getSingleton('checkout/session');
- $customerAddress = $session->getQuote()->getShippingAddress();
- foreach($shippingdetail as $shipdetail) {
- $seller = Mage::getModel("customer/customer")->load($shipdetail['seller_id']);
- $sellerAddress = $seller->getPrimaryShippingAddress();
- $distance = $this->getDistanse($sellerAddress->getPostcode(),$customerAddress->getPostcode());
- $price = 0;
- $itemsarray=explode(',',$shipdetail['item_id']);
- foreach($session->getQuote()->getAllItems() as $item) {
- $proid=$item->getProductId();
- $options=$item->getProductOptions();
- $mpassignproductId=$options['info_buyRequest']['mpassignproduct_id'];
- if(!$mpassignproductId) {
- foreach($item->getOptions() as $option) {
- $temp=unserialize($option['value']);
- if($temp['mpassignproduct_id']) {
- $mpassignproductId=$temp['mpassignproduct_id'];
- }
- }
- }
- $mpshippingcharge = 0;
- $localDistance = Mage::getStoreConfig('marketplace/mpperproductshipping/local_shipping_distance');
- $regionalDistance = Mage::getStoreConfig('marketplace/mpperproductshipping/regional_shipping_distance');
- $stateDistance = Mage::getStoreConfig('marketplace/mpperproductshipping/state_shipping_distance');
- if(in_array($item->getId(),$itemsarray)) {
- if($mpassignproductId) {
- if($distance < $localDistance) {
- $mpshippingcharge=Mage::getModel('mpassignproduct/mpassignproduct')->load($mpassignproductId)->getLocalShippingCharge();
- } elseif($distance > $localDistance && $distance < $regionalDistance) {
- $mpshippingcharge=Mage::getModel('mpassignproduct/mpassignproduct')->load($mpassignproductId)->getRegionalShippingCharge();
- } elseif($distance > $regionalDistance) {
- $mpshippingcharge=Mage::getModel('mpassignproduct/mpassignproduct')->load($mpassignproductId)->getStateShippingCharge();
- }
- } else {
- if($distance < $localDistance) {
- $mpshippingcharge=Mage::getModel('catalog/product')->load($item->getProductId())->getMpLocalShippingCharge();
- } elseif($distance > $localDistance && $distance < $regionalDistance) {
- $mpshippingcharge=Mage::getModel('catalog/product')->load($item->getProductId())->getMpRegionalShippingCharge();
- } elseif($distance > $regionalDistance) {
- $mpshippingcharge=Mage::getModel('catalog/product')->load($item->getProductId())->getMpStateShippingCharge();
- }
- }
- if(floatval($mpshippingcharge)==0){
- $price=$price+floatval($this->getConfigData('defalt_ship_amount'));
- }else{
- $price=$price+$mpshippingcharge;
- }
- }
- }
- $handling = $handling+$price;
- $submethod = array(array('method'=>Mage::getStoreConfig('carriers/'.$this->_code.'/title'),'cost'=>$price,'error'=>0));
- array_push($shippinginfo,array('seller_id'=>$shipdetail['seller_id'],'methodcode'=>$this->_code,'shipping_ammount'=>$price,'product_name'=>$shipdetail['product_name'],'submethod'=>$submethod,'item_ids'=>$shipdetail['item_id']));
- }
- $msg="";
- return array('handlingfee'=>$handling,'shippinginfo'=>$shippinginfo,'errormsg'=>$msg);
- }
- private function getDistanse($origin,$destination) {
- $url = "http://maps.googleapis.com/maps/api/distancematrix/json?origins=".$origin.",india&destinations=".$destination.",india&mode=driving&language=en-EN&sensor=false";
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
- curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
- $response = curl_exec($ch);
- curl_close($ch);
- $response_all = json_decode($response);
- $distance = $response_all->rows[0]->elements[0]->distance->value / 1000;
- return $distance;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement