* Add creation field to timesheet

This commit is contained in:
nathangray 2017-01-17 10:34:10 -07:00
parent 78f4a6fb9e
commit a23acf1dfa
11 changed files with 56 additions and 19 deletions

View File

@ -56,7 +56,7 @@ class timesheet_bo extends Api\Storage
* @var array * @var array
*/ */
var $timestamps = array( var $timestamps = array(
'ts_start','ts_modified' 'ts_start','ts_created', 'ts_modified'
); );
/** /**
* Start of today in user-time * Start of today in user-time
@ -527,7 +527,7 @@ class timesheet_bo extends Api\Storage
parent::search($criteria,array( parent::search($criteria,array(
(string)$sum_ts_id[$type],"''","''","''",'MIN(ts_start)','SUM(ts_duration) AS ts_duration', (string)$sum_ts_id[$type],"''","''","''",'MIN(ts_start)','SUM(ts_duration) AS ts_duration',
($this->quantity_sum ? "SUM(ts_quantity) AS ts_quantity" : '0'), ($this->quantity_sum ? "SUM(ts_quantity) AS ts_quantity" : '0'),
'0','NULL','0','0','0','0','0',"SUM($total_sql) AS ts_total" '0','NULL','0','0','0','0','0','0',"SUM($total_sql) AS ts_total"
),'GROUP BY '.$sum_sql[$type],$sum_extra_cols,$wildcard,$empty,$op,'UNION',$filter,$join,$need_full_no_count); ),'GROUP BY '.$sum_sql[$type],$sum_extra_cols,$wildcard,$empty,$op,'UNION',$filter,$join,$need_full_no_count);
$sum_extra_cols[$type]{0} = '0'; $sum_extra_cols[$type]{0} = '0';
} }
@ -597,6 +597,10 @@ class timesheet_bo extends Api\Storage
if (isset($new[$name]) && $new[$name] != $value) $changed[] = $name; if (isset($new[$name]) && $new[$name] != $value) $changed[] = $name;
} }
} }
if (!$this->data['ts_created'])
{
$this->data['ts_created'] = time();
}
if (isset($old) && !$changed) if (isset($old) && !$changed)
{ {
return false; return false;

View File

@ -27,7 +27,7 @@ class timesheet_egw_record implements importexport_iface_egw_record
// Used in conversions // Used in conversions
static $types = array( static $types = array(
'select-account' => array('ts_owner','ts_modifier'), 'select-account' => array('ts_owner','ts_modifier'),
'date-time' => array('ts_start', 'ts_modified'), 'date-time' => array('ts_start', 'ts_created', 'ts_modified'),
'select-cat' => array('cat_id'), 'select-cat' => array('cat_id'),
'links' => array('pl_id'), 'links' => array('pl_id'),
'select' => array('ts_status'), 'select' => array('ts_status'),

View File

@ -57,10 +57,7 @@ class timesheet_merge extends Api\Storage\Merge
$this->parse_html_styles = Api\Storage\Customfields::use_html('timesheet'); $this->parse_html_styles = Api\Storage\Customfields::use_html('timesheet');
$this->bo = new timesheet_bo(); $this->bo = new timesheet_bo();
$this->date_fields += array( $this->date_fields += timesheet_egw_record::$types['date-time'];
'ts_start',
'ts_modified',
);
} }
/** /**
@ -168,7 +165,11 @@ class timesheet_merge extends Api\Storage\Merge
echo '<tr><td colspan="4"><h3>'.lang('Timesheet fields:')."</h3></td></tr>"; echo '<tr><td colspan="4"><h3>'.lang('Timesheet fields:')."</h3></td></tr>";
$n = 0; $n = 0;
$fields = array('ts_id' => lang('Timesheet ID')) + $this->bo->field2label + array('ts_total' => lang('total')); $fields = array('ts_id' => lang('Timesheet ID')) + $this->bo->field2label + array(
'ts_total' => lang('total'),
'ts_created' => lang('Created'),
'ts_modified' => lang('Modified'),
);
foreach($fields as $name => $label) foreach($fields as $name => $label)
{ {
if (in_array($name,array('pl_id','customfields'))) continue; // dont show them if (in_array($name,array('pl_id','customfields'))) continue; // dont show them

View File

@ -19,7 +19,10 @@ class timesheet_wizard_export_csv extends importexport_wizard_basic_export_csv
// Field mapping // Field mapping
$bo = new timesheet_bo(); $bo = new timesheet_bo();
$this->export_fields = array('ts_id' => 'Timesheet ID') + $bo->field2label + array('ts_modified'=> 'Modified'); $this->export_fields = array('ts_id' => 'Timesheet ID') + $bo->field2label + array(
'ts_created' => 'Created',
'ts_modified'=> 'Modified'
);
// Custom fields // Custom fields
unset($this->export_fields['customfields']); unset($this->export_fields['customfields']);

View File

@ -17,7 +17,7 @@ if (!defined('TIMESHEET_APP'))
} }
$setup_info[TIMESHEET_APP]['name'] = TIMESHEET_APP; $setup_info[TIMESHEET_APP]['name'] = TIMESHEET_APP;
$setup_info[TIMESHEET_APP]['version'] = '16.1'; $setup_info[TIMESHEET_APP]['version'] = '17.1';
$setup_info[TIMESHEET_APP]['app_order'] = 5; $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]['enable'] = 1;

View File

@ -24,6 +24,7 @@ $phpgw_baseline = array(
'ts_unitprice' => array('type' => 'float','precision' => '4','comment' => 'unitprice'), 'ts_unitprice' => array('type' => 'float','precision' => '4','comment' => 'unitprice'),
'cat_id' => array('type' => 'int','meta' => 'category','precision' => '4','default' => '0','comment' => 'category'), 'cat_id' => array('type' => 'int','meta' => 'category','precision' => '4','default' => '0','comment' => 'category'),
'ts_owner' => array('type' => 'int','meta' => 'user','precision' => '4','nullable' => False,'comment' => 'owner of the timesheet'), 'ts_owner' => array('type' => 'int','meta' => 'user','precision' => '4','nullable' => False,'comment' => 'owner of the timesheet'),
'ts_created' => array('type' => 'int','meta' => 'timestamp','precision' => '8','nullable' => False,'comment' => 'Creation date of the timesheet'),
'ts_modified' => array('type' => 'int','meta' => 'timestamp','precision' => '8','nullable' => False,'comment' => 'date modified ot the timesheet'), 'ts_modified' => array('type' => 'int','meta' => 'timestamp','precision' => '8','nullable' => False,'comment' => 'date modified ot the timesheet'),
'ts_modifier' => array('type' => 'int','meta' => 'user','precision' => '4','nullable' => False,'comment' => 'account id of the last modifier'), 'ts_modifier' => array('type' => 'int','meta' => 'user','precision' => '4','nullable' => False,'comment' => 'account id of the last modifier'),
'pl_id' => array('type' => 'int','precision' => '4','default' => '0','comment' => 'id of the linked project'), 'pl_id' => array('type' => 'int','precision' => '4','default' => '0','comment' => 'id of the linked project'),

View File

@ -131,3 +131,17 @@ function timesheet_upgrade14_1()
{ {
return $GLOBALS['setup_info']['timesheet']['currentver'] = '16.1'; return $GLOBALS['setup_info']['timesheet']['currentver'] = '16.1';
} }
function timesheet_upgrade16_1()
{
$GLOBALS['egw_setup']->oProc->AddColumn('egw_timesheet','ts_created',array(
'type' => 'int',
'meta' => 'timestamp',
'precision' => '8',
'nullable' => False
));
// Initialize to start
$GLOBALS['egw']->db->query('UPDATE egw_timesheet set ts_created = ts_start');
return $GLOBALS['setup_info']['timesheet']['currentver'] = '17.1';
}

View File

@ -134,10 +134,12 @@
</row> </row>
<row class="dialogOperators"> <row class="dialogOperators">
<description value="User" for="ts_owner"/> <description value="User" for="ts_owner"/>
<menulist > <hbox span="2" class="et2_fullWidth">
<menupopup id="ts_owner" no_lang="1" class="et2_fullWidth"/> <menulist>
<menupopup id="ts_owner" no_lang="1"/>
</menulist> </menulist>
<description/> <date-time id="ts_created" readonly="true" align="left"/>
</hbox>
<description value="Status" disabled="@no_ts_status"/> <description value="Status" disabled="@no_ts_status"/>
<menulist span="3"> <menulist span="3">
<menupopup statustext="select a status of the timesheet" id="ts_status" class="et2_fullWidth" empty_label="please select" disabled="@no_ts_status"/> <menupopup statustext="select a status of the timesheet" id="ts_status" class="et2_fullWidth" empty_label="please select" disabled="@no_ts_status"/>
@ -146,11 +148,12 @@
</row> </row>
<row disabled="!@ts_modified" class="dialogOperators"> <row disabled="!@ts_modified" class="dialogOperators">
<description value="Last modified"/> <description value="Last modified"/>
<hbox span="2" class="et2_fullWidth">
<menulist> <menulist>
<menupopup type="select-account" id="ts_modifier" readonly="true"/> <menupopup type="select-account" id="ts_modifier" readonly="true"/>
</menulist> </menulist>
<description/>
<date-time id="ts_modified" readonly="true" align="left"/> <date-time id="ts_modified" readonly="true" align="left"/>
</hbox>
</row> </row>
<row class="dialogFooterToolbar"> <row class="dialogFooterToolbar">
<hbox orient="0" span="all"> <hbox orient="0" span="all">

View File

@ -24,6 +24,7 @@
<column width="60" disabled="@no_ts_unitprice"/> <column width="60" disabled="@no_ts_unitprice"/>
<column width="60" disabled="@no_ts_total"/> <column width="60" disabled="@no_ts_total"/>
<column width="130" disabled="@no_owner_col"/> <column width="130" disabled="@no_owner_col"/>
<column width="135"/>
<column width="50"/> <column width="50"/>
<column width="10%" disabled="@no_ts_status"/> <column width="10%" disabled="@no_ts_status"/>
<column width="15%"/> <column width="15%"/>
@ -65,6 +66,7 @@
<textbox type="float" id="price" readonly="true" precision="2"/> <textbox type="float" id="price" readonly="true" precision="2"/>
</vbox> </vbox>
<nextmatch-filterheader id="ts_owner" no_lang="1" options="User" class="$cont[ownerClass]"/> <nextmatch-filterheader id="ts_owner" no_lang="1" options="User" class="$cont[ownerClass]"/>
<nextmatch-sortheader label="Created" id="ts_created"/>
<nextmatch-sortheader label="ID" id="ts_id"/> <nextmatch-sortheader label="ID" id="ts_id"/>
<nextmatch-filterheader id="ts_status" options="Status"/> <nextmatch-filterheader id="ts_status" options="Status"/>
<nextmatch-customfields id="customfields"/> <nextmatch-customfields id="customfields"/>
@ -86,6 +88,7 @@
<menulist class="$cont[ownerClass]"> <menulist class="$cont[ownerClass]">
<menupopup type="select-account" id="${row}[ts_owner]" readonly="true"/> <menupopup type="select-account" id="${row}[ts_owner]" readonly="true"/>
</menulist> </menulist>
<date-time id="${row}[ts_created]" readonly="true"/>
<description id="${row}[ts_id]"/> <description id="${row}[ts_id]"/>
<menulist> <menulist>
<menupopup id="${row}[ts_status]" readonly="true"/> <menupopup id="${row}[ts_status]" readonly="true"/>

View File

@ -91,6 +91,10 @@
<menupopup id="ts_owner" no_lang="1" class="et2_fullWidth"/> <menupopup id="ts_owner" no_lang="1" class="et2_fullWidth"/>
</menulist> </menulist>
</row> </row>
<row>
<description/>
<date-time id="ts_created" readonly="true" align="left"/>
</row>
<row disabled="!@ts_modified"> <row disabled="!@ts_modified">
<description value="Last modified"/> <description value="Last modified"/>
<menulist> <menulist>

View File

@ -73,6 +73,10 @@
<menupopup id="ts_owner" no_lang="1" class="et2_fullWidth"/> <menupopup id="ts_owner" no_lang="1" class="et2_fullWidth"/>
</menulist> </menulist>
</row> </row>
<row>
<description/>
<date-time id="ts_created" readonly="true" align="left"/>
</row>
<row disabled="!@ts_modified"> <row disabled="!@ts_modified">
<description value="Last modified"/> <description value="Last modified"/>
<menulist> <menulist>