--- R:/downloaded/drupal6/modules-apr-2010-latest/uc_downpayments/1103142-235b9f9-1/1103142-235b9f9/uc_downpayment.module	Wed Jul 13 23:39:54 2011
+++ R:/downloaded/drupal6/modules-apr-2010-latest/uc_downpayments/1103142-235b9f9/uc_downpayment.module	Fri Sep 16 17:07:23 2011
@@ -89,18 +89,31 @@
  * Implements hook_form_alter().
  */
 function uc_downpayment_form_alter(&$form, $form_state, $form_id) {
+
   // Add to cart form
-  // Adding our down paynment option selection
-  if ((strpos($form_id, 'add_to_cart_form') > 0 || strpos($form_id, 'uc_catalog_buy_it_now_form_') === 0) && $form['node']['#value']->downpayment && (time() <= strtotime($form['node']['#value']->downpayment->date))) {
-    $downpayment = $form['node']['#value']->downpayment;
+  // Adding our down payment option selection
 
+  if (   (   strpos($form_id, 'add_to_cart_form') > 0 
+          || strpos($form_id, 'uc_catalog_buy_it_now_form_') === 0) 
+      && $form['node']['#value']->downpayment 
+      && (   time() <= strtotime($form['node']['#value']->downpayment->date)
+          || $form['node']['#value']->downpayment->dpdays > 0)
+     ) {
+    $downpayment = $form['node']['#value']->downpayment;
+    if ($downpayment->dpdays > 0) {
+      $form['node']['#value']->downpayment->date =
+      $downpayment->date = date(UC_DOWNPAYMENT_FORMAT_DATE, 
+                                strtotime("now + {$downpayment->dpdays} days"));
+    }
     $context = array(
       'revision' => 'formatted-original',
     );
 
     $form['downpayment'] = array(
       '#type' => 'select',
-      '#description' => t("Full payment balance due on @date", array('@date' => date(UC_DOWNPAYMENT_FORMAT_DATE, strtotime($downpayment->date)))),
+      '#description' => t("Full payment balance due on @date", 
+                          array('@date' => date(UC_DOWNPAYMENT_FORMAT_DATE,
+                                                strtotime($downpayment->date)))),
       '#title' => t('Payment'),
       '#weight' => -1,
       '#options' => array(
@@ -211,6 +224,14 @@
     'settings' => 'uc_downpayment_feature_settings_form',
   );
 
+  $features[] = array(
+    'id' => 'downpayment_days',
+    'title' => t('Down Payment by Days'),
+    'callback' => 'uc_downpayment_feature_form',
+    'delete' => 'uc_downpayment_feature_delete',
+    'settings' => 'uc_downpayment_feature_settings_form',
+  );
+
   return $features;
 }
 
@@ -251,12 +272,15 @@
           */
 
           // second down payment
+          $paydate = strtotime(($feature->dpdays) ? "now+{$feature->dpdays} days"
+                                                  : $feature->date);
           $payment = new stdClass;
           $payment->nid               = $feature->nid;
           $payment->pfid              = $feature->pdif;
           //$payment->amount            = $feature->amount;
           $payment->amount            = $full_price - $feature->amount; // we want the remaining balance
-          $payment->date              = strtotime($feature->date);
+
+          $payment->date              = $paydate; #date(UC_DOWNPAYMENT_FORMAT_DATE, $paydate);
           $payment->uid               = $arg1->uid;
           $payment->order_id          = $arg1->order_id;
           $payment->order_product_id  = $product->order_product_id;
@@ -273,7 +296,17 @@
       break;
     case 'load':
       break;
+
+// handle removal of downpayment payments on order deletion
+    case 'delete':
+      foreach ($arg1->products as $key => $product) {
+        if ($product->data['downpayment']) {
+          db_query("DELETE FROM {uc_downpayment_payments} WHERE order_id = %d",
+                   $product->data['downpayment']->order_id);
   }
+      }
+      break;
+  } /* end of switch ($op) */
 }
 
 /**
@@ -361,6 +394,7 @@
  */
 function uc_downpayment_feature_form($form_state, $node, $feature) {
   $product = uc_downpayment_feature_product_load($feature['pfid']);
+  $qbits = array_reverse(explode('/', $_REQUEST['q']));
 
   $form['nid'] = array(
     '#type' => 'hidden',
@@ -417,7 +451,8 @@
     '#default_value' => $product->number_intervals < 0 ? '' : $product->number_intervals,
     '#attributes' => $product->number_intervals < 0 ? array('disabled' => 'disabled') : array(),
   );
-  */
+  /**/
+  if ($qbits[1] == 'downpayment') {
   $form['payment']['date'] = array(
     '#type' => 'date_select',
     '#title' => t('Due date'),
@@ -428,6 +463,24 @@
     '#size' => 16,
     '#required' => TRUE,
   );
+  }
+  else if ($qbits[1] == 'downpayment_days') {
+    $dflt_days = ($qbits[0] == 'add') ? variable_get('downpayment_default_days', '30')
+                                      : $product->dpdays;
+    $form['payment']['dpdays'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Days til full payment due'),
+      '#description' => t('Number of days before full payment becomes due.'),
+      '#default_value' => $dflt_days,
+      '#size' => 16,
+      '#required' => TRUE,
+    );/**/
+  }
+
+  $form['payment']['mode'] = array(
+    '#type' => 'hidden',
+    '#value' => $qbits[1],
+  );
 
   return uc_product_feature_form($form);
 }
@@ -460,7 +513,9 @@
   $product->number_intervals = 1;
   $product->amount = $form_state['values']['amount'];
   $product->date = $form_state['values']['date'];
+  $product->dpdays = $form_state['values']['dpdays'];
   $product->nid = $form_state['values']['nid'];
+  $product->mode = $form_state['values']['mode'];
 
   $form_state['redirect'] = uc_downpayment_feature_product_save($product);
 }
@@ -515,7 +570,7 @@
 /**
  * Loads a down payment from a product fee ID.
  *
- * @param $pifd
+ * @param $pfid
  *   The product fee ID.
  *
  * @return
@@ -555,7 +609,7 @@
   $data = array(
     'pfid' => $product->pfid,
     'nid' => $product->nid,
-    'fid' => 'downpayment',
+    'fid' => $product->mode, #'downpayment',
     //'description' => t('When @product is purchased with down payment, add @intervals down payment(s) each with the amount of @amount.', $args),
     'description' => t('When @product is purchased with down payment, add a down payment with the remaining balance.', $args),
   );
@@ -593,7 +648,13 @@
  *   The product feature.
  */
 function uc_downpayment_feature_product_loadbynid($nid) {
-  $pfid = db_fetch_object(db_query("SELECT pfid FROM {uc_product_features} WHERE nid = %d AND fid = 'downpayment'", $nid));
+#  $pfid = db_fetch_object(db_query("SELECT pfid FROM {uc_product_features} WHERE nid = %d AND fid = 'downpayment'", $nid));
+
+  $pfid = db_fetch_object(db_query(
+      "SELECT pfid FROM {uc_product_features} 
+       WHERE nid = %d 
+         AND fid LIKE 'downpayment%'", 
+       $nid));
 
   return uc_downpayment_feature_product_load($pfid->pfid);
 }
