1

I wrote a module that adds a mass action for creating invoices and shipments from the invoice. This gets done by calling the URL ./sales_order/finishorder (calls the finish_order function.
After finishing creating the invoices and shipments I wanted to redirect to pdfinvoices to directly print the PDFs for the orders. I tried this using

 $this->_redirect('*/*/pdfinvoices');

or

$this->_redirect('*/*/*/pdfinvoices');

but neither will work: The first one just leads back to the order grid, the second one displays a blank page.
I think the second one is correct but the required POST parameters are missing. Is there a way to redirect them to sales_order/pdfinvoices?

2
  • Both variants seems to be the same
    – alex_b
    Commented Oct 28, 2014 at 21:01
  • Thanks, typo. They are basically the same. Just not sure which path is correct
    – Bernie
    Commented Oct 28, 2014 at 21:03

2 Answers 2

8

The first line in pdfinvoices is:

$orderIds = $this->getRequest()->getPost('order_ids');

Thus it is expecting an array list of order ids to work on.

Make sure your mass action variable is called order_ids. If you then forward to the pdfinvoice action, it will use the same order ids you just worked on.

If, for some reason you need to eliminate any ids from the list, (could not process shipping as an example), build a new array of allowed order ids.

Then just before you _forward, inject the order ids you want to process into the post variable.

 $this->getRequest()->setPost('order_ids',$orderIds);
 $this->_forward('pdfinvoices');
0
3

As I see both methods are in the same controller, so you can do it like this in the end of finishorder method:

// set post
$this->getRequest()->setPost('order_ids',$orderIds);
$this->_forward('pdfinvoices');
5
  • Didn't work. I now get forwarded to: index.php/admin/admin/sales_order/finishorder/key/cd51c5eacefec860ea70108762ff8ec6/form_key/tgkIpGxDc1jPTCBY/massaction_prepare_key/order_ids/ Which seems to be the right URL but with the wrong parameters, I guess? I am not sure if the parameters are the problem but it is my best guess after some research.
    – Bernie
    Commented Oct 28, 2014 at 21:23
  • What parameters should be passed to sales_order/pdfinvoices? only order_ids I guess?
    – alex_b
    Commented Oct 28, 2014 at 21:27
  • Yes, exactly. The order_ids that I get from the order grid when I call it as a mass action. I did however not manage to find out in what way the parameters are sent. If I try to convert the post parameters to get parameters using a plugin it does not find any.
    – Bernie
    Commented Oct 28, 2014 at 21:28
  • 1
    You can just use _forward('pdfinvoices') if the actions are in the same controller. There is no need to pass on the request variables. _forward can also forward to other controller actions. See parent class for syntax. _forward will be preffered over _redirect in a lot of instances, as it does not result in a new page request.
    – ProxiBlue
    Commented Oct 28, 2014 at 23:40
  • Thank you ProxiBlue and alex_b, I was not aware of "_forward". Works like a charm now!
    – Bernie
    Commented Oct 29, 2014 at 11:56

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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