From 15201df1b502d21be9b6ceda46e074d4bb95003b Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Wed, 11 Jan 2006 05:17:15 +0000 Subject: [PATCH] improved projectmanager integration, specially pricelist plus some bugfixes --- timesheet/inc/class.botimesheet.inc.php | 17 ++++- .../inc/class.datasource_timesheet.inc.php | 8 ++- timesheet/inc/class.uitimesheet.inc.php | 68 +++++++++++++++---- timesheet/setup/etemplates.inc.php | 6 +- timesheet/setup/phpgw_de.lang | 3 +- timesheet/setup/phpgw_en.lang | 1 + timesheet/setup/setup.inc.php | 3 +- timesheet/setup/tables_baseline.inc.php | 37 ++++++++++ timesheet/setup/tables_current.inc.php | 3 +- timesheet/setup/tables_update.inc.php | 26 +++++++ timesheet/templates/default/edit.xet | 15 ++-- 11 files changed, 159 insertions(+), 28 deletions(-) create mode 100644 timesheet/setup/tables_baseline.inc.php create mode 100644 timesheet/setup/tables_update.inc.php diff --git a/timesheet/inc/class.botimesheet.inc.php b/timesheet/inc/class.botimesheet.inc.php index f40575d111..e4a5eca53a 100644 --- a/timesheet/inc/class.botimesheet.inc.php +++ b/timesheet/inc/class.botimesheet.inc.php @@ -69,7 +69,14 @@ class botimesheet extends so_sql 'Last year' => array(-1,0,0,0, 0,0,0,0), '2 years ago' => array(-2,0,0,0, -1,0,0,0), '3 years ago' => array(-3,0,0,0, -2,0,0,0), - ); + ); + /** + * @var object $link reference to the (bo)link class instanciated at $GLOBALS['egw']->link + */ + var $link; + /** + * @var array $grants + */ function botimesheet() { @@ -296,7 +303,7 @@ class botimesheet extends so_sql $this->data['ts_modifier'] = $GLOBALS['egw_info']['user']['account_id']; $this->data['ts_modified'] = $this->now; } - if (!($err = parent::save(null))) + if (!($err = parent::save())) { // notify the link-class about the update, as other apps may be subscribt to it $this->link->notify_update(TIMESHEET_APP,$this->data['ts_id'],$this->data); @@ -313,7 +320,11 @@ class botimesheet extends so_sql */ function delete($keys=null,$ignore_acl=false) { - $ts_id = is_null($keys) ? $this->data['ts_id'] : (is_array($keys) ? $keys['ts_id'] : $keys); + if (!is_array($keys) && (int) $keys) + { + $keys = array('ts_id' => (int) $keys); + } + $ts_id = is_null($keys) ? $this->data['ts_id'] : $keys['ts_id']; if (!$this->check_acl(EGW_ACL_DELETE,$ts_id)) { diff --git a/timesheet/inc/class.datasource_timesheet.inc.php b/timesheet/inc/class.datasource_timesheet.inc.php index 82fc945a11..3c0a8d2cd5 100644 --- a/timesheet/inc/class.datasource_timesheet.inc.php +++ b/timesheet/inc/class.datasource_timesheet.inc.php @@ -32,7 +32,8 @@ class datasource_timesheet extends datasource { $this->datasource(TIMESHEET_APP); - $this->valid = PM_REAL_START|PM_REAL_END|PM_USED_TIME|PM_USED_BUDGET|PM_RESOURCES|PM_DETAILS|PM_COMPLETION; + $this->valid = PM_REAL_START|PM_REAL_END|PM_USED_TIME|PM_USED_BUDGET|PM_USED_QUANTITY| + PM_PRICELIST_ID|PM_UNITPRICE|PM_RESOURCES|PM_DETAILS|PM_COMPLETION; } /** @@ -46,7 +47,7 @@ class datasource_timesheet extends datasource // we use $GLOBALS['bocal'] as an already running instance is availible there if (!is_object($GLOBALS['botimesheet'])) { - $GLOBALS['bocal'] =& new botimesheet(); + $GLOBALS['botimesheet'] =& new botimesheet(); } if (!is_array($data_id)) { @@ -64,6 +65,9 @@ class datasource_timesheet extends datasource 'pe_real_start' => $data['ts_start'], 'pe_resources' => array($data['ts_owner']), 'pe_details' => $data['ts_description'] ? nl2br($data['ts_description']) : '', + 'pl_id' => $data['pl_id'], + 'pe_unitprice' => $data['ts_unitprice'], + 'pe_used_quantity' => $data['ts_quantity'], 'pe_used_budget' => $data['ts_quantity'] * $data['ts_unitprice'], 'pe_completion' => 100, ); diff --git a/timesheet/inc/class.uitimesheet.inc.php b/timesheet/inc/class.uitimesheet.inc.php index d5f4fb1616..623540b0a9 100644 --- a/timesheet/inc/class.uitimesheet.inc.php +++ b/timesheet/inc/class.uitimesheet.inc.php @@ -72,7 +72,7 @@ class uitimesheet extends botimesheet } else { - list($button) = each($content['button']); + list($button) = @each($content['button']); $view = $content['view']; $referer = $content['referer']; $this->data = $content; @@ -103,6 +103,19 @@ class uitimesheet extends botimesheet else { $msg = lang('Entry saved'); + if ((int) $this->data['pm_id'] != (int) $this->data['old_pm_id']) + { + // update links accordingly + if ($this->data['pm_id']) + { + $this->link->link(TIMESHEET_APP,$content['link_to']['to_id'],'projectmanager',$this->data['pm_id']); + } + if ($this->data['old_pm_id']) + { + $this->link->unlink2(0,TIMESHEET_APP,$content['link_to']['to_id'],0,'projectmanager',$this->data['old_pm_id']); + unset($this->data['old_pm_id']); + } + } if (is_array($content['link_to']['to_id']) && count($content['link_to']['to_id'])) { $this->link->link(TIMESHEET_APP,$this->data['ts_id'],$content['link_to']['to_id']); @@ -127,10 +140,18 @@ class uitimesheet extends botimesheet case 'delete': if ($button == 'delete') { - $this->delete(); - $msg = lang('Entry deleted'); - $js = "opener.location.href=opener.location.href+'&msg=$msg'"; + if ($this->delete()) + { + $msg = lang('Entry deleted'); + $js = "opener.location.href=opener.location.href+'&msg=$msg';"; + } + else + { + $msg = lang('Error deleting the entry!!!'); + break; // dont close window + } } + // fall-through for save case 'cancel': $js .= 'window.close();'; echo "\n\n\n\n\n"; @@ -142,23 +163,22 @@ class uitimesheet extends botimesheet 'view' => $view, 'referer' => $referer, ); - $content = $this->data + array( + $content = array_merge($this->data,array( 'msg' => $msg, 'view' => $view, $tabs => $content[$tabs], 'link_to' => array( - 'to_id' => $content['link_to']['to_id'] ? $content['link_to']['to_id'] : $this->data['ts_id'], + 'to_id' => $this->data['ts_id'] ? $this->data['ts_id'] : $content['link_to']['to_id'], 'to_app' => TIMESHEET_APP, ), 'js' => "\n", 'ts_quantity_blur' => $this->data['ts_duration'] ? $this->data['ts_duration'] / 60.0 : '', - ); + )); if (!$this->data['ts_id'] && isset($_GET['link_app']) && isset($_GET['link_id']) && preg_match('/^[a-z_0-9-]+:[:a-z_0-9-]+$/i',$_GET['link_app'].':'.$_GET['link_id']) && // gard against XSS !is_array($content['link_to']['to_id'])) { $this->link->link(TIMESHEET_APP,$content['link_to']['to_id'],$_GET['link_app'],$_GET['link_id']); -// $content['ts_project'] = $this->link->title($_GET['link_app'],$_GET['link_id']); if ($_GET['link_app'] == 'projectmanager') { $links = array($_GET['link_id']); @@ -168,9 +188,12 @@ class uitimesheet extends botimesheet { $links = $this->link->get_links(TIMESHEET_APP,$this->data['ts_id'],'projectmanager'); } - if ($links) + $preserv['old_pm_id'] = array_shift($links); + if (!isset($this->data['pm_id']) && $preserv['old_pm_id']) $content['pm_id'] = $preserv['old_pm_id']; + + if ($content['pm_id']) { - $preserv['ts_project_blur'] = $content['ts_project_blur'] = $this->link->title('projectmanager',array_shift($links)); + $preserv['ts_project_blur'] = $content['ts_project_blur'] = $this->link->title('projectmanager',$content['pm_id']); } $readonlys = array( 'button[delete]' => !$this->data['ts_id'] || !$this->check_acl(EGW_ACL_DELETE), @@ -181,7 +204,7 @@ class uitimesheet extends botimesheet ); if ($view) { - foreach($this->data as $key => $val) + foreach(array_merge(array_keys($this->data),array('pm_id','pl_id','link_to')) as $key) { $readonlys[$key] = true; } @@ -195,7 +218,12 @@ class uitimesheet extends botimesheet ($view ? lang('View') : ($this->data['ts_id'] ? lang('Edit') : lang('Add'))); $etpl =& new etemplate('timesheet.edit'); - + // supress unknow widget 'projectmanager-*', if projectmanager is not installed or old + if (!@file_exists(EGW_INCLUDE_ROOT.'/projectmanager/inc/class.projectmanager_widget.inc.php')) + { + $etpl->set_cell_attribute('pm_id','disabled',true); + $etpl->set_cell_attribute('pl_id','disabled',true); + } return $etpl->exec(TIMESHEET_APP.'.uitimesheet.edit',$content,array( 'ts_owner' => $edit_grants, ),$readonlys,$preserv,2); @@ -285,7 +313,19 @@ class uitimesheet extends botimesheet $etpl =& new etemplate('timesheet.index'); if ($_GET['msg']) $msg = $_GET['msg']; - + + if ($content['nm']['rows']['delete']) + { + list($ts_id) = each($content['nm']['rows']['delete']); + if ($this->delete($ts_id)) + { + $msg = lang('Entry deleted'); + } + else + { + $msg = lang('Error deleting the entry!!!'); + } + } $content = array( 'nm' => $GLOBALS['egw']->session->appsession('index',TIMESHEET_APP), 'msg' => $msg, @@ -313,4 +353,4 @@ class uitimesheet extends botimesheet 'ts_owner' => $read_grants, ),$readonlys,$preserv); } -} \ No newline at end of file +} diff --git a/timesheet/setup/etemplates.inc.php b/timesheet/setup/etemplates.inc.php index 5fe073a50a..3778d13694 100644 --- a/timesheet/setup/etemplates.inc.php +++ b/timesheet/setup/etemplates.inc.php @@ -1,5 +1,5 @@ 'timesheet.edit','template' => '','lang' => '','group' => '0','version' => '0.1.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:8:{i:0;a:8:{s:2:"c2";s:2:"th";s:2:"c3";s:3:"row";s:1:"A";s:3:"100";s:2:"c6";s:3:"row";s:2:"h6";s:14:",!@ts_modified";s:2:"c4";s:3:"row";s:2:"h2";s:2:"28";s:2:"h1";s:6:",!@msg";}i:1;a:2:{s:1:"A";a:5:{s:4:"type";s:5:"label";s:4:"span";s:13:"all,redItalic";s:4:"name";s:3:"msg";s:7:"no_lang";s:1:"1";s:5:"align";s:6:"center";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:2;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:11:",,,ts_owner";s:5:"label";s:4:"User";}s:1:"B";a:4:{s:4:"type";s:6:"select";s:4:"name";s:8:"ts_owner";s:4:"span";s:3:"all";s:7:"no_lang";s:1:"1";}}i:3;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:13:",,,ts_project";s:5:"label";s:7:"Project";}s:1:"B";a:5:{s:4:"type";s:4:"text";s:4:"size";s:5:"65,80";s:4:"name";s:10:"ts_project";s:4:"span";s:3:"all";s:4:"blur";s:16:"@ts_project_blur";}}i:4;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:14:",,ts_unitprice";s:5:"label";s:9:"Unitprice";}s:1:"B";a:3:{s:4:"type";s:5:"float";s:4:"name";s:12:"ts_unitprice";s:4:"span";s:3:"all";}}i:5;a:2:{s:1:"A";a:4:{s:4:"type";s:3:"tab";s:5:"label";s:19:"General|Notes|Links";s:4:"name";s:19:"general|notes|links";s:4:"span";s:3:"all";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:6;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:13:"Last modified";}s:1:"B";a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";i:1;a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:11:"ts_modified";s:8:"readonly";s:1:"1";}i:2;a:4:{s:4:"type";s:14:"select-account";s:4:"name";s:11:"ts_modifier";s:5:"label";s:2:"by";s:8:"readonly";s:1:"1";}}}i:7;a:2:{s:1:"A";a:5:{s:4:"type";s:4:"hbox";s:4:"size";s:5:"2,0,0";s:4:"span";s:1:"2";i:1;a:8:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"6";i:1;a:4:{s:4:"type";s:6:"button";s:5:"label";s:4:"Edit";s:4:"name";s:12:"button[edit]";s:4:"help";s:15:"Edit this entry";}i:2;a:4:{s:4:"type";s:6:"button";s:4:"name";s:16:"button[save_new]";s:5:"label";s:10:"Save & New";s:4:"help";s:34:"Saves this entry and add a new one";}i:3;a:4:{s:4:"type";s:6:"button";s:4:"name";s:12:"button[save]";s:5:"label";s:4:"Save";s:4:"help";s:22:"Saves the changes made";}i:4;a:4:{s:4:"type";s:6:"button";s:4:"name";s:13:"button[apply]";s:5:"label";s:5:"Apply";s:4:"help";s:24:"Applies the changes made";}i:5;a:5:{s:4:"type";s:6:"button";s:4:"name";s:14:"button[cancel]";s:5:"label";s:6:"Cancel";s:4:"help";s:44:"closes the window without saving the changes";s:7:"onclick";s:15:"window.close();";}i:6;a:2:{s:4:"type";s:4:"html";s:4:"name";s:2:"js";}}i:2;a:6:{s:4:"type";s:6:"button";s:5:"label";s:6:"Delete";s:5:"align";s:5:"right";s:4:"name";s:14:"button[delete]";s:4:"help";s:17:"Delete this entry";s:7:"onclick";s:36:"return confirm(\'Delete this entry\');";}}s:1:"B";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:7;s:4:"cols";i:2;s:4:"size";s:4:"100%";s:7:"options";a:1:{i:0;s:4:"100%";}}}','size' => '100%','style' => '','modified' => '1134772260',); +$templ_data[] = array('name' => 'timesheet.edit','template' => '','lang' => '','group' => '0','version' => '0.2.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:8:{i:0;a:8:{s:2:"c2";s:2:"th";s:2:"c3";s:3:"row";s:1:"A";s:3:"100";s:2:"c6";s:3:"row";s:2:"h6";s:14:",!@ts_modified";s:2:"c4";s:3:"row";s:2:"h2";s:2:"28";s:2:"h1";s:6:",!@msg";}i:1;a:2:{s:1:"A";a:5:{s:4:"type";s:5:"label";s:4:"span";s:13:"all,redItalic";s:4:"name";s:3:"msg";s:7:"no_lang";s:1:"1";s:5:"align";s:6:"center";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:2;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:11:",,,ts_owner";s:5:"label";s:4:"User";}s:1:"B";a:4:{s:4:"type";s:6:"select";s:4:"name";s:8:"ts_owner";s:4:"span";s:3:"all";s:7:"no_lang";s:1:"1";}}i:3;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:13:",,,ts_project";s:5:"label";s:7:"Project";}s:1:"B";a:5:{s:4:"type";s:4:"vbox";s:4:"size";s:1:"2";s:4:"span";s:3:"all";i:1;a:6:{s:4:"type";s:21:"projectmanager-select";s:4:"size";s:4:"None";s:4:"name";s:5:"pm_id";s:4:"span";s:3:"all";s:4:"help";s:16:"Select a project";s:8:"onchange";s:1:"1";}i:2;a:4:{s:4:"type";s:4:"text";s:4:"name";s:10:"ts_project";s:4:"blur";s:16:"@ts_project_blur";s:4:"size";s:5:"65,80";}}}i:4;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:14:",,ts_unitprice";s:5:"label";s:9:"Unitprice";}s:1:"B";a:5:{s:4:"type";s:4:"hbox";s:4:"span";s:3:"all";s:4:"size";s:1:"2";i:1;a:4:{s:4:"type";s:24:"projectmanager-pricelist";s:4:"name";s:5:"pl_id";s:4:"size";s:4:"None";s:8:"onchange";s:209:"this.form[\'exec[ts_unitprice]\'].value=this.options[this.selectedIndex].text.lastIndexOf(\'(\') < 0 ? \'\' : this.options[this.selectedIndex].text.slice(this.options[this.selectedIndex].text.lastIndexOf(\'(\')+1,-1);";}i:2;a:3:{s:4:"type";s:5:"float";s:4:"name";s:12:"ts_unitprice";s:4:"span";s:3:"all";}}}i:5;a:2:{s:1:"A";a:4:{s:4:"type";s:3:"tab";s:5:"label";s:19:"General|Notes|Links";s:4:"name";s:19:"general|notes|links";s:4:"span";s:3:"all";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:6;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:13:"Last modified";}s:1:"B";a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";i:1;a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:11:"ts_modified";s:8:"readonly";s:1:"1";}i:2;a:4:{s:4:"type";s:14:"select-account";s:4:"name";s:11:"ts_modifier";s:5:"label";s:2:"by";s:8:"readonly";s:1:"1";}}}i:7;a:2:{s:1:"A";a:5:{s:4:"type";s:4:"hbox";s:4:"size";s:5:"2,0,0";s:4:"span";s:1:"2";i:1;a:8:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"6";i:1;a:4:{s:4:"type";s:6:"button";s:5:"label";s:4:"Edit";s:4:"name";s:12:"button[edit]";s:4:"help";s:15:"Edit this entry";}i:2;a:4:{s:4:"type";s:6:"button";s:4:"name";s:16:"button[save_new]";s:5:"label";s:10:"Save & New";s:4:"help";s:34:"Saves this entry and add a new one";}i:3;a:4:{s:4:"type";s:6:"button";s:4:"name";s:12:"button[save]";s:5:"label";s:4:"Save";s:4:"help";s:22:"Saves the changes made";}i:4;a:4:{s:4:"type";s:6:"button";s:4:"name";s:13:"button[apply]";s:5:"label";s:5:"Apply";s:4:"help";s:24:"Applies the changes made";}i:5;a:5:{s:4:"type";s:6:"button";s:4:"name";s:14:"button[cancel]";s:5:"label";s:6:"Cancel";s:4:"help";s:44:"closes the window without saving the changes";s:7:"onclick";s:15:"window.close();";}i:6;a:2:{s:4:"type";s:4:"html";s:4:"name";s:2:"js";}}i:2;a:6:{s:4:"type";s:6:"button";s:5:"label";s:6:"Delete";s:5:"align";s:5:"right";s:4:"name";s:14:"button[delete]";s:4:"help";s:17:"Delete this entry";s:7:"onclick";s:36:"return confirm(\'Delete this entry\');";}}s:1:"B";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:7;s:4:"cols";i:2;s:4:"size";s:4:"100%";s:7:"options";a:1:{i:0;s:4:"100%";}}}','size' => '100%','style' => '.width100 { width: 100%; }','modified' => '1136861594',); + $templ_data[] = array('name' => 'timesheet.edit.general','template' => '','lang' => '','group' => '0','version' => '0.1.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:6:{i:0;a:5:{s:2:"c1";s:3:"row";s:1:"A";s:2:"95";s:2:"c3";s:3:"row";s:2:"c4";s:3:"row";s:2:"c2";s:3:"row";}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:11:",,,ts_title";s:5:"label";s:5:"Title";}s:1:"B";a:4:{s:4:"type";s:4:"text";s:4:"size";s:5:"65,80";s:4:"name";s:8:"ts_title";s:6:"needed";s:1:"1";}}i:2;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:9:",,,cat_id";s:5:"label";s:8:"Category";}s:1:"B";a:3:{s:4:"type";s:10:"select-cat";s:4:"name";s:6:"cat_id";s:4:"size";s:4:"None";}}i:3;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:11:",,,ts_start";s:5:"label";s:4:"Date";}s:1:"B";a:4:{s:4:"type";s:9:"date-time";s:4:"name";s:8:"ts_start";s:6:"needed";s:1:"1";s:4:"size";s:2:",8";}}i:4;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:14:",,,ts_duration";s:5:"label";s:8:"Duration";}s:1:"B";a:3:{s:4:"type";s:13:"date-duration";s:4:"name";s:11:"ts_duration";s:4:"size";s:2:",h";}}i:5;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:14:",,,ts_quantity";s:5:"label";s:8:"Quantity";}s:1:"B";a:4:{s:4:"type";s:5:"float";s:4:"name";s:11:"ts_quantity";s:4:"help";s:30:"empty if identical to duration";s:4:"blur";s:17:"@ts_quantity_blur";}}}s:4:"rows";i:5;s:4:"cols";i:2;s:4:"size";s:8:"100%,150";s:7:"options";a:2:{i:0;s:4:"100%";i:1;s:3:"150";}}}','size' => '100%,150','style' => '','modified' => '1134773043',); -$templ_data[] = array('name' => 'timesheet.edit.links','template' => '','lang' => '','group' => '0','version' => '0.1.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:5:{i:0;a:7:{s:1:"A";s:3:"100";s:2:"h1";s:13:",@status_only";s:2:"h2";s:13:",@status_only";s:2:"c1";s:2:"th";s:2:"c2";s:3:"row";s:2:"c3";s:2:"th";s:2:"c4";s:11:"row_off,top";}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"span";s:3:"all";s:5:"label";s:16:"Create new links";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:2;a:2:{s:1:"A";a:3:{s:4:"type";s:7:"link-to";s:4:"span";s:3:"all";s:4:"name";s:7:"link_to";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:3;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"span";s:3:"all";s:5:"label";s:14:"Existing links";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:4;a:2:{s:1:"A";a:3:{s:4:"type";s:9:"link-list";s:4:"span";s:3:"all";s:4:"name";s:7:"link_to";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:4;s:4:"cols";i:2;s:4:"size";s:17:"100%,150,,,,,auto";s:7:"options";a:3:{i:0;s:4:"100%";i:1;s:3:"150";i:6;s:4:"auto";}}}','size' => '100%,150,,,,,auto','style' => '','modified' => '1134775301',); +$templ_data[] = array('name' => 'timesheet.edit.links','template' => '','lang' => '','group' => '0','version' => '0.1.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:5:{i:0;a:7:{s:1:"A";s:3:"100";s:2:"h1";s:6:",@view";s:2:"h2";s:13:",@status_only";s:2:"c1";s:2:"th";s:2:"c2";s:3:"row";s:2:"c3";s:2:"th";s:2:"c4";s:11:"row_off,top";}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"span";s:3:"all";s:5:"label";s:16:"Create new links";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:2;a:2:{s:1:"A";a:3:{s:4:"type";s:7:"link-to";s:4:"span";s:3:"all";s:4:"name";s:7:"link_to";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:3;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"span";s:3:"all";s:5:"label";s:14:"Existing links";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:4;a:2:{s:1:"A";a:3:{s:4:"type";s:9:"link-list";s:4:"span";s:3:"all";s:4:"name";s:7:"link_to";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:4;s:4:"cols";i:2;s:4:"size";s:17:"100%,150,,,,,auto";s:7:"options";a:3:{i:0;s:4:"100%";i:1;s:3:"150";i:6;s:4:"auto";}}}','size' => '100%,150,,,,,auto','style' => '','modified' => '1134775301',); $templ_data[] = array('name' => 'timesheet.edit.notes','template' => '','lang' => '','group' => '0','version' => '0.1.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:1:{s:2:"c1";s:7:"row,top";}i:1;a:1:{s:1:"A";a:3:{s:4:"type";s:8:"textarea";s:4:"size";s:4:"8,70";s:4:"name";s:14:"ts_description";}}}s:4:"rows";i:1;s:4:"cols";i:1;s:4:"size";s:8:"100%,150";s:7:"options";a:2:{i:0;s:4:"100%";i:1;s:3:"150";}}}','size' => '100%,150','style' => '','modified' => '1134773787',); diff --git a/timesheet/setup/phpgw_de.lang b/timesheet/setup/phpgw_de.lang index 82225f302d..24f3c576f7 100644 --- a/timesheet/setup/phpgw_de.lang +++ b/timesheet/setup/phpgw_de.lang @@ -9,6 +9,7 @@ edit this entry timesheet de diesen Eintrag bearbeiten empty if identical to duration timesheet de leer lassen wenn gleich Dauer entry deleted timesheet de Eintrag gelöscht entry saved timesheet de Eintrag gespeichert +error deleting the entry!!! timesheet de Fehler beim Löschen des Eintrags!!! error saving the entry!!! timesheet de Fehler beim Speichern des Eintrags!!! existing links timesheet de Bestehende Verknüpfungen general timesheet de Allgemein @@ -23,7 +24,7 @@ price timesheet de Preis quantity timesheet de Menge save & new timesheet de Speichern & Neu saves the changes made timesheet de Speichert die Änderungen -saves this entry and add a new one timesheet de Speichert diesen Eintrag und fügt einen neune hinzu +saves this entry and add a new one timesheet de Speichert diesen Eintrag und fügt einen neuen hinzu this month timesheet de Diesen Monat this week timesheet de Diese Woche this year timesheet de Diese Jahr diff --git a/timesheet/setup/phpgw_en.lang b/timesheet/setup/phpgw_en.lang index 85feb8e828..6d2781885c 100644 --- a/timesheet/setup/phpgw_en.lang +++ b/timesheet/setup/phpgw_en.lang @@ -9,6 +9,7 @@ edit this entry timesheet en Edit this entry empty if identical to duration timesheet en empty if identical to duration entry deleted timesheet en Entry deleted entry saved timesheet en Entry saved +error deleting the entry!!! timesheet en Error deleting the entry!!! error saving the entry!!! timesheet en Error saving the entry!!! existing links timesheet en Existing links general timesheet en General diff --git a/timesheet/setup/setup.inc.php b/timesheet/setup/setup.inc.php index a903276c1b..73e00e1a53 100644 --- a/timesheet/setup/setup.inc.php +++ b/timesheet/setup/setup.inc.php @@ -18,7 +18,7 @@ if (!defined('TIMESHEET_APP')) } $setup_info[TIMESHEET_APP]['name'] = TIMESHEET_APP; -$setup_info[TIMESHEET_APP]['version'] = '0.1.001'; +$setup_info[TIMESHEET_APP]['version'] = '0.2.001'; $setup_info[TIMESHEET_APP]['app_order'] = 5; $setup_info[TIMESHEET_APP]['tables'] = array('egw_timesheet'); $setup_info[TIMESHEET_APP]['enable'] = 1; @@ -53,3 +53,4 @@ $setup_info[TIMESHEET_APP]['depends'][] = array( 'appname' => 'etemplate', 'versions' => Array('1.2','1.3') ); + diff --git a/timesheet/setup/tables_baseline.inc.php b/timesheet/setup/tables_baseline.inc.php new file mode 100644 index 0000000000..0b336419cc --- /dev/null +++ b/timesheet/setup/tables_baseline.inc.php @@ -0,0 +1,37 @@ + array( + 'fd' => array( + 'ts_id' => array('type' => 'auto','nullable' => False), + 'ts_project' => array('type' => 'varchar','precision' => '80'), + 'ts_title' => array('type' => 'varchar','precision' => '80','nullable' => False), + 'ts_description' => array('type' => 'text'), + 'ts_start' => array('type' => 'int','precision' => '8','nullable' => False), + 'ts_duration' => array('type' => 'int','precision' => '8','nullable' => False,'default' => '0'), + 'ts_quantity' => array('type' => 'float','precision' => '8','nullable' => False), + 'ts_unitprice' => array('type' => 'float','precision' => '4'), + 'cat_id' => array('type' => 'int','precision' => '4','default' => '0'), + 'ts_owner' => array('type' => 'int','precision' => '4','nullable' => False), + 'ts_modified' => array('type' => 'int','precision' => '8','nullable' => False), + 'ts_modifier' => array('type' => 'int','precision' => '4','nullable' => False) + ), + 'pk' => array('ts_id'), + 'fk' => array(), + 'ix' => array('ts_project','ts_owner'), + 'uc' => array() + ) + ); diff --git a/timesheet/setup/tables_current.inc.php b/timesheet/setup/tables_current.inc.php index 0b336419cc..8df5b76eff 100644 --- a/timesheet/setup/tables_current.inc.php +++ b/timesheet/setup/tables_current.inc.php @@ -27,7 +27,8 @@ 'cat_id' => array('type' => 'int','precision' => '4','default' => '0'), 'ts_owner' => array('type' => 'int','precision' => '4','nullable' => False), 'ts_modified' => array('type' => 'int','precision' => '8','nullable' => False), - 'ts_modifier' => array('type' => 'int','precision' => '4','nullable' => False) + 'ts_modifier' => array('type' => 'int','precision' => '4','nullable' => False), + 'pl_id' => array('type' => 'int','precision' => '4','default' => '0') ), 'pk' => array('ts_id'), 'fk' => array(), diff --git a/timesheet/setup/tables_update.inc.php b/timesheet/setup/tables_update.inc.php new file mode 100644 index 0000000000..eb2d4afaa5 --- /dev/null +++ b/timesheet/setup/tables_update.inc.php @@ -0,0 +1,26 @@ +oProc->AddColumn('egw_timesheet','pl_id',array( + 'type' => 'int', + 'precision' => '4', + 'default' => '0' + )); + + return $GLOBALS['setup_info']['timesheet']['currentver'] = '0.2.001'; + } +?> diff --git a/timesheet/templates/default/edit.xet b/timesheet/templates/default/edit.xet index d2fbbccec1..f8ee25e95d 100644 --- a/timesheet/templates/default/edit.xet +++ b/timesheet/templates/default/edit.xet @@ -52,7 +52,7 @@ - + @@ -67,7 +67,7 @@ -