function read_single($workorder_id)
 {
     if (!$workorder_id) {
         return array();
     }
     $contacts = CreateObject('property.sogeneric');
     $contacts->get_location_info('vendor', false);
     $workorder = $this->so->read_single($workorder_id);
     $dateformat = $GLOBALS['phpgw_info']['user']['preferences']['common']['dateformat'];
     //Delay;
     $workorder['tender_delay'] = phpgwapi_datetime::get_working_days($workorder['tender_deadline'], $workorder['tender_received']);
     $workorder['end_date_delay'] = phpgwapi_datetime::get_working_days($workorder['end_date'], $workorder['inspection_on_completion']);
     //formtatting
     $workorder['start_date'] = $GLOBALS['phpgw']->common->show_date($workorder['start_date'], $dateformat);
     $workorder['end_date'] = $GLOBALS['phpgw']->common->show_date($workorder['end_date'], $dateformat);
     $workorder['tender_deadline'] = $GLOBALS['phpgw']->common->show_date($workorder['tender_deadline'], $dateformat);
     $workorder['tender_received'] = $GLOBALS['phpgw']->common->show_date($workorder['tender_received'], $dateformat);
     $workorder['inspection_on_completion'] = $GLOBALS['phpgw']->common->show_date($workorder['inspection_on_completion'], $dateformat);
     if (isset($workorder['vendor_id']) && $workorder['vendor_id']) {
         $custom = createObject('property.custom_fields');
         $vendor['attributes'] = $custom->find('property', '.vendor', 0, '', 'ASC', 'attrib_sort', true, true);
         $vendor = $contacts->read_single(array('id' => $workorder['vendor_id']), $vendor);
         foreach ($vendor['attributes'] as $attribute) {
             if ($attribute['name'] == 'org_name') {
                 $workorder['vendor_name'] = $attribute['value'];
             }
             if ($attribute['name'] == 'email') {
                 $workorder['vendor_email'] = $attribute['value'];
             }
         }
     }
     $workorder['b_account_name'] = $this->so->get_b_account_name($workorder['b_account_id']);
     $config = CreateObject('phpgwapi.config', 'property');
     $config->read();
     $tax = 1 + $config->config_data['fm_tax'] / 100;
     $workorder['calculation'] = $workorder['calculation'] * $tax;
     $vfs = CreateObject('phpgwapi.vfs');
     $vfs->override_acl = 1;
     $workorder['files'] = $vfs->ls(array('string' => "/property/workorder/{$workorder_id}", 'relatives' => array(RELATIVE_NONE)));
     $vfs->override_acl = 0;
     $j = count($workorder['files']);
     for ($i = 0; $i < $j; $i++) {
         $workorder['files'][$i]['file_name'] = urlencode($workorder['files'][$i]['name']);
     }
     $workorder['origin'] = $this->interlink->get_relation('property', '.project.workorder', $workorder_id, 'origin');
     $workorder['target'] = $this->interlink->get_relation('property', '.project.workorder', $workorder_id, 'target');
     if ($workorder['location_code']) {
         $solocation = CreateObject('property.solocation', $this->bocommon);
         $workorder['location_data'] = $solocation->read_single($workorder['location_code']);
     }
     if ($workorder['tenant_id'] > 0) {
         $tenant_data = $this->bocommon->read_single_tenant($workorder['tenant_id']);
         $workorder['location_data']['tenant_id'] = $workorder['tenant_id'];
         $workorder['location_data']['contact_phone'] = $tenant_data['contact_phone'];
         $workorder['location_data']['last_name'] = $tenant_data['last_name'];
         $workorder['location_data']['first_name'] = $tenant_data['first_name'];
     } else {
         unset($workorder['location_data']['tenant_id']);
         unset($workorder['location_data']['contact_phone']);
         unset($workorder['location_data']['last_name']);
         unset($workorder['location_data']['first_name']);
     }
     if ($workorder['p_num']) {
         $soadmin_entity = CreateObject('property.soadmin_entity');
         $category = $soadmin_entity->read_single_category($workorder['p_entity_id'], $workorder['p_cat_id']);
         $workorder['p'][$workorder['p_entity_id']]['p_num'] = $workorder['p_num'];
         $workorder['p'][$workorder['p_entity_id']]['p_entity_id'] = $workorder['p_entity_id'];
         $workorder['p'][$workorder['p_entity_id']]['p_cat_id'] = $workorder['p_cat_id'];
         $workorder['p'][$workorder['p_entity_id']]['p_cat_name'] = $category['name'];
     }
     $event_criteria = array('appname' => 'property', 'location' => '.project.workorder', 'location_item_id' => $workorder_id);
     $events = execMethod('property.soevent.read_at_location', $event_criteria);
     $workorder['event_id'] = $events ? $events[0]['id'] : '';
     return $workorder;
 }
 /**
  * Show project that is overdue
  *
  * @return void
  */
 public function home_project_overdue_end_date()
 {
     $accound_id = $GLOBALS['phpgw_info']['user']['account_id'];
     $save_app = $GLOBALS['phpgw_info']['flags']['currentapp'];
     $GLOBALS['phpgw_info']['flags']['currentapp'] = 'property';
     $maxmatches = $GLOBALS['phpgw_info']['user']['preferences']['common']['maxmatchs'];
     $GLOBALS['phpgw_info']['user']['preferences']['common']['maxmatchs'] = 5;
     $prefs = $GLOBALS['phpgw_info']['user']['preferences'];
     if (isset($prefs['property']['mainscreen_show_project_overdue']) && $prefs['property']['mainscreen_show_project_overdue'] == 'yes') {
         $soproject = CreateObject('property.soproject');
         $values = $soproject->read(array('filter' => $accound_id, 'overdue' => time()));
         $total_records = $soproject->total_records;
         $portalbox = CreateObject('phpgwapi.listbox', array('title' => lang('end date delay') . " ({$total_records})", 'primary' => $GLOBALS['phpgw_info']['theme']['navbar_bg'], 'secondary' => $GLOBALS['phpgw_info']['theme']['navbar_bg'], 'tertiary' => $GLOBALS['phpgw_info']['theme']['navbar_bg'], 'width' => '100%', 'outerborderwidth' => '0', 'header_background_image' => $GLOBALS['phpgw']->common->image('phpgwapi', 'bg_filler', '.png', False)));
         $app_id = $GLOBALS['phpgw']->applications->name2id('property');
         if (!isset($GLOBALS['portal_order']) || !in_array($app_id, $GLOBALS['portal_order'])) {
             $GLOBALS['portal_order'][] = $app_id;
         }
         $var = $this->get_controls($app_id);
         foreach ($var as $key => $value) {
             //				$portalbox->set_controls($key,$value);
         }
         foreach ($values as $entry) {
             $entry['delay'] = ceil(phpgwapi_datetime::get_working_days($entry['end_date'], time()));
             $portalbox->data[] = array('text' => "Forsinkelse: {$entry['delay']} dager :: prosjekt nr:{$entry['project_id']} :: {$entry['location_code']} :: {$entry['address']}", 'link' => $GLOBALS['phpgw']->link('/index.php', array('menuaction' => 'property.uiproject.edit', 'id' => $entry['project_id'], 'tab' => 'budget')));
         }
         echo "\n" . '<!-- BEGIN ticket info -->' . "\n<div class='property_tickets' style='padding-left: 10px;'>" . $portalbox->draw() . "</div>\n" . '<!-- END ticket info -->' . "\n";
         unset($tts);
         unset($portalbox);
         unset($category_name);
         unset($default_status);
     }
     $GLOBALS['phpgw_info']['flags']['currentapp'] = $save_app;
     $GLOBALS['phpgw_info']['user']['preferences']['common']['maxmatchs'] = $maxmatches;
 }
 private function update_ticket($id, $project, $values_attribute)
 {
     $_finnish_date = (int) $project['end_date'];
     if (!$_finnish_date) {
         return;
     }
     $finnish_date = $_finnish_date;
     $note = 'FerdigDato er automatisk til prosjekt sluttDato';
     if ($project['b_account_id'] == 48) {
         //search for 2 working day delay
         for ($i = 2; $i < 10; $i++) {
             $finnish_date = $_finnish_date + 86400 * $i;
             $working_days = phpgwapi_datetime::get_working_days($_finnish_date, $finnish_date);
             if ($working_days == 2) {
                 $note = 'FerdigDato er automatisk oppdatert til 2 virkedager etter prosjekt sluttDato';
                 break;
             }
         }
     }
     $this->db->query("SELECT status, finnish_date, finnish_date2 FROM fm_tts_tickets WHERE id='{$id}'", __LINE__, __FILE__);
     $this->db->next_record();
     $status = $this->db->f('status');
     /**
      * Kun oppdatere åpne meldinger
      */
     if ($status == 'X') {
         return;
     }
     $oldfinnish_date = (int) $this->db->f('finnish_date');
     $oldfinnish_date2 = (int) $this->db->f('finnish_date2');
     $update = false;
     if ($oldfinnish_date && $finnish_date && $oldfinnish_date2 != $finnish_date) {
         $this->db->query("UPDATE fm_tts_tickets SET finnish_date2='{$finnish_date}' WHERE id='{$id}'", __LINE__, __FILE__);
         $old_value = $oldfinnish_date2;
         $update = true;
     } else {
         if (!$oldfinnish_date && $finnish_date && $oldfinnish_date != $finnish_date) {
             $this->db->query("UPDATE fm_tts_tickets SET finnish_date='{$finnish_date}' , finnish_date2='{$finnish_date}' WHERE id='{$id}'", __LINE__, __FILE__);
             $old_value = $oldfinnish_date;
             $update = true;
         }
     }
     if ($update) {
         $fields_updated = array('finnish_date');
         $this->historylog->add('F', $id, $finnish_date, $old_value);
         $this->historylog->add('C', $id, $note);
         $this->botts->mail_ticket($id, $fields_updated, $receipt = array(), $project['location_code'], false, true);
         phpgwapi_cache::message_set(lang('finnish date changed'), 'message');
     }
 }