Q:

PrestaShop - Submitting Value to Other Controller Based on Existing Submit Button

I am using PrestaShop 1.7 and would like to achieve the following : 
I am adding a refund reason upon product return which by default PrestaShop does not have such a feature.
At the moment, I would like to grab a value from my module TPL file. I have created a dropdown that lets user choose their option. I would then like to push this value to AdminOrdersController as cancelProduct button is initiating the controller.
Model: 
public function hookDisplayAdminOrder($params)
{
    return $this->display(__FILE__, 'views/templates/admin/refund_reason.tpl');
}

TPL: 
<div class="panel">
<div class="panel-heading">
    <i class="icon-money"></i>
    Pick A Reason For Refunding
</div>
<select name="refund_reason" style="width: 300px;">
  <option value="0"></option>
  <option value="1">Out of stock</option>
  <option value="2">Incorrect product sent to user</option>
  <option value="3">Defective/faulty product</option>
  <option value="4">Poor quality on receipt (dirty, poor stitching etc)</option>
  <option value="5">Looks different from image on website</option>
  <option value="6">Size does not fit user</option>
  <option value="7">Change of mind</option>
  <option value="8">No indication/Others</option>
</select>

Once administrator clicked the product refund button, it will initiate the following : 
elseif (Tools::isSubmit('cancelProduct') && isset($order)) {
   // retrieve user input here
}

I have created a module that uses the hook hookActionProductCancel to add an extra function once the button is called too, it is sending back the refund amounts to respective bank via API. 
So, can anyone point out how can I grab user input as I do not understand how to submit the form since the button cancelProduct is calling from another controller.
For other modules that I created, the form will be actioned to the module controller and I will grab with getValue. But for this case, it is using an existing button and I have no idea how to push it to AdminOrdersController.

A:

The most elegant solution and UX-friendly for the retailer would be to handle the user input via an Ajax call.
I actually developed something similar for a PrestaShop retailer:

This works:

Add an ID to your refund_reason input field
In your .tpl file or via a separate JS file that you include, use jQuery to catch the form submission triggered by the cancelProduct button
Add your element to the form, this way:
var input = $('<input>').attr('type', 'hidden').attr('name', 'refund_reason').val($('#refund_reason').val());
            $('form').append(input);
In your hookActionProductCancel() method, simply retrieve your value with Tools::getValue('refund_reason') or $_POST['refund_reason']

