Commerce partial payment : pay deposit at checkout and full settlement later
I got it working the following way.


First install Commerce Partial Payment.
Write a custom function to calculate deposit, MODULENAME_deposit_calculation


In order to get Commerce Deposit work with the deposit calculation you like to instead of a customer deposit input, patch it as following :

function commerce_partial_payment_form_commerce_checkout_form_alter(&amp;$form, &amp;$form_state, $form_id) {
  //... line 93
  $acompte = MODULENAME_deposit_calculation($form_state['order']) /100;
    if (!is_null($acompte) &amp;&amp; $acompte &gt; 0) {
      $default = $acompte;
    }
  //... line 109 Add the amount to the payment details form,in a hidden field.
  $form['commerce_payment']['payment_details']['amount'] = array(
    '#type' =&gt; 'hidden',
  //...
}

function commerce_partial_payment_checkout_validate($form, &amp;$form_state, $checkout_pane, $order) {
  //... line 261
  $amount['amount'] = MODULENAME_deposit_calculation($order)  /100;
  //...
}

function commerce_partial_payment_checkout_submit($form, &amp;$form_state, $checkout_pane, $order) {
  //...line 317
  if ($pane_values['payment_methods']) {
    $amount = MODULENAME_deposit_calculation($order) /100;
    $order-&gt;data['atos']['request']['amount'] = $amount;
    if (!empty( $amount)){
      $amount['amount'] = $amount;
  //...
}


As the sandbox doesn't properly send the deposit amount to off site payment, we need to hook the payment method :

In a METHOD_PAYMENT.api.php file

function hook_METHOD_PAYMENT_request_alter(&amp;$settings) {
  //no example
}


Now send to off site payment the deposit amount instead of order total :

function commerce_partial_payment_PAYMENT_METHOD_request_alter(&amp;$settings) {
  $order = commerce_order_load($settings['order_id']);
  $deposit = MODULENAME_deposit_calculation($order);
  $settings['amount'] = $deposit;
}


Last, add a price component deposit below Total to inform the customer what he's going to pay. 

function commerce_partial_payment_commerce_price_formatted_components_alter(&amp;$components, $price, $entity) {
  //Add a deposit line to price components
  $deposit= MODULENAME_deposit_calculation($entity);

  $components['deposit'] = array(
      'title' =&gt; t('Deposit'),
      'price' =&gt; array(
        'amount' =&gt; $deposit,
        'currency_code' =&gt; $components['commerce_price_formatted_amount']['price']['currency_code'],
        'data' =&gt; '',
      ),      
    'weight' =&gt; '200',
  );
}