mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-12-26 00:29:38 +01:00
setting an individual status to multiple timesheet via a action method like the Addressbook and the Inlolog status. Sponsored by Martin Frimmel
This commit is contained in:
parent
3ef43df5c8
commit
3818c671cc
@ -5,7 +5,7 @@
|
||||
* @link http://www.egroupware.org
|
||||
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
||||
* @package timesheet
|
||||
* @copyright (c) 2005-8 by Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
||||
* @copyright (c) 2005-9 by Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
||||
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
||||
* @version $Id$
|
||||
*/
|
||||
@ -99,8 +99,18 @@ class timesheet_bo extends so_sql
|
||||
* @var array
|
||||
*/
|
||||
var $show_sums;
|
||||
|
||||
/**
|
||||
* Array with custom fileds
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
var $customfields=array();
|
||||
/**
|
||||
* Array with status label
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
var $status_labels = array();
|
||||
|
||||
/**
|
||||
* Name of the timesheet table storing custom fields
|
||||
@ -114,6 +124,7 @@ class timesheet_bo extends so_sql
|
||||
$this->config_data = config::read(TIMESHEET_APP);
|
||||
$this->quantity_sum = $this->config_data['quantity_sum'] == 'true';
|
||||
$this->customfields = config::get_customfields(TIMESHEET_APP);
|
||||
if($this->config_data['status_labels']) $this->status_labels =& $this->config_data['status_labels'];
|
||||
|
||||
$this->tz_offset_s = $GLOBALS['egw']->datetime->tz_offset;
|
||||
$this->now = time() + $this->tz_offset_s; // time() is server-time and we need a user-time
|
||||
@ -488,6 +499,35 @@ class timesheet_bo extends so_sql
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* set a status for timesheet entry identified by $keys
|
||||
*
|
||||
* @param array $keys if given array with col => value pairs to characterise the rows to delete
|
||||
* @param boolean $status
|
||||
* @return int affected rows, should be 1 if ok, 0 if an error
|
||||
*/
|
||||
function set_status($keys=null,$status)
|
||||
{
|
||||
$ret = true;
|
||||
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_EDIT,$ts_id))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->read($keys,true,false);
|
||||
$this->data['ts_status'] = $status;
|
||||
if ($this->save($ts_id)!=0) $ret = false;
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* changes the data from the db-format to your work-format
|
||||
*
|
||||
|
@ -97,9 +97,9 @@ class timesheet_hooks
|
||||
if ($GLOBALS['egw_info']['user']['apps']['preferences'] && $location != 'admin')
|
||||
{
|
||||
$file = array(
|
||||
// 'Preferences' => $GLOBALS['egw']->link('/index.php','menuaction=preferences.uisettings.index&appname='.$appname),
|
||||
'Grant Access' => $GLOBALS['egw']->link('/index.php','menuaction=preferences.uiaclprefs.index&acl_app='.$appname),
|
||||
'Edit Categories' => $GLOBALS['egw']->link('/index.php','menuaction=preferences.uicategories.index&cats_app=' . $appname . '&cats_level=True&global_cats=True')
|
||||
// 'Preferences' => egw::link('/index.php','menuaction=preferences.uisettings.index&appname='.$appname),
|
||||
'Grant Access' => egw::link('/index.php','menuaction=preferences.uiaclprefs.index&acl_app='.$appname),
|
||||
'Edit Categories' => egw::link('/index.php','menuaction=preferences.uicategories.index&cats_app=' . $appname . '&cats_level=True&global_cats=True')
|
||||
);
|
||||
if ($location == 'preferences')
|
||||
{
|
||||
@ -114,12 +114,13 @@ class timesheet_hooks
|
||||
if ($GLOBALS['egw_info']['user']['apps']['admin'] && $location != 'preferences')
|
||||
{
|
||||
$file = Array(
|
||||
'Site Configuration' => $GLOBALS['egw']->link('/index.php','menuaction=admin.uiconfig.index&appname=' . $appname),
|
||||
'Custom fields' => $GLOBALS['egw']->link('/index.php','menuaction=admin.customfields.edit&appname='.$appname),
|
||||
'Global Categories' => $GLOBALS['egw']->link('/index.php',array(
|
||||
'Site Configuration' => egw::link('/index.php','menuaction=admin.uiconfig.index&appname=' . $appname),
|
||||
'Custom fields' => egw::link('/index.php','menuaction=admin.customfields.edit&appname='.$appname),
|
||||
'Global Categories' => egw::link('/index.php',array(
|
||||
'menuaction' => 'admin.uicategories.index',
|
||||
'appname' => $appname,
|
||||
'global_cats'=> True)),
|
||||
'Edit Status' => egw::link('/index.php','menuaction=timesheet.timesheet_ui.editstatus'),
|
||||
);
|
||||
if ($location == 'admin')
|
||||
{
|
||||
|
@ -16,9 +16,10 @@
|
||||
class timesheet_ui extends timesheet_bo
|
||||
{
|
||||
var $public_functions = array(
|
||||
'view' => true,
|
||||
'edit' => true,
|
||||
'index' => true,
|
||||
'view' => true,
|
||||
'edit' => true,
|
||||
'index' => true,
|
||||
'editstatus' => true,
|
||||
);
|
||||
/**
|
||||
* ProjectManager integration: 'none', 'full' or default null
|
||||
@ -78,14 +79,14 @@ class timesheet_ui extends timesheet_bo
|
||||
else // new entry
|
||||
{
|
||||
$this->data = array(
|
||||
'ts_start' => $this->today,
|
||||
'end_time' => $this->now - $this->today,
|
||||
'ts_owner' => $GLOBALS['egw_info']['user']['account_id'],
|
||||
'cat_id' => (int) $_REQUEST['cat_id'],
|
||||
'ts_start' => $this->today,
|
||||
'end_time' => $this->now - $this->today,
|
||||
'ts_owner' => $GLOBALS['egw_info']['user']['account_id'],
|
||||
'cat_id' => (int) $_REQUEST['cat_id'],
|
||||
);
|
||||
}
|
||||
$referer = preg_match('/menuaction=([^&]+)/',$_SERVER['HTTP_REFERER'],$matches) ? $matches[1] :
|
||||
(strpos($_SERVER['HTTP_REFERER'],'/infolog/index.php') !== false ? 'infolog.infolog_ui.index' : TIMESHEET_APP.'.timesheet_ui.index');
|
||||
(strpos($_SERVER['HTTP_REFERER'],'/infolog/index.php') !== false ? 'infolog.infolog_ui.index' : TIMESHEET_APP.'.timesheet_ui.index');
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -144,7 +145,7 @@ class timesheet_ui extends timesheet_bo
|
||||
if (!$this->data['ts_title'])
|
||||
{
|
||||
$this->data['ts_title'] = $this->data['ts_title_blur'] ?
|
||||
$this->data['ts_title_blur'] : $this->data['ts_project_blur'];
|
||||
$this->data['ts_title_blur'] : $this->data['ts_project_blur'];
|
||||
|
||||
if (!$this->data['ts_title'])
|
||||
{
|
||||
@ -180,8 +181,8 @@ class timesheet_ui extends timesheet_bo
|
||||
}
|
||||
}
|
||||
$js = "opener.location.href='".$GLOBALS['egw']->link('/index.php',array(
|
||||
'menuaction' => $referer,
|
||||
'msg' => $msg,
|
||||
'menuaction' => $referer,
|
||||
'msg' => $msg,
|
||||
))."';";
|
||||
if ($button == 'apply') break;
|
||||
if ($button == 'save_new')
|
||||
@ -230,22 +231,22 @@ class timesheet_ui extends timesheet_bo
|
||||
}
|
||||
}
|
||||
$preserv = $this->data + array(
|
||||
'view' => $view,
|
||||
'referer' => $referer,
|
||||
'ts_title_blur' => $content['ts_title_blur'],
|
||||
'view' => $view,
|
||||
'referer' => $referer,
|
||||
'ts_title_blur' => $content['ts_title_blur'],
|
||||
);
|
||||
$content = array_merge($this->data,array(
|
||||
'msg' => $msg,
|
||||
'view' => $view,
|
||||
$tabs => $content[$tabs],
|
||||
'link_to' => array(
|
||||
'to_id' => $this->data['ts_id'] ? $this->data['ts_id'] : $content['link_to']['to_id'],
|
||||
'to_app' => TIMESHEET_APP,
|
||||
),
|
||||
'js' => "<script>\n$js\n</script>\n",
|
||||
'ts_quantity_blur' => $this->data['ts_duration'] ? round($this->data['ts_duration'] / 60.0,3) : '',
|
||||
'start_time' => $this->datetime2time($this->data['ts_start']),
|
||||
'pm_integration' => $this->pm_integration,
|
||||
'msg' => $msg,
|
||||
'view' => $view,
|
||||
$tabs => $content[$tabs],
|
||||
'link_to' => array(
|
||||
'to_id' => $this->data['ts_id'] ? $this->data['ts_id'] : $content['link_to']['to_id'],
|
||||
'to_app' => TIMESHEET_APP,
|
||||
),
|
||||
'js' => "<script>\n$js\n</script>\n",
|
||||
'ts_quantity_blur' => $this->data['ts_duration'] ? round($this->data['ts_duration'] / 60.0,3) : '',
|
||||
'start_time' => $this->datetime2time($this->data['ts_start']),
|
||||
'pm_integration' => $this->pm_integration,
|
||||
));
|
||||
$links = array();
|
||||
// create links specified in the REQUEST (URL)
|
||||
@ -300,11 +301,11 @@ class timesheet_ui extends timesheet_bo
|
||||
$content['ts_title_blur'] = $preserv['ts_title_blur'] ? $preserv['ts_title_blur'] : $preserv['ts_project_blur'];
|
||||
|
||||
$readonlys = array(
|
||||
'button[delete]' => !$this->data['ts_id'] || !$this->check_acl(EGW_ACL_DELETE),
|
||||
'button[edit]' => !$view || !$this->check_acl(EGW_ACL_EDIT),
|
||||
'button[save]' => $view,
|
||||
'button[save_new]' => $view,
|
||||
'button[apply]' => $view,
|
||||
'button[delete]' => !$this->data['ts_id'] || !$this->check_acl(EGW_ACL_DELETE),
|
||||
'button[edit]' => !$view || !$this->check_acl(EGW_ACL_EDIT),
|
||||
'button[save]' => $view,
|
||||
'button[save_new]' => $view,
|
||||
'button[apply]' => $view,
|
||||
);
|
||||
if ($view)
|
||||
{
|
||||
@ -320,7 +321,7 @@ class timesheet_ui extends timesheet_bo
|
||||
$readonlys['ts_owner'] = true;
|
||||
}
|
||||
$GLOBALS['egw_info']['flags']['app_header'] = lang('timesheet').' - '.
|
||||
($view ? lang('View') : ($this->data['ts_id'] ? lang('Edit') : lang('Add')));
|
||||
($view ? lang('View') : ($this->data['ts_id'] ? lang('Edit') : lang('Add')));
|
||||
|
||||
// supress unknow widget 'projectmanager-*', if projectmanager is not installed or old
|
||||
if (!@file_exists(EGW_INCLUDE_ROOT.'/projectmanager/inc/class.projectmanager_widget.inc.php'))
|
||||
@ -336,7 +337,8 @@ class timesheet_ui extends timesheet_bo
|
||||
if (!$this->customfields) $readonlys[$tabs]['customfields'] = true; // suppress tab if there are not customfields
|
||||
|
||||
return $etpl->exec(TIMESHEET_APP.'.timesheet_ui.edit',$content,array(
|
||||
'ts_owner' => $edit_grants,
|
||||
'ts_owner' => $edit_grants,
|
||||
'ts_status' => $this->status_labels,
|
||||
),$readonlys,$preserv,2);
|
||||
}
|
||||
|
||||
@ -410,6 +412,7 @@ class timesheet_ui extends timesheet_bo
|
||||
$GLOBALS['egw']->session->appsession('index',TIMESHEET_APP,$query_in);
|
||||
$query = $query_in; // keep the original query
|
||||
if($this->ts_viewtype == 'short') $query_in['options-selectcols'] = array('ts_quantity'=>false,'ts_unitprice'=>false,'ts_total'=>false);
|
||||
if ($query['no_status']) $query_in['options-selectcols']['ts_status'] = false;
|
||||
#_debug_array($query['col_filter']);
|
||||
// PM project filter for the PM integration
|
||||
if ((string)$query['col_filter']['pm_id'] != '')
|
||||
@ -536,7 +539,7 @@ class timesheet_ui extends timesheet_bo
|
||||
|
||||
// query cf's for the displayed rows
|
||||
if ($ids && $this->customfields &&
|
||||
in_array('customfields',$cols_to_show=explode(',',$GLOBALS['egw_info']['user']['preferences'][TIMESHEET_APP]['nextmatch-timesheet.index.rows'])))
|
||||
in_array('customfields',$cols_to_show=explode(',',$GLOBALS['egw_info']['user']['preferences'][TIMESHEET_APP]['nextmatch-timesheet.index.rows'])))
|
||||
{
|
||||
$cfs = $this->read_cfs($ids,$cols_to_show);
|
||||
}
|
||||
@ -554,18 +557,18 @@ class timesheet_ui extends timesheet_bo
|
||||
switch($row['ts_id'])
|
||||
{
|
||||
case 0: // day-sum
|
||||
$row['ts_title'] = lang('Sum %1:',lang(date('l',$row['ts_start'])).' '.$GLOBALS['egw']->common->show_date($row['ts_start'],
|
||||
$GLOBALS['egw_info']['user']['preferences']['common']['dateformat'],false));
|
||||
break;
|
||||
$row['ts_title'] = lang('Sum %1:',lang(date('l',$row['ts_start'])).' '.$GLOBALS['egw']->common->show_date($row['ts_start'],
|
||||
$GLOBALS['egw_info']['user']['preferences']['common']['dateformat'],false));
|
||||
break;
|
||||
case -1: // week-sum
|
||||
$row['ts_title'] = lang('Sum %1:',lang('week').' '.substr($row['ts_week'],4).'/'.substr($row['ts_week'],0,4));
|
||||
break;
|
||||
$row['ts_title'] = lang('Sum %1:',lang('week').' '.substr($row['ts_week'],4).'/'.substr($row['ts_week'],0,4));
|
||||
break;
|
||||
case -2: // month-sum
|
||||
$row['ts_title'] = lang('Sum %1:',lang(date('F',$row['ts_start'])).' '.substr($row['ts_month'],0,4));
|
||||
break;
|
||||
$row['ts_title'] = lang('Sum %1:',lang(date('F',$row['ts_start'])).' '.substr($row['ts_month'],0,4));
|
||||
break;
|
||||
case -3: // year-sum
|
||||
$row['ts_title'] = lang('Sum %1:',$row['ts_year']);
|
||||
break;
|
||||
$row['ts_title'] = lang('Sum %1:',$row['ts_year']);
|
||||
break;
|
||||
}
|
||||
$row['ts_start'] = $row['ts_unitprice'] = '';
|
||||
if (!$this->quantity_sum) $row['ts_quantity'] = '';
|
||||
@ -627,6 +630,7 @@ class timesheet_ui extends timesheet_bo
|
||||
if (strpos($query['selectcols'],'ts_unitprice')===false) $rows['no_ts_unitprice'] = 1;
|
||||
if (strpos($query['selectcols'],'ts_total')===false) $rows['no_ts_total'] = 1;
|
||||
}
|
||||
$rows['no_ts_status'] = $query['no_status'];
|
||||
return $total;
|
||||
}
|
||||
|
||||
@ -654,9 +658,31 @@ class timesheet_ui extends timesheet_bo
|
||||
$msg = lang('Error deleting the entry!!!');
|
||||
}
|
||||
}
|
||||
|
||||
if ($content['action'] != '')
|
||||
{
|
||||
if (!count($content['nm']['rows']['checked']) && !$content['use_all'])
|
||||
{
|
||||
|
||||
$msg = lang('You need to select some timesheets first');
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($this->action($content['action'],$content['nm']['rows']['checked'],$content['use_all'],
|
||||
$success,$failed,$action_msg,$content['action'],$msg))
|
||||
{
|
||||
$msg .= lang('%1 timesheets(s) %2',$success,$action_msg);
|
||||
}
|
||||
elseif(is_null($msg))
|
||||
{
|
||||
$msg .= lang('%1 timesheets(s) %2, %3 failed because of insufficent rights !!!',$success,$action_msg,$failed);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$content = array(
|
||||
'nm' => $GLOBALS['egw']->session->appsession('index',TIMESHEET_APP),
|
||||
'msg' => $msg,
|
||||
'nm' => $GLOBALS['egw']->session->appsession('index',TIMESHEET_APP),
|
||||
'msg' => $msg,
|
||||
);
|
||||
if (!is_array($content['nm']))
|
||||
{
|
||||
@ -668,25 +694,37 @@ class timesheet_ui extends timesheet_bo
|
||||
$date_filters['custom'] = 'custom';
|
||||
|
||||
$content['nm'] = array(
|
||||
'get_rows' => TIMESHEET_APP.'.timesheet_ui.get_rows',
|
||||
'options-filter' => $date_filters,
|
||||
'options-filter2' => array('No details','Details'),
|
||||
'order' => 'ts_start',// IO name of the column to sort after (optional for the sortheaders)
|
||||
'sort' => 'DESC',// IO direction of the sort: 'ASC' or 'DESC'
|
||||
'header_left' => 'timesheet.index.dates',
|
||||
'header_right' => 'timesheet.index.add',
|
||||
'filter_onchange' => "set_style_by_class('table','custom_hide','visibility',this.value == 'custom' ? 'visible' : 'hidden'); if (this.value != 'custom') this.form.submit();",
|
||||
'filter2' => (int)$GLOBALS['egw_info']['user']['preferences'][TIMESHEET_APP]['show_details'],
|
||||
'get_rows' => TIMESHEET_APP.'.timesheet_ui.get_rows',
|
||||
'options-filter' => $date_filters,
|
||||
'options-filter2' => array('No details','Details'),
|
||||
'order' => 'ts_start',// IO name of the column to sort after (optional for the sortheaders)
|
||||
'sort' => 'DESC',// IO direction of the sort: 'ASC' or 'DESC'
|
||||
'header_left' => 'timesheet.index.dates',
|
||||
'header_right' => 'timesheet.index.add',
|
||||
'filter_onchange' => "set_style_by_class('table','custom_hide','visibility',this.value == 'custom' ? 'visible' : 'hidden'); if (this.value != 'custom') this.form.submit();",
|
||||
'filter2' => (int)$GLOBALS['egw_info']['user']['preferences'][TIMESHEET_APP]['show_details'],
|
||||
);
|
||||
}
|
||||
$read_grants = $this->grant_list(EGW_ACL_READ);
|
||||
$content['nm']['no_owner_col'] = count($read_grants) == 1;
|
||||
|
||||
$sel_options = array(
|
||||
'ts_owner' => $read_grants,
|
||||
'pm_id' => array(lang('No project')),
|
||||
'cat_id' => array(lang('None')),
|
||||
'ts_owner' => $read_grants,
|
||||
'pm_id' => array(lang('No project')),
|
||||
'cat_id' => array(lang('None')),
|
||||
'ts_status' => $this->status_labels,
|
||||
);
|
||||
$content['nm']['no_status'] = !$sel_options['ts_status'];
|
||||
|
||||
$status =array();
|
||||
$sel_options['action'] ['delete']= lang('Delete Timesheet');
|
||||
foreach ($this->status_labels as $status_id => $label_status)
|
||||
{
|
||||
$status['to_status_'.$status_id] = $label_status;
|
||||
}
|
||||
$sel_options['action'][lang('Modify the Status of the Timesheet')] = $status;
|
||||
unset($status);
|
||||
|
||||
if ($this->pm_integration != 'full')
|
||||
{
|
||||
$projects =& $this->query_list('ts_project');
|
||||
@ -695,10 +733,154 @@ class timesheet_ui extends timesheet_bo
|
||||
}
|
||||
// dont show [Export] button if app is not availible to the user or we are on php4
|
||||
$readonlys['export'] = !$GLOBALS['egw_info']['user']['apps']['importexport'] || (int) phpversion() < 5;
|
||||
|
||||
return $etpl->exec(TIMESHEET_APP.'.timesheet_ui.index',$content,$sel_options,$readonlys,$preserv);
|
||||
}
|
||||
|
||||
/**
|
||||
* apply an action to multiple timesheets
|
||||
*
|
||||
* @param string/int $action 'status_to',set status to timeshhets
|
||||
* @param array $checked timesheet id's to use if !$use_all
|
||||
* @param boolean $use_all if true use all timesheets of the current selection (in the session)
|
||||
* @param int &$success number of succeded actions
|
||||
* @param int &$failed number of failed actions (not enought permissions)
|
||||
* @param string &$action_msg translated verb for the actions, to be used in a message like %1 timesheets 'deleted'
|
||||
* @param string/array $session_name 'index' or 'email', or array with session-data depending if we are in the main list or the popup
|
||||
* @return boolean true if all actions succeded, false otherwise
|
||||
*/
|
||||
function action($action,$checked,$use_all,&$success,&$failed,&$action_msg,$session_name,&$msg)
|
||||
{
|
||||
//echo "<p>uicontacts::action('$action',".print_r($checked,true).','.(int)$use_all.",...)</p>\n";
|
||||
$success = $failed = 0;
|
||||
if ($use_all)
|
||||
{
|
||||
// get the whole selection
|
||||
$query = is_array($session_name) ? $session_name : $GLOBALS['egw']->session->appsession($session_name,'timesheet');
|
||||
|
||||
if ($use_all)
|
||||
{
|
||||
@set_time_limit(0); // switch off the execution time limit, as it's for big selections to small
|
||||
$query['num_rows'] = -1; // all
|
||||
$this->get_rows($query,$checked,$readonlys,true); // true = only return the id's
|
||||
}
|
||||
}
|
||||
|
||||
if (substr($action,0,9) == 'to_status')
|
||||
{
|
||||
$to_status = (int)substr($action,10);
|
||||
$action = 'to_status';
|
||||
}
|
||||
|
||||
switch($action)
|
||||
{
|
||||
case 'delete':
|
||||
$action_msg = lang('deleted');
|
||||
foreach((array)$checked as $n => $id)
|
||||
{
|
||||
if ($this->delete($id))
|
||||
{
|
||||
$success++;
|
||||
}
|
||||
else
|
||||
{
|
||||
$failed++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'to_status':
|
||||
$action_msg =lang('changed status');
|
||||
foreach((array)$checked as $n => $id)
|
||||
{
|
||||
if ($this->set_status($id,$to_status))
|
||||
{
|
||||
$success++;
|
||||
}
|
||||
else
|
||||
{
|
||||
$failed++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return !$failed;
|
||||
}
|
||||
|
||||
/**
|
||||
* function for setting individual Status
|
||||
*
|
||||
* @param conetnt
|
||||
* @param view
|
||||
*/
|
||||
function editstatus($content = null,$msg='')
|
||||
{
|
||||
// this function requires admin rights
|
||||
$GLOBALS['egw_info']['flags']['admin_only'] = true;
|
||||
$GLOBALS['egw']->check_app_rights();
|
||||
|
||||
if (is_array($content))
|
||||
{
|
||||
list($button) = @each($content['button']);
|
||||
|
||||
switch($button)
|
||||
{
|
||||
case 'delete':
|
||||
break;
|
||||
case 'cancel':
|
||||
$GLOBALS['egw']->redirect_link('/index.php',array(
|
||||
'menuaction' => 'timesheet.timesheet_ui.index',
|
||||
'msg' => $msg,
|
||||
));
|
||||
break;
|
||||
case 'apply':
|
||||
case 'save':
|
||||
foreach($content['statis'] as $cat)
|
||||
{
|
||||
$id = $cat['id'];
|
||||
if (($cat ['name'] !== $this->status_labels[$id]) && ($cat ['name'] !== ''))
|
||||
{
|
||||
$this->status_labels[$id] = $cat['name'];
|
||||
$need_update = true;
|
||||
}
|
||||
}
|
||||
if ($need_update)
|
||||
{
|
||||
config::save_value('status_labels',$this->status_labels,TIMESHEET_APP);
|
||||
$msg .= lang('Status updated.');
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isset($content['button'])) unset ($content['button']);
|
||||
if (isset($content['statis']['delete']))
|
||||
{
|
||||
list($id) = each($content['statis']['delete']);
|
||||
if (isset($this->status_labels[$id]))
|
||||
{
|
||||
unset($this->status_labels[$id]);
|
||||
config::save_value('status_labels',$this->status_labels,TIMESHEET_APP);
|
||||
unset($this->status_labels[$id]);
|
||||
$msg .= lang('Status deleted.');
|
||||
}
|
||||
}
|
||||
|
||||
$i = 1;
|
||||
unset($content['statis']);
|
||||
foreach($this->status_labels as $id => $label)
|
||||
{
|
||||
$content['statis'][$i]['name']= $label;
|
||||
$content['statis'][$i]['id']= $id;
|
||||
$i++;
|
||||
}
|
||||
$content['statis'][$i]['name'] = '';
|
||||
$content['statis'][$i]['id'] = ++$id;
|
||||
|
||||
$content['msg'] = $msg;
|
||||
$preserv = $content;
|
||||
|
||||
$etpl = new etemplate('timesheet.editstatus');
|
||||
$etpl->exec('timesheet.timesheet_ui.editstatus',$content,$sel_options,$readonlys,$preserv);
|
||||
}
|
||||
|
||||
function js()
|
||||
{
|
||||
return '<script LANGUAGE="JavaScript">
|
||||
@ -710,6 +892,15 @@ class timesheet_ui extends timesheet_bo
|
||||
"Export",400,400);
|
||||
return false;
|
||||
}
|
||||
|
||||
function do_action(selbox)
|
||||
{
|
||||
if (selbox.value != "") {
|
||||
selbox.form.submit();
|
||||
selbox.value = "";
|
||||
}
|
||||
}
|
||||
|
||||
</script>';
|
||||
}
|
||||
}
|
||||
|
@ -1,13 +1,30 @@
|
||||
%1 timesheets(s) %2 timesheet de %1 Stundenzettel %2
|
||||
%1 timesheets(s) %2, %3 failed because of insufficent rights !!! timesheet de %1 Stundenzettel %2, %3 wurde nicht durchgeführt wegen ungenügenden Rechten !!!
|
||||
--> enter new name timesheet de -> neuer Name eingeben
|
||||
2 month ago timesheet de Vor 2 Monaten
|
||||
2 years ago timesheet de Vor 2 Jahren
|
||||
3 years ago timesheet de Vor 3 Jahren
|
||||
actions timesheet de Aktionen
|
||||
all projects timesheet de Alle Projekte
|
||||
all status timesheet de Alle Status
|
||||
and its members timesheet de und die Mitglieder
|
||||
applies the changes timesheet de Änderungen durchführen
|
||||
apply the action on the whole query, not only the shown timesheets!!! timesheet de Wendet den Befehl auf die gesamte Abfrage an, NICHT nur die angezeigten Stundenzettel!!
|
||||
both: allow to use projectmanager and free project-names admin de Beides: verwende Projektmanager und freie Projektnamen
|
||||
by timesheet de von
|
||||
changed status timesheet de Status geändert
|
||||
check all timesheet de Alle selektieren
|
||||
create new links timesheet de Neue Verknüpfung erstellen
|
||||
creates a new field timesheet de neues Feld anlegen
|
||||
creating new entry timesheet de neuen Eintrag anlegen
|
||||
delete this entry timesheet de Diesen Eintrag löschen
|
||||
delete this status timesheet de Diesen Status löschen
|
||||
delete timesheet timesheet de Stundenzettel löschen
|
||||
deleted timesheet de gelöscht
|
||||
deletes this field timesheet de Dies Feld löschen
|
||||
determines the order the fields are displayed timesheet de verändert die Reihenfolge der angezeigten Felder
|
||||
each value is a line like <id>[=<label>] timesheet de jeder Wert ist eine Zeile in dem Format <id>[=|label>]
|
||||
edit status timesheet de Status bearbeiten
|
||||
edit this entry timesheet de diesen Eintrag bearbeiten
|
||||
empty if identical to duration timesheet de leer lassen wenn gleich Dauer
|
||||
end timesheet de Ende
|
||||
@ -16,6 +33,10 @@ 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
|
||||
export timesheet de Exportieren
|
||||
export to openoffice spreadsheet timesheet de zu Open Office exortieren
|
||||
exports entries from your timesheet into a csv file. csv means 'comma seperated values'. however in the options tab you can also choose other seperators. timesheet de Exportiert die Einträge des Stundenzettels in eine CSV Datei. CSV bedeutet, Komma getrennte Werte. In dem options Tab können Sie andere Trennzeichen festlegen.
|
||||
field must not be empty !!! timesheet de Dieses Feld darf nicht leer sein!!!
|
||||
full: use only projectmanager admin de Komplett: verwende nur Projektmanager
|
||||
general timesheet de Allgemein
|
||||
last modified timesheet de Zuletzt geändert
|
||||
@ -23,31 +44,54 @@ last month timesheet de Letzten Monat
|
||||
last week timesheet de Letzte Woche
|
||||
last year timesheet de Letztes Jahr
|
||||
leave it empty for a full week timesheet de Leer lassen für eine volle Woche
|
||||
leaves without saveing timesheet de beenden ohne speichern
|
||||
length<br>rows timesheet de Länge<br>Reihe
|
||||
links timesheet de Verknüpfungen
|
||||
max length of the input [, length of the inputfield (optional)] timesheet de maximale Länge der Eingabe[,Länge des Eingabefeldes (optional)]
|
||||
modify the status of the timesheet timesheet de Status des Stundenzettels verändern
|
||||
no details timesheet de Keine Details
|
||||
no project timesheet de Kein Projekt
|
||||
none: use only free project-names admin de Keine: verwende nur freie Projektnamen
|
||||
number of row for a multiline inputfield or line of a multi-select-box timesheet de Anzahl von Reihen für ein Mehrzeiliges Textfeld oder einer Mehrfachauswahlbox
|
||||
or endtime timesheet de oder Endzeit
|
||||
order timesheet de Reihenfolge
|
||||
permission denied!!! timesheet de Zugriff verweigert!!!
|
||||
price timesheet de Preis
|
||||
projectmanager integration admin de Integration des Projektmanagers
|
||||
quantity timesheet de Menge
|
||||
save & new timesheet de Speichern & Neu
|
||||
saves the changes made timesheet de Speichert die Änderungen
|
||||
saves the changes made and leaves timesheet de Änderungen speidern und beenden
|
||||
saves this entry and add a new one timesheet de Speichert diesen Eintrag und fügt einen neuen hinzu
|
||||
select a price timesheet de Preis auswählen
|
||||
select a project timesheet de Projekt auswählen
|
||||
select a status of the timesheet timesheet de einen status auswählen
|
||||
select an action or timesheet to modify timesheet de Eine Aktion auswählen
|
||||
select an action or timesheet you want to modify... timesheet de Wählen Sie eine Aktion oder einen Stundenzettel aus, der geändert werden soll.
|
||||
select multiple timeshhets for a further action timesheet de Wählen Sie mehrere Stundenzettel für einen weitere Aktion aus
|
||||
show a quantity sum (eg. to sum up negative overtime) admin de Zeige eine Mengensumme (z.B. um negative Überstunden zu summieren)
|
||||
start timesheet de Start
|
||||
starttime timesheet de Startzeit
|
||||
starttime has to be before endtime !!! timesheet de Startzeit muss vor der Endzeit liegen !!!
|
||||
status deleted. timesheet de Status gelöscht
|
||||
status updated. timesheet de Status geändert
|
||||
sum %1: timesheet de Summe %1:
|
||||
the name used internaly (<= 20 chars), changeing it makes existing data unavailible timesheet de Dieser Name wird nur intern benutzt (<= 20 Zeichen), Änderungen führen dazu, das bestehende Daten nicht mehr angezeigt werden können.
|
||||
the text displayed to the user timesheet de der Text wird dem Benutzer angezeigt
|
||||
this month timesheet de Diesen Monat
|
||||
this week timesheet de Diese Woche
|
||||
this year timesheet de Dieses Jahr
|
||||
timesheet common de Stundenzettel
|
||||
timesheet csv export timesheet de Export des Stundenzettels als CSV
|
||||
timesheet openoffice export timesheet de Export des Stundenzettels als Open Office
|
||||
timesheet status-%1 '%2' added. timesheet de Stundenzettel Status %1 '%2' hinzugefügt.
|
||||
timesheet-%1 '%2' updated. timesheet de Stundenzettel Status %1 '%2' geändert
|
||||
timesheet-%1 deleted. timesheet de Stundenzettel %1 gelöscht
|
||||
unitprice timesheet de Preis pro Einheit
|
||||
values for selectbox timesheet de Werte der Auswahlbox
|
||||
view this entry timesheet de Diesen Eintrag anzeigen
|
||||
week timesheet de Woche
|
||||
whole query timesheet de gesamte Abfrage
|
||||
yesterday timesheet de Gestern
|
||||
you need to select some timesheets first timesheet de Sie müssen zuerst Datensätze auswählen
|
||||
your database is not up to date (%1 vs. %2), please run %3setup%4 to update your database. timesheet de Ihre Datenbank ist NICHT aktuell (%1 statt %2), bitte rufen sie %3setup%4 auf um die Datenbank zu aktualisieren.
|
||||
|
@ -1,13 +1,30 @@
|
||||
%1 timesheets(s) %2 timesheet en %1 timesheets(s) %2
|
||||
%1 timesheets(s) %2, %3 failed because of insufficent rights !!! timesheet en %1 timesheets(s) %2, %3 failed because of insufficent rights !!!
|
||||
--> enter new name timesheet en --> enter new name
|
||||
2 month ago timesheet en 2 month ago
|
||||
2 years ago timesheet en 2 years ago
|
||||
3 years ago timesheet en 3 years ago
|
||||
actions timesheet en Actions
|
||||
all projects timesheet en All projects
|
||||
all status timesheet en All status
|
||||
and its members timesheet en and its members
|
||||
applies the changes timesheet en applies the changes
|
||||
apply the action on the whole query, not only the shown timesheets!!! timesheet en Apply the action on the whole query, NOT only the shown timesheets!!!
|
||||
both: allow to use projectmanager and free project-names admin en Both: allow to use ProjectManager and free project-names
|
||||
by timesheet en by
|
||||
changed status timesheet en changed status
|
||||
check all timesheet en Check all
|
||||
create new links timesheet en Create new links
|
||||
creates a new field timesheet en creates a new field
|
||||
creating new entry timesheet en creating new entry
|
||||
delete this entry timesheet en Delete this entry
|
||||
delete this status timesheet en Delete this status
|
||||
delete timesheet timesheet en Delete Timesheet
|
||||
deleted timesheet en deleted
|
||||
deletes this field timesheet en deletes this field
|
||||
determines the order the fields are displayed timesheet en determines the order the fields are displayed
|
||||
each value is a line like <id>[=<label>] timesheet en each value is a line like <id>[=<label>]
|
||||
edit status timesheet en Edit status
|
||||
edit this entry timesheet en Edit this entry
|
||||
empty if identical to duration timesheet en empty if identical to duration
|
||||
end timesheet en End
|
||||
@ -16,6 +33,7 @@ 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
|
||||
export timesheet en Export
|
||||
export to openoffice spreadsheet timesheet en Export to OpenOffice Spreadsheet
|
||||
exports entries from your timesheet into a csv file. csv means 'comma seperated values'. however in the options tab you can also choose other seperators. timesheet en Exports entries from your Timesheet into a CSV File. CSV means 'Comma Seperated Values'. However in the options Tab you can also choose other seperators.
|
||||
field must not be empty !!! timesheet en Field must not be empty !!!
|
||||
@ -26,33 +44,54 @@ last month timesheet en Last month
|
||||
last week timesheet en Last week
|
||||
last year timesheet en Last year
|
||||
leave it empty for a full week timesheet en Leave it empty for a full week
|
||||
leaves without saveing timesheet en leaves without saveing
|
||||
length<br>rows timesheet en Length<br>Rows
|
||||
links timesheet en Links
|
||||
max length of the input [, length of the inputfield (optional)] timesheet en max length of the input [, length of the inputfield (optional)]
|
||||
modify the status of the timesheet timesheet en Modify the Status of the Timesheet
|
||||
no details timesheet en no details
|
||||
no project timesheet en No project
|
||||
none: use only free project-names admin en None: use only free project-names
|
||||
number of row for a multiline inputfield or line of a multi-select-box timesheet en number of row for a multiline inputfield or line of a multi-select-box
|
||||
or endtime timesheet en or Endtime
|
||||
order timesheet en Order
|
||||
permission denied!!! timesheet en Permission denied!!!
|
||||
price timesheet en Price
|
||||
projectmanager integration admin en ProjectManager integration
|
||||
quantity timesheet en Quantity
|
||||
save & new timesheet en Save & New
|
||||
saves the changes made timesheet en Saves the changes made
|
||||
saves the changes made and leaves timesheet en saves the changes made and leaves
|
||||
saves this entry and add a new one timesheet en Saves this entry and add a new one
|
||||
select a price timesheet en Select a price
|
||||
select a project timesheet en Select a project
|
||||
select a status of the timesheet timesheet en select a status of the timesheet
|
||||
select an action or timesheet to modify timesheet en Select an action or timesheet to modify
|
||||
select an action or timesheet you want to modify... timesheet en Select an action or timesheet you want to modify...
|
||||
select multiple timeshhets for a further action timesheet en Select multiple timeshhets for a further action
|
||||
show a quantity sum (eg. to sum up negative overtime) admin en Show a quantity sum (eg. to sum up negative overtime)
|
||||
start timesheet en Start
|
||||
starttime timesheet en Starttime
|
||||
starttime has to be before endtime !!! timesheet en Starttime has to be before endtime !!!
|
||||
status deleted. timesheet en Status deleted.
|
||||
status updated. timesheet en Status updated.
|
||||
sum %1: timesheet en Sum %1:
|
||||
the name used internaly (<= 20 chars), changeing it makes existing data unavailible timesheet en the name used internaly (<= 20 chars), changeing it makes existing data unavailible
|
||||
the text displayed to the user timesheet en the text displayed to the user
|
||||
this month timesheet en This month
|
||||
this week timesheet en This week
|
||||
this year timesheet en This year
|
||||
timesheet common en TimeSheet
|
||||
timesheet csv export timesheet en Timesheet CSV export
|
||||
timesheet openoffice export timesheet en Timesheet OpenOffice export
|
||||
timesheet status-%1 '%2' added. timesheet en Timesheet Status-%1 '%2' added.
|
||||
timesheet-%1 '%2' updated. timesheet en Timesheet-%1 '%2' updated.
|
||||
timesheet-%1 deleted. timesheet en Timesheet-%1 deleted.
|
||||
unitprice timesheet en Unitprice
|
||||
values for selectbox timesheet en Values for selectbox
|
||||
view this entry timesheet en View this entry
|
||||
week timesheet en Week
|
||||
whole query timesheet en whole query
|
||||
yesterday timesheet en Yesterday
|
||||
you need to select some timesheets first timesheet en You need to select some timesheets first
|
||||
your database is not up to date (%1 vs. %2), please run %3setup%4 to update your database. timesheet en Your database is NOT up to date (%1 vs. %2), please run %3setup%4 to update your database.
|
||||
|
File diff suppressed because one or more lines are too long
@ -17,9 +17,9 @@ if (!defined('TIMESHEET_APP'))
|
||||
}
|
||||
|
||||
$setup_info[TIMESHEET_APP]['name'] = TIMESHEET_APP;
|
||||
$setup_info[TIMESHEET_APP]['version'] = '1.6';
|
||||
$setup_info[TIMESHEET_APP]['version'] = '1.007';
|
||||
$setup_info[TIMESHEET_APP]['app_order'] = 5;
|
||||
$setup_info[TIMESHEET_APP]['tables'] = array('egw_timesheet', 'egw_timesheet_extra');
|
||||
$setup_info[TIMESHEET_APP]['tables'] = array('egw_timesheet','egw_timesheet_extra');
|
||||
$setup_info[TIMESHEET_APP]['enable'] = 1;
|
||||
|
||||
$setup_info[TIMESHEET_APP]['author'] =
|
||||
|
@ -6,42 +6,43 @@
|
||||
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
||||
* @package timesheet
|
||||
* @subpackage setup
|
||||
* @copyright (c) 2005 by Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
||||
* @copyright (c) 2005-9 by Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
||||
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
||||
* @version $Id$
|
||||
* @version $Id$
|
||||
*/
|
||||
|
||||
$phpgw_baseline = array(
|
||||
'egw_timesheet' => 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),
|
||||
'pl_id' => array('type' => 'int','precision' => '4','default' => '0')
|
||||
),
|
||||
'pk' => array('ts_id'),
|
||||
'fk' => array(),
|
||||
'ix' => array('ts_project','ts_owner'),
|
||||
'uc' => array()
|
||||
$phpgw_baseline = array(
|
||||
'egw_timesheet' => 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),
|
||||
'pl_id' => array('type' => 'int','precision' => '4','default' => '0'),
|
||||
'ts_status' => array('type' => 'int','precision' => '4')
|
||||
),
|
||||
'egw_timesheet_extra' => array(
|
||||
'fd' => array(
|
||||
'ts_id' => array('type' => 'int','precision' => '4','nullable' => False),
|
||||
'ts_extra_name' => array('type' => 'varchar','precision' => '32','nullable' => False),
|
||||
'ts_extra_value' => array('type' => 'varchar','precision' => '255','nullable' => False,'default' => '')
|
||||
),
|
||||
'pk' => array('ts_id','ts_extra_name'),
|
||||
'fk' => array(),
|
||||
'ix' => array(),
|
||||
'uc' => array()
|
||||
)
|
||||
);
|
||||
'pk' => array('ts_id'),
|
||||
'fk' => array(),
|
||||
'ix' => array('ts_project','ts_owner','ts_status'),
|
||||
'uc' => array()
|
||||
),
|
||||
'egw_timesheet_extra' => array(
|
||||
'fd' => array(
|
||||
'ts_id' => array('type' => 'int','precision' => '4','nullable' => False),
|
||||
'ts_extra_name' => array('type' => 'varchar','precision' => '32','nullable' => False),
|
||||
'ts_extra_value' => array('type' => 'varchar','precision' => '255','nullable' => False,'default' => '')
|
||||
),
|
||||
'pk' => array('ts_id','ts_extra_name'),
|
||||
'fk' => array(),
|
||||
'ix' => array(),
|
||||
'uc' => array()
|
||||
)
|
||||
);
|
||||
|
@ -6,7 +6,7 @@
|
||||
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
||||
* @package timesheet
|
||||
* @subpackage setup
|
||||
* @copyright (c) 2005-8 by Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
||||
* @copyright (c) 2005-9 by Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
||||
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
||||
* @version $Id$
|
||||
*/
|
||||
@ -54,3 +54,16 @@ function timesheet_upgrade1_4()
|
||||
|
||||
return $GLOBALS['setup_info']['timesheet']['currentver'] = '1.6';
|
||||
}
|
||||
|
||||
function timesheet_upgrade1_6()
|
||||
{
|
||||
$GLOBALS['egw_setup']->oProc->AddColumn('egw_timesheet','ts_status',array(
|
||||
'type' => 'int',
|
||||
'precision' => '4'
|
||||
));
|
||||
|
||||
$GLOBALS['egw_setup']->oProc->CreateIndex('egw_timesheet','ts_status');
|
||||
|
||||
return $GLOBALS['setup_info']['timesheet']['currentver'] = '1.7.001';
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- $Id$ -->
|
||||
<overlay>
|
||||
<template id="timesheet.edit.general" template="" lang="" group="0" version="1.5.001">
|
||||
<template id="timesheet.edit.general" template="" lang="" group="0" version="1.7.001">
|
||||
<grid width="100%" height="150">
|
||||
<columns>
|
||||
<column width="95"/>
|
||||
@ -44,6 +44,14 @@
|
||||
<description options=",,,ts_quantity" value="Quantity"/>
|
||||
<textbox type="float" id="ts_quantity" statustext="empty if identical to duration" blur="@ts_quantity_blur" precision="3" span="all"/>
|
||||
</row>
|
||||
<row>
|
||||
<description value="Status"/>
|
||||
<menulist>
|
||||
<menupopup id="ts_status" statustext="select a status of the timesheet" options="please select"/>
|
||||
</menulist>
|
||||
<description/>
|
||||
<description/>
|
||||
</row>
|
||||
</rows>
|
||||
</grid>
|
||||
</template>
|
||||
@ -93,7 +101,7 @@
|
||||
</rows>
|
||||
</grid>
|
||||
</template>
|
||||
<template id="timesheet.edit" template="" lang="" group="0" version="1.5.001">
|
||||
<template id="timesheet.edit" template="" lang="" group="0" version="1.7.001">
|
||||
<grid width="100%">
|
||||
<columns>
|
||||
<column width="100"/>
|
||||
@ -142,7 +150,7 @@
|
||||
</grid>
|
||||
</row>
|
||||
<row>
|
||||
<tabbox span="all">
|
||||
<tabbox id="general|notes|links|customfields" span="all">
|
||||
<tabs>
|
||||
<tab label="General" statustext=""/>
|
||||
<tab label="Notes" statustext=""/>
|
||||
|
67
timesheet/templates/default/editstatus.xet
Normal file
67
timesheet/templates/default/editstatus.xet
Normal file
@ -0,0 +1,67 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- $Id$ -->
|
||||
<overlay>
|
||||
<template id="timesheet.editstatus" template="" lang="" group="0" version="1.7.001">
|
||||
<grid width="100%" height="450" overflow="auto">
|
||||
<columns>
|
||||
<column width="100"/>
|
||||
<column/>
|
||||
<column/>
|
||||
<column width="30%"/>
|
||||
</columns>
|
||||
<rows>
|
||||
<row disabled="!@msg">
|
||||
<description id="msg" span="all" class="redItalic" align="center"/>
|
||||
<description/>
|
||||
<description/>
|
||||
<description/>
|
||||
</row>
|
||||
<row>
|
||||
<groupbox rows="1" cols="1">
|
||||
<grid width="100%" height="300" overflow="auto">
|
||||
<columns>
|
||||
<column width="100"/>
|
||||
<column/>
|
||||
<column/>
|
||||
<column width="30%"/>
|
||||
</columns>
|
||||
<rows>
|
||||
<row class="row" valign="top">
|
||||
<description value="Status"/>
|
||||
<grid width="100%" height="280" overflow="auto" id="statis">
|
||||
<columns>
|
||||
<column/>
|
||||
<column width="5%"/>
|
||||
</columns>
|
||||
<rows>
|
||||
<row class="th">
|
||||
<description value="Name"/>
|
||||
<description value="Actions"/>
|
||||
</row>
|
||||
<row class="row">
|
||||
<textbox size="80" maxlength="150" blur="--> enter new name" id="${row}[name]"/>
|
||||
<button image="delete" label="Delete" align="center" id="delete[$row_cont[id]]" statustext="Delete this status" onclick="return confirm('Delete this status');"/>
|
||||
</row>
|
||||
</rows>
|
||||
</grid>
|
||||
</row>
|
||||
</rows>
|
||||
</grid>
|
||||
</groupbox>
|
||||
<description/>
|
||||
<description/>
|
||||
<description/>
|
||||
</row>
|
||||
<row>
|
||||
<hbox span="2">
|
||||
<button label="Save" id="button[save]"/>
|
||||
<button id="button[apply]" label="Apply"/>
|
||||
<button label="Cancel" id="button[cancel]"/>
|
||||
</hbox>
|
||||
<description/>
|
||||
<description/>
|
||||
</row>
|
||||
</rows>
|
||||
</grid>
|
||||
</template>
|
||||
</overlay>
|
@ -15,24 +15,25 @@
|
||||
<template id="timesheet.index.add" template="" lang="" group="0" version="1.3.001">
|
||||
<button label="Add" id="add" onclick="window.open(egw::link('/index.php','menuaction=timesheet.timesheet_ui.edit'),'_blank','dependent=yes,width=600,height=400,scrollbars=yes,status=yes'); return false;"/>
|
||||
</template>
|
||||
<template id="timesheet.index.rows" template="" lang="" group="0" version="1.5.002">
|
||||
<template id="timesheet.index.rows" template="" lang="" group="0" version="1.7.001">
|
||||
<grid width="100%">
|
||||
<columns>
|
||||
<column width="15%"/>
|
||||
<column width="50%"/>
|
||||
<column/>
|
||||
<column/>
|
||||
<column disabled="@ts_viewtype"/>
|
||||
<column disabled="@ts_viewtype"/>
|
||||
<column disabled="@ts_viewtype"/>
|
||||
<column disabled="@no_ts_quantity"/>
|
||||
<column disabled="@no_ts_unitprice"/>
|
||||
<column disabled="@no_ts_total"/>
|
||||
<column disabled="@no_owner_col"/>
|
||||
<column disabled="@no_ts_status"/>
|
||||
<column/>
|
||||
<column/>
|
||||
</columns>
|
||||
<rows>
|
||||
<row class="th">
|
||||
<nextmatch-sortheader label="Date" id="ts_start"/>
|
||||
<grid spacing="1" padding="1">
|
||||
<grid spacing="0" padding="0">
|
||||
<columns>
|
||||
<column/>
|
||||
</columns>
|
||||
@ -63,12 +64,16 @@
|
||||
<textbox type="float" id="price" readonly="true" precision="2"/>
|
||||
</vbox>
|
||||
<nextmatch-filterheader id="ts_owner" options="User" no_lang="1" class="$cont[ownerClass]"/>
|
||||
<nextmatch-filterheader id="ts_status" onchange="1" options="All status"/>
|
||||
<nextmatch-customfields id="customfields" readonly="true"/>
|
||||
<description value="Actions" class="noPrint"/>
|
||||
<hbox class="noPrint">
|
||||
<description value="Actions" class="noPrint" align="right"/>
|
||||
<button label="Check all" image="check" id="check_all" needed="1" statustext="Check all" onclick="toggle_all(this.form,form::name('checked[]')); return false;"/>
|
||||
</hbox>
|
||||
</row>
|
||||
<row class="$row_cont[class]">
|
||||
<date-time id="${row}[ts_start]" readonly="true" options=",8"/>
|
||||
<vbox>
|
||||
<vbox options="0,0">
|
||||
<link id="${row}[ts_link]" no_lang="1"/>
|
||||
<description id="${row}[ts_title]" no_lang="1" class="$row_cont[titleClass]"/>
|
||||
<description id="${row}[ts_description]" no_lang="1"/>
|
||||
@ -83,39 +88,54 @@
|
||||
<menulist class="$cont[ownerClass]">
|
||||
<menupopup type="select-account" id="${row}[ts_owner]" readonly="true"/>
|
||||
</menulist>
|
||||
<menulist>
|
||||
<menupopup id="${row}[ts_status]" readonly="true"/>
|
||||
</menulist>
|
||||
<customfields-list id="$row" readonly="true"/>
|
||||
<hbox class="noPrint">
|
||||
<hbox class="noPrint" align="right">
|
||||
<button image="view" label="View" id="view[$row_cont[ts_id]]" onclick="window.open(egw::link('/index.php','menuaction=timesheet.timesheet_ui.view&ts_id=$row_cont[ts_id]'),'_blank','dependent=yes,width=600,height=400,scrollbars=yes,status=yes'); return false;" statustext="View this entry"/>
|
||||
<button image="edit" label="Edit" id="edit[$row_cont[ts_id]]" statustext="Edit this entry" onclick="window.open(egw::link('/index.php','menuaction=timesheet.timesheet_ui.edit&ts_id=$row_cont[ts_id]'),'_blank','dependent=yes,width=600,height=400,scrollbars=yes,status=yes'); return false;"/>
|
||||
<button image="delete" label="Delete" id="delete[$row_cont[ts_id]]" statustext="Delete this entry" onclick="return confirm('Delete this entry');"/>
|
||||
<checkbox options="$row_cont[ts_id]" id="checked[]" statustext="Select multiple contacts for a further action"/>
|
||||
</hbox>
|
||||
</row>
|
||||
</rows>
|
||||
</grid>
|
||||
</template>
|
||||
<template id="timesheet.index" template="" lang="" group="0" version="1.5.002">
|
||||
<template id="timesheet.index" template="" lang="" group="0" version="1.7.001">
|
||||
<grid width="100%">
|
||||
<columns>
|
||||
<column/>
|
||||
<column/>
|
||||
</columns>
|
||||
<rows>
|
||||
<row disabled="!@msg">
|
||||
<description span="all" class="redItalic" no_lang="1" id="msg" align="center"/>
|
||||
<description/>
|
||||
</row>
|
||||
<row disabled="1">
|
||||
<hbox>
|
||||
<template id="timesheet.index.dates"/>
|
||||
<template id="timesheet.index.add" align="right"/>
|
||||
<template id="dates"/>
|
||||
<template id="add" align="right"/>
|
||||
</hbox>
|
||||
<description/>
|
||||
</row>
|
||||
<row>
|
||||
<nextmatch id="nm" options="timesheet.index.rows"/>
|
||||
<nextmatch id="nm" options="timesheet.index.rows" span="all"/>
|
||||
</row>
|
||||
<row class="noPrint">
|
||||
<button label="Add" id="add" onclick="window.open(egw::link('/index.php','menuaction=timesheet.timesheet_ui.edit'),'_blank','dependent=yes,width=600,height=400,scrollbars=yes,status=yes'); return false;"/>
|
||||
<hbox align="right">
|
||||
<checkbox id="use_all" label="whole query" onchange="if (this.checked==true && !confirm('Apply the action on the whole query, NOT only the shown contacts!!!')) this.checked=false;" statustext="Apply the action on the whole query, NOT only the shown contacts!!!"/>
|
||||
<menulist>
|
||||
<menupopup onchange="do_action(this);" options="Select an action or timesheet you want to modify..." no_lang="1" id="action" statustext="Select an action or timesheet to modify"/>
|
||||
</menulist>
|
||||
<button image="arrow_ltr" label="Check all" id="check_all" statustext="Check all" onclick="toggle_all(this.form,form::name('nm[rows][checked][]')); return false;" needed="1" class="checkAllArrow"/>
|
||||
</hbox>
|
||||
</row>
|
||||
<row disabled="1">
|
||||
<button label="Export" onclick="timesheet_export(); return false;" id="export"/>
|
||||
<description/>
|
||||
</row>
|
||||
</rows>
|
||||
</grid>
|
||||
|
Loading…
Reference in New Issue
Block a user