ef9035797805b1b9b4dc27c2a0513b160e2af7e5
[tine20] / tine20 / Tasks / js / Models.js
1 /**
2  * Tine 2.0
3  *
4  * @package     Tasks
5  * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
6  * @author      Cornelius Weiss <c.weiss@metaways.de>
7  * @copyright   Copyright (c) 2007-2011 Metaways Infosystems GmbH (http://www.metaways.de)
8  *
9  */
10
11 Ext.ns('Tine.Tasks.Model');
12
13 // Task model
14 Tine.Tasks.Model.TaskArray = Tine.Tinebase.Model.genericFields.concat([
15     { name: 'id' },
16     { name: 'percent', header: 'Percent' },
17     { name: 'completed', type: 'date', dateFormat: Date.patterns.ISO8601Long },
18     { name: 'due', type: 'date', dateFormat: Date.patterns.ISO8601Long },
19     // ical common fields
20     { name: 'class' },
21     { name: 'description' },
22     { name: 'geo' },
23     { name: 'location' },
24     { name: 'organizer' },
25     { name: 'originator_tz' },
26     { name: 'priority' },
27     { name: 'status' },
28     { name: 'summary' },
29     { name: 'url' },
30     // ical common fields with multiple appearance
31     { name: 'attach' },
32     { name: 'attendee' },
33     { name: 'tags' },
34     { name: 'comment' },
35     { name: 'contact' },
36     { name: 'related' },
37     { name: 'resources' },
38     { name: 'rstatus' },
39     // scheduleable interface fields
40     { name: 'dtstart', type: 'date', dateFormat: Date.patterns.ISO8601Long },
41     { name: 'duration', type: 'date', dateFormat: Date.patterns.ISO8601Long },
42     { name: 'recurid' },
43     // scheduleable interface fields with multiple appearance
44     { name: 'exdate' },
45     { name: 'exrule' },
46     { name: 'rdate' },
47     { name: 'rrule' },
48     // tine 2.0 notes field
49     { name: 'notes'},
50     // tine 2.0 alarms field
51     { name: 'alarms'},
52     // relations with other objects
53     { name: 'relations'},
54     { name: 'attachments'}
55 ]);
56
57 /**
58  * Task record definition
59  */
60 Tine.Tasks.Model.Task = Tine.Tinebase.data.Record.create(Tine.Tasks.Model.TaskArray, {
61     appName: 'Tasks',
62     modelName: 'Task',
63     idProperty: 'id',
64     titleProperty: 'summary',
65     // ngettext('Task', 'Tasks', n); gettext('Tasks');
66     recordName: 'Task',
67     recordsName: 'Tasks',
68     containerProperty: 'container_id',
69     // ngettext('to do list', 'to do lists', n); gettext('to do lists');
70     containerName: 'to do list',
71     containersName: 'to do lists'
72 });
73
74 /**
75  * returns default account data
76  *
77  * @namespace Tine.Tasks.Model.Task
78  * @static
79  * @return {Object} default data
80  */
81 Tine.Tasks.Model.Task.getDefaultData = function() {
82     var app = Tine.Tinebase.appMgr.get('Tasks');
83
84     return {
85         'class': 'PUBLIC',
86         percent: 0,
87         organizer: Tine.Tinebase.registry.get('currentAccount'),
88         container_id: app.getMainScreen().getWestPanel().getContainerTreePanel().getDefaultContainer()
89     };
90 };
91
92 /**
93  * @namespace Tine.Tasks.Model.Task
94  *
95  * get task filter
96  *
97  * @return {Array} filter objects
98  * @static
99  */
100 Tine.Tasks.Model.Task.getFilterModel = function() {
101     var app = Tine.Tinebase.appMgr.get('Tasks');
102
103     return [
104         {label: _('Quick search'),                  field: 'query',    operators: ['contains']},
105         {filtertype: 'tine.widget.container.filtermodel', app: app, recordClass: Tine.Tasks.Model.Task},
106         {label: app.i18n._('Summary'),         field: 'summary' },
107         {label: app.i18n._('Due Date'),        field: 'due', valueType: 'date', operators: ['within', 'before', 'after']},
108         {
109             label: app.i18n._('Status'),
110             field: 'status',
111             filtertype: 'tine.widget.keyfield.filter',
112             app: app,
113             defaultValue: Tine.Tasks.Model.Task.getClosedStatus(),
114             keyfieldName: 'taskStatus',
115             defaultOperator: 'notin'
116         },
117         {label: app.i18n._('Responsible'),     field: 'organizer', valueType: 'user'},
118         {filtertype: 'tinebase.tag', app: app},
119         {label: _('Last Modified Time'),                                                field: 'last_modified_time', valueType: 'date'},
120         {label: _('Last Modified By'),                                                  field: 'last_modified_by',   valueType: 'user'},
121         {label: _('Creation Time'),                                                     field: 'creation_time',      valueType: 'date'},
122         {label: _('Created By'),                                                        field: 'created_by',         valueType: 'user'}
123     ];
124 };
125
126 /**
127  * @namespace Tine.Tasks.Model.Task
128  *
129  * get closed status ids
130  *
131  * @return {Array} status ids objects
132  * @static
133  */
134 Tine.Tasks.Model.Task.getClosedStatus = function() {
135     var reqStatus = [];
136
137     Tine.Tinebase.widgets.keyfield.StoreMgr.get('Tasks', 'taskStatus').each(function(status) {
138         if (! status.get('is_open')) {
139             reqStatus.push(status.get('id'));
140         }
141     }, this);
142
143     return reqStatus;
144 };
145
146 /**
147  * default tasks backend
148  */
149 Tine.Tasks.JsonBackend = new Tine.Tinebase.data.RecordProxy({
150     appName: 'Tasks',
151     modelName: 'Task',
152     recordClass: Tine.Tasks.Model.Task
153 });
154
155 Tine.Tasks.Model.Status = Tine.Tinebase.data.Record.create([
156     { name: 'id' },
157     { name: 'value' },
158     { name: 'icon' },
159     { name: 'system' },
160     { name: 'is_open' },
161     { name: 'i18nValue' }
162 ], {
163     appName: 'Tasks',
164     modelName: 'Status',
165     idProperty: 'id',
166     titleProperty: 'i18nValue',
167     // ngettext('Status', 'Status', n); gettext('Status');
168     recordName: 'Status',
169     recordsName: 'Status'
170 });