0

I need to create a user that only is allowed to handle shipping of orders.

We're moving our stock to a fulfillment location that handles picking, packing & shipping for us. Basically they only need to see orders with order status "Ready for shipping" so that they can print labels and packaging slips and set the order to Completed.

It appears to me that I can't arrange this with the standard roles. I've seen some extensions for 'Advanced Permissions' (e.g. Amasty) but that don't seem to offer a solution for this.

So, ideally I need to create a user that:

  • Can login
  • Can see orders with status 'Ready for shipping'
  • Can print packaging slips & labels
  • Can change order status to 'Completed'

Nothing more, nothing less.

Any best practices for this?

  • I think you need to develop custom module with developer for your need There is no module already built like that since it's very rarely need feature so module company is not interested to develop – Moon Feb 18 '15 at 15:41
  • For our store, we need our manager can do everything except seeing price for each product and total order. So we built custom module for that. – Moon Feb 18 '15 at 15:44
  • I see, maybe Magento (CE) is too limited for when you grow to a bigger setup, with a warehouse. Wonder if Magento EE handles this better (not that we can afford that yet ...) – Jeff_Cro Feb 18 '15 at 15:46
  • There is no such feature on EE too It's not related CE or EE. Magento is great platform to customize anything You can customize that kind of feature on magento. I don't think other platform can not even think about that feature – Moon Feb 18 '15 at 15:48
  • If you're store owner, check this area51.stackexchange.com/proposals/81441/… :) – Moon Feb 18 '15 at 15:57
1

Try

  1. creating a use in magento, using the acl to limit that user to the sales order view section

  2. Create a custom module that will filter the result for this user

Config.xml

<config>
    <modules>
        <Company_Module>
            <version>0.1.0</version>
        </Company_Module>
    </modules>
    <global>
        <blocks>
            <company_module>
                <class>Company_Module_Block</class>
            </company_module>
        </blocks>
    </global>
   <adminhtml>
     <events>
          <sales_order_grid_collection_load_before>
              <observers>
                <layout_before>
                    <class>module/observer</class>
                    <method>handleOrderCollectionBefore</method>
                </layout_before>
              </observers>
           </sales_order_grid_collection_load_before>
          <sales_order_invoice_grid_collection_load_before>
              <observers>
                <layout_before>
                    <class>module/observer</class>
                    <method>handleOrderCollectionBefore</method>
                </layout_before>
              </observers>
           </sales_order_invoice_grid_collection_load_before>
           <core_collection_abstract_load_before>
              <observers>
                <layout_before>
                    <class>module/observer</class>
                    <method>handleCoreCollectionBefore</method>
                </layout_before>
              </observers>
           </core_collection_abstract_load_before>
          <sales_order_creditmemo_grid_collection_load_before>
              <observers>
                <layout_before>
                    <class>module/observer</class>
                    <method>handleOrderCollectionBefore</method>
                </layout_before>
              </observers>
           </sales_order_creditmemo_grid_collection_load_before>
     </events>
    </adminhtml>
</config>

In observer.php

Company_Module_Model_Observer{
   public function handleOrderCollectionBefore($observer){
       if(not limited user){
           return $this;
       }

       $collection = $observer->getEvent()->getOrderGridCollection();

       // filter order
       $collection->addFieldToFilter('state', 'Ready for shipping');
   }


   public function handleCoreCollectionBefore($observer){
       if(not limited user){
           return $this;
       }

       $collection = $observer->getCollection();
       if ($collection instanceof Mage_Sales_Model_Mysql4_Order_Grid_Collection)
       { 
           // filter order
           $collection->addFieldToFilter('state', 'Ready for shipping');
       }      
   }

}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.