Beispiel #1
0
 /**     
  * @param   request data  price rows information (if 'id'=0 this is a new row)
  * @see modules/extras/js/edit.js
  * @return 	json    json array information: success or failure
  */
 function updateJsonAction()
 {
     $dataJson = $this->_getParam('data', '[]');
     $iso = $this->_getParam('iso', RM_Environment::getInstance()->getLocale());
     $data = Zend_Json::decode($dataJson);
     $unitExtrasModel = new RM_UnitExtras();
     $model = new RM_Extras();
     foreach ($data as $row) {
         if (isset($row['name'])) {
             $row[$iso] = $row['name'];
             unset($row['name']);
         }
         $unitIDs = explode(',', $row['units']);
         unset($row['units']);
         if ($row['id'] == 0) {
             unset($row['id']);
             $extraID = $model->insert($row);
             $dbRow = $model->find($extraID)->current();
         } else {
             $dbRow = $model->find($row['id'])->current();
             if ($dbRow == null) {
                 continue;
             }
             foreach ($row as $key => $value) {
                 $dbRow->{$key} = $value;
             }
             $dbRow->save();
         }
         $unitExtrasModel->insertRows($dbRow, $unitIDs);
     }
     return array('data' => array('success' => true));
 }
Beispiel #2
0
 /**
  * Validate extras selection for the user GUI
  *
  * @param array $data in format [extras system name][unit id][extra id] = user selected value for the extra
  * @return bool
  */
 public function applySelection(Zend_Controller_Request_Abstract $request, RM_Reservation_Details $detail)
 {
     $data = $request->getParam('rm_extras', array());
     if (is_array($data) == false) {
         return false;
     }
     if (count($data) == 0) {
         return $detail;
     }
     if (isset($data[$detail->getUnit()->id]) == false) {
         return $detail;
     }
     if (is_array($data[$detail->getUnit()->id]) == false) {
         return false;
     }
     if (count($data[$detail->getUnit()->id]) == 0) {
         return $detail;
     }
     // tax
     $taxSystem = RM_Environment::getInstance()->getTaxSystem();
     $taxes = $taxSystem->getAllTaxes($detail->getUnit());
     $model = new RM_Extras();
     $extras = array();
     foreach ($data[$detail->getUnit()->id] as $extraID => $value) {
         $extra = $model->find($extraID)->current();
         if ($extra == null) {
             continue;
         }
         if ($extra->isBelongTo($detail->getUnit()) == false) {
             continue;
         }
         if (($value > $extra->max || $value < $extra->min) && $value != 0) {
             continue;
         }
         // calculate the tax due on the extra...
         $extraTotal = $extra->calculateBy($detail->getTotal(), $detail->getPeriod()->getSeconds());
         $taxTotal = 0;
         foreach ($taxes as $tax) {
             $taxTotal = $taxTotal + $tax->calculate($extraTotal, $detail);
         }
         $extraObject = new RM_Extras_Object($extra, $value * $extraTotal, $value, $value * $taxTotal);
         $extras[] = $extraObject;
     }
     $detail->addExtras($extras);
     return $detail;
 }