Beispiel #1
0
 /**
  * Returns extra HTML for a summary reservation page to present current system
  *
  * @abstract
  * @param RM_Reservation_Details $detail
  * @return string HTML code to paste
  */
 public function getSummary(RM_Reservation_Details $detail)
 {
     $model = new RM_Extras();
     $extras = $model->getByUnit($detail->getUnit());
     if (0 == $extras->count()) {
         return "";
     }
     // tax
     $taxSystem = RM_Environment::getInstance()->getTaxSystem();
     $taxes = $taxSystem->getAllTaxes($detail->getUnit());
     $request = RM_Environment::getConnector()->getRequestHTTP();
     $request->setControllerName('Extras');
     $request->setActionName('summary');
     $controller = new RM_User_ExtrasController($request, new Zend_Controller_Response_Http());
     $controller->setFrontController(Zend_Controller_Front::getInstance());
     $controller->view->unit = $detail->getUnit();
     $config = new RM_Config();
     $controller->view->currencySymbol = $config->getValue('rm_config_currency_symbol');
     $translate = RM_Environment::getInstance()->getTranslation();
     $extraTypes = array('day' => $translate->_('User.Extras.Type', 'Day'), 'percentage' => $translate->_('User.Extras.Type', 'Percentage'), 'single' => $translate->_('User.Extras.Type', 'Single'));
     $viewExtras = array();
     foreach ($extras as $extra) {
         $extraTotal = RM_Environment::getInstance()->roundPrice($extra->calculateBy($detail->getTotal(), $detail->getPeriod()->getSeconds()));
         // calculate the tax due on the extra...
         $taxTotal = 0;
         foreach ($taxes as $tax) {
             $taxTotal = $taxTotal + $tax->calculate($extraTotal, $detail);
         }
         //            $extraTotal = $extraTotal + $taxTotal;
         $viewExtras[] = array('id' => $extra->id, 'name' => $extra->getName(), 'type' => $extraTypes[$extra->type], 'value' => $extraTotal, 'tax' => $taxTotal, 'max' => $extra->max, 'min' => $extra->min);
     }
     $controller->view->extras = $viewExtras;
     return $controller->view->render('Extras/summary.phtml');
 }
Beispiel #2
0
 public function listhtmlJsonAction()
 {
     $reservationID = $this->_getParam('id', null);
     if ($reservationID == null) {
         return array('data' => array('success' => false));
     }
     $reservationModel = new RM_Reservations();
     $reservation = $reservationModel->find($reservationID)->current();
     if ($reservation == null) {
         return array('data' => array('success' => false));
     }
     $unitModel = new RM_Units();
     $reservationDetails = $reservation->getDetails();
     $reservationDetailsJson = array();
     foreach ($reservationDetails as $reservationDetail) {
         $unit = $reservationDetail->findUnit();
         $extrasModel = new RM_Extras();
         $extras = $extrasModel->getByUnit($unit);
         if ($extras->count() == 0) {
             continue;
         }
         $config = new RM_Config();
         $currencySymbol = $config->getValue('rm_config_currency_symbol');
         // tax
         $taxSystem = RM_Environment::getInstance()->getTaxSystem();
         $taxes = $taxSystem->getAllTaxes($unit);
         // we need to create a new reservation details object so that the tax can be calculated
         $periodObj = new RM_Reservation_Period(new RM_Date(strtotime($reservationDetail->start_datetime)), new RM_Date(strtotime($reservationDetail->end_datetime)));
         $persons = new RM_Reservation_Persons(array("adults" => $reservationDetail->adults, "children" => $reservationDetail->children, "infants" => $reservationDetail->infants));
         $fullReservationDetails = new RM_Reservation_Details($unit, $periodObj, $persons, array());
         $summaryModel = new RM_ReservationSummary();
         $extrasJson = array();
         foreach ($extras as $extra) {
             // calculate the tax due on the extra...
             $extraSubTotal = $extra->calculate($reservationDetail);
             $taxTotal = 0;
             foreach ($taxes as $tax) {
                 $taxTotal = $taxTotal + $tax->calculate($extraSubTotal, $fullReservationDetails);
             }
             $extraSubTotal = $extraSubTotal + $taxTotal;
             $extraJson = new stdClass();
             $extraJson->id = $extra->id;
             $extraJson->name = $extra->getName(RM_Environment::getInstance()->getLocale());
             $extraJson->min = (int) $extra->min;
             $extraJson->max = (int) $extra->max;
             $extraJson->type = RM_Environment::getInstance()->getTranslation()->_('Admin.Extras.Type', ucfirst($extra->type));
             $extraJson->price = $currencySymbol . $extraSubTotal;
             $reservationDetailsExtra = $summaryModel->getByDetail($reservationDetail, RM_Module_Extras::SUMMARY_TYPE, $extra->id);
             if ($reservationDetailsExtra == null) {
                 $extraJson->saved_price = $currencySymbol . '0';
                 $extraJson->value = 0;
             } else {
                 $extraJson->saved_price = $currencySymbol . $reservationDetailsExtra->total_amount;
                 $extraJson->value = (int) $reservationDetailsExtra->value;
             }
             $extrasJson[] = $extraJson;
         }
         $unit = $unitModel->get($reservationDetail->unit_id);
         if ($unit == null) {
             $unitName = "DELETED";
         } else {
             $unitName = $unit->name;
         }
         $priceSystem = RM_Prices_Manager::getInstance()->getRealPriceSystem($unit);
         $reservationDetailJson = new stdClass();
         $reservationDetailJson->id = $reservationDetail->id;
         $reservationDetailJson->extras = $extrasJson;
         $reservationDetailJson->unit_id = $reservationDetail->unit_id;
         $reservationDetailJson->unit_name = $unitName;
         $reservationDetailJson->start = $reservationDetail->getStartDatetime($priceSystem->getDateformat(true));
         $reservationDetailJson->end = $reservationDetail->getEndDatetime($priceSystem->getDateformat(true));
         $reservationDetailJson->subtotal = $reservationDetail->total_price;
         $reservationDetailsJson[] = $reservationDetailJson;
     }
     $json = new stdClass();
     $json->details = $reservationDetailsJson;
     return array('data' => $json);
 }