public function query() { // YUI variables for paging and sorting $start_index = phpgw::get_var('startIndex', 'int'); $num_of_objects = phpgw::get_var('results', 'int', 'GET', 10); $sort_field = phpgw::get_var('sort'); $sort_ascending = phpgw::get_var('dir') == 'desc' ? false : true; // Form variables $search_for = phpgw::get_var('query'); $search_type = phpgw::get_var('search_option'); // Create an empty result set $result_objects = array(); $result_count = 0; // TODO: access control $composite_id = phpgw::get_var('composite_id'); $filters = array('composite_id' => $composite_id); $result_objects = rental_sounit::get_instance()->get($start_index, $num_of_objects, $sort_field, $sort_ascending, $search_for, $search_type, $filters); $result_count = rental_sounit::get_instance()->get_count($search_for, $search_type, $filters); $editable = phpgw::get_var('editable') == 'true' ? true : false; //Serialize the documents found $rows = array(); foreach ($result_objects as $result) { if (isset($result)) { if ($result->has_permission(PHPGW_ACL_READ)) { $rows[] = $result->serialize(); } } } //Add context menu columns (actions and labels) array_walk($rows, array($this, 'add_actions'), array($composite_id, $editable)); //Build a YUI result from the data // $result_data = array('results' => $rows, 'total_records' => count($rows)); return $this->yui_results($result_data, 'total_records', 'results'); }
/** * Get a static reference to the storage object associated with this model object * * @return the storage object */ public static function get_instance() { if (self::$so == null) { self::$so = CreateObject('rental.sounit'); } return self::$so; }
protected function import_composites() { $start_time = time(); // Storage objects $socomposite = rental_socomposite::get_instance(); $socontract = rental_socontract::get_instance(); $sounit = rental_sounit::get_instance(); // Array for mapping the composite ids to the facilit ids $composites = array(); //Read source data $datalines = $this->getcsvdata($this->path . "/u_Leieobjekt.csv"); $this->messages[] = "Read 'u_Leieobjekt.csv' file in " . (time() - $start_time) . " seconds"; $this->messages[] = "'u_Leieobjekt.csv' contained " . count($datalines) . " lines"; foreach ($datalines as $data) { if (count($data) <= 34) { continue; } //If the composite differs in terms of object number the custom address should be set (default false) $set_custom_address = false; //Retrieve the title for the responsibility area we are importing (to hande the respoonsibility areas differently) $title = $socontract->get_responsibility_title($this->location_id); // Variable for the location code (objektnummer) $loc1 = null; //Three columns for detemining the correct object number $object_identifier = trim($this->decode($data[1])); //cLeieobjektnr $property_identifier = trim($this->decode($data[4])); //cInstNr $building_identifier = trim($this->decode($data[5])); //cByggNr if ($title == 'contract_type_internleie') { $property_ok = false; //Priority 1: The property identifier (most up to date) if (isset($property_identifier)) { $correct_length_property = strlen($property_identifier) == 4 ? true : false; $integer_value_property = (int) $property_identifier > 0 ? true : false; if ($correct_length_property && $integer_value_property) { $loc1 = $property_identifier; $property_ok = true; } } //Priority 2: Use the object identifier if (isset($object_identifier)) { $correct_length = strlen($object_identifier) == 6 ? true : false; $integer_value = (int) $object_identifier > 0 ? true : false; if ($correct_length && $integer_value) { if ($property_ok) { // ... add only the building number if the property number is ok $loc1 = $loc1 . "-" . substr($object_identifier, 4, 2); } else { // ... just use the object identifier if not $loc1 = substr_replace($object_identifier, "-", 4, 0); } } else { // Using non-conforming object identifier. Gives a warning. $loc1 = $object_identifier; $set_custom_address = true; $this->warnings[] = "Composite (internal contract) has wrong object-number ({$loc1}). Should consist of 6 numbers. Setting custom address."; } } else { if ($property_ok) { //If no object number, only property number $set_custom_address = true; $this->warnings[] = "Composite (internal contract) has no object-number ({$object_identifier}). Using property identifier. Setting custom address."; } } if (!isset($loc1)) { // No data exist to determine the object number $this->warnings[] = "No data exist to determine the object number. Setting custom address."; $set_custom_address = true; } } else { if ($title == 'contract_type_eksternleie') { // Two forms for object number (xxxx.xxxx) AND (xxxx.xxxxxx.xxxx) $parts = explode('.', $object_identifier); for ($i = 0; $i < count($parts); $i++) { $parts[$i] = trim($parts[$i]); } if (count($parts) == 2) { //Checking parts for correct length $correct_length1 = strlen($parts[0]) == 4 ? true : false; $correct_length2 = strlen($parts[1]) == 4 ? true : false; if ($correct_length1 && $correct_length2) { //If the first part contains any characters from the alphabet if (!is_numeric($parts[0])) { // ... relace the punctuation with an '-' $loc1 = $parts[0] . "-" . $parts[1]; } } } else { if (count($parts) == 3) { $correct_length = strlen($parts[1]) == 6 ? true : false; $correct_length_property = strlen($property_identifier) == 4 ? true : false; if ($correct_length && is_numeric($parts[1])) { if (isset($property_identifier) && $correct_length_property) { // ... add only the building number if the property number is ok $loc1 = $property_identifier . "-" . substr($parts[1], 4, 2); } else { // ... insert a '-' at position 4 if not $loc1 = substr_replace($parts[1], "-", 4, 0); } } } } // If the object identifier is non-conforming // Alernative 1: Try to use the buiding identifier if (!isset($loc1) && isset($building_identifier)) { $correct_length = strlen($building_identifier) == 6 ? true : false; if ($correct_length && is_numeric($building_identifier)) { $loc1 = substr_replace($building_identifier, "-", 4, 0); $set_custom_address = true; $this->warnings[] = "Composite (external) lacks conforming object number ({$object_identifier}). Using building identifier ({$loc1}). Setting custom address."; } } // Alternative 2: Try to use the property identifier if (!isset($loc1) && isset($property_identifier)) { $correct_length = strlen($property_identifier) == 4 ? true : false; if ($correct_length) { //Give a warning $loc1 = $property_identifier; $set_custom_address = true; $this->warnings[] = "Composite (external) lacks conforming object number ({$object_identifier}). Using property identifier ({$loc1}). Setting custom address."; } } // Alternative 3: Use the non-conforming object number if (!isset($loc1)) { $loc1 = $object_identifier; $set_custom_address = true; $this->warnings[] = "Composite (external) lacks data to create an object number. Using non-conforming object number ({$loc1}) Setting custom address."; } } else { if ($title == 'contract_type_innleie') { $correct_length = strlen($building_identifier) == 6 ? true : false; $integer_value = (int) $building_identifier > 0 ? true : false; $correct_length_property = strlen($property_identifier) == 4 ? true : false; if ($correct_length && $integer_value) { if (isset($property_identifier) && $correct_length_property) { // ... add only the building number if the property number is ok $loc1 = $property_identifier . "-" . substr($building_identifier, 4, 2); } else { $loc1 = substr_replace($building_identifier, "-", 4, 0); } } else { if (isset($property_identifier) && $correct_length_property) { // ... add only the building number if the property number is ok $loc1 = $property_identifier; $set_custom_address = true; $this->warnings[] = "Composite (innleie) has non-conforming building identifier ({$building_identifier}). Using property identifier instead ({$loc1}). Setting custom address."; } } if (!isset($loc1)) { $loc1 = $object_identifier; $set_custom_address = true; $this->warnings[] = "Composite (innleie) lacks building identifier/property identifier ({$building_identifier}/{$property_identifier}). Using object identifier instead ({$loc1}). Setting custom address."; } } else { $this->errors[] = "The type of import ({$title}) is invalid"; } } } $composite = new rental_composite(); // Use the first address line as name if no name $name = $this->decode($data[26]); //cLeieobjektnavn $address1 = $this->decode($data[6]); //cAdresse1 if (!isset($name)) { $name = $address1; } if ($set_custom_address) { // Set address $composite->set_custom_address_1($address1); $composite->set_custom_address_2($this->decode($data[7])); $composite->set_custom_postcode($this->decode($data[8])); $composite->set_has_custom_address(true); } $composite->set_name($name); $composite->set_description($this->decode($data[3])); //cLeieobjektBeskrivelse $composite->set_object_type_id($this->decode($data[25])); //nLeieobjektTypeId $composite->set_area($this->decode($data[2])); //nMengde $composite->set_is_active($data[19] == "-1"); //bTilgjengelig // Store composite if ($socomposite->store($composite)) { // Add composite to collection of composite so we can refer to it later. $composites[$data[0]] = $composite->get_id(); // Add units only if composite stored ok. $res = $sounit->store(new rental_unit(null, $composite->get_id(), new rental_property_location($loc1, null))); $this->messages[] = "Successfully added composite " . $composite->get_name() . " (" . $composite->get_id() . ")"; if ($res) { $this->messages[] = "Successfully added unit " . $loc1 . " to composite (" . $composite->get_id() . ")"; } } else { $this->errors[] = "Failed to store composite " . $composite->get_name(); } } $this->messages[] = "Successfully imported " . count($composites) . " composites (" . (time() - $start_time) . " seconds)"; return $composites; }
/** * Public method. Called when user wants to remove a unit to a composite * @param HTTP::id the composite ID * @param HTTP::location_id */ function remove_unit() { if (!($this->isExecutiveOfficer() || $this->isAdministrator())) { $this->render('permission_denied.php', array('message' => lang('permission_denied'))); return; } $unit_id = (int) phpgw::get_var('id'); if (isset($unit_id) && $unit_id > 0) { rental_sounit::get_instance()->delete($unit_id); } }