Question

I am trying to use magmi to import group and tier pricing for the not logged in group and am not sure what the format is for my csv headers or where to find it.

I have successfully used group and tier price imports with magmi on all (sku,price,tier_price:_all_), none (sku,group_price:None,tier_price:None) and other custom groups I have. A (sku,group_price:A,tier_price:A), B (sku,group_price:B,tier_price:B) and so on.

It is just the formatting for not logged in I can't figure out and I can't seem to find anything on it in the documentation.

Here is what I have tried so far.

  • sku,group_price:NOT LOGGED IN,tier_price:NOT LOGGED IN
  • sku,group_price:'NOT LOGGED IN',tier_price:'NOT LOGGED IN'
  • sku,group_price:_not_,tier_price:_not_
  • sku,group_price:General,tier_price:General

Any ideas?

Was it helpful?

Solution 2

I found out from further testing that the tier pricing magmi plugin worked just fine with the above csv format. the original plugin I got to work with some code change but then decided to check for an update.

While searching I found an alternate magmi plugin for the group price importer and it worked.

Replace the current file in the magmi/plugins/extra/itemprocessors/groupprice folder with this one.

Here is the website found at if you would like to see more info.

OTHER TIPS

yes it is works.. create directory /var/www/html/../magmi/plugins/extra/itemprocessors/groupprice 
put this grouppriceprocessor.php on this directory , 
select this profile in magmi .. group_price:NOT LOGGED IN
this is header in csv file put value for this and it works .. 

code of grouppriceprocessor.php  

    <?php
/**
 * Class Tier price processor
 * @author dweeves
 *
 * This imports tier prices for columns names called "group_price:"
 */
class GrouppriceProcessor extends Magmi_ItemProcessor
{
    protected $_tpcol=array();
    protected $_singlestore=0;
    protected $__pricescope=2;

    public function getPluginInfo()
    {
        return array(
            "name" => "Group price importer",
            "author" => "Dweeves,bepixeld,Jason",
            "version" => "0.0.1",
            );
    }

    /**
     * you can add/remove columns for the item passed since it is passed by reference
     * @param Magmi_Engine $mmi : reference to magmi engine instance (convenient to perform database operations)
     * @param unknown_type $item : modifiable reference to item before import
     * the $item is a key/value array with column names as keys and values as read from csv file.
     * @return bool :
     *      true if you want the item to be imported after your custom processing
     *      false if you want to skip item import after your processing
     */



    public function processItemAfterId(&$item,$params=null)
    {

        $pid=$params["product_id"];

        $tpn=$this->tablename("catalog_product_entity_group_price");
        $tpcol=array_intersect(array_keys($this->_tpcol),array_keys($item));
        //do nothing if item has no group price info or has not change
        if(count($tpcol)==0  )
        {
            return true;
        }
        else
        {

         //it seems that magento does not handle "per website" tier price on single store deployments , so force it to "default"
          //so we test wether we have single store deployment or not.
          //bepixeld patch : check pricescope from general config
          if($this->_singlestore==0 && $this->_pricescope!=0)
          {
            $wsids=$this->getItemWebsites($item);
          }
          else
          {
            $wsids=array(0);
          }
          $wsstr=$this->arr2values($wsids);
            //clear all existing tier price info for existing customer groups in csv
           $cgids=array();
            foreach($tpcol as $k)
            {
                $tpinf=$this->_tpcol[$k];
                if($tpinf["id"]!=null)
                {
                    $cgids[]=$tpinf["id"];
                }
                else
                {
                    $cgids=array();
                    break;
                }

            }

            //if we have specific customer groups
            if(count($cgids)>0)
            {
                //delete only for thos customer groups
                $instr=$this->arr2values($cgids);

                //clear tier prices for selected tier price columns
                $sql="DELETE FROM $tpn WHERE entity_id=? AND customer_group_id IN ($instr) AND website_id IN ($wsstr)";
                $this->delete($sql,array_merge(array($pid),$cgids,$wsids));
            }
            else
            {
                //delete for all customer groups
                $sql="DELETE FROM $tpn WHERE entity_id=? AND website_id IN ($wsstr)";
                $this->delete($sql,array_merge(array($pid),$wsids));
            }
        }

        foreach($tpcol as $k)
        {

        //get tier price column info
          $tpinf=$this->_tpcol[$k];
          //now we've got a customer group id
          $cgid=$tpinf["id"];
          //add tier price
          $sql="INSERT INTO $tpn
            (entity_id,all_groups,customer_group_id,value,website_id) VALUES ";
          $inserts=array();
          $data=array();

          if($item[$k]=="")
          {
            continue;
          }
          $tpvals=explode(";",$item[$k]);

          foreach($wsids as $wsid)
          {
                //for each tier price value definition
                foreach($tpvals as $tpval)
                {
                    $tpprice=str_replace(",",".",$tpval);
                    if($tpprice=="")
                    {
                        continue;
                    }
                    if(substr($tpprice,-1)=="%")
                    {
                        //if no reference price,skip % tier price
                        if(!isset($item["price"]))
                        {
                            $this->warning("No price define, cannot apply % on group price");
                            continue;
                        }
                        $fp=(float)(str_replace(",",".",$item["price"]));
                        $pc=(float)(substr($tpprice,0,-1));
                        $m=($pc<0?(100+$pc):$pc);
                        $tpprice=strval(($fp*($m))/100.0);
                    }
                    $inserts[]="(?,?,?,?,?)";
                    $data[]=$pid;
                    //if all , set all_groups flag
                    $data[]=(isset($cgid)?0:1);
                    $data[]=(isset($cgid)?$cgid:0);
                    $data[]=$tpprice;
                    $data[]=$wsid;
                }
          }
          if(count($inserts)>0)
          {
            $sql.=implode(",",$inserts);
            $sql.=" ON DUPLICATE KEY UPDATE `value`=VALUES(`value`)";
            $this->insert($sql,$data);
          }
         }
        return true;
    }

    public function processColumnList(&$cols,$params=null)
    {
       //inspect column list for getting tier price columns info
        foreach($cols as $col)
        {
            if(preg_match("|group_price:(.*)|",$col,$matches))
            {
                $tpinf=array("name"=>$matches[1],"id"=>null);

                //if specific tier price 
                 if($tpinf["name"]!=="_all_")
                 {
                    //get tier price customer group id
                    $sql="SELECT customer_group_id from ".$this->tablename("customer_group")." WHERE customer_group_code=?";
                    $cgid=$this->selectone($sql,$tpinf["name"],"customer_group_id");
                    $tpinf["id"]=$cgid;
                }
                else
                {
                    $tpinf["id"]=null;
                }
                $this->_tpcol[$col]=$tpinf;
            }
        }
        return true;
    }

    public function initialize($params)
    {
     $sql="SELECT COUNT(store_id) as cnt FROM ".$this->tablename("core_store")." WHERE store_id!=0";
     $ns=$this->selectOne($sql,array(),"cnt");
     if($ns==1)
     {
      $this->_singlestore=1;
     }
     //bepixeld patch : check pricescope from general config
     $sql = "SELECT value FROM ". $this->tablename('core_config_data') ." WHERE path=?";
     $this->_pricescope = intval($this->selectone($sql, array('catalog/price/scope'), 'value')); //0=global, 1=website    

    }
}




thanks 
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top