public function render(Varien_Object $row)
 {
     $value = mage::getModel('Orderpreparation/ordertoprepare')->load($row->getId(), 'order_id')->getforce_invoice_date();
     if ($value == '0000-00-00') {
         $value = '';
     }
     $html = 'Date <input onchange="HideNonSaveButtons()" type="text" id="force_invoice_date_' . $row->getid() . '" name="force_invoice_date_' . $row->getid() . '" size="8" value="' . $value . '" />';
     //rajoute le petit calendrier
     $html .= ' <img src="' . $this->getSkinUrl('images/grid-cal.gif') . '" class="v-middle" id="img_calendar_' . $row->getid() . '" />';
     $html .= "\n\t\t        <script type=\"text/javascript\">\n\t                Calendar.setup({\n\t                    inputField : 'force_invoice_date_" . $row->getid() . "',\n\t                    ifFormat : '%Y-%m-%e',\n\t                    button : 'img_calendar_" . $row->getid() . "',\n\t                    align : 'Bl',\n\t                    singleClick : true\n\t                });\n                </script>\t\t\n\t\t";
     //champs poids
     $html .= '<br>' . $this->__('Weight') . ' <input onchange="HideNonSaveButtons()" type="text" name="real_weight_' . $row->getid() . '" size="2" value="' . $row->getreal_weight() . '" />';
     //Nombre de paquets
     $html .= '<br>' . $this->__('Packages') . ' <input onchange="HideNonSaveButtons()" type="text" size="2" maxlength="2" name="package_count_' . $row->getid() . '" size="2" value="' . $row->getpackage_count() . '" />';
     //Type de produit d'expe
     $CurrentValue = $row->getship_mode();
     $Carrier = $row->getshipping_method();
     //cree le menu
     $retour = '<select onchange="HideNonSaveButtons()" id="ship_product_type_' . $row->getid() . '" name="ship_product_type_' . $row->getid() . '">';
     $model = mage::Helper('Orderpreparation')->getCarrierModel($Carrier);
     if ($model) {
         $values = $model->GetProductTypes();
         $retour .= '<option value=""></option>';
         foreach ($values as $key => $value) {
             $retour .= '<option value="' . $key . '"';
             if ($key == $CurrentValue) {
                 $retour .= ' selected ';
             }
             $retour .= '>' . $value . '</option>';
         }
     } else {
         $retour .= '<option>No carrier for ' . $Carrier . ' </option>';
     }
     $retour .= '</select>';
     $html .= '<br>' . $this->__('Ship Mode') . ' ' . $retour;
     return $html;
 }
 /**
  * return service type as combo
  *
  * @param unknown_type $name
  */
 public function getServiceTypeAsCombo($name)
 {
     $CurrentValue = $this->getOrderPreparationItem()->getship_mode();
     $Carrier = $this->getCurrentOrder()->getshipping_method();
     if ($this->getShipment()) {
         return $CurrentValue;
     }
     //cree le menu
     $retour = '<select id="' . $name . '" name="' . $name . '">';
     $model = mage::Helper('Orderpreparation')->getCarrierModel($Carrier);
     if ($model) {
         $values = $model->GetProductTypes();
         $retour .= '<option value=""></option>';
         foreach ($values as $key => $value) {
             $retour .= '<option value="' . $key . '"';
             if ($key == $CurrentValue) {
                 $retour .= ' selected ';
             }
             $retour .= '>' . $value . '</option>';
         }
     } else {
         $retour .= '<option>No carrier for ' . $Carrier . ' </option>';
     }
     $retour .= '</select>';
     return $retour;
 }
 /**
  * Méthode permettant de savoir si une commande peut etre ajoutée pour une préparation
  *
  * @param unknown_type $orderId
  */
 public function CanAddOrder($orderId)
 {
     $debug = '';
     //parcourt les produits
     $NbAddedProducts = 0;
     $order = Mage::getModel('sales/order')->load($orderId);
     foreach ($order->getItemsCollection() as $item) {
         $productid = $item->getproduct_id();
         $debug .= '<br>Product ' . $productid;
         //si il reste une qte de ce produit à livrer et qu'il gere les stocks
         $remaining_qty = $item->getqty_ordered() - $item->getRealShippedQty();
         $debug .= ' - remaining_qty ' . $remaining_qty;
         $ManageStock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($productid)->getManageStock();
         if ($ManageStock) {
             if ($remaining_qty > 0) {
                 //recupere la qte de ce produit déja ajouté dans la préparation de commande
                 $AlreadyAddedQty = $this->GetTotalAddedQtyForProduct($productid);
                 //si produit réservé, on valide direct
                 if ($item->getreserved_qty() > 0) {
                     $NbAddedProducts += 1;
                 } else {
                     //si le stock est suffisant
                     $product = mage::getModel('catalog/product')->load($productid);
                     $stock = $product->GetAvailableQty();
                     if ($stock < $remaining_qty + $AlreadyAddedQty) {
                         Mage::getSingleton('adminhtml/session')->addError(mage::Helper('Orderpreparation')->__('Order ') . $order->getincrement_id() . ': ' . $item->getname() . ' ' . mage::Helper('Orderpreparation')->__('not added'));
                         //return false;
                     } else {
                         $NbAddedProducts += 1;
                     }
                 }
             }
         } else {
             $NbAddedProducts += 1;
         }
     }
     if ($NbAddedProducts == 0) {
         return false;
     }
     return true;
 }
 /**
  * Retourne la date prévue d'arrivée d'un colis en fonction du transporter, de la date d'expedition et du pays
  *
  */
 public function getEstimatedDeliveryDate($ShippingDate, $Carrier, $Country)
 {
     //Recupere la durée de livraison en fonction du transporteur
     $DeliveryDelay = 0;
     $model = mage::Helper('Orderpreparation')->getCarrierModel($Carrier);
     if ($model) {
         $DeliveryDelay = $model->getDeliveryDelay($Country);
     }
     //calcul la date de livraison
     return date("Y-m-d", $this->get_final_date(strtotime($ShippingDate), $DeliveryDelay));
 }