/** * @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)); }
/** * 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; }