protected function populate(int $requirement_id, &$requirement)
 {
     if ($requirement == null) {
         $requirement = new logistic_requirement((int) $requirement_id);
         $requirement->set_activity_id($this->unmarshal($this->db->f('activity_id'), 'int'));
         $requirement->set_start_date($this->unmarshal($this->db->f('start_date'), 'int'));
         $requirement->set_end_date($this->unmarshal($this->db->f('end_date'), 'int'));
         $requirement->set_no_of_items($this->unmarshal($this->db->f('no_of_elements'), 'int'));
         $requirement->set_location_id($this->unmarshal($this->db->f('location_id'), 'int'));
     }
     return $requirement;
 }
 /**
  * Get a static reference to the storage object associated with this model object
  *
  * @return the storage object
  */
 public static function get_so()
 {
     if (self::$so == null) {
         self::$so = CreateObject('logistic.sorequirement');
     }
     return self::$so;
 }
 public function save()
 {
     $requirement_id = phpgw::get_var('id', 'int');
     $new_location_id = phpgw::get_var('location_id');
     if ($nonavbar = phpgw::get_var('nonavbar', 'bool')) {
         $GLOBALS['phpgw_info']['flags']['nonavbar'] = $nonavbar;
         $GLOBALS['phpgw_info']['flags']['noheader_xsl'] = true;
         $GLOBALS['phpgw_info']['flags']['nofooter'] = true;
     }
     if (!$this->read) {
         $GLOBALS['phpgw']->redirect_link('/index.php', array('menuaction' => 'logistic.uirequirement.view', 'id' => $requirement_id, 'nonavbar' => $nonavbar));
         return false;
         // in case redirect fail;
     }
     if ($requirement_id) {
         $requirement = $this->so->get_single($requirement_id);
         $old_location_id = $requirement->get_location_id();
     } else {
         $requirement = new logistic_requirement();
     }
     $requirement->populate();
     if ($requirement->validate()) {
         //				$db_requirement = $this->so->get_db();
         //				$db_requirement->transaction_begin();
         $GLOBALS['phpgw']->db->transaction_begin();
         $requirement_id = $this->so->store($requirement);
         $status_delete_values = true;
         if ($old_location_id > 0 && is_numeric($old_location_id) && $old_location_id != $new_location_id) {
             $status_delete_values = $this->so_requirement_value->delete_values($requirement_id);
             $status_delete_resources = $this->so_resource_allocation->delete_resources($requirement_id);
         }
         if ($requirement_id > 0 && $status_delete_values && $status_delete_resources) {
             //					$db_requirement->transaction_commit();
             $GLOBALS['phpgw']->db->transaction_commit();
         } else {
             $GLOBALS['phpgw']->db->transaction_commit();
             //					$db_requirement->transaction_abort();
         }
         $GLOBALS['phpgw']->redirect_link('/index.php', array('menuaction' => 'logistic.uirequirement.view', 'id' => $requirement_id, 'nonavbar' => $nonavbar));
     } else {
         $this->edit($requirement);
     }
 }