Merge lp:~gs.clearcorp/openerp-ccorp-addons/7.0_project_openerp_methodology into lp:openerp-ccorp-addons/7.0
- 7.0_project_openerp_methodology
- Merge into 7.0
Proposed by
Glen Sojo
Status: | Merged |
---|---|
Merged at revision: | 828 |
Proposed branch: | lp:~gs.clearcorp/openerp-ccorp-addons/7.0_project_openerp_methodology |
Merge into: | lp:openerp-ccorp-addons/7.0 |
Diff against target: |
6580 lines (+6423/-0) 25 files modified
project_openerp/__init__.py (+24/-0) project_openerp/__openerp__.py (+53/-0) project_openerp/data/project_openerp_data.xml (+156/-0) project_openerp/i18n/es.po (+542/-0) project_openerp/i18n/project_openerp.pot (+540/-0) project_openerp/project_openerp.py (+377/-0) project_openerp/security/ir.model.access.csv (+10/-0) project_openerp/view/project_openerp_menu.xml (+46/-0) project_openerp/view/project_openerp_view.xml (+300/-0) project_openerp/wizard/__init__.py (+26/-0) project_openerp/wizard/feature_import_wizard.py (+115/-0) project_openerp/wizard/phase_create_wizard.py (+72/-0) project_openerp/wizard/sprint_close_wizard.py (+71/-0) project_openerp/wizard/task_create_wizard.py (+149/-0) project_openerp/wizard/wizard_view.xml (+106/-0) project_scrum/__init__.py (+23/-0) project_scrum/__openerp__.py (+52/-0) project_scrum/data/project_scrum_data.xml (+26/-0) project_scrum/i18n/es.po (+829/-0) project_scrum/i18n/project_scrum.pot (+820/-0) project_scrum/project_scrum.py (+1152/-0) project_scrum/security/ir.model.access.csv (+11/-0) project_scrum/static/src/css/project_scrum.css (+33/-0) project_scrum/view/project_scrum_menu.xml (+39/-0) project_scrum/view/project_scrum_view.xml (+851/-0) |
To merge this branch: | bzr merge lp:~gs.clearcorp/openerp-ccorp-addons/7.0_project_openerp_methodology |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
ClearCorp drivers | Pending | ||
Review via email: mp+212882@code.launchpad.net |
Commit message
Description of the change
[ADD] Inclusion of modules to manage scrum and openerp specific methodologies
To post a comment you must log in.
- 824. By Ronald Rubi
-
[MRG] Add exchange_
rate_calculated module. It permits compute amount_currency with diferents currency and it assign this amount to debit or credit - 825. By Ronald Rubi
-
[MRG] Add exchange rate currency for commercial currency in supplier and customer form for payments, Improve file names for account_
voucher_ payment_ method module., Fix get_exchange_rate method. Add case when both currencies are equal - 826. By Ronald Rubi
-
[MRG] Add account_
partner_ balance_ report - 827. By Ronald Rubi
-
[MRG] Add withholding tax comissions to customer and supplier voucher
- 828. By Ronald Rubi
-
[MRG] Add modules project_scrum and project_openerp
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === added directory 'project_openerp' |
2 | === added file 'project_openerp/__init__.py' |
3 | --- project_openerp/__init__.py 1970-01-01 00:00:00 +0000 |
4 | +++ project_openerp/__init__.py 2014-03-27 17:09:06 +0000 |
5 | @@ -0,0 +1,24 @@ |
6 | +# -*- coding: utf-8 -*- |
7 | +############################################################################## |
8 | +# |
9 | +# OpenERP, Open Source Management Solution |
10 | +# Addons modules by CLEARCORP S.A. |
11 | +# Copyright (C) 2009-TODAY CLEARCORP S.A. (<http://clearcorp.co.cr>). |
12 | +# |
13 | +# This program is free software: you can redistribute it and/or modify |
14 | +# it under the terms of the GNU Affero General Public License as |
15 | +# published by the Free Software Foundation, either version 3 of the |
16 | +# License, or (at your option) any later version. |
17 | +# |
18 | +# This program is distributed in the hope that it will be useful, |
19 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
20 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
21 | +# GNU Affero General Public License for more details. |
22 | +# |
23 | +# You should have received a copy of the GNU Affero General Public License |
24 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
25 | +# |
26 | +############################################################################## |
27 | + |
28 | +import project_openerp |
29 | +import wizard |
30 | \ No newline at end of file |
31 | |
32 | === added file 'project_openerp/__openerp__.py' |
33 | --- project_openerp/__openerp__.py 1970-01-01 00:00:00 +0000 |
34 | +++ project_openerp/__openerp__.py 2014-03-27 17:09:06 +0000 |
35 | @@ -0,0 +1,53 @@ |
36 | +# -*- coding: utf-8 -*- |
37 | +############################################################################## |
38 | +# |
39 | +# OpenERP, Open Source Management Solution |
40 | +# Addons modules by CLEARCORP S.A. |
41 | +# Copyright (C) 2009-TODAY CLEARCORP S.A. (<http://clearcorp.co.cr>). |
42 | +# |
43 | +# This program is free software: you can redistribute it and/or modify |
44 | +# it under the terms of the GNU Affero General Public License as |
45 | +# published by the Free Software Foundation, either version 3 of the |
46 | +# License, or (at your option) any later version. |
47 | +# |
48 | +# This program is distributed in the hope that it will be useful, |
49 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
50 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
51 | +# GNU Affero General Public License for more details. |
52 | +# |
53 | +# You should have received a copy of the GNU Affero General Public License |
54 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
55 | +# |
56 | +############################################################################## |
57 | + |
58 | +{ |
59 | + "name" : 'Project OpenERP Methodology', |
60 | + "version" : '1.0', |
61 | + "author" : 'CLEARCORP S.A.', |
62 | + 'complexity': 'normal', |
63 | + "description": """ |
64 | +""", |
65 | + "category": 'Project Management', |
66 | + "sequence": 10, |
67 | + "website" : "http://clearcorp.co.cr", |
68 | + "images" : [], |
69 | + "depends" : [ |
70 | + 'project_scrum', |
71 | + 'project_long_term', |
72 | + ], |
73 | + "data" : [ |
74 | + 'data/project_openerp_data.xml', |
75 | + 'wizard/wizard_view.xml', |
76 | + 'view/project_openerp_view.xml', |
77 | + 'view/project_openerp_menu.xml', |
78 | + 'security/ir.model.access.csv', |
79 | + ], |
80 | + "init_xml" : [], |
81 | + "demo_xml" : [], |
82 | + "update_xml" : [], |
83 | + "test" : [], |
84 | + "auto_install": False, |
85 | + "application": False, |
86 | + "installable": True, |
87 | + 'license': 'AGPL-3', |
88 | +} |
89 | \ No newline at end of file |
90 | |
91 | === added directory 'project_openerp/data' |
92 | === added file 'project_openerp/data/project_openerp_data.xml' |
93 | --- project_openerp/data/project_openerp_data.xml 1970-01-01 00:00:00 +0000 |
94 | +++ project_openerp/data/project_openerp_data.xml 2014-03-27 17:09:06 +0000 |
95 | @@ -0,0 +1,156 @@ |
96 | +<?xml version="1.0" encoding="utf-8"?> |
97 | +<openerp> |
98 | + <data noupdate="1"> |
99 | + |
100 | + <record model="project.oerp.work.type.template.group" id="data_work_type_template_group"> |
101 | + <field name="name">Default Templates</field> |
102 | + <field name="file">VHlwZSwjLEMsTmFtZSxEZXNjcmlwdGlvbixQcmlvcml0eSxPcHRpb25hbCBEYXRhLE9wdGlvbmFsIERhdGEsT3B0aW9uYWwgRGF0YSxDb25maWd1cmF0aW9uLEludGVyZmFjZSxJbnRlcmFjdGlvbixEaWFncmFtcyxJbmZvcm1zLFBlcm1pc3Npb25zLFRlc3RzLE9iamVjdHMsTWV0aG9kcyxGdW5jdGlvbmFsIEZpZWxkcyxXb3JrZmxvd3MsSW50ZXJmYWNlLFdpemFyZHMsSW5mb3JtcyxEYXRhIExvYWRpbmcsUGVybWlzc2lvbnMsVGVzdHMsR2VuZXJhbApQUkosMDAxLCxGZWF0dXJlIDEsRGVzY3JpcHRpb24gMSwyLEVtcHR5LEVtcHR5LEVtcHR5LDEsMCwwLDAsMCwwLDEsMSwxLDAsMCwwLDAsMCwwLDAsMSwzCkhSLDAwMiwsRmVhdHVyZSAyLERlc2NyaXB0aW9uIDIsMSxFbXB0eSxFbXB0eSxFbXB0eSwyLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDIsNQpQUkosMDAzLCxGZWF0dXJlIDMsRGVzY3JpcHRpb24gMywyLEVtcHR5LEVtcHR5LEVtcHR5LDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwzCkFDQywwMDQsLEZlYXR1cmUgNCxEZXNjcmlwdGlvbiA0LDMsRW1wdHksRW1wdHksRW1wdHksMSwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDMKUFJKLDAwNSwsRmVhdHVyZSA1LERlc2NyaXB0aW9uIDUsNCxFbXB0eSxFbXB0eSxFbXB0eSwxLDAsMCwwLDEsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMg==</field> |
103 | + <field name="filename">default.cvs</field> |
104 | + </record> |
105 | + |
106 | + <!-- Funtional --> |
107 | + <record model="project.oerp.work.type.template" id="data_work_type_template_fun"> |
108 | + <field name="group_id" ref="data_work_type_template_group"/> |
109 | + <field name="name">Functional Analysis</field> |
110 | + </record> |
111 | + |
112 | + <record model="project.oerp.work.type.mapping" id="data_work_type_mapping_fun_conf"> |
113 | + <field name="template_id" ref="data_work_type_template_fun"/> |
114 | + <field name="name">Configuration</field> |
115 | + <field name="sequence">0</field> |
116 | + <field name="column_number">10</field> |
117 | + </record> |
118 | + |
119 | + <record model="project.oerp.work.type.mapping" id="data_work_type_mapping_fun_int"> |
120 | + <field name="template_id" ref="data_work_type_template_fun"/> |
121 | + <field name="name">Interface</field> |
122 | + <field name="sequence">1</field> |
123 | + <field name="column_number">11</field> |
124 | + </record> |
125 | + |
126 | + <record model="project.oerp.work.type.mapping" id="data_work_type_mapping_fun_intr"> |
127 | + <field name="template_id" ref="data_work_type_template_fun"/> |
128 | + <field name="name">Interaction</field> |
129 | + <field name="sequence">2</field> |
130 | + <field name="column_number">12</field> |
131 | + </record> |
132 | + |
133 | + <record model="project.oerp.work.type.mapping" id="data_work_type_mapping_fun_dia"> |
134 | + <field name="template_id" ref="data_work_type_template_fun"/> |
135 | + <field name="name">Diagrams</field> |
136 | + <field name="sequence">3</field> |
137 | + <field name="column_number">13</field> |
138 | + </record> |
139 | + |
140 | + <record model="project.oerp.work.type.mapping" id="data_work_type_mapping_fun_inf"> |
141 | + <field name="template_id" ref="data_work_type_template_fun"/> |
142 | + <field name="name">Informs</field> |
143 | + <field name="sequence">4</field> |
144 | + <field name="column_number">14</field> |
145 | + </record> |
146 | + |
147 | + <record model="project.oerp.work.type.mapping" id="data_work_type_mapping_fun_per"> |
148 | + <field name="template_id" ref="data_work_type_template_fun"/> |
149 | + <field name="name">Permissions</field> |
150 | + <field name="sequence">5</field> |
151 | + <field name="column_number">15</field> |
152 | + </record> |
153 | + |
154 | + <record model="project.oerp.work.type.mapping" id="data_work_type_mapping_fun_tes"> |
155 | + <field name="template_id" ref="data_work_type_template_fun"/> |
156 | + <field name="name">Tests</field> |
157 | + <field name="sequence">6</field> |
158 | + <field name="column_number">16</field> |
159 | + </record> |
160 | + |
161 | + <!-- Technical --> |
162 | + <record model="project.oerp.work.type.template" id="data_work_type_template_tec"> |
163 | + <field name="group_id" ref="data_work_type_template_group"/> |
164 | + <field name="name">Technical Analysis</field> |
165 | + </record> |
166 | + |
167 | + <record model="project.oerp.work.type.mapping" id="data_work_type_mapping_tec_obj"> |
168 | + <field name="template_id" ref="data_work_type_template_tec"/> |
169 | + <field name="name">Objects</field> |
170 | + <field name="sequence">7</field> |
171 | + <field name="column_number">17</field> |
172 | + </record> |
173 | + |
174 | + <record model="project.oerp.work.type.mapping" id="data_work_type_mapping_tec_met"> |
175 | + <field name="template_id" ref="data_work_type_template_tec"/> |
176 | + <field name="name">Methods</field> |
177 | + <field name="sequence">8</field> |
178 | + <field name="column_number">18</field> |
179 | + </record> |
180 | + |
181 | + <record model="project.oerp.work.type.mapping" id="data_work_type_mapping_tec_fun"> |
182 | + <field name="template_id" ref="data_work_type_template_tec"/> |
183 | + <field name="name">Functional Fields</field> |
184 | + <field name="sequence">9</field> |
185 | + <field name="column_number">19</field> |
186 | + </record> |
187 | + |
188 | + <record model="project.oerp.work.type.mapping" id="data_work_type_mapping_tec_wor"> |
189 | + <field name="template_id" ref="data_work_type_template_tec"/> |
190 | + <field name="name">Workflows</field> |
191 | + <field name="sequence">10</field> |
192 | + <field name="column_number">20</field> |
193 | + </record> |
194 | + |
195 | + <record model="project.oerp.work.type.mapping" id="data_work_type_mapping_tec_int"> |
196 | + <field name="template_id" ref="data_work_type_template_tec"/> |
197 | + <field name="name">Interface</field> |
198 | + <field name="sequence">11</field> |
199 | + <field name="column_number">21</field> |
200 | + </record> |
201 | + |
202 | + <record model="project.oerp.work.type.mapping" id="data_work_type_mapping_tec_wiz"> |
203 | + <field name="template_id" ref="data_work_type_template_tec"/> |
204 | + <field name="name">Wizards</field> |
205 | + <field name="sequence">12</field> |
206 | + <field name="column_number">22</field> |
207 | + </record> |
208 | + |
209 | + <record model="project.oerp.work.type.mapping" id="data_work_type_mapping_tec_inf"> |
210 | + <field name="template_id" ref="data_work_type_template_tec"/> |
211 | + <field name="name">Informs</field> |
212 | + <field name="sequence">13</field> |
213 | + <field name="column_number">23</field> |
214 | + </record> |
215 | + |
216 | + <record model="project.oerp.work.type.mapping" id="data_work_type_mapping_tec_load"> |
217 | + <field name="template_id" ref="data_work_type_template_tec"/> |
218 | + <field name="name">Data Loading</field> |
219 | + <field name="sequence">14</field> |
220 | + <field name="column_number">24</field> |
221 | + </record> |
222 | + |
223 | + <record model="project.oerp.work.type.mapping" id="data_work_type_mapping_tec_per"> |
224 | + <field name="template_id" ref="data_work_type_template_tec"/> |
225 | + <field name="name">Permissions</field> |
226 | + <field name="sequence">15</field> |
227 | + <field name="column_number">25</field> |
228 | + </record> |
229 | + |
230 | + <record model="project.oerp.work.type.mapping" id="data_work_type_mapping_tec_tes"> |
231 | + <field name="template_id" ref="data_work_type_template_tec"/> |
232 | + <field name="name">Tests</field> |
233 | + <field name="sequence">16</field> |
234 | + <field name="column_number">26</field> |
235 | + </record> |
236 | + |
237 | + <!-- Development --> |
238 | + <record model="project.oerp.work.type.template" id="data_work_type_template_dev"> |
239 | + <field name="group_id" ref="data_work_type_template_group"/> |
240 | + <field name="name">Development</field> |
241 | + </record> |
242 | + |
243 | + <record model="project.oerp.work.type.mapping" id="data_work_type_mapping_dev_gen"> |
244 | + <field name="template_id" ref="data_work_type_template_dev"/> |
245 | + <field name="name">General</field> |
246 | + <field name="sequence">17</field> |
247 | + <field name="column_number">27</field> |
248 | + </record> |
249 | + |
250 | + </data> |
251 | +</openerp> |
252 | \ No newline at end of file |
253 | |
254 | === added directory 'project_openerp/i18n' |
255 | === added file 'project_openerp/i18n/es.po' |
256 | --- project_openerp/i18n/es.po 1970-01-01 00:00:00 +0000 |
257 | +++ project_openerp/i18n/es.po 2014-03-27 17:09:06 +0000 |
258 | @@ -0,0 +1,542 @@ |
259 | +# Translation of OpenERP Server. |
260 | +# This file contains the translation of the following modules: |
261 | +# * project_openerp |
262 | +# |
263 | +msgid "" |
264 | +msgstr "" |
265 | +"Project-Id-Version: OpenERP Server 7.0\n" |
266 | +"Report-Msgid-Bugs-To: \n" |
267 | +"POT-Creation-Date: 2014-03-25 22:41+0000\n" |
268 | +"PO-Revision-Date: 2014-03-25 22:41+0000\n" |
269 | +"Last-Translator: <>\n" |
270 | +"Language-Team: \n" |
271 | +"MIME-Version: 1.0\n" |
272 | +"Content-Type: text/plain; charset=UTF-8\n" |
273 | +"Content-Transfer-Encoding: \n" |
274 | +"Plural-Forms: \n" |
275 | + |
276 | +#. module: project_openerp |
277 | +#: field:project.oerp.feature.import.wizard,file:0 |
278 | +msgid "File to Import" |
279 | +msgstr "Archivo a importar" |
280 | + |
281 | +#. module: project_openerp |
282 | +#: field:project.oerp.work.type.template,filename:0 |
283 | +#: field:project.oerp.work.type.template.group,filename:0 |
284 | +msgid "Filename" |
285 | +msgstr "Nombre de archivo" |
286 | + |
287 | +#. module: project_openerp |
288 | +#: field:project.oerp.work.type.mapping,template_id:0 |
289 | +#: field:project.oerp.work.type.template,name:0 |
290 | +msgid "Template" |
291 | +msgstr "Plantilla" |
292 | + |
293 | +#. module: project_openerp |
294 | +#: field:project.oerp.work.type.template.group,name:0 |
295 | +msgid "Group Name" |
296 | +msgstr "Nombre de grupo" |
297 | + |
298 | +#. module: project_openerp |
299 | +#: field:project.oerp.phase.create.wizard,product_uom:0 |
300 | +msgid "Unit of Measure" |
301 | +msgstr "Unidad de medida" |
302 | + |
303 | +#. module: project_openerp |
304 | +#: model:ir.actions.act_window,name:project_openerp.action_phase_create_wizard |
305 | +msgid "Create Phase from Template" |
306 | +msgstr "Crear fase desde planilla" |
307 | + |
308 | +#. module: project_openerp |
309 | +#: model:ir.actions.act_window,name:project_openerp.action_work_type_template |
310 | +#: field:project.oerp.phase.create.wizard,work_type_template_id:0 |
311 | +#: view:project.oerp.work.type.template:0 |
312 | +msgid "Work Type Template" |
313 | +msgstr "Planilla de tipo de trabajo" |
314 | + |
315 | +#. module: project_openerp |
316 | +#: view:project.oerp.feature.import.wizard:0 |
317 | +msgid "Feature Import Wizard" |
318 | +msgstr "Asistente de importación de caracterÃsticas" |
319 | + |
320 | +#. module: project_openerp |
321 | +#: field:project.oerp.task.hour,expected_hours:0 |
322 | +msgid "Initially Planned Hour(s)" |
323 | +msgstr "Horas planeadas inicialmente" |
324 | + |
325 | +#. module: project_openerp |
326 | +#: field:project.oerp.sprint.close.wizard,opening_sprint_id:0 |
327 | +msgid "Opening Sprint" |
328 | +msgstr "Sprint apertura" |
329 | + |
330 | +#. module: project_openerp |
331 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_tec_wor |
332 | +msgid "Workflows" |
333 | +msgstr "Flujos de Trabajo" |
334 | + |
335 | +#. module: project_openerp |
336 | +#: model:ir.model,name:project_openerp.model_project_task |
337 | +#: field:project.oerp.task.hour,task_id:0 |
338 | +msgid "Task" |
339 | +msgstr "Tarea" |
340 | + |
341 | +#. module: project_openerp |
342 | +#: view:project.oerp.work.type.template:0 |
343 | +#: field:project.oerp.work.type.template,work_type_mapping_ids:0 |
344 | +#: view:project.phase:0 |
345 | +#: field:project.phase,work_type_ids:0 |
346 | +msgid "Work Types" |
347 | +msgstr "Tipos de trabajo" |
348 | + |
349 | +#. module: project_openerp |
350 | +#: field:project.oerp.feature.import.wizard,product_backlog_id:0 |
351 | +#: field:project.oerp.phase.create.wizard,product_backlog_id:0 |
352 | +#: field:project.phase,product_backlog_id:0 |
353 | +msgid "Product Backlog" |
354 | +msgstr "Pila de producto" |
355 | + |
356 | +#. module: project_openerp |
357 | +#: field:project.oerp.feature.hours,project_id:0 |
358 | +#: field:project.oerp.feature.import.wizard,project_id:0 |
359 | +#: field:project.oerp.phase.create.wizard,project_id:0 |
360 | +#: field:project.oerp.task.hour,project_id:0 |
361 | +msgid "Project" |
362 | +msgstr "Proyecto" |
363 | + |
364 | +#. module: project_openerp |
365 | +#: model:ir.ui.menu,name:project_openerp.menu_feature_import_wizard |
366 | +msgid "Import Features" |
367 | +msgstr "Importar caracterÃsticas" |
368 | + |
369 | +#. module: project_openerp |
370 | +#: model:project.oerp.work.type.template,name:project_openerp.data_work_type_template_fun |
371 | +msgid "Functional Analysis" |
372 | +msgstr "Análisis funcional" |
373 | + |
374 | +#. module: project_openerp |
375 | +#: field:project.oerp.feature.hours,work_type_id:0 |
376 | +#: field:project.oerp.task.hour,work_type_id:0 |
377 | +#: field:project.task.work,work_type_id:0 |
378 | +msgid "Work Type" |
379 | +msgstr "Tipo de trabajo" |
380 | + |
381 | +#. module: project_openerp |
382 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_tec_fun |
383 | +msgid "Functional Fields" |
384 | +msgstr "Campos funcionales" |
385 | + |
386 | +#. module: project_openerp |
387 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_tec_met |
388 | +msgid "Methods" |
389 | +msgstr "Métodos" |
390 | + |
391 | +#. module: project_openerp |
392 | +#: model:project.oerp.work.type.template,name:project_openerp.data_work_type_template_tec |
393 | +msgid "Technical Analysis" |
394 | +msgstr "Análisis técnico" |
395 | + |
396 | +#. module: project_openerp |
397 | +#: model:ir.actions.act_window,name:project_openerp.action_work_type_template_group |
398 | +#: view:project.oerp.work.type.template.group:0 |
399 | +msgid "Work Type Template Group" |
400 | +msgstr "Grupo de plantilla de tipo de trabajo" |
401 | + |
402 | +#. module: project_openerp |
403 | +#: field:project.oerp.sprint.close.wizard,closing_sprint_id:0 |
404 | +msgid "Closing Sprint" |
405 | +msgstr "Sprint de cierre" |
406 | + |
407 | +#. module: project_openerp |
408 | +#: view:project.oerp.phase.create.wizard:0 |
409 | +#: view:project.oerp.sprint.close.wizard:0 |
410 | +#: view:project.oerp.task.create.wizard:0 |
411 | +msgid "Are you sure you want to continue?" |
412 | +msgstr "¿Estás seguro que quieres continuar?" |
413 | + |
414 | +#. module: project_openerp |
415 | +#: view:project.scrum.feature:0 |
416 | +#: field:project.scrum.feature,hour_ids:0 |
417 | +#: view:project.task:0 |
418 | +#: field:project.task,feature_hour_ids:0 |
419 | +msgid "Feature Hours" |
420 | +msgstr "Horas de caracterÃstica" |
421 | + |
422 | +#. module: project_openerp |
423 | +#: view:project.oerp.phase.create.wizard:0 |
424 | +#: view:project.oerp.task.create.wizard:0 |
425 | +msgid "Create" |
426 | +msgstr "Crear" |
427 | + |
428 | +#. module: project_openerp |
429 | +#: field:project.oerp.feature.import.wizard,state:0 |
430 | +msgid "State" |
431 | +msgstr "Estado" |
432 | + |
433 | +#. module: project_openerp |
434 | +#: constraint:project.phase:0 |
435 | +msgid "All sprints must belong to the selected product backlog." |
436 | +msgstr "Todos los sprints deben perteneces a la pila de producto seleccionada." |
437 | + |
438 | +#. module: project_openerp |
439 | +#: code:addons/project_openerp/wizard/feature_import_wizard.py:39 |
440 | +#, python-format |
441 | +msgid "An error occurred while reading the file. Please check if the format is correct." |
442 | +msgstr "Un error ocurrio mientras se leia el archivo. Por favor verifique que el formato sea correcto." |
443 | + |
444 | +#. module: project_openerp |
445 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_fun_dia |
446 | +msgid "Diagrams" |
447 | +msgstr "Diagramas" |
448 | + |
449 | +#. module: project_openerp |
450 | +#: model:ir.ui.menu,name:project_openerp.menu_work_type_template |
451 | +#: view:project.oerp.work.type.template.group:0 |
452 | +msgid "Phase Templates" |
453 | +msgstr "Plantilla de Fase" |
454 | + |
455 | +#. module: project_openerp |
456 | +#: model:ir.actions.act_window,name:project_openerp.action_task_create_wizard |
457 | +msgid "Create Tasks from Sequence" |
458 | +msgstr "Crear tareas desde secuencia" |
459 | + |
460 | +#. module: project_openerp |
461 | +#: model:ir.actions.act_window,name:project_openerp.action_sprint_close_wizard |
462 | +#: model:ir.ui.menu,name:project_openerp.menu_sprint_close_wizard |
463 | +msgid "Close Sprint" |
464 | +msgstr "Cerrar Sprint" |
465 | + |
466 | +#. module: project_openerp |
467 | +#: view:project.oerp.work.type.template:0 |
468 | +msgid "Work Type Templates" |
469 | +msgstr "Plantillas de tipo de trabajo" |
470 | + |
471 | +#. module: project_openerp |
472 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_fun_int |
473 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_tec_int |
474 | +msgid "Interface" |
475 | +msgstr "Interfaz" |
476 | + |
477 | +#. module: project_openerp |
478 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_fun_conf |
479 | +msgid "Configuration" |
480 | +msgstr "Configuración" |
481 | + |
482 | +#. module: project_openerp |
483 | +#: view:project.scrum.sprint:0 |
484 | +msgid "Are you sure you want to queue all tasks?" |
485 | +msgstr "¿Estás seguro que deseas poner en cola todas las tareas?" |
486 | + |
487 | +#. module: project_openerp |
488 | +#: view:project.task:0 |
489 | +#: field:project.task,task_hour_ids:0 |
490 | +msgid "Task Hours" |
491 | +msgstr "Horas de tarea" |
492 | + |
493 | +#. module: project_openerp |
494 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_fun_intr |
495 | +msgid "Interaction" |
496 | +msgstr "Interacción" |
497 | + |
498 | +#. module: project_openerp |
499 | +#: field:project.oerp.work.type,column_number:0 |
500 | +#: field:project.oerp.work.type.mapping,column_number:0 |
501 | +msgid "Column Number" |
502 | +msgstr "Número de columna" |
503 | + |
504 | +#. module: project_openerp |
505 | +#: field:project.oerp.feature.hours,expected_hours:0 |
506 | +#: view:project.task:0 |
507 | +msgid "Planned Hour(s)" |
508 | +msgstr "Horas planeadas" |
509 | + |
510 | +#. module: project_openerp |
511 | +#: view:project.oerp.feature.import.wizard:0 |
512 | +msgid "Are you sure you want to import this file?" |
513 | +msgstr "¿Estás seguro que deseas importar este archivo?" |
514 | + |
515 | +#. module: project_openerp |
516 | +#: model:ir.ui.menu,name:project_openerp.menu_phase_create_wizard |
517 | +msgid "Create Phase" |
518 | +msgstr "Crear fase" |
519 | + |
520 | +#. module: project_openerp |
521 | +#: view:project.oerp.sprint.close.wizard:0 |
522 | +msgid "Close Sprint Wizard" |
523 | +msgstr "Asistente de cierre de sprint" |
524 | + |
525 | +#. module: project_openerp |
526 | +#: model:ir.actions.act_window,name:project_openerp.action_feature_import_wizard |
527 | +msgid "Feature Import" |
528 | +msgstr "Importación de caracterÃsticas" |
529 | + |
530 | +#. module: project_openerp |
531 | +#: model:ir.ui.menu,name:project_openerp.menu_task_create_wizard |
532 | +msgid "Create Tasks" |
533 | +msgstr "Crear tareas" |
534 | + |
535 | +#. module: project_openerp |
536 | +#: field:project.phase,is_scrum:0 |
537 | +msgid "Is Scrum" |
538 | +msgstr "Es scrum" |
539 | + |
540 | +#. module: project_openerp |
541 | +#: view:project.scrum.sprint:0 |
542 | +#: field:project.scrum.sprint,desirable_task_ids:0 |
543 | +msgid "Desirable Tasks" |
544 | +msgstr "Tareas deseables" |
545 | + |
546 | +#. module: project_openerp |
547 | +#: view:project.oerp.feature.import.wizard:0 |
548 | +#: view:project.oerp.phase.create.wizard:0 |
549 | +#: view:project.oerp.sprint.close.wizard:0 |
550 | +#: view:project.oerp.task.create.wizard:0 |
551 | +msgid "or" |
552 | +msgstr "ó" |
553 | + |
554 | +#. module: project_openerp |
555 | +#: constraint:project.task.work:0 |
556 | +msgid "The selected Work Type has not been planned in the selected Feature." |
557 | +msgstr "El tipo de tarea seleccionado no ha sido planeado en la caracterÃstica seleccionada." |
558 | + |
559 | +#. module: project_openerp |
560 | +#: field:project.oerp.work.type.template,group_id:0 |
561 | +msgid "Group" |
562 | +msgstr "Grupo" |
563 | + |
564 | +#. module: project_openerp |
565 | +#: view:project.oerp.feature.import.wizard:0 |
566 | +msgid "Import" |
567 | +msgstr "Importar" |
568 | + |
569 | +#. module: project_openerp |
570 | +#: model:ir.actions.act_window,help:project_openerp.action_work_type_template_group |
571 | +msgid "<p class=\"oe_view_nocontent_create\">Create new Work Type Template Group</p>\n" |
572 | +" " |
573 | +msgstr "<p class=\"oe_view_nocontent_create\">Crear nuevo Grupo de plantilla de tipo de trabajo</p>\n" |
574 | +" " |
575 | + |
576 | +#. module: project_openerp |
577 | +#: model:ir.actions.act_window,help:project_openerp.action_work_type_template |
578 | +msgid "<p class=\"oe_view_nocontent_create\">Create new Work Type Template</p>\n" |
579 | +" " |
580 | +msgstr "<p class=\"oe_view_nocontent_create\">Crear nueva plantilla de tipo de trabajo</p>\n" |
581 | +" " |
582 | + |
583 | +#. module: project_openerp |
584 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_fun_tes |
585 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_tec_tes |
586 | +msgid "Tests" |
587 | +msgstr "Pruebas" |
588 | + |
589 | +#. module: project_openerp |
590 | +#: view:project.oerp.phase.create.wizard:0 |
591 | +msgid "Phase Create Wizard" |
592 | +msgstr "Asistente de creación de fase" |
593 | + |
594 | +#. module: project_openerp |
595 | +#: view:project.oerp.task.create.wizard:0 |
596 | +msgid "Task Create Wizard" |
597 | +msgstr "Asistente de creación de tareas" |
598 | + |
599 | +#. module: project_openerp |
600 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_fun_per |
601 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_tec_per |
602 | +msgid "Permissions" |
603 | +msgstr "Permisos" |
604 | + |
605 | +#. module: project_openerp |
606 | +#: field:project.oerp.feature.hours,effective_hours:0 |
607 | +#: field:project.oerp.task.hour,effective_hours:0 |
608 | +#: view:project.task:0 |
609 | +msgid "Spent Hour(s)" |
610 | +msgstr "Horas consumidas" |
611 | + |
612 | +#. module: project_openerp |
613 | +#: view:project.oerp.work.type.template.group:0 |
614 | +msgid "Work Type Template Groups" |
615 | +msgstr "Grupos de plantillas de tipo de trabajo" |
616 | + |
617 | +#. module: project_openerp |
618 | +#: code:addons/project_openerp/wizard/feature_import_wizard.py:94 |
619 | +#, python-format |
620 | +msgid "An error occurred while importing the features" |
621 | +msgstr "Un error ocurrió mientras se importaban las caracterÃsticas" |
622 | + |
623 | +#. module: project_openerp |
624 | +#: code:addons/project_openerp/wizard/feature_import_wizard.py:39 |
625 | +#: code:addons/project_openerp/wizard/feature_import_wizard.py:86 |
626 | +#: code:addons/project_openerp/wizard/feature_import_wizard.py:94 |
627 | +#: code:addons/project_openerp/wizard/sprint_close_wizard.py:64 |
628 | +#: code:addons/project_openerp/wizard/task_create_wizard.py:47 |
629 | +#: code:addons/project_openerp/wizard/task_create_wizard.py:122 |
630 | +#, python-format |
631 | +msgid "Error" |
632 | +msgstr "Error" |
633 | + |
634 | +#. module: project_openerp |
635 | +#: view:project.scrum.sprint:0 |
636 | +msgid "Tasks from Sequence" |
637 | +msgstr "Tareas desde secuencia" |
638 | + |
639 | +#. module: project_openerp |
640 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_dev_gen |
641 | +msgid "General" |
642 | +msgstr "General" |
643 | + |
644 | +#. module: project_openerp |
645 | +#: selection:project.oerp.feature.import.wizard,state:0 |
646 | +msgid "Done" |
647 | +msgstr "Realizado" |
648 | + |
649 | +#. module: project_openerp |
650 | +#: view:project.oerp.feature.import.wizard:0 |
651 | +#: view:project.oerp.phase.create.wizard:0 |
652 | +#: view:project.oerp.sprint.close.wizard:0 |
653 | +#: view:project.oerp.task.create.wizard:0 |
654 | +msgid "Cancel" |
655 | +msgstr "Cancelar" |
656 | + |
657 | +#. module: project_openerp |
658 | +#: view:project.oerp.sprint.close.wizard:0 |
659 | +msgid "Close" |
660 | +msgstr "Cerrar" |
661 | + |
662 | +#. module: project_openerp |
663 | +#: field:project.oerp.work.type,name:0 |
664 | +#: field:project.oerp.work.type.mapping,name:0 |
665 | +msgid "Type Name" |
666 | +msgstr "Nombre de tipo" |
667 | + |
668 | +#. module: project_openerp |
669 | +#: view:project.scrum.sprint:0 |
670 | +msgid "Queue Tasks" |
671 | +msgstr "Tareas en cola" |
672 | + |
673 | +#. module: project_openerp |
674 | +#: field:project.oerp.feature.hours,feature_id:0 |
675 | +msgid "Feature" |
676 | +msgstr "CaracterÃstica" |
677 | + |
678 | +#. module: project_openerp |
679 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_tec_load |
680 | +msgid "Data Loading" |
681 | +msgstr "Carga de Datos" |
682 | + |
683 | +#. module: project_openerp |
684 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_tec_wiz |
685 | +msgid "Wizards" |
686 | +msgstr "Asistentes" |
687 | + |
688 | +#. module: project_openerp |
689 | +#: selection:project.oerp.feature.import.wizard,state:0 |
690 | +msgid "New" |
691 | +msgstr "Nuevo" |
692 | + |
693 | +#. module: project_openerp |
694 | +#: field:project.phase,user_id:0 |
695 | +msgid "Phase Manager" |
696 | +msgstr "Encargado de fase" |
697 | + |
698 | +#. module: project_openerp |
699 | +#: model:project.oerp.work.type.template,name:project_openerp.data_work_type_template_dev |
700 | +msgid "Development" |
701 | +msgstr "Desarrollo" |
702 | + |
703 | +#. module: project_openerp |
704 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_fun_inf |
705 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_tec_inf |
706 | +msgid "Informs" |
707 | +msgstr "Informes" |
708 | + |
709 | +#. module: project_openerp |
710 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_tec_obj |
711 | +msgid "Objects" |
712 | +msgstr "Objetos" |
713 | + |
714 | +#. module: project_openerp |
715 | +#: field:project.oerp.feature.hours,phase_id:0 |
716 | +#: field:project.oerp.task.hour,phase_id:0 |
717 | +#: field:project.oerp.work.type,phase_id:0 |
718 | +#: field:project.scrum.sprint,phase_id:0 |
719 | +#: field:project.task.work,phase_id:0 |
720 | +msgid "Phase" |
721 | +msgstr "Fase" |
722 | + |
723 | +#. module: project_openerp |
724 | +#: field:project.oerp.work.type.template.group,template_ids:0 |
725 | +msgid "Templates" |
726 | +msgstr "Plantillas" |
727 | + |
728 | +#. module: project_openerp |
729 | +#: code:addons/project_openerp/wizard/task_create_wizard.py:47 |
730 | +#, python-format |
731 | +msgid "All task were created before." |
732 | +msgstr "Todas las tareas creadas anteriormente." |
733 | + |
734 | +#. module: project_openerp |
735 | +#: model:ir.model,name:project_openerp.model_project_phase |
736 | +msgid "Project Phase" |
737 | +msgstr "Fase de proyecto" |
738 | + |
739 | +#. module: project_openerp |
740 | +#: model:project.oerp.work.type.template.group,name:project_openerp.data_work_type_template_group |
741 | +msgid "Default Templates" |
742 | +msgstr "Plantillas por defecto" |
743 | + |
744 | +#. module: project_openerp |
745 | +#: code:addons/project_openerp/wizard/feature_import_wizard.py:86 |
746 | +#, python-format |
747 | +msgid "An error occurred while reading the planned hours from file in column %s for work type %s" |
748 | +msgstr "Un error ocurrió mientras se leÃan las horas planeadas del archivo en la columna %s para el tipo de trabajo %s" |
749 | + |
750 | +#. module: project_openerp |
751 | +#: code:addons/project_openerp/wizard/task_create_wizard.py:122 |
752 | +#, python-format |
753 | +msgid "An error occurred while creating the tasks. Please contact your system administrator." |
754 | +msgstr "Un error ocurrió mientras se creaban las tareas. Por favor contacte su administrador de sistema." |
755 | + |
756 | +#. module: project_openerp |
757 | +#: field:project.oerp.work.type,sequence:0 |
758 | +#: field:project.oerp.work.type.mapping,sequence:0 |
759 | +msgid "Sequence" |
760 | +msgstr "Secuencia" |
761 | + |
762 | +#. module: project_openerp |
763 | +#: code:addons/project_openerp/wizard/sprint_close_wizard.py:64 |
764 | +#, python-format |
765 | +msgid "An error occurred while closing the sprint." |
766 | +msgstr "Un error ocurrió mientra se cerraba el sprint." |
767 | + |
768 | +#. module: project_openerp |
769 | +#: field:project.oerp.work.type.template,file:0 |
770 | +#: field:project.oerp.work.type.template.group,file:0 |
771 | +msgid "File" |
772 | +msgstr "Archivo" |
773 | + |
774 | +#. module: project_openerp |
775 | +#: field:project.oerp.feature.hours,remaining_hours:0 |
776 | +#: field:project.oerp.task.hour,remaining_hours:0 |
777 | +#: view:project.task:0 |
778 | +msgid "Remaining Hour(s)" |
779 | +msgstr "Horas restantes" |
780 | + |
781 | +#. module: project_openerp |
782 | +#: view:project.oerp.phase.create.wizard:0 |
783 | +#: field:project.oerp.phase.create.wizard,duration:0 |
784 | +msgid "Duration" |
785 | +msgstr "Duración" |
786 | + |
787 | +#. module: project_openerp |
788 | +#: field:project.oerp.task.create.wizard,sprint_id:0 |
789 | +msgid "Sprint" |
790 | +msgstr "Sprint" |
791 | + |
792 | +#. module: project_openerp |
793 | +#: model:ir.ui.menu,name:project_openerp.menu_tools |
794 | +msgid "Tools" |
795 | +msgstr "Herramientas" |
796 | + |
797 | +#. module: project_openerp |
798 | +#: model:ir.ui.menu,name:project_openerp.menu_work_type_template_group |
799 | +msgid "Phase Template Groups" |
800 | +msgstr "Grupos de plantillas de fase" |
801 | |
802 | === added file 'project_openerp/i18n/project_openerp.pot' |
803 | --- project_openerp/i18n/project_openerp.pot 1970-01-01 00:00:00 +0000 |
804 | +++ project_openerp/i18n/project_openerp.pot 2014-03-27 17:09:06 +0000 |
805 | @@ -0,0 +1,540 @@ |
806 | +# Translation of OpenERP Server. |
807 | +# This file contains the translation of the following modules: |
808 | +# * project_openerp |
809 | +# |
810 | +msgid "" |
811 | +msgstr "" |
812 | +"Project-Id-Version: OpenERP Server 7.0\n" |
813 | +"Report-Msgid-Bugs-To: \n" |
814 | +"POT-Creation-Date: 2014-03-25 22:41+0000\n" |
815 | +"PO-Revision-Date: 2014-03-25 22:41+0000\n" |
816 | +"Last-Translator: <>\n" |
817 | +"Language-Team: \n" |
818 | +"MIME-Version: 1.0\n" |
819 | +"Content-Type: text/plain; charset=UTF-8\n" |
820 | +"Content-Transfer-Encoding: \n" |
821 | +"Plural-Forms: \n" |
822 | + |
823 | +#. module: project_openerp |
824 | +#: field:project.oerp.feature.import.wizard,file:0 |
825 | +msgid "File to Import" |
826 | +msgstr "" |
827 | + |
828 | +#. module: project_openerp |
829 | +#: field:project.oerp.work.type.template,filename:0 |
830 | +#: field:project.oerp.work.type.template.group,filename:0 |
831 | +msgid "Filename" |
832 | +msgstr "" |
833 | + |
834 | +#. module: project_openerp |
835 | +#: field:project.oerp.work.type.mapping,template_id:0 |
836 | +#: field:project.oerp.work.type.template,name:0 |
837 | +msgid "Template" |
838 | +msgstr "" |
839 | + |
840 | +#. module: project_openerp |
841 | +#: field:project.oerp.work.type.template.group,name:0 |
842 | +msgid "Group Name" |
843 | +msgstr "" |
844 | + |
845 | +#. module: project_openerp |
846 | +#: field:project.oerp.phase.create.wizard,product_uom:0 |
847 | +msgid "Unit of Measure" |
848 | +msgstr "" |
849 | + |
850 | +#. module: project_openerp |
851 | +#: model:ir.actions.act_window,name:project_openerp.action_phase_create_wizard |
852 | +msgid "Create Phase from Template" |
853 | +msgstr "" |
854 | + |
855 | +#. module: project_openerp |
856 | +#: model:ir.actions.act_window,name:project_openerp.action_work_type_template |
857 | +#: field:project.oerp.phase.create.wizard,work_type_template_id:0 |
858 | +#: view:project.oerp.work.type.template:0 |
859 | +msgid "Work Type Template" |
860 | +msgstr "" |
861 | + |
862 | +#. module: project_openerp |
863 | +#: view:project.oerp.feature.import.wizard:0 |
864 | +msgid "Feature Import Wizard" |
865 | +msgstr "" |
866 | + |
867 | +#. module: project_openerp |
868 | +#: field:project.oerp.task.hour,expected_hours:0 |
869 | +msgid "Initially Planned Hour(s)" |
870 | +msgstr "" |
871 | + |
872 | +#. module: project_openerp |
873 | +#: field:project.oerp.sprint.close.wizard,opening_sprint_id:0 |
874 | +msgid "Opening Sprint" |
875 | +msgstr "" |
876 | + |
877 | +#. module: project_openerp |
878 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_tec_wor |
879 | +msgid "Workflows" |
880 | +msgstr "" |
881 | + |
882 | +#. module: project_openerp |
883 | +#: model:ir.model,name:project_openerp.model_project_task |
884 | +#: field:project.oerp.task.hour,task_id:0 |
885 | +msgid "Task" |
886 | +msgstr "" |
887 | + |
888 | +#. module: project_openerp |
889 | +#: view:project.oerp.work.type.template:0 |
890 | +#: field:project.oerp.work.type.template,work_type_mapping_ids:0 |
891 | +#: view:project.phase:0 |
892 | +#: field:project.phase,work_type_ids:0 |
893 | +msgid "Work Types" |
894 | +msgstr "" |
895 | + |
896 | +#. module: project_openerp |
897 | +#: field:project.oerp.feature.import.wizard,product_backlog_id:0 |
898 | +#: field:project.oerp.phase.create.wizard,product_backlog_id:0 |
899 | +#: field:project.phase,product_backlog_id:0 |
900 | +msgid "Product Backlog" |
901 | +msgstr "" |
902 | + |
903 | +#. module: project_openerp |
904 | +#: field:project.oerp.feature.hours,project_id:0 |
905 | +#: field:project.oerp.feature.import.wizard,project_id:0 |
906 | +#: field:project.oerp.phase.create.wizard,project_id:0 |
907 | +#: field:project.oerp.task.hour,project_id:0 |
908 | +msgid "Project" |
909 | +msgstr "" |
910 | + |
911 | +#. module: project_openerp |
912 | +#: model:ir.ui.menu,name:project_openerp.menu_feature_import_wizard |
913 | +msgid "Import Features" |
914 | +msgstr "" |
915 | + |
916 | +#. module: project_openerp |
917 | +#: model:project.oerp.work.type.template,name:project_openerp.data_work_type_template_fun |
918 | +msgid "Functional Analysis" |
919 | +msgstr "" |
920 | + |
921 | +#. module: project_openerp |
922 | +#: field:project.oerp.feature.hours,work_type_id:0 |
923 | +#: field:project.oerp.task.hour,work_type_id:0 |
924 | +#: field:project.task.work,work_type_id:0 |
925 | +msgid "Work Type" |
926 | +msgstr "" |
927 | + |
928 | +#. module: project_openerp |
929 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_tec_fun |
930 | +msgid "Functional Fields" |
931 | +msgstr "" |
932 | + |
933 | +#. module: project_openerp |
934 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_tec_met |
935 | +msgid "Methods" |
936 | +msgstr "" |
937 | + |
938 | +#. module: project_openerp |
939 | +#: model:project.oerp.work.type.template,name:project_openerp.data_work_type_template_tec |
940 | +msgid "Technical Analysis" |
941 | +msgstr "" |
942 | + |
943 | +#. module: project_openerp |
944 | +#: model:ir.actions.act_window,name:project_openerp.action_work_type_template_group |
945 | +#: view:project.oerp.work.type.template.group:0 |
946 | +msgid "Work Type Template Group" |
947 | +msgstr "" |
948 | + |
949 | +#. module: project_openerp |
950 | +#: field:project.oerp.sprint.close.wizard,closing_sprint_id:0 |
951 | +msgid "Closing Sprint" |
952 | +msgstr "" |
953 | + |
954 | +#. module: project_openerp |
955 | +#: view:project.oerp.phase.create.wizard:0 |
956 | +#: view:project.oerp.sprint.close.wizard:0 |
957 | +#: view:project.oerp.task.create.wizard:0 |
958 | +msgid "Are you sure you want to continue?" |
959 | +msgstr "" |
960 | + |
961 | +#. module: project_openerp |
962 | +#: view:project.scrum.feature:0 |
963 | +#: field:project.scrum.feature,hour_ids:0 |
964 | +#: view:project.task:0 |
965 | +#: field:project.task,feature_hour_ids:0 |
966 | +msgid "Feature Hours" |
967 | +msgstr "" |
968 | + |
969 | +#. module: project_openerp |
970 | +#: view:project.oerp.phase.create.wizard:0 |
971 | +#: view:project.oerp.task.create.wizard:0 |
972 | +msgid "Create" |
973 | +msgstr "" |
974 | + |
975 | +#. module: project_openerp |
976 | +#: field:project.oerp.feature.import.wizard,state:0 |
977 | +msgid "State" |
978 | +msgstr "" |
979 | + |
980 | +#. module: project_openerp |
981 | +#: constraint:project.phase:0 |
982 | +msgid "All sprints must belong to the selected product backlog." |
983 | +msgstr "" |
984 | + |
985 | +#. module: project_openerp |
986 | +#: code:addons/project_openerp/wizard/feature_import_wizard.py:39 |
987 | +#, python-format |
988 | +msgid "An error occurred while reading the file. Please check if the format is correct." |
989 | +msgstr "" |
990 | + |
991 | +#. module: project_openerp |
992 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_fun_dia |
993 | +msgid "Diagrams" |
994 | +msgstr "" |
995 | + |
996 | +#. module: project_openerp |
997 | +#: model:ir.ui.menu,name:project_openerp.menu_work_type_template |
998 | +#: view:project.oerp.work.type.template.group:0 |
999 | +msgid "Phase Templates" |
1000 | +msgstr "" |
1001 | + |
1002 | +#. module: project_openerp |
1003 | +#: model:ir.actions.act_window,name:project_openerp.action_task_create_wizard |
1004 | +msgid "Create Tasks from Sequence" |
1005 | +msgstr "" |
1006 | + |
1007 | +#. module: project_openerp |
1008 | +#: model:ir.actions.act_window,name:project_openerp.action_sprint_close_wizard |
1009 | +#: model:ir.ui.menu,name:project_openerp.menu_sprint_close_wizard |
1010 | +msgid "Close Sprint" |
1011 | +msgstr "" |
1012 | + |
1013 | +#. module: project_openerp |
1014 | +#: view:project.oerp.work.type.template:0 |
1015 | +msgid "Work Type Templates" |
1016 | +msgstr "" |
1017 | + |
1018 | +#. module: project_openerp |
1019 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_fun_int |
1020 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_tec_int |
1021 | +msgid "Interface" |
1022 | +msgstr "" |
1023 | + |
1024 | +#. module: project_openerp |
1025 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_fun_conf |
1026 | +msgid "Configuration" |
1027 | +msgstr "" |
1028 | + |
1029 | +#. module: project_openerp |
1030 | +#: view:project.scrum.sprint:0 |
1031 | +msgid "Are you sure you want to queue all tasks?" |
1032 | +msgstr "" |
1033 | + |
1034 | +#. module: project_openerp |
1035 | +#: view:project.task:0 |
1036 | +#: field:project.task,task_hour_ids:0 |
1037 | +msgid "Task Hours" |
1038 | +msgstr "" |
1039 | + |
1040 | +#. module: project_openerp |
1041 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_fun_intr |
1042 | +msgid "Interaction" |
1043 | +msgstr "" |
1044 | + |
1045 | +#. module: project_openerp |
1046 | +#: field:project.oerp.work.type,column_number:0 |
1047 | +#: field:project.oerp.work.type.mapping,column_number:0 |
1048 | +msgid "Column Number" |
1049 | +msgstr "" |
1050 | + |
1051 | +#. module: project_openerp |
1052 | +#: field:project.oerp.feature.hours,expected_hours:0 |
1053 | +#: view:project.task:0 |
1054 | +msgid "Planned Hour(s)" |
1055 | +msgstr "" |
1056 | + |
1057 | +#. module: project_openerp |
1058 | +#: view:project.oerp.feature.import.wizard:0 |
1059 | +msgid "Are you sure you want to import this file?" |
1060 | +msgstr "" |
1061 | + |
1062 | +#. module: project_openerp |
1063 | +#: model:ir.ui.menu,name:project_openerp.menu_phase_create_wizard |
1064 | +msgid "Create Phase" |
1065 | +msgstr "" |
1066 | + |
1067 | +#. module: project_openerp |
1068 | +#: view:project.oerp.sprint.close.wizard:0 |
1069 | +msgid "Close Sprint Wizard" |
1070 | +msgstr "" |
1071 | + |
1072 | +#. module: project_openerp |
1073 | +#: model:ir.actions.act_window,name:project_openerp.action_feature_import_wizard |
1074 | +msgid "Feature Import" |
1075 | +msgstr "" |
1076 | + |
1077 | +#. module: project_openerp |
1078 | +#: model:ir.ui.menu,name:project_openerp.menu_task_create_wizard |
1079 | +msgid "Create Tasks" |
1080 | +msgstr "" |
1081 | + |
1082 | +#. module: project_openerp |
1083 | +#: field:project.phase,is_scrum:0 |
1084 | +msgid "Is Scrum" |
1085 | +msgstr "" |
1086 | + |
1087 | +#. module: project_openerp |
1088 | +#: view:project.scrum.sprint:0 |
1089 | +#: field:project.scrum.sprint,desirable_task_ids:0 |
1090 | +msgid "Desirable Tasks" |
1091 | +msgstr "" |
1092 | + |
1093 | +#. module: project_openerp |
1094 | +#: view:project.oerp.feature.import.wizard:0 |
1095 | +#: view:project.oerp.phase.create.wizard:0 |
1096 | +#: view:project.oerp.sprint.close.wizard:0 |
1097 | +#: view:project.oerp.task.create.wizard:0 |
1098 | +msgid "or" |
1099 | +msgstr "" |
1100 | + |
1101 | +#. module: project_openerp |
1102 | +#: constraint:project.task.work:0 |
1103 | +msgid "The selected Work Type has not been planned in the selected Feature." |
1104 | +msgstr "" |
1105 | + |
1106 | +#. module: project_openerp |
1107 | +#: field:project.oerp.work.type.template,group_id:0 |
1108 | +msgid "Group" |
1109 | +msgstr "" |
1110 | + |
1111 | +#. module: project_openerp |
1112 | +#: view:project.oerp.feature.import.wizard:0 |
1113 | +msgid "Import" |
1114 | +msgstr "" |
1115 | + |
1116 | +#. module: project_openerp |
1117 | +#: model:ir.actions.act_window,help:project_openerp.action_work_type_template_group |
1118 | +msgid "<p class=\"oe_view_nocontent_create\">Create new Work Type Template Group</p>\n" |
1119 | +" " |
1120 | +msgstr "" |
1121 | + |
1122 | +#. module: project_openerp |
1123 | +#: model:ir.actions.act_window,help:project_openerp.action_work_type_template |
1124 | +msgid "<p class=\"oe_view_nocontent_create\">Create new Work Type Template</p>\n" |
1125 | +" " |
1126 | +msgstr "" |
1127 | + |
1128 | +#. module: project_openerp |
1129 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_fun_tes |
1130 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_tec_tes |
1131 | +msgid "Tests" |
1132 | +msgstr "" |
1133 | + |
1134 | +#. module: project_openerp |
1135 | +#: view:project.oerp.phase.create.wizard:0 |
1136 | +msgid "Phase Create Wizard" |
1137 | +msgstr "" |
1138 | + |
1139 | +#. module: project_openerp |
1140 | +#: view:project.oerp.task.create.wizard:0 |
1141 | +msgid "Task Create Wizard" |
1142 | +msgstr "" |
1143 | + |
1144 | +#. module: project_openerp |
1145 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_fun_per |
1146 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_tec_per |
1147 | +msgid "Permissions" |
1148 | +msgstr "" |
1149 | + |
1150 | +#. module: project_openerp |
1151 | +#: field:project.oerp.feature.hours,effective_hours:0 |
1152 | +#: field:project.oerp.task.hour,effective_hours:0 |
1153 | +#: view:project.task:0 |
1154 | +msgid "Spent Hour(s)" |
1155 | +msgstr "" |
1156 | + |
1157 | +#. module: project_openerp |
1158 | +#: view:project.oerp.work.type.template.group:0 |
1159 | +msgid "Work Type Template Groups" |
1160 | +msgstr "" |
1161 | + |
1162 | +#. module: project_openerp |
1163 | +#: code:addons/project_openerp/wizard/feature_import_wizard.py:94 |
1164 | +#, python-format |
1165 | +msgid "An error occurred while importing the features" |
1166 | +msgstr "" |
1167 | + |
1168 | +#. module: project_openerp |
1169 | +#: code:addons/project_openerp/wizard/feature_import_wizard.py:39 |
1170 | +#: code:addons/project_openerp/wizard/feature_import_wizard.py:86 |
1171 | +#: code:addons/project_openerp/wizard/feature_import_wizard.py:94 |
1172 | +#: code:addons/project_openerp/wizard/sprint_close_wizard.py:64 |
1173 | +#: code:addons/project_openerp/wizard/task_create_wizard.py:47 |
1174 | +#: code:addons/project_openerp/wizard/task_create_wizard.py:122 |
1175 | +#, python-format |
1176 | +msgid "Error" |
1177 | +msgstr "" |
1178 | + |
1179 | +#. module: project_openerp |
1180 | +#: view:project.scrum.sprint:0 |
1181 | +msgid "Tasks from Sequence" |
1182 | +msgstr "" |
1183 | + |
1184 | +#. module: project_openerp |
1185 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_dev_gen |
1186 | +msgid "General" |
1187 | +msgstr "" |
1188 | + |
1189 | +#. module: project_openerp |
1190 | +#: selection:project.oerp.feature.import.wizard,state:0 |
1191 | +msgid "Done" |
1192 | +msgstr "" |
1193 | + |
1194 | +#. module: project_openerp |
1195 | +#: view:project.oerp.feature.import.wizard:0 |
1196 | +#: view:project.oerp.phase.create.wizard:0 |
1197 | +#: view:project.oerp.sprint.close.wizard:0 |
1198 | +#: view:project.oerp.task.create.wizard:0 |
1199 | +msgid "Cancel" |
1200 | +msgstr "" |
1201 | + |
1202 | +#. module: project_openerp |
1203 | +#: view:project.oerp.sprint.close.wizard:0 |
1204 | +msgid "Close" |
1205 | +msgstr "" |
1206 | + |
1207 | +#. module: project_openerp |
1208 | +#: field:project.oerp.work.type,name:0 |
1209 | +#: field:project.oerp.work.type.mapping,name:0 |
1210 | +msgid "Type Name" |
1211 | +msgstr "" |
1212 | + |
1213 | +#. module: project_openerp |
1214 | +#: view:project.scrum.sprint:0 |
1215 | +msgid "Queue Tasks" |
1216 | +msgstr "" |
1217 | + |
1218 | +#. module: project_openerp |
1219 | +#: field:project.oerp.feature.hours,feature_id:0 |
1220 | +msgid "Feature" |
1221 | +msgstr "" |
1222 | + |
1223 | +#. module: project_openerp |
1224 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_tec_load |
1225 | +msgid "Data Loading" |
1226 | +msgstr "" |
1227 | + |
1228 | +#. module: project_openerp |
1229 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_tec_wiz |
1230 | +msgid "Wizards" |
1231 | +msgstr "" |
1232 | + |
1233 | +#. module: project_openerp |
1234 | +#: selection:project.oerp.feature.import.wizard,state:0 |
1235 | +msgid "New" |
1236 | +msgstr "" |
1237 | + |
1238 | +#. module: project_openerp |
1239 | +#: field:project.phase,user_id:0 |
1240 | +msgid "Phase Manager" |
1241 | +msgstr "" |
1242 | + |
1243 | +#. module: project_openerp |
1244 | +#: model:project.oerp.work.type.template,name:project_openerp.data_work_type_template_dev |
1245 | +msgid "Development" |
1246 | +msgstr "" |
1247 | + |
1248 | +#. module: project_openerp |
1249 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_fun_inf |
1250 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_tec_inf |
1251 | +msgid "Informs" |
1252 | +msgstr "" |
1253 | + |
1254 | +#. module: project_openerp |
1255 | +#: model:project.oerp.work.type.mapping,name:project_openerp.data_work_type_mapping_tec_obj |
1256 | +msgid "Objects" |
1257 | +msgstr "" |
1258 | + |
1259 | +#. module: project_openerp |
1260 | +#: field:project.oerp.feature.hours,phase_id:0 |
1261 | +#: field:project.oerp.task.hour,phase_id:0 |
1262 | +#: field:project.oerp.work.type,phase_id:0 |
1263 | +#: field:project.scrum.sprint,phase_id:0 |
1264 | +#: field:project.task.work,phase_id:0 |
1265 | +msgid "Phase" |
1266 | +msgstr "" |
1267 | + |
1268 | +#. module: project_openerp |
1269 | +#: field:project.oerp.work.type.template.group,template_ids:0 |
1270 | +msgid "Templates" |
1271 | +msgstr "" |
1272 | + |
1273 | +#. module: project_openerp |
1274 | +#: code:addons/project_openerp/wizard/task_create_wizard.py:47 |
1275 | +#, python-format |
1276 | +msgid "All task were created before." |
1277 | +msgstr "" |
1278 | + |
1279 | +#. module: project_openerp |
1280 | +#: model:ir.model,name:project_openerp.model_project_phase |
1281 | +msgid "Project Phase" |
1282 | +msgstr "" |
1283 | + |
1284 | +#. module: project_openerp |
1285 | +#: model:project.oerp.work.type.template.group,name:project_openerp.data_work_type_template_group |
1286 | +msgid "Default Templates" |
1287 | +msgstr "" |
1288 | + |
1289 | +#. module: project_openerp |
1290 | +#: code:addons/project_openerp/wizard/feature_import_wizard.py:86 |
1291 | +#, python-format |
1292 | +msgid "An error occurred while reading the planned hours from file in column %s for work type %s" |
1293 | +msgstr "" |
1294 | + |
1295 | +#. module: project_openerp |
1296 | +#: code:addons/project_openerp/wizard/task_create_wizard.py:122 |
1297 | +#, python-format |
1298 | +msgid "An error occurred while creating the tasks. Please contact your system administrator." |
1299 | +msgstr "" |
1300 | + |
1301 | +#. module: project_openerp |
1302 | +#: field:project.oerp.work.type,sequence:0 |
1303 | +#: field:project.oerp.work.type.mapping,sequence:0 |
1304 | +msgid "Sequence" |
1305 | +msgstr "" |
1306 | + |
1307 | +#. module: project_openerp |
1308 | +#: code:addons/project_openerp/wizard/sprint_close_wizard.py:64 |
1309 | +#, python-format |
1310 | +msgid "An error occurred while closing the sprint." |
1311 | +msgstr "" |
1312 | + |
1313 | +#. module: project_openerp |
1314 | +#: field:project.oerp.work.type.template,file:0 |
1315 | +#: field:project.oerp.work.type.template.group,file:0 |
1316 | +msgid "File" |
1317 | +msgstr "" |
1318 | + |
1319 | +#. module: project_openerp |
1320 | +#: field:project.oerp.feature.hours,remaining_hours:0 |
1321 | +#: field:project.oerp.task.hour,remaining_hours:0 |
1322 | +#: view:project.task:0 |
1323 | +msgid "Remaining Hour(s)" |
1324 | +msgstr "" |
1325 | + |
1326 | +#. module: project_openerp |
1327 | +#: view:project.oerp.phase.create.wizard:0 |
1328 | +#: field:project.oerp.phase.create.wizard,duration:0 |
1329 | +msgid "Duration" |
1330 | +msgstr "" |
1331 | + |
1332 | +#. module: project_openerp |
1333 | +#: field:project.oerp.task.create.wizard,sprint_id:0 |
1334 | +msgid "Sprint" |
1335 | +msgstr "" |
1336 | + |
1337 | +#. module: project_openerp |
1338 | +#: model:ir.ui.menu,name:project_openerp.menu_tools |
1339 | +msgid "Tools" |
1340 | +msgstr "" |
1341 | + |
1342 | +#. module: project_openerp |
1343 | +#: model:ir.ui.menu,name:project_openerp.menu_work_type_template_group |
1344 | +msgid "Phase Template Groups" |
1345 | +msgstr "" |
1346 | |
1347 | === added file 'project_openerp/project_openerp.py' |
1348 | --- project_openerp/project_openerp.py 1970-01-01 00:00:00 +0000 |
1349 | +++ project_openerp/project_openerp.py 2014-03-27 17:09:06 +0000 |
1350 | @@ -0,0 +1,377 @@ |
1351 | +# -*- coding: utf-8 -*- |
1352 | +############################################################################## |
1353 | +# |
1354 | +# OpenERP, Open Source Management Solution |
1355 | +# Addons modules by CLEARCORP S.A. |
1356 | +# Copyright (C) 2009-TODAY CLEARCORP S.A. (<http://clearcorp.co.cr>). |
1357 | +# |
1358 | +# This program is free software: you can redistribute it and/or modify |
1359 | +# it under the terms of the GNU Affero General Public License as |
1360 | +# published by the Free Software Foundation, either version 3 of the |
1361 | +# License, or (at your option) any later version. |
1362 | +# |
1363 | +# This program is distributed in the hope that it will be useful, |
1364 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
1365 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1366 | +# GNU Affero General Public License for more details. |
1367 | +# |
1368 | +# You should have received a copy of the GNU Affero General Public License |
1369 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
1370 | +# |
1371 | +############################################################################## |
1372 | + |
1373 | +from openerp.osv import fields, osv |
1374 | + |
1375 | +class WorkType(osv.Model): |
1376 | + |
1377 | + _name = 'project.oerp.work.type' |
1378 | + |
1379 | + _order = 'sequence' |
1380 | + |
1381 | + _columns = { |
1382 | + 'name': fields.char('Type Name', size=128, required=True), |
1383 | + 'sequence': fields.integer('Sequence', required=True), |
1384 | + 'column_number': fields.integer('Column Number', required=True), |
1385 | + 'phase_id': fields.many2one('project.phase', ondelete='cascade', |
1386 | + string='Phase', required=True), |
1387 | + } |
1388 | + |
1389 | + _defaults = { |
1390 | + 'phase_id': lambda slf, cr, uid, ctx: ctx.get('phase_id', False), |
1391 | + } |
1392 | + |
1393 | + |
1394 | +class WorkTypeMapping(osv.Model): |
1395 | + |
1396 | + _name = 'project.oerp.work.type.mapping' |
1397 | + |
1398 | + _columns = { |
1399 | + 'template_id': fields.many2one('project.oerp.work.type.template', string='Template', |
1400 | + ondelete='cascade'), |
1401 | + 'name': fields.char('Type Name', size=128, translate=True, required=True), |
1402 | + 'sequence': fields.integer('Sequence', required=True), |
1403 | + 'column_number': fields.integer('Column Number', required=True), |
1404 | + } |
1405 | + |
1406 | +class WorkTypeTemplate(osv.Model): |
1407 | + |
1408 | + _name = 'project.oerp.work.type.template' |
1409 | + |
1410 | + _columns = { |
1411 | + 'name': fields.char('Template', size=128, translate=True, required=True), |
1412 | + 'group_id': fields.many2one('project.oerp.work.type.template.group', string='Group'), |
1413 | + 'file': fields.related('group_id', 'file', type='binary', string='File'), |
1414 | + 'filename': fields.related('group_id','filename', type='char', string='Filename'), |
1415 | + 'work_type_mapping_ids': fields.one2many('project.oerp.work.type.mapping', 'template_id', |
1416 | + string='Work Types') |
1417 | + } |
1418 | + |
1419 | +class WorkTypeTemplateGroup(osv.Model): |
1420 | + |
1421 | + _name = 'project.oerp.work.type.template.group' |
1422 | + |
1423 | + _columns = { |
1424 | + 'name': fields.char('Group Name', size=128, translate=True, required=True), |
1425 | + 'file': fields.binary('File', filters='*.csv'), |
1426 | + 'filename': fields.char('Filename', size=128), |
1427 | + 'template_ids': fields.one2many('project.oerp.work.type.template', 'group_id', |
1428 | + string='Templates'), |
1429 | + } |
1430 | + |
1431 | + _defaults = { |
1432 | + 'filename': 'template.csv' |
1433 | + } |
1434 | + |
1435 | +class Sprint(osv.Model): |
1436 | + |
1437 | + def queue_tasks(self, cr, uid, ids, context=None): |
1438 | + sprint = self.browse(cr, uid, ids[0], context=context) |
1439 | + for task in sprint.desirable_task_ids: |
1440 | + if not task.sprint_id: |
1441 | + task.write({'sprint_id': sprint.id}, context=context) |
1442 | + return True |
1443 | + |
1444 | + _inherit = 'project.scrum.sprint' |
1445 | + |
1446 | + _columns = { |
1447 | + 'desirable_task_ids': fields.many2many('project.task', string='Desirable Tasks'), |
1448 | + 'phase_id': fields.many2one('project.phase', string='Phase', required=True, |
1449 | + domain="[('project_id','=', project_id)]"), |
1450 | + } |
1451 | + |
1452 | +class Phase(osv.Model): |
1453 | + |
1454 | + _inherit = 'project.phase' |
1455 | + |
1456 | + def onchange_project(self, cr, uid, ids, project_id, context=None): |
1457 | + res = super(Phase, self).onchange_project(cr,uid,ids,project_id,context=context) |
1458 | + if project_id: |
1459 | + project = self.pool.get('project.project').browse( |
1460 | + cr, uid, project_id, context=context) |
1461 | + is_scrum = project.is_scrum |
1462 | + if 'value' in res: |
1463 | + res['value']['is_scrum'] = is_scrum |
1464 | + res['value']['product_backlog_id'] = False |
1465 | + else: |
1466 | + res['value'] = { |
1467 | + 'is_scrum': is_scrum, |
1468 | + 'product_backlog_id': False, |
1469 | + } |
1470 | + |
1471 | + else: |
1472 | + if 'value' in res: |
1473 | + res['value']['is_scrum'] = False |
1474 | + res['value']['product_backlog_id'] = False |
1475 | + else: |
1476 | + res['value'] = { |
1477 | + 'is_scrum': False, |
1478 | + 'product_backlog_id': False, |
1479 | + } |
1480 | + return res |
1481 | + |
1482 | + def _check_sprints(self, cr, uid, ids, context=None): |
1483 | + phases = self.browse(cr, uid, ids, context=context) |
1484 | + for phase in phases: |
1485 | + for sprint in phase.sprint_ids: |
1486 | + if sprint.product_backlog_id != phase.product_backlog_id: |
1487 | + return False |
1488 | + return True |
1489 | + |
1490 | + _columns = { |
1491 | + 'is_scrum': fields.related('project_id','is_scrum', type='boolean', string='Is Scrum', readonly=True), |
1492 | + 'product_backlog_id': fields.many2one('project.scrum.product.backlog', string='Product Backlog', |
1493 | + domain="[('project_id','=',project_id)]"), |
1494 | + 'work_type_ids': fields.one2many('project.oerp.work.type', 'phase_id', string='Work Types'), |
1495 | + 'sprint_ids': fields.one2many('project.scrum.sprint', 'phase_id', |
1496 | + string='Sprints'), |
1497 | + 'user_id': fields.many2one('res.users', string='Phase Manager'), |
1498 | + } |
1499 | + |
1500 | + _constraints = [(_check_sprints, 'All sprints must belong to the selected ' |
1501 | + 'product backlog.',['Sprints'])] |
1502 | + |
1503 | +class FeatureHours(osv.Model): |
1504 | + |
1505 | + _name = 'project.oerp.feature.hours' |
1506 | + |
1507 | + def _effective_hours(self, cr ,uid, ids, field_name, arg, context=None): |
1508 | + res = {} |
1509 | + for hour in self.browse(cr, uid, ids, context=context): |
1510 | + task_obj = self.pool.get('project.task') |
1511 | + task_ids = task_obj.search(cr, uid, [('feature_id','=', hour.feature_id.id)], context=context) |
1512 | + tasks = task_obj.browse(cr, uid, task_ids, context=context) |
1513 | + sum = 0.0 |
1514 | + for task in tasks: |
1515 | + for work in task.work_ids: |
1516 | + if work.work_type_id == hour.work_type_id: |
1517 | + sum += work.hours |
1518 | + res[hour.id] = sum |
1519 | + return res |
1520 | + |
1521 | + def _remaining_hours(self, cr ,uid, ids, field_name, arg, context=None): |
1522 | + res = {} |
1523 | + for hour in self.browse(cr, uid, ids, context=context): |
1524 | + res[hour.id] = hour.expected_hours - hour.effective_hours |
1525 | + return res |
1526 | + |
1527 | + _columns = { |
1528 | + 'feature_id': fields.many2one('project.scrum.feature', string='Feature', required=True, |
1529 | + ondelete='cascade'), |
1530 | + 'project_id': fields.related('feature_id', 'product_backlog_id', 'project_id', |
1531 | + type='many2one', relation='project.project', string='Project'), |
1532 | + 'phase_id': fields.many2one('project.phase', string="Phase", |
1533 | + domain="[('project_id','=',project_id)]"), |
1534 | + 'work_type_id': fields.many2one('project.oerp.work.type', string='Work Type', |
1535 | + required=True, domain="[('phase_id','=',phase_id)]"), |
1536 | + 'expected_hours': fields.float('Planned Hour(s)', required=True), |
1537 | + 'effective_hours': fields.function(_effective_hours, type='float', string='Spent Hour(s)'), |
1538 | + 'remaining_hours': fields.function(_remaining_hours, type='float', string='Remaining Hour(s)'), |
1539 | + } |
1540 | + |
1541 | + _defaults = { |
1542 | + 'feature_id': lambda slf, cr, uid, ctx: ctx.get('feature_id', False), |
1543 | + 'project_id': lambda slf, cr, uid, ctx: ctx.get('project_id', False), |
1544 | + } |
1545 | + |
1546 | +class Feature(osv.Model): |
1547 | + |
1548 | + _inherit = 'project.scrum.feature' |
1549 | + |
1550 | + def onchange_product_backlog(self, cr, uid, ids, product_backlog_id, context=None): |
1551 | + res = {} |
1552 | + if product_backlog_id: |
1553 | + product_backlog = self.pool.get('project.scrum.product.backlog').browse( |
1554 | + cr, uid, product_backlog_id, context=context) |
1555 | + res = {'value': {'project_id': product_backlog.project_id.id}} |
1556 | + return res |
1557 | + |
1558 | + _columns = { |
1559 | + 'hour_ids': fields.one2many('project.oerp.feature.hours', 'feature_id', string='Feature Hours'), |
1560 | + } |
1561 | + |
1562 | + def write(self, cr, uid, ids, values, context=None): |
1563 | + if 'hour_ids' in values: |
1564 | + hours = values['hour_ids'] |
1565 | + sum = 0.0 |
1566 | + for hour in hours: |
1567 | + id = hour[1] |
1568 | + vals = hour[2] |
1569 | + if vals: |
1570 | + if 'expected_hours' in vals: |
1571 | + sum += vals['expected_hours'] |
1572 | + else: |
1573 | + hour_obj = self.pool.get('project.oerp.feature.hours') |
1574 | + sum += hour_obj.browse(cr, uid, id, context=context).expected_hours |
1575 | + values['expected_hours'] = sum |
1576 | + return super(Feature,self).write(cr, uid, ids, values, context=context) |
1577 | + |
1578 | + def create(self, cr, uid, values, context=None): |
1579 | + if 'hour_ids' in values: |
1580 | + hours = values['hour_ids'] |
1581 | + sum = 0.0 |
1582 | + for hour in hours: |
1583 | + id = hour[1] |
1584 | + vals = hour[2] |
1585 | + if vals: |
1586 | + if 'expected_hours' in vals: |
1587 | + sum += vals['expected_hours'] |
1588 | + else: |
1589 | + hour_obj = self.pool.get('project.oerp.feature.hours') |
1590 | + sum += hour_obj.browse(cr, uid, id, context=context).expected_hours |
1591 | + values['expected_hours'] = sum |
1592 | + return super(Feature,self).create(cr, uid, values, context=context) |
1593 | + |
1594 | +class TaskHours(osv.Model): |
1595 | + |
1596 | + _name = 'project.oerp.task.hour' |
1597 | + |
1598 | + def _effective_hours(self, cr ,uid, ids, field_name, arg, context=None): |
1599 | + res = {} |
1600 | + for hour in self.browse(cr, uid, ids, context=context): |
1601 | + work_obj = self.pool.get('project.task.work') |
1602 | + work_ids = work_obj.search(cr, uid, [('task_id','=', hour.task_id.id), |
1603 | + ('work_type_id','=',hour.work_type_id.id)], context=context) |
1604 | + works = work_obj.browse(cr, uid, work_ids, context=context) |
1605 | + sum = 0.0 |
1606 | + for work in works: |
1607 | + sum += work.hours |
1608 | + res[hour.id] = sum |
1609 | + return res |
1610 | + |
1611 | + def _remaining_hours(self, cr ,uid, ids, field_name, arg, context=None): |
1612 | + res = {} |
1613 | + for hour in self.browse(cr, uid, ids, context=context): |
1614 | + res[hour.id] = hour.expected_hours - hour.effective_hours |
1615 | + return res |
1616 | + |
1617 | + _columns = { |
1618 | + 'task_id': fields.many2one('project.task', string='Task', required=True, ondelete='cascade'), |
1619 | + 'project_id': fields.related('task_id', 'project_id', type='many2one', |
1620 | + relation='project.project', string='Project'), |
1621 | + 'phase_id': fields.many2one('project.phase', string="Phase", |
1622 | + domain="[('project_id','=',project_id)]"), |
1623 | + 'work_type_id': fields.many2one('project.oerp.work.type', string='Work Type', required =True, |
1624 | + domain="[('phase_id','=',phase_id)]"), |
1625 | + 'expected_hours': fields.float('Initially Planned Hour(s)', required=True), |
1626 | + 'effective_hours': fields.function(_effective_hours, type='float', string='Spent Hour(s)'), |
1627 | + 'remaining_hours': fields.function(_remaining_hours, type='float', string='Remaining Hour(s)'), |
1628 | + } |
1629 | + |
1630 | + _defaults = { |
1631 | + 'project_id': lambda slf, cr, uid, ctx: ctx.get('project_id', False), |
1632 | + 'task_id': lambda slf, cr, uid, ctx: ctx.get('task_id', False), |
1633 | + } |
1634 | + |
1635 | +class Task(osv.Model): |
1636 | + |
1637 | + _inherit = 'project.task' |
1638 | + |
1639 | + def onchange_sprint(self, cr, uid, ids, sprint_id, context=None): |
1640 | + res = super(Task,self).onchange_sprint(cr, uid, ids, sprint_id, context=context) |
1641 | + if sprint_id: |
1642 | + sprint = self.pool.get('project.scrum.sprint').browse( |
1643 | + cr, uid, sprint_id, context=context) |
1644 | + if 'value' in res: |
1645 | + res['value']['phase_id'] = sprint.phase_id.id |
1646 | + else: |
1647 | + res['value'] = {'phase_id': sprint.phase_id.id} |
1648 | + else: |
1649 | + if 'value' in res: |
1650 | + res['value']['phase_id'] = False |
1651 | + else: |
1652 | + res['value'] = {'phase_id': False} |
1653 | + return res |
1654 | + |
1655 | + _columns = { |
1656 | + 'feature_hour_ids': fields.related('feature_id', 'hour_ids', type='one2many', |
1657 | + relation='project.oerp.feature.hours', string='Feature Hours', readonly=True), |
1658 | + 'task_hour_ids': fields.one2many('project.oerp.task.hour', 'task_id', string='Task Hours'), |
1659 | + } |
1660 | + |
1661 | + def create(self, cr, uid, values, context=None): |
1662 | + if 'project_id' in values: |
1663 | + project_obj = self.pool.get('project.project') |
1664 | + project = project_obj.browse(cr, uid, values['project_id'], context=context) |
1665 | + if project.is_scrum: |
1666 | + task_hour_ids = values['task_hour_ids'] |
1667 | + sum = 0.0 |
1668 | + for hour in task_hour_ids: |
1669 | + sum += hour[2]['expected_hours'] |
1670 | + values['planned_hours'] = sum |
1671 | + return super(Task, self).create(cr, uid, values, context=context) |
1672 | + |
1673 | + def write(self, cr, uid, ids, values, context=None): |
1674 | + if not isinstance(ids,list): |
1675 | + ids = [ids] |
1676 | + for task in self.browse(cr, uid, ids, context=context): |
1677 | + if task.project_id.is_scrum: |
1678 | + if 'task_hour_ids' in values: |
1679 | + sum = 0.0 |
1680 | + for hour in values['task_hour_ids']: |
1681 | + if hour[0] == 0: |
1682 | + sum += hour[2]['expected_hours'] |
1683 | + elif hour[0] == 1: |
1684 | + if 'expected_hours' in hour[2]: |
1685 | + sum += hour[2]['expected_hours'] |
1686 | + else: |
1687 | + task_hour_obj = self.pool.get('project.oerp.task.hour') |
1688 | + task_hour = task_hour_obj.browse(cr, uid , hour[1], context=context) |
1689 | + sum += task_hour.expected_hours |
1690 | + elif hour[0] == 4: |
1691 | + task_hour_obj = self.pool.get('project.oerp.task.hour') |
1692 | + task_hour = task_hour_obj.browse(cr, uid , hour[1], context=context) |
1693 | + sum += task_hour.expected_hours |
1694 | + values['planned_hours'] = sum |
1695 | + super(Task, self).write(cr, uid, task.id, values, context) |
1696 | + return True |
1697 | + |
1698 | +class TaskWork(osv.Model): |
1699 | + |
1700 | + _inherit = 'project.task.work' |
1701 | + |
1702 | + def _check_work_type(self, cr , uid, ids, context=None): |
1703 | + works = self.browse(cr, uid, ids, context=context) |
1704 | + for work in works: |
1705 | + if work.work_type_id: |
1706 | + if work.task_id.feature_id: |
1707 | + feature = work.task_id.feature_id |
1708 | + flag = True |
1709 | + for hour in feature.hour_ids: |
1710 | + if hour.work_type_id == work.work_type_id: |
1711 | + flag = False |
1712 | + if flag: |
1713 | + return False |
1714 | + return True |
1715 | + |
1716 | + _columns = { |
1717 | + 'phase_id': fields.many2one('project.phase', string='Phase'), |
1718 | + 'work_type_id': fields.many2one('project.oerp.work.type', string='Work Type', |
1719 | + domain="[('phase_id','=',phase_id)]"), |
1720 | + } |
1721 | + |
1722 | + _defaults = { |
1723 | + 'phase_id': lambda slf, cr, uid, ctx: ctx.get('phase_id',False), |
1724 | + } |
1725 | + |
1726 | + _constraints = [(_check_work_type,'The selected Work Type has not been ' |
1727 | + 'planned in the selected Feature.',['Work Type'])] |
1728 | \ No newline at end of file |
1729 | |
1730 | === added directory 'project_openerp/security' |
1731 | === added file 'project_openerp/security/ir.model.access.csv' |
1732 | --- project_openerp/security/ir.model.access.csv 1970-01-01 00:00:00 +0000 |
1733 | +++ project_openerp/security/ir.model.access.csv 2014-03-27 17:09:06 +0000 |
1734 | @@ -0,0 +1,10 @@ |
1735 | +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink |
1736 | +access_project_oerp_work_type_manager,access.project.oerp.work.type.manager,model_project_oerp_work_type,project.group_project_manager,1,1,1,1 |
1737 | +access_project_oerp_work_type_user,access.project.oerp.work.type.user,model_project_oerp_work_type,project.group_project_user,1,0,0,0 |
1738 | +access_project_oerp_work_type_mapping_manager,access.project.oerp.work.type.mapping.manager,model_project_oerp_work_type_mapping,project.group_project_manager,1,1,1,1 |
1739 | +access_project_oerp_work_type_template_manager,access.project.oerp.work.type.template.manager,model_project_oerp_work_type_template,project.group_project_manager,1,1,1,1 |
1740 | +access_project_oerp_work_type_template_group_manager,access.project.oerp.work.type.template.group.manager,model_project_oerp_work_type_template_group,project.group_project_manager,1,1,1,1 |
1741 | +access_project_oerp_task_hour_manager,access.project.oerp.task.hour.manager,model_project_oerp_task_hour,project.group_project_manager,1,1,1,1 |
1742 | +access_project_oerp_task_hour_user,access.project.oerp.task.hour.user,model_project_oerp_task_hour,project.group_project_user,1,0,0,0 |
1743 | +access_project_oerp_feature_hours_manager,access.project.oerp.feature.hours.manager,model_project_oerp_feature_hours,project.group_project_manager,1,1,1,1 |
1744 | +access_project_oerp_feature_hours_user,access.project.oerp.feature.hours.user,model_project_oerp_feature_hours,project.group_project_user,1,0,0,0 |
1745 | |
1746 | === added directory 'project_openerp/view' |
1747 | === added file 'project_openerp/view/project_openerp_menu.xml' |
1748 | --- project_openerp/view/project_openerp_menu.xml 1970-01-01 00:00:00 +0000 |
1749 | +++ project_openerp/view/project_openerp_menu.xml 2014-03-27 17:09:06 +0000 |
1750 | @@ -0,0 +1,46 @@ |
1751 | +<?xml version="1.0" encoding="UTF-8"?> |
1752 | + |
1753 | +<openerp> |
1754 | + <data> |
1755 | + <menuitem id="menu_tools" |
1756 | + parent="project_scrum.menu_scrum" |
1757 | + name="Tools" |
1758 | + sequence="50"/> |
1759 | + |
1760 | + <menuitem id="menu_feature_import_wizard" |
1761 | + parent="menu_tools" |
1762 | + name="Import Features" |
1763 | + action="action_feature_import_wizard" |
1764 | + sequence="10"/> |
1765 | + |
1766 | + <menuitem id="menu_task_create_wizard" |
1767 | + parent="menu_tools" |
1768 | + name="Create Tasks" |
1769 | + action="action_task_create_wizard" |
1770 | + sequence="20"/> |
1771 | + |
1772 | + <menuitem id="menu_phase_create_wizard" |
1773 | + parent="menu_tools" |
1774 | + name="Create Phase" |
1775 | + action="action_phase_create_wizard" |
1776 | + sequence="30"/> |
1777 | + |
1778 | + <menuitem id="menu_sprint_close_wizard" |
1779 | + parent="menu_tools" |
1780 | + name="Close Sprint" |
1781 | + action="action_sprint_close_wizard" |
1782 | + sequence="40"/> |
1783 | + |
1784 | + <menuitem id="menu_work_type_template" |
1785 | + parent="base.menu_definitions" |
1786 | + name="Phase Templates" |
1787 | + action="action_work_type_template" |
1788 | + sequence="20"/> |
1789 | + |
1790 | + <menuitem id="menu_work_type_template_group" |
1791 | + parent="base.menu_definitions" |
1792 | + name="Phase Template Groups" |
1793 | + action="action_work_type_template_group" |
1794 | + sequence="30"/> |
1795 | + </data> |
1796 | +</openerp> |
1797 | \ No newline at end of file |
1798 | |
1799 | === added file 'project_openerp/view/project_openerp_view.xml' |
1800 | --- project_openerp/view/project_openerp_view.xml 1970-01-01 00:00:00 +0000 |
1801 | +++ project_openerp/view/project_openerp_view.xml 2014-03-27 17:09:06 +0000 |
1802 | @@ -0,0 +1,300 @@ |
1803 | +<?xml version="1.0" encoding="UTF-8"?> |
1804 | +<openerp> |
1805 | + <data> |
1806 | + <!-- actions --> |
1807 | + <!-- project.oerp.feature.import.wizard --> |
1808 | + <record model="ir.actions.act_window" id="action_feature_import_wizard"> |
1809 | + <field name="name">Feature Import</field> |
1810 | + <field name="res_model">project.oerp.feature.import.wizard</field> |
1811 | + <field name="view_mode">form</field> |
1812 | + <field name="target">new</field> |
1813 | + </record> |
1814 | + |
1815 | + <!-- project.oerp.task.create.wizard --> |
1816 | + <record model="ir.actions.act_window" id="action_task_create_wizard"> |
1817 | + <field name="name">Create Tasks from Sequence</field> |
1818 | + <field name="res_model">project.oerp.task.create.wizard</field> |
1819 | + <field name="view_mode">form</field> |
1820 | + <field name="target">new</field> |
1821 | + </record> |
1822 | + |
1823 | + <!-- project.oerp.phase.create.wizard --> |
1824 | + <record model="ir.actions.act_window" id="action_phase_create_wizard"> |
1825 | + <field name="name">Create Phase from Template</field> |
1826 | + <field name="res_model">project.oerp.phase.create.wizard</field> |
1827 | + <field name="view_mode">form</field> |
1828 | + <field name="target">new</field> |
1829 | + </record> |
1830 | + |
1831 | + <!-- project.oerp.sprint.close.wizard --> |
1832 | + <record model="ir.actions.act_window" id="action_sprint_close_wizard"> |
1833 | + <field name="name">Close Sprint</field> |
1834 | + <field name="res_model">project.oerp.sprint.close.wizard</field> |
1835 | + <field name="view_mode">form</field> |
1836 | + <field name="target">new</field> |
1837 | + </record> |
1838 | + |
1839 | + <!-- project.oerp.work.type.template --> |
1840 | + <record model="ir.actions.act_window" id="action_work_type_template"> |
1841 | + <field name="name">Work Type Template</field> |
1842 | + <field name="res_model">project.oerp.work.type.template</field> |
1843 | + <field name="view_mode">tree,form</field> |
1844 | + <field name="help" type="html"> |
1845 | + <p class="oe_view_nocontent_create">Create new Work Type Template</p> |
1846 | + </field> |
1847 | + </record> |
1848 | + |
1849 | + <!-- project.oerp.work.type.template --> |
1850 | + <record model="ir.actions.act_window" id="action_work_type_template_group"> |
1851 | + <field name="name">Work Type Template Group</field> |
1852 | + <field name="res_model">project.oerp.work.type.template.group</field> |
1853 | + <field name="view_mode">tree,form</field> |
1854 | + <field name="help" type="html"> |
1855 | + <p class="oe_view_nocontent_create">Create new Work Type Template Group</p> |
1856 | + </field> |
1857 | + </record> |
1858 | + |
1859 | + <!-- views --> |
1860 | + <!-- project.phase --> |
1861 | + <!-- form --> |
1862 | + <record id ="view_phase_form" model="ir.ui.view"> |
1863 | + <field name="name">view.phase.form</field> |
1864 | + <field name="model">project.phase</field> |
1865 | + <field name="inherit_id" ref="project_long_term.view_project_phase_form"/> |
1866 | + <field name="arch" type="xml"> |
1867 | + <xpath expr="//form/sheet/group/group/field[@name='project_id']" position="after"> |
1868 | + <field name="is_scrum" invisible="True"/> |
1869 | + <field name="user_id"/> |
1870 | + <field name="product_backlog_id" |
1871 | + attrs="{'invisible': [('is_scrum','=',False)], 'required':['!',('is_scrum','=',False)]}"/> |
1872 | + </xpath> |
1873 | + <xpath expr="//form/sheet/notebook/page[@string='Constraints']" position="after"> |
1874 | + <page string="Sprints" name="sprints"> |
1875 | + <field name="sprint_ids" |
1876 | + context="{}"/> |
1877 | + </page> |
1878 | + <page string="Work Types" name="work_types"> |
1879 | + <field name="work_type_ids" context="{'phase_id': active_id}"> |
1880 | + <tree editable="bottom"> |
1881 | + <field name="name"/> |
1882 | + <field name="sequence"/> |
1883 | + <field name="column_number"/> |
1884 | + </tree> |
1885 | + </field> |
1886 | + </page> |
1887 | + </xpath> |
1888 | + </field> |
1889 | + </record> |
1890 | + |
1891 | + <!-- project.scrum.feature --> |
1892 | + <!-- form --> |
1893 | + <record id ="view_feature_form" model="ir.ui.view"> |
1894 | + <field name="name">view.feature.form</field> |
1895 | + <field name="model">project.scrum.feature</field> |
1896 | + <field name="inherit_id" ref="project_scrum.view_feature_form"/> |
1897 | + <field name="arch" type="xml"> |
1898 | + <xpath expr="//form/sheet/group/group/field[@name='expected_hours']" position="attributes"> |
1899 | + <attribute name="readonly">True</attribute> |
1900 | + <attribute name="required">False</attribute> |
1901 | + </xpath> |
1902 | + <xpath expr="//form/sheet/group/group/field[@name='product_backlog_id']" position="attributes"> |
1903 | + <attribute name="on_change">onchange_product_backlog(product_backlog_id)</attribute> |
1904 | + </xpath> |
1905 | + <xpath expr="//form/sheet/notebook/page[@name='sprints']" position="after"> |
1906 | + <page string="Feature Hours" name="feature_hours"> |
1907 | + <field name="id" invisible="True"/> |
1908 | + <field name="project_id" invisible="True"/> |
1909 | + <field name="hour_ids" context="{'feature_id': active_id, 'project_id': project_id}"> |
1910 | + <tree editable="bottom"> |
1911 | + <field name="phase_id"/> |
1912 | + <field name="work_type_id"/> |
1913 | + <field name="expected_hours"/> |
1914 | + <field name="effective_hours"/> |
1915 | + <field name="remaining_hours"/> |
1916 | + </tree> |
1917 | + </field> |
1918 | + </page> |
1919 | + </xpath> |
1920 | + </field> |
1921 | + </record> |
1922 | + |
1923 | + <!-- project.task --> |
1924 | + <!-- form --> |
1925 | + <record id ="view_task_form" model="ir.ui.view"> |
1926 | + <field name="name">view.task.form</field> |
1927 | + <field name="model">project.task</field> |
1928 | + <field name="inherit_id" ref="project.view_task_form2"/> |
1929 | + <field name="priority" eval="100"/> |
1930 | + <field name="arch" type="xml"> |
1931 | + <xpath expr="//form/sheet/group/group/field[@name='phase_id']" position="attributes"> |
1932 | + <attribute name="attrs">{'readonly': [('is_scrum','=',True)]}</attribute> |
1933 | + </xpath> |
1934 | + <xpath expr="//form/sheet/notebook/page/field[@name='work_ids']" position="attributes"> |
1935 | + <attribute name="context">{'phase_id': phase_id}</attribute> |
1936 | + </xpath> |
1937 | + <xpath expr="//form/sheet/notebook/page/field[@name='work_ids']/tree/field[@name='date']" position="after"> |
1938 | + <field name="work_type_id"/> |
1939 | + </xpath> |
1940 | + <xpath expr="//form/sheet/notebook/page[@name='sequence']" position="before"> |
1941 | + <page string="Task Hours" name="task_hours" |
1942 | + attrs="{'invisible': [('is_scrum','=',False)]}"> |
1943 | + <field name="task_hour_ids" |
1944 | + context="{'project_id': project_id, 'task_id': active_id}"> |
1945 | + <tree editable="bottom"> |
1946 | + <field name="phase_id"/> |
1947 | + <field name="work_type_id"/> |
1948 | + <field name="expected_hours" sum="Planned Hour(s)"/> |
1949 | + <field name="effective_hours" sum="Spent Hour(s)"/> |
1950 | + <field name="remaining_hours" sum="Remaining Hour(s)"/> |
1951 | + </tree> |
1952 | + </field> |
1953 | + </page> |
1954 | + <page string="Feature Hours" name="feature_hours" |
1955 | + attrs="{'invisible': [('feature_id','=',False)]}"> |
1956 | + <field name="feature_hour_ids"> |
1957 | + <tree> |
1958 | + <field name="phase_id"/> |
1959 | + <field name="work_type_id"/> |
1960 | + <field name="expected_hours" sum="Planned Hour(s)"/> |
1961 | + <field name="effective_hours" sum="Spent Hour(s)"/> |
1962 | + <field name="remaining_hours" sum="Remaining Hour(s)"/> |
1963 | + </tree> |
1964 | + </field> |
1965 | + </page> |
1966 | + </xpath> |
1967 | + </field> |
1968 | + </record> |
1969 | + |
1970 | + <!-- project.scrum.sprint --> |
1971 | + <!-- form --> |
1972 | + <record id ="view_sprint_form" model="ir.ui.view"> |
1973 | + <field name="name">view.sprint.form</field> |
1974 | + <field name="model">project.scrum.sprint</field> |
1975 | + <field name="inherit_id" ref="project_scrum.view_sprint_form"/> |
1976 | + <field name="arch" type="xml"> |
1977 | + <xpath expr="//form/sheet/div[@name='buttons']/button[@name='tasks_from_features']" position="before"> |
1978 | + <button name="%(action_task_create_wizard)d" string="Tasks from Sequence" type="action" |
1979 | + attrs="{'invisible':['|',('state','=','cancelled'),'|',('state','=','draft'),('state','=','done')]}" |
1980 | + context="{'sprint_id': active_id}"/> |
1981 | + <button name="queue_tasks" string="Queue Tasks" type="object" |
1982 | + confirm="Are you sure you want to queue all tasks?"/> |
1983 | + </xpath> |
1984 | + <xpath expr="//form/sheet/group/group/field[@name='release_backlog_id']" position="after"> |
1985 | + <field name="phase_id"/> |
1986 | + </xpath> |
1987 | + <xpath expr="//form/sheet/notebook/page[@name='tasks']" position="after"> |
1988 | + <page string="Desirable Tasks" name="desirable_tasks"> |
1989 | + <field name="desirable_task_ids"/> |
1990 | + </page> |
1991 | + </xpath> |
1992 | + </field> |
1993 | + </record> |
1994 | + |
1995 | + <!-- project.oerp.work.type.template --> |
1996 | + <!-- form --> |
1997 | + <record id ="view_work_type_template_form" model="ir.ui.view"> |
1998 | + <field name="name">view.work.type.template.form</field> |
1999 | + <field name="model">project.oerp.work.type.template</field> |
2000 | + <field name="type">form</field> |
2001 | + <field name="priority" eval="16"/> |
2002 | + <field name="arch" type="xml"> |
2003 | + <form string="Work Type Template" version="7.0"> |
2004 | + <sheet> |
2005 | + <div class="oe_title"> |
2006 | + <label for="name" class="oe_edit_only"/> |
2007 | + <h1> |
2008 | + <field name="name"/> |
2009 | + </h1> |
2010 | + </div> |
2011 | + <group> |
2012 | + <group> |
2013 | + <field name="group_id"/> |
2014 | + </group> |
2015 | + <group> |
2016 | + <field name="filename" invisible="True"/> |
2017 | + <field name="file" filename="filename"/> |
2018 | + </group> |
2019 | + </group> |
2020 | + <notebook> |
2021 | + <page string="Work Types" name="work_types"> |
2022 | + <field name="work_type_mapping_ids"> |
2023 | + <tree editable="top"> |
2024 | + <field name="name"/> |
2025 | + <field name="sequence"/> |
2026 | + <field name="column_number"/> |
2027 | + </tree> |
2028 | + </field> |
2029 | + </page> |
2030 | + </notebook> |
2031 | + </sheet> |
2032 | + </form> |
2033 | + </field> |
2034 | + </record> |
2035 | + |
2036 | + <!-- tree --> |
2037 | + <record id ="view_work_type_template_tree" model="ir.ui.view"> |
2038 | + <field name="name">view.work.type.template.tree</field> |
2039 | + <field name="model">project.oerp.work.type.template</field> |
2040 | + <field name="type">tree</field> |
2041 | + <field name="priority" eval="16"/> |
2042 | + <field name="arch" type="xml"> |
2043 | + <tree string="Work Type Templates"> |
2044 | + <field name="name"/> |
2045 | + <field name="file"/> |
2046 | + </tree> |
2047 | + </field> |
2048 | + </record> |
2049 | + |
2050 | + <!-- project.oerp.work.type.template.group --> |
2051 | + <!-- form --> |
2052 | + <record id ="view_work_type_template_group_form" model="ir.ui.view"> |
2053 | + <field name="name">view.work.type.template.group.form</field> |
2054 | + <field name="model">project.oerp.work.type.template.group</field> |
2055 | + <field name="type">form</field> |
2056 | + <field name="priority" eval="16"/> |
2057 | + <field name="arch" type="xml"> |
2058 | + <form string="Work Type Template Group" version="7.0"> |
2059 | + <sheet> |
2060 | + <div class="oe_title"> |
2061 | + <label for="name" class="oe_edit_only"/> |
2062 | + <h1> |
2063 | + <field name="name"/> |
2064 | + </h1> |
2065 | + </div> |
2066 | + <group> |
2067 | + <group> |
2068 | + <field name="file" filename="filename"/> |
2069 | + </group> |
2070 | + <group> |
2071 | + <field name="filename"/> |
2072 | + </group> |
2073 | + </group> |
2074 | + <notebook> |
2075 | + <page string="Phase Templates" name="work_types_templates"> |
2076 | + <field name="template_ids"> |
2077 | + <tree editable="top"> |
2078 | + <field name="name"/> |
2079 | + </tree> |
2080 | + </field> |
2081 | + </page> |
2082 | + </notebook> |
2083 | + </sheet> |
2084 | + </form> |
2085 | + </field> |
2086 | + </record> |
2087 | + |
2088 | + <!-- tree --> |
2089 | + <record id ="view_work_type_template_group_tree" model="ir.ui.view"> |
2090 | + <field name="name">view.work.type.template.group.tree</field> |
2091 | + <field name="model">project.oerp.work.type.template.group</field> |
2092 | + <field name="type">tree</field> |
2093 | + <field name="priority" eval="16"/> |
2094 | + <field name="arch" type="xml"> |
2095 | + <tree string="Work Type Template Groups"> |
2096 | + <field name="name"/> |
2097 | + <field name="file"/> |
2098 | + </tree> |
2099 | + </field> |
2100 | + </record> |
2101 | + </data> |
2102 | +</openerp> |
2103 | \ No newline at end of file |
2104 | |
2105 | === added directory 'project_openerp/wizard' |
2106 | === added file 'project_openerp/wizard/__init__.py' |
2107 | --- project_openerp/wizard/__init__.py 1970-01-01 00:00:00 +0000 |
2108 | +++ project_openerp/wizard/__init__.py 2014-03-27 17:09:06 +0000 |
2109 | @@ -0,0 +1,26 @@ |
2110 | +# -*- coding: utf-8 -*- |
2111 | +############################################################################## |
2112 | +# |
2113 | +# OpenERP, Open Source Management Solution |
2114 | +# Addons modules by CLEARCORP S.A. |
2115 | +# Copyright (C) 2009-TODAY CLEARCORP S.A. (<http://clearcorp.co.cr>). |
2116 | +# |
2117 | +# This program is free software: you can redistribute it and/or modify |
2118 | +# it under the terms of the GNU Affero General Public License as |
2119 | +# published by the Free Software Foundation, either version 3 of the |
2120 | +# License, or (at your option) any later version. |
2121 | +# |
2122 | +# This program is distributed in the hope that it will be useful, |
2123 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2124 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2125 | +# GNU Affero General Public License for more details. |
2126 | +# |
2127 | +# You should have received a copy of the GNU Affero General Public License |
2128 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
2129 | +# |
2130 | +############################################################################## |
2131 | + |
2132 | +import feature_import_wizard |
2133 | +import phase_create_wizard |
2134 | +import task_create_wizard |
2135 | +import sprint_close_wizard |
2136 | \ No newline at end of file |
2137 | |
2138 | === added file 'project_openerp/wizard/feature_import_wizard.py' |
2139 | --- project_openerp/wizard/feature_import_wizard.py 1970-01-01 00:00:00 +0000 |
2140 | +++ project_openerp/wizard/feature_import_wizard.py 2014-03-27 17:09:06 +0000 |
2141 | @@ -0,0 +1,115 @@ |
2142 | +# -*- coding: utf-8 -*- |
2143 | +############################################################################## |
2144 | +# |
2145 | +# OpenERP, Open Source Management Solution |
2146 | +# Addons modules by CLEARCORP S.A. |
2147 | +# Copyright (C) 2009-TODAY CLEARCORP S.A. (<http://clearcorp.co.cr>). |
2148 | +# |
2149 | +# This program is free software: you can redistribute it and/or modify |
2150 | +# it under the terms of the GNU Affero General Public License as |
2151 | +# published by the Free Software Foundation, either version 3 of the |
2152 | +# License, or (at your option) any later version. |
2153 | +# |
2154 | +# This program is distributed in the hope that it will be useful, |
2155 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2156 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2157 | +# GNU Affero General Public License for more details. |
2158 | +# |
2159 | +# You should have received a copy of the GNU Affero General Public License |
2160 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
2161 | +# |
2162 | +############################################################################## |
2163 | + |
2164 | +import base64 |
2165 | +import StringIO |
2166 | +import csv |
2167 | +from openerp.osv import osv, fields |
2168 | +from openerp.tools.translate import _ |
2169 | + |
2170 | +class FeatureImportWizard(osv.TransientModel): |
2171 | + |
2172 | + _name = 'project.oerp.feature.import.wizard' |
2173 | + |
2174 | + def import_file(self, cr, uid, ids, context=None): |
2175 | + wizard = self.browse(cr, uid, ids[0], context=context) |
2176 | + try: |
2177 | + file = StringIO.StringIO(base64.decodestring(wizard.file)) |
2178 | + reader = csv.reader(file, delimiter=',') |
2179 | + except: |
2180 | + raise osv.except_osv(_('Error'),_('An error occurred while reading the file. Please ' |
2181 | + 'check if the format is correct.')) |
2182 | + |
2183 | + phase_obj = self.pool.get('project.phase') |
2184 | + phase_ids = phase_obj.search(cr, uid, [('project_id','=',wizard.project_id.id)], context=context) |
2185 | + work_type_obj = self.pool.get('project.oerp.work.type') |
2186 | + work_type_ids = work_type_obj.search(cr, uid, [('phase_id','in',phase_ids)], context=context) |
2187 | + work_types = work_type_obj.browse(cr, uid, work_type_ids, context=context) |
2188 | + |
2189 | + # TODO: improve skip |
2190 | + skipheader = True |
2191 | + for row in reader: |
2192 | + if skipheader: |
2193 | + skipheader = False |
2194 | + continue |
2195 | + if row[2] == '': |
2196 | + |
2197 | + feature_type_id = self.pool.get('project.scrum.feature.type').search( |
2198 | + cr, uid, [('code','=',row[0])], context=context) or False |
2199 | + if feature_type_id: |
2200 | + feature_type_id = feature_type_id[0] |
2201 | + else: # TODO: log error |
2202 | + pass |
2203 | + |
2204 | + try: |
2205 | + values = { |
2206 | + 'code': row[1], |
2207 | + 'name': row[3], |
2208 | + 'product_backlog_id': wizard.product_backlog_id.id, |
2209 | + 'description': row[4], |
2210 | + 'priority': int(row[5]), |
2211 | + 'type_id': feature_type_id, |
2212 | + } |
2213 | + |
2214 | + hour_ids = [] |
2215 | + for work_type in work_types: |
2216 | + try: |
2217 | + planned_hours = float(row[work_type.column_number-1]) |
2218 | + if planned_hours != 0.0: |
2219 | + vals = { |
2220 | + 'project_id': wizard.project_id.id, |
2221 | + 'phase_id': work_type.phase_id.id, |
2222 | + 'work_type_id': work_type.id, |
2223 | + 'expected_hours': planned_hours, |
2224 | + } |
2225 | + hour_ids.append([0,False,vals]) |
2226 | + except: |
2227 | + raise osv.except_osv(_('Error'),_('An error occurred while reading the planned hours ' |
2228 | + 'from file in column %s for work type %s') % (work_type.column_number, work_type.name)) |
2229 | + values['hour_ids'] = hour_ids |
2230 | + |
2231 | + feature_obj = self.pool.get('project.scrum.feature') |
2232 | + feature_obj.create(cr, uid, values, context=context) |
2233 | + |
2234 | + except:# TODO: capture better error messages |
2235 | + raise osv.except_osv(_('Error'),_('An error occurred while importing the features')) |
2236 | + return { |
2237 | + 'name': 'Features', |
2238 | + 'view_type': 'tree', |
2239 | + 'view_mode': 'tree', |
2240 | + 'res_model': 'project.scrum.feature', |
2241 | + 'context': context, |
2242 | + 'type': 'ir.actions.act_window', |
2243 | + } |
2244 | + |
2245 | + _columns = { |
2246 | + 'project_id': fields.many2one('project.project', string='Project', required=True, |
2247 | + domain="[('is_scrum','=',True)]"), |
2248 | + 'product_backlog_id': fields.many2one('project.scrum.product.backlog', string='Product Backlog', |
2249 | + required=True, domain="[('project_id','=',project_id)]"), |
2250 | + 'file': fields.binary('File to Import', required=True), |
2251 | + 'state': fields.selection([('new','New'),('done','Done')], string='State'), |
2252 | + } |
2253 | + |
2254 | + _defaults = { |
2255 | + 'state': 'new' |
2256 | + } |
2257 | \ No newline at end of file |
2258 | |
2259 | === added file 'project_openerp/wizard/phase_create_wizard.py' |
2260 | --- project_openerp/wizard/phase_create_wizard.py 1970-01-01 00:00:00 +0000 |
2261 | +++ project_openerp/wizard/phase_create_wizard.py 2014-03-27 17:09:06 +0000 |
2262 | @@ -0,0 +1,72 @@ |
2263 | +# -*- coding: utf-8 -*- |
2264 | +############################################################################## |
2265 | +# |
2266 | +# OpenERP, Open Source Management Solution |
2267 | +# Addons modules by CLEARCORP S.A. |
2268 | +# Copyright (C) 2009-TODAY CLEARCORP S.A. (<http://clearcorp.co.cr>). |
2269 | +# |
2270 | +# This program is free software: you can redistribute it and/or modify |
2271 | +# it under the terms of the GNU Affero General Public License as |
2272 | +# published by the Free Software Foundation, either version 3 of the |
2273 | +# License, or (at your option) any later version. |
2274 | +# |
2275 | +# This program is distributed in the hope that it will be useful, |
2276 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2277 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2278 | +# GNU Affero General Public License for more details. |
2279 | +# |
2280 | +# You should have received a copy of the GNU Affero General Public License |
2281 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
2282 | +# |
2283 | +############################################################################## |
2284 | + |
2285 | +from openerp.osv import fields, osv |
2286 | + |
2287 | +class PhaseCreateWizard(osv.TransientModel): |
2288 | + |
2289 | + _name = 'project.oerp.phase.create.wizard' |
2290 | + |
2291 | + def create_phase(self, cr, uid, ids, context=None): |
2292 | + wizard = self.browse(cr, uid, ids[0], context=context) |
2293 | + |
2294 | + values = { |
2295 | + 'name': wizard.work_type_template_id.name, |
2296 | + 'project_id': wizard.project_id.id, |
2297 | + 'product_backlog_id': wizard.product_backlog_id.id, |
2298 | + 'duration': wizard.duration, |
2299 | + 'product_uom': wizard.product_uom.id, |
2300 | + } |
2301 | + |
2302 | + work_type_ids = [] |
2303 | + for work_type in wizard.work_type_template_id.work_type_mapping_ids: |
2304 | + vals = { |
2305 | + 'name': work_type.name, |
2306 | + 'sequence': work_type.sequence, |
2307 | + 'column_number': work_type.column_number, |
2308 | + } |
2309 | + work_type_ids.append([0,False,vals]) |
2310 | + |
2311 | + values['work_type_ids'] = work_type_ids |
2312 | + |
2313 | + phase_obj = self.pool.get('project.phase') |
2314 | + phase_id = phase_obj.create(cr, uid, values, context=context) |
2315 | + return { |
2316 | + 'name': 'Project Phases', |
2317 | + 'view_type': 'form', |
2318 | + 'view_mode': 'form', |
2319 | + 'res_model': 'project.phase', |
2320 | + 'context': context, |
2321 | + 'res_id': phase_id, |
2322 | + 'type': 'ir.actions.act_window', |
2323 | + } |
2324 | + |
2325 | + _columns = { |
2326 | + 'work_type_template_id': fields.many2one('project.oerp.work.type.template', string='Work Type Template', |
2327 | + required=True), |
2328 | + 'project_id': fields.many2one('project.project', string='Project', required=True, |
2329 | + domain="[('is_scrum','=',True)]"), |
2330 | + 'product_backlog_id': fields.many2one('project.scrum.product.backlog', string='Product Backlog', |
2331 | + required=True, domain="[('project_id','=',project_id)]"), |
2332 | + 'duration': fields.float('Duration', required=True), |
2333 | + 'product_uom': fields.many2one('product.uom', string='Unit of Measure', required=True), |
2334 | + } |
2335 | \ No newline at end of file |
2336 | |
2337 | === added file 'project_openerp/wizard/sprint_close_wizard.py' |
2338 | --- project_openerp/wizard/sprint_close_wizard.py 1970-01-01 00:00:00 +0000 |
2339 | +++ project_openerp/wizard/sprint_close_wizard.py 2014-03-27 17:09:06 +0000 |
2340 | @@ -0,0 +1,71 @@ |
2341 | +# -*- coding: utf-8 -*- |
2342 | +############################################################################## |
2343 | +# |
2344 | +# OpenERP, Open Source Management Solution |
2345 | +# Addons modules by CLEARCORP S.A. |
2346 | +# Copyright (C) 2009-TODAY CLEARCORP S.A. (<http://clearcorp.co.cr>). |
2347 | +# |
2348 | +# This program is free software: you can redistribute it and/or modify |
2349 | +# it under the terms of the GNU Affero General Public License as |
2350 | +# published by the Free Software Foundation, either version 3 of the |
2351 | +# License, or (at your option) any later version. |
2352 | +# |
2353 | +# This program is distributed in the hope that it will be useful, |
2354 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2355 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2356 | +# GNU Affero General Public License for more details. |
2357 | +# |
2358 | +# You should have received a copy of the GNU Affero General Public License |
2359 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
2360 | +# |
2361 | +############################################################################## |
2362 | + |
2363 | +from openerp.osv import fields, osv |
2364 | +from openerp.tools.translate import _ |
2365 | + |
2366 | +class SprintCloseWizard(osv.TransientModel): |
2367 | + |
2368 | + _name = 'project.oerp.sprint.close.wizard' |
2369 | + |
2370 | + def close_sprint(self, cr, uid, ids, context=None): |
2371 | + wizard = self.browse(cr, uid, ids[0], context=context) |
2372 | + closing = wizard.closing_sprint_id |
2373 | + opening = wizard.opening_sprint_id |
2374 | + |
2375 | + try: |
2376 | + task_ids = [] |
2377 | + for task in closing.task_ids: |
2378 | + if task.state in ['open','pending','draft']: |
2379 | + task_ids.append(task.id) |
2380 | + task.write({'sprint_id': False}, context=context) |
2381 | + |
2382 | + feature_ids = [] |
2383 | + for feature in closing.feature_ids: |
2384 | + if feature.state not in ['cancelled','done']: |
2385 | + feature_ids.append(feature.id) |
2386 | + opening.write({ |
2387 | + 'desirable_task_ids': [[6,0,task_ids]], |
2388 | + 'feature_ids': [[6,0,feature_ids]], |
2389 | + }, context=context) |
2390 | + |
2391 | + closing.set_done(context=context) |
2392 | + |
2393 | + return { |
2394 | + 'name': 'Sprints', |
2395 | + 'view_type': 'form', |
2396 | + 'view_mode': 'form', |
2397 | + 'res_model': 'project.scrum.sprint', |
2398 | + 'context': context, |
2399 | + 'res_id': opening.id, |
2400 | + 'type': 'ir.actions.act_window', |
2401 | + } |
2402 | + |
2403 | + except: |
2404 | + raise osv.except_osv(_('Error'),_('An error occurred while closing the sprint.')) |
2405 | + |
2406 | + _columns = { |
2407 | + 'closing_sprint_id': fields.many2one('project.scrum.sprint', string='Closing Sprint', |
2408 | + required=True, domain="[('state','in',['open','pending'])]"), |
2409 | + 'opening_sprint_id': fields.many2one('project.scrum.sprint', string='Opening Sprint', |
2410 | + required=True, domain="[('state','in',['draft','close'])]"), |
2411 | + } |
2412 | \ No newline at end of file |
2413 | |
2414 | === added file 'project_openerp/wizard/task_create_wizard.py' |
2415 | --- project_openerp/wizard/task_create_wizard.py 1970-01-01 00:00:00 +0000 |
2416 | +++ project_openerp/wizard/task_create_wizard.py 2014-03-27 17:09:06 +0000 |
2417 | @@ -0,0 +1,149 @@ |
2418 | +# -*- coding: utf-8 -*- |
2419 | +############################################################################## |
2420 | +# |
2421 | +# OpenERP, Open Source Management Solution |
2422 | +# Addons modules by CLEARCORP S.A. |
2423 | +# Copyright (C) 2009-TODAY CLEARCORP S.A. (<http://clearcorp.co.cr>). |
2424 | +# |
2425 | +# This program is free software: you can redistribute it and/or modify |
2426 | +# it under the terms of the GNU Affero General Public License as |
2427 | +# published by the Free Software Foundation, either version 3 of the |
2428 | +# License, or (at your option) any later version. |
2429 | +# |
2430 | +# This program is distributed in the hope that it will be useful, |
2431 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2432 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2433 | +# GNU Affero General Public License for more details. |
2434 | +# |
2435 | +# You should have received a copy of the GNU Affero General Public License |
2436 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
2437 | +# |
2438 | +############################################################################## |
2439 | + |
2440 | +from openerp.osv import fields, osv |
2441 | +from openerp.tools.translate import _ |
2442 | + |
2443 | +# Mapping between task priority and |
2444 | +# feature priority |
2445 | +PRIORITY = { |
2446 | + 5: '4', |
2447 | + 4: '3', |
2448 | + 3: '2', |
2449 | + 2: '1', |
2450 | + 1: '0', |
2451 | + } |
2452 | + |
2453 | + |
2454 | +class TaskCreateWizard(osv.TransientModel): |
2455 | + |
2456 | + _name = 'project.oerp.task.create.wizard' |
2457 | + |
2458 | + def create_tasks(self, cr, uid, ids, context=None): |
2459 | + wizard = self.browse(cr, uid, ids[0], context=context) |
2460 | + sprint = wizard.sprint_id |
2461 | + features = wizard.sprint_id.feature_ids |
2462 | + |
2463 | + if sprint.task_from_features: |
2464 | + raise osv.except_osv(_('Error'),_('All task were created before.')) |
2465 | + |
2466 | + desirables = [] |
2467 | + for feature in features: |
2468 | + try: |
2469 | + cr.execute('''SELECT string_agg(types.name,', ') AS name, |
2470 | + types.sequence, |
2471 | + SUM(types.expected_hours) AS expected_hours |
2472 | +FROM (SELECT types.id, |
2473 | + types.sequence, |
2474 | + types.name, |
2475 | + hours.expected_hours |
2476 | +FROM project_oerp_feature_hours AS hours, |
2477 | + project_oerp_work_type AS types |
2478 | +WHERE hours.feature_id = %s |
2479 | +AND hours.work_type_id = types.id) AS types |
2480 | +GROUP BY types.sequence |
2481 | +ORDER BY types.sequence ASC;''', (feature.id,)) |
2482 | + |
2483 | + previous_id = False |
2484 | + for sequence in cr.dictfetchall(): |
2485 | + number = sequence.get('sequence') |
2486 | + values = { |
2487 | + 'name': feature.code + ' ' + feature.name + \ |
2488 | + ' ' + sequence.get('name'), |
2489 | + 'project_id': sprint.project_id.id, |
2490 | + 'product_backlog_id': sprint.product_backlog_id.id, |
2491 | + 'release_backlog_id': sprint.release_backlog_id.id, |
2492 | + 'sprint_id': False, |
2493 | + 'feature_id': feature.id, |
2494 | + 'description': feature.description, |
2495 | + 'planned_hours': sequence.get('expected_hours'), |
2496 | + 'remaining_hours': sequence.get('expected_hours'), |
2497 | + 'priority': PRIORITY[feature.priority], |
2498 | + 'phase_id': sprint.phase_id.id, |
2499 | + 'date_deadline': sprint.deadline, |
2500 | + 'date_start': sprint.date_start, |
2501 | + 'sequence': number, |
2502 | + } |
2503 | + |
2504 | + cr.execute('''SELECT types.id, |
2505 | + hours.expected_hours, |
2506 | + hours.phase_id |
2507 | +FROM project_oerp_feature_hours AS hours, |
2508 | + project_oerp_work_type AS types |
2509 | +WHERE hours.feature_id = %s |
2510 | +AND hours.work_type_id = types.id |
2511 | +AND types.sequence = %s;''', (feature.id, number,)) |
2512 | + |
2513 | + vals = [] |
2514 | + for row in cr.dictfetchall(): |
2515 | + vals.append([0,0,{ |
2516 | + 'phase_id': row.get('phase_id'), |
2517 | + 'work_type_id': row.get('id'), |
2518 | + 'expected_hours': row.get('expected_hours'), |
2519 | + }]) |
2520 | + |
2521 | + values['task_hour_ids'] = vals |
2522 | + |
2523 | + if sprint.phase_id.user_id: |
2524 | + values['user_id'] = sprint.phase_id.user_id.id |
2525 | + |
2526 | + task_obj = self.pool.get('project.task') |
2527 | + task_id = task_obj.create(cr, uid, values, context=context) |
2528 | + desirables.append(task_id) |
2529 | + |
2530 | + if previous_id: |
2531 | + values = {'previous_task_ids': [[6,0,[previous_id]]]} |
2532 | + task_obj.write(cr, uid, task_id, values, context=context) |
2533 | + values = {'next_task_ids': [[6,0,[task_id]]]} |
2534 | + task_obj.write(cr, uid, previous_id, values, context=context) |
2535 | + |
2536 | + previous_id = task_id |
2537 | + |
2538 | + except: |
2539 | + raise osv.except_osv(_('Error'),_('An error occurred while creating the tasks. ' |
2540 | + 'Please contact your system administrator.')) |
2541 | + |
2542 | + sprint_obj = self.pool.get('project.scrum.sprint') |
2543 | + sprint_obj.write(cr, uid, sprint.id, |
2544 | + { |
2545 | + 'task_from_features': True, |
2546 | + 'desirable_task_ids': [[6,0,desirables]], |
2547 | + }) |
2548 | + |
2549 | + return { |
2550 | + 'name': 'Sprints', |
2551 | + 'view_type': 'form', |
2552 | + 'view_mode': 'form', |
2553 | + 'res_model': 'project.scrum.sprint', |
2554 | + 'context': context, |
2555 | + 'res_id': sprint.id, |
2556 | + 'type': 'ir.actions.act_window', |
2557 | + } |
2558 | + |
2559 | + _columns = { |
2560 | + 'sprint_id': fields.many2one('project.scrum.sprint', string='Sprint', |
2561 | + required = True, domain="[('state','=','open')]"), |
2562 | + } |
2563 | + |
2564 | + _defaults = { |
2565 | + 'sprint_id': lambda slf, cr, uid, ctx: ctx.get('sprint_id', False), |
2566 | + } |
2567 | \ No newline at end of file |
2568 | |
2569 | === added file 'project_openerp/wizard/wizard_view.xml' |
2570 | --- project_openerp/wizard/wizard_view.xml 1970-01-01 00:00:00 +0000 |
2571 | +++ project_openerp/wizard/wizard_view.xml 2014-03-27 17:09:06 +0000 |
2572 | @@ -0,0 +1,106 @@ |
2573 | +<?xml version="1.0" encoding="UTF-8"?> |
2574 | + |
2575 | +<openerp> |
2576 | + <data> |
2577 | + <!-- project.oerp.feature.import.wizard --> |
2578 | + <!-- form --> |
2579 | + <record id="view_feature_import_wizard_form" model="ir.ui.view"> |
2580 | + <field name="name">view.feature.import.wizard.form</field> |
2581 | + <field name="model">project.oerp.feature.import.wizard</field> |
2582 | + <field name="arch" type="xml"> |
2583 | + <form string="Feature Import Wizard" version="7.0"> |
2584 | + <header> |
2585 | + <field name="state" widget="statusbar" /> |
2586 | + </header> |
2587 | + <group states="new"> |
2588 | + <field name="project_id"/> |
2589 | + <field name="product_backlog_id"/> |
2590 | + <field name="file"/> |
2591 | + </group> |
2592 | + <footer> |
2593 | + <button string="Import" type="object" |
2594 | + name="import_file" class="oe_highlight" |
2595 | + confirm="Are you sure you want to import this file?" |
2596 | + states="new"/> or |
2597 | + <button string="Cancel" class="oe_link" |
2598 | + special="cancel" states="new"/> |
2599 | + </footer> |
2600 | + </form> |
2601 | + </field> |
2602 | + </record> |
2603 | + |
2604 | + <!-- project.oerp.task.create.wizard --> |
2605 | + <!-- form --> |
2606 | + <record id="view_task_create_wizard_form" model="ir.ui.view"> |
2607 | + <field name="name">view.task.create.wizard.form</field> |
2608 | + <field name="model">project.oerp.task.create.wizard</field> |
2609 | + <field name="arch" type="xml"> |
2610 | + <form string="Task Create Wizard" version="7.0"> |
2611 | + <group> |
2612 | + <field name="sprint_id"/> |
2613 | + </group> |
2614 | + <footer> |
2615 | + <button string="Create" type="object" |
2616 | + name="create_tasks" class="oe_highlight" |
2617 | + confirm="Are you sure you want to continue?"/> or |
2618 | + <button string="Cancel" class="oe_link" |
2619 | + special="cancel"/> |
2620 | + </footer> |
2621 | + </form> |
2622 | + </field> |
2623 | + </record> |
2624 | + |
2625 | + <!-- project.oerp.sprint.close.wizard --> |
2626 | + <!-- form --> |
2627 | + <record id="view_sprint_close_wizard_form" model="ir.ui.view"> |
2628 | + <field name="name">view.sprint.close.wizard.form</field> |
2629 | + <field name="model">project.oerp.sprint.close.wizard</field> |
2630 | + <field name="arch" type="xml"> |
2631 | + <form string="Close Sprint Wizard" version="7.0"> |
2632 | + <group> |
2633 | + <group> |
2634 | + <field name="closing_sprint_id"/> |
2635 | + </group> |
2636 | + <group> |
2637 | + <field name="opening_sprint_id"/> |
2638 | + </group> |
2639 | + </group> |
2640 | + <footer> |
2641 | + <button string="Close" type="object" |
2642 | + name="close_sprint" class="oe_highlight" |
2643 | + confirm="Are you sure you want to continue?"/> or |
2644 | + <button string="Cancel" class="oe_link" |
2645 | + special="cancel"/> |
2646 | + </footer> |
2647 | + </form> |
2648 | + </field> |
2649 | + </record> |
2650 | + |
2651 | + <!-- project.oerp.phase.create.wizard --> |
2652 | + <!-- form --> |
2653 | + <record id="view_phase_create_wizard_form" model="ir.ui.view"> |
2654 | + <field name="name">view.phase.create.wizard.form</field> |
2655 | + <field name="model">project.oerp.phase.create.wizard</field> |
2656 | + <field name="arch" type="xml"> |
2657 | + <form string="Phase Create Wizard" version="7.0"> |
2658 | + <group> |
2659 | + <field name="work_type_template_id"/> |
2660 | + <field name="project_id"/> |
2661 | + <field name="product_backlog_id"/> |
2662 | + <label for="id" string="Duration"/> |
2663 | + <div> |
2664 | + <field name="duration" class="oe_inline"/><field name="product_uom" nolabel="1" class="oe_inline"/> |
2665 | + </div> |
2666 | + </group> |
2667 | + <footer> |
2668 | + <button string="Create" type="object" |
2669 | + name="create_phase" class="oe_highlight" |
2670 | + confirm="Are you sure you want to continue?"/> or |
2671 | + <button string="Cancel" class="oe_link" |
2672 | + special="cancel"/> |
2673 | + </footer> |
2674 | + </form> |
2675 | + </field> |
2676 | + </record> |
2677 | + </data> |
2678 | +</openerp> |
2679 | \ No newline at end of file |
2680 | |
2681 | === added directory 'project_scrum' |
2682 | === added file 'project_scrum/__init__.py' |
2683 | --- project_scrum/__init__.py 1970-01-01 00:00:00 +0000 |
2684 | +++ project_scrum/__init__.py 2014-03-27 17:09:06 +0000 |
2685 | @@ -0,0 +1,23 @@ |
2686 | +# -*- coding: utf-8 -*- |
2687 | +############################################################################## |
2688 | +# |
2689 | +# OpenERP, Open Source Management Solution |
2690 | +# Addons modules by CLEARCORP S.A. |
2691 | +# Copyright (C) 2009-TODAY CLEARCORP S.A. (<http://clearcorp.co.cr>). |
2692 | +# |
2693 | +# This program is free software: you can redistribute it and/or modify |
2694 | +# it under the terms of the GNU Affero General Public License as |
2695 | +# published by the Free Software Foundation, either version 3 of the |
2696 | +# License, or (at your option) any later version. |
2697 | +# |
2698 | +# This program is distributed in the hope that it will be useful, |
2699 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2700 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2701 | +# GNU Affero General Public License for more details. |
2702 | +# |
2703 | +# You should have received a copy of the GNU Affero General Public License |
2704 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
2705 | +# |
2706 | +############################################################################## |
2707 | + |
2708 | +import project_scrum |
2709 | \ No newline at end of file |
2710 | |
2711 | === added file 'project_scrum/__openerp__.py' |
2712 | --- project_scrum/__openerp__.py 1970-01-01 00:00:00 +0000 |
2713 | +++ project_scrum/__openerp__.py 2014-03-27 17:09:06 +0000 |
2714 | @@ -0,0 +1,52 @@ |
2715 | +# -*- coding: utf-8 -*- |
2716 | +############################################################################## |
2717 | +# |
2718 | +# OpenERP, Open Source Management Solution |
2719 | +# Addons modules by CLEARCORP S.A. |
2720 | +# Copyright (C) 2009-TODAY CLEARCORP S.A. (<http://clearcorp.co.cr>). |
2721 | +# |
2722 | +# This program is free software: you can redistribute it and/or modify |
2723 | +# it under the terms of the GNU Affero General Public License as |
2724 | +# published by the Free Software Foundation, either version 3 of the |
2725 | +# License, or (at your option) any later version. |
2726 | +# |
2727 | +# This program is distributed in the hope that it will be useful, |
2728 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2729 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2730 | +# GNU Affero General Public License for more details. |
2731 | +# |
2732 | +# You should have received a copy of the GNU Affero General Public License |
2733 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
2734 | +# |
2735 | +############################################################################## |
2736 | + |
2737 | +{ |
2738 | + "name" : 'Project Scrum', |
2739 | + "version" : '1.0', |
2740 | + "author" : 'CLEARCORP S.A.', |
2741 | + 'complexity': 'normal', |
2742 | + "description": """ |
2743 | +""", |
2744 | + "category": 'Project Management', |
2745 | + "sequence": 3, |
2746 | + "website" : "http://clearcorp.co.cr", |
2747 | + "images" : [], |
2748 | + "depends" : [ |
2749 | + 'project', |
2750 | + ], |
2751 | + "data" : [ |
2752 | + 'data/project_scrum_data.xml', |
2753 | + 'view/project_scrum_view.xml', |
2754 | + 'view/project_scrum_menu.xml', |
2755 | + 'security/ir.model.access.csv', |
2756 | + ], |
2757 | + "css" : ['static/src/css/project_scrum.css'], |
2758 | + "init_xml" : [], |
2759 | + "demo_xml" : [], |
2760 | + "update_xml" : [], |
2761 | + "test" : [], |
2762 | + "auto_install": False, |
2763 | + "application": False, |
2764 | + "installable": True, |
2765 | + 'license': 'AGPL-3', |
2766 | +} |
2767 | \ No newline at end of file |
2768 | |
2769 | === added directory 'project_scrum/data' |
2770 | === added file 'project_scrum/data/project_scrum_data.xml' |
2771 | --- project_scrum/data/project_scrum_data.xml 1970-01-01 00:00:00 +0000 |
2772 | +++ project_scrum/data/project_scrum_data.xml 2014-03-27 17:09:06 +0000 |
2773 | @@ -0,0 +1,26 @@ |
2774 | +<?xml version="1.0" encoding="utf-8"?> |
2775 | +<openerp> |
2776 | + <data noupdate="1"> |
2777 | + |
2778 | + <record model="project.scrum.feature.type" id="data_feature_type_account"> |
2779 | + <field name="name">Account</field> |
2780 | + <field name="code">ACC</field> |
2781 | + </record> |
2782 | + |
2783 | + <record model="project.scrum.feature.type" id="data_feature_type_project"> |
2784 | + <field name="name">Project</field> |
2785 | + <field name="code">PRJ</field> |
2786 | + </record> |
2787 | + |
2788 | + <record model="project.scrum.feature.type" id="data_feature_type_hr"> |
2789 | + <field name="name">Human Resources</field> |
2790 | + <field name="code">HR</field> |
2791 | + </record> |
2792 | + |
2793 | + <record model="project.scrum.feature.type" id="data_feature_type_sales"> |
2794 | + <field name="name">Sales</field> |
2795 | + <field name="code">SAL</field> |
2796 | + </record> |
2797 | + |
2798 | + </data> |
2799 | +</openerp> |
2800 | \ No newline at end of file |
2801 | |
2802 | === added directory 'project_scrum/i18n' |
2803 | === added file 'project_scrum/i18n/es.po' |
2804 | --- project_scrum/i18n/es.po 1970-01-01 00:00:00 +0000 |
2805 | +++ project_scrum/i18n/es.po 2014-03-27 17:09:06 +0000 |
2806 | @@ -0,0 +1,829 @@ |
2807 | +# Translation of OpenERP Server. |
2808 | +# This file contains the translation of the following modules: |
2809 | +# * project_scrum |
2810 | +# |
2811 | +msgid "" |
2812 | +msgstr "" |
2813 | +"Project-Id-Version: OpenERP Server 7.0\n" |
2814 | +"Report-Msgid-Bugs-To: \n" |
2815 | +"POT-Creation-Date: 2014-03-21 21:11+0000\n" |
2816 | +"PO-Revision-Date: 2014-03-21 21:11+0000\n" |
2817 | +"Last-Translator: <>\n" |
2818 | +"Language-Team: \n" |
2819 | +"MIME-Version: 1.0\n" |
2820 | +"Content-Type: text/plain; charset=UTF-8\n" |
2821 | +"Content-Transfer-Encoding: \n" |
2822 | +"Plural-Forms: \n" |
2823 | + |
2824 | +#. module: project_scrum |
2825 | +#: model:project.scrum.feature.type,name:project_scrum.data_feature_type_hr |
2826 | +msgid "Human Resources" |
2827 | +msgstr "Recursos humanos" |
2828 | + |
2829 | +#. module: project_scrum |
2830 | +#: view:project.scrum.feature:0 |
2831 | +#: view:project.scrum.product.backlog:0 |
2832 | +#: view:project.scrum.release.backlog:0 |
2833 | +#: view:project.scrum.sprint:0 |
2834 | +msgid "Group By..." |
2835 | +msgstr "Agrupar por..." |
2836 | + |
2837 | +#. module: project_scrum |
2838 | +#: view:project.scrum.feature:0 |
2839 | +msgid "My Features" |
2840 | +msgstr "Mis caracterÃsticas" |
2841 | + |
2842 | +#. module: project_scrum |
2843 | +#: view:project.scrum.feature:0 |
2844 | +msgid "Very High" |
2845 | +msgstr "Muy alta" |
2846 | + |
2847 | +#. module: project_scrum |
2848 | +#: view:project.task:0 |
2849 | +#: field:project.task,next_task_ids:0 |
2850 | +msgid "Next Tasks" |
2851 | +msgstr "Tareas siguientes" |
2852 | + |
2853 | +#. module: project_scrum |
2854 | +#: view:project.scrum.release.backlog:0 |
2855 | +msgid "Are you sure you want to cancel this release backlog?" |
2856 | +msgstr "¿Estás seguro que quieres cancelar esta pila de liberación?" |
2857 | + |
2858 | +#. module: project_scrum |
2859 | +#: constraint:project.scrum.sprint:0 |
2860 | +msgid "Deadline must be greater than Start Date" |
2861 | +msgstr "La fecha lÃmite debe ser mayor que la fecha inicial" |
2862 | + |
2863 | +#. module: project_scrum |
2864 | +#: field:project.scrum.feature,progress:0 |
2865 | +#: field:project.scrum.product.backlog,progress:0 |
2866 | +#: field:project.scrum.release.backlog,progress:0 |
2867 | +#: field:project.scrum.sprint,progress:0 |
2868 | +msgid "Progress (%)" |
2869 | +msgstr "Progreso (%)" |
2870 | + |
2871 | +#. module: project_scrum |
2872 | +#: field:project.scrum.feature,expected_hours:0 |
2873 | +#: field:project.scrum.product.backlog,expected_hours:0 |
2874 | +#: field:project.scrum.release.backlog,expected_hours:0 |
2875 | +#: field:project.scrum.sprint,expected_hours:0 |
2876 | +msgid "Initially Planned Hour(s)" |
2877 | +msgstr "Horas planeadas inicialmente" |
2878 | + |
2879 | +#. module: project_scrum |
2880 | +#: view:project.task:0 |
2881 | +#: field:project.task,previous_task_ids:0 |
2882 | +msgid "Previous Tasks" |
2883 | +msgstr "Tareas previas" |
2884 | + |
2885 | +#. module: project_scrum |
2886 | +#: view:project.scrum.feature:0 |
2887 | +#: selection:project.scrum.feature,state:0 |
2888 | +msgid "Approved" |
2889 | +msgstr "Aprobado" |
2890 | + |
2891 | +#. module: project_scrum |
2892 | +#: selection:project.scrum.feature,priority:0 |
2893 | +msgid "2 - High" |
2894 | +msgstr "2 - Alta" |
2895 | + |
2896 | +#. module: project_scrum |
2897 | +#: model:project.scrum.feature.type,name:project_scrum.data_feature_type_account |
2898 | +msgid "Account" |
2899 | +msgstr "Contabilidad" |
2900 | + |
2901 | +#. module: project_scrum |
2902 | +#: model:ir.model,name:project_scrum.model_project_task |
2903 | +msgid "Task" |
2904 | +msgstr "Tarea" |
2905 | + |
2906 | +#. module: project_scrum |
2907 | +#: model:ir.actions.act_window,name:project_scrum.action_product_backlog |
2908 | +#: view:project.scrum.feature:0 |
2909 | +#: field:project.scrum.feature,product_backlog_id:0 |
2910 | +#: view:project.scrum.product.backlog:0 |
2911 | +#: view:project.scrum.release.backlog:0 |
2912 | +#: field:project.scrum.release.backlog,product_backlog_id:0 |
2913 | +#: view:project.scrum.sprint:0 |
2914 | +#: field:project.scrum.sprint,product_backlog_id:0 |
2915 | +#: field:project.task,product_backlog_id:0 |
2916 | +msgid "Product Backlog" |
2917 | +msgstr "Pila de producto" |
2918 | + |
2919 | +#. module: project_scrum |
2920 | +#: model:ir.model,name:project_scrum.model_project_project |
2921 | +#: view:project.scrum.feature:0 |
2922 | +#: field:project.scrum.feature,project_id:0 |
2923 | +#: model:project.scrum.feature.type,name:project_scrum.data_feature_type_project |
2924 | +#: view:project.scrum.product.backlog:0 |
2925 | +#: field:project.scrum.product.backlog,project_id:0 |
2926 | +#: view:project.scrum.release.backlog:0 |
2927 | +#: field:project.scrum.release.backlog,project_id:0 |
2928 | +#: field:project.scrum.release.backlog,user_id:0 |
2929 | +#: view:project.scrum.sprint:0 |
2930 | +#: field:project.scrum.sprint,project_id:0 |
2931 | +msgid "Project" |
2932 | +msgstr "Proyecto" |
2933 | + |
2934 | +#. module: project_scrum |
2935 | +#: selection:project.scrum.feature,priority:0 |
2936 | +msgid "1 - Very High" |
2937 | +msgstr "1 - Muy alta" |
2938 | + |
2939 | +#. module: project_scrum |
2940 | +#: view:project.scrum.sprint:0 |
2941 | +msgid "Are you sure you want to create a task for each feature related to this sprint?" |
2942 | +msgstr "¿Estás seguro que deseas crear una tarea por cada caracterÃstica relacionada a este sprint?" |
2943 | + |
2944 | +#. module: project_scrum |
2945 | +#: view:project.scrum.feature:0 |
2946 | +#: selection:project.scrum.feature,state:0 |
2947 | +#: view:project.scrum.product.backlog:0 |
2948 | +#: selection:project.scrum.product.backlog,state:0 |
2949 | +#: view:project.scrum.release.backlog:0 |
2950 | +#: selection:project.scrum.release.backlog,state:0 |
2951 | +#: view:project.scrum.sprint:0 |
2952 | +msgid "Cancelled" |
2953 | +msgstr "Cancelado" |
2954 | + |
2955 | +#. module: project_scrum |
2956 | +#: field:project.scrum.feature,color:0 |
2957 | +#: field:project.scrum.product.backlog,color:0 |
2958 | +#: field:project.scrum.release.backlog,color:0 |
2959 | +#: field:project.scrum.sprint,color:0 |
2960 | +msgid "Color Index" |
2961 | +msgstr "Indice de Color" |
2962 | + |
2963 | +#. module: project_scrum |
2964 | +#: constraint:project.task:0 |
2965 | +msgid "The selected Feature must belong to the selected Sprint." |
2966 | +msgstr "La caracterÃstica seleccionada debe perteneces al sprint seleccionado." |
2967 | + |
2968 | +#. module: project_scrum |
2969 | +#: constraint:project.task:0 |
2970 | +msgid "The selected Sprint must belong to the selected Release Backlog." |
2971 | +msgstr "El sprint seleccionado debe pertenecer a la pila de liberación seleccionada." |
2972 | + |
2973 | +#. module: project_scrum |
2974 | +#: model:ir.ui.menu,name:project_scrum.menu_release_backlog |
2975 | +#: view:project.scrum.product.backlog:0 |
2976 | +#: field:project.scrum.product.backlog,release_backlog_ids:0 |
2977 | +msgid "Release Backlogs" |
2978 | +msgstr "Pilas de liberación" |
2979 | + |
2980 | +#. module: project_scrum |
2981 | +#: field:project.scrum.feature,deadline:0 |
2982 | +#: field:project.scrum.product.backlog,deadline:0 |
2983 | +#: field:project.scrum.release.backlog,deadline:0 |
2984 | +#: field:project.scrum.sprint,deadline:0 |
2985 | +msgid "Deadline" |
2986 | +msgstr "Fecha lÃmite" |
2987 | + |
2988 | +#. module: project_scrum |
2989 | +#: view:project.scrum.sprint:0 |
2990 | +msgid "My Sprints" |
2991 | +msgstr "Mis sprints" |
2992 | + |
2993 | +#. module: project_scrum |
2994 | +#: help:project.scrum.release.backlog,expected_hours:0 |
2995 | +msgid "Total planned hours calculated from sprints." |
2996 | +msgstr "Total de horas planeadas calculadas de los sprints." |
2997 | + |
2998 | +#. module: project_scrum |
2999 | +#: view:project.scrum.feature:0 |
3000 | +#: view:project.scrum.product.backlog:0 |
3001 | +#: view:project.scrum.release.backlog:0 |
3002 | +#: view:project.scrum.sprint:0 |
3003 | +msgid "Edit..." |
3004 | +msgstr "Editar..." |
3005 | + |
3006 | +#. module: project_scrum |
3007 | +#: help:project.scrum.feature,effective_hours:0 |
3008 | +msgid "Total effective hours from tasks related to this feature." |
3009 | +msgstr "Total de horas effectivas de las tareas relacionadas a esta caracterÃstica." |
3010 | + |
3011 | +#. module: project_scrum |
3012 | +#: model:ir.actions.act_window,name:project_scrum.action_sprint |
3013 | +#: model:ir.ui.menu,name:project_scrum.menu_sprint |
3014 | +#: view:project.scrum.feature:0 |
3015 | +#: field:project.scrum.feature,sprint_ids:0 |
3016 | +#: view:project.scrum.release.backlog:0 |
3017 | +#: field:project.scrum.release.backlog,sprint_ids:0 |
3018 | +msgid "Sprints" |
3019 | +msgstr "Sprints" |
3020 | + |
3021 | +#. module: project_scrum |
3022 | +#: help:project.scrum.feature,sprint_ids:0 |
3023 | +msgid "Sprints in which the feature has been used." |
3024 | +msgstr "Sprints en los que la caracterÃstica ha sido usada." |
3025 | + |
3026 | +#. module: project_scrum |
3027 | +#: field:project.scrum.feature,date_end:0 |
3028 | +#: field:project.scrum.product.backlog,date_end:0 |
3029 | +#: field:project.scrum.release.backlog,date_end:0 |
3030 | +#: field:project.scrum.sprint,date_end:0 |
3031 | +msgid "End Date" |
3032 | +msgstr "Fecha final" |
3033 | + |
3034 | +#. module: project_scrum |
3035 | +#: model:ir.actions.act_window,help:project_scrum.action_release_backlog |
3036 | +msgid "<p class=\"oe_view_nocontent_create\">Create new Release Backlog</p>\n" |
3037 | +" " |
3038 | +msgstr "<p class=\"oe_view_nocontent_create\">Crear nueva pila de liberación</p>\n" |
3039 | +" " |
3040 | + |
3041 | +#. module: project_scrum |
3042 | +#: view:project.scrum.feature:0 |
3043 | +#: field:project.scrum.feature,priority:0 |
3044 | +msgid "Priority" |
3045 | +msgstr "Prioridad" |
3046 | + |
3047 | +#. module: project_scrum |
3048 | +#: field:project.scrum.product.backlog,state:0 |
3049 | +#: field:project.scrum.release.backlog,state:0 |
3050 | +#: field:project.scrum.sprint,state:0 |
3051 | +msgid "State" |
3052 | +msgstr "Estado" |
3053 | + |
3054 | +#. module: project_scrum |
3055 | +#: constraint:project.task:0 |
3056 | +msgid "The selected Product Backlog must belong to the selected Project." |
3057 | +msgstr "La pila de producto seleccionada debe pertenecer al proyecto seleccionado." |
3058 | + |
3059 | +#. module: project_scrum |
3060 | +#: view:project.scrum.feature:0 |
3061 | +#: selection:project.scrum.feature,state:0 |
3062 | +#: view:project.scrum.product.backlog:0 |
3063 | +#: selection:project.scrum.product.backlog,state:0 |
3064 | +#: view:project.scrum.release.backlog:0 |
3065 | +#: selection:project.scrum.release.backlog,state:0 |
3066 | +#: view:project.scrum.sprint:0 |
3067 | +msgid "New" |
3068 | +msgstr "Nuevo" |
3069 | + |
3070 | +#. module: project_scrum |
3071 | +#: view:project.scrum.feature:0 |
3072 | +#: field:project.scrum.feature,type_id:0 |
3073 | +msgid "Type" |
3074 | +msgstr "Tipo" |
3075 | + |
3076 | +#. module: project_scrum |
3077 | +#: view:project.scrum.feature:0 |
3078 | +#: field:project.scrum.feature,user_id:0 |
3079 | +#: view:project.scrum.product.backlog:0 |
3080 | +#: field:project.scrum.product.backlog,user_id:0 |
3081 | +#: view:project.scrum.release.backlog:0 |
3082 | +#: view:project.scrum.sprint:0 |
3083 | +#: field:project.scrum.sprint,user_id:0 |
3084 | +msgid "Scrum Master" |
3085 | +msgstr "Scrum Master" |
3086 | + |
3087 | +#. module: project_scrum |
3088 | +#: model:ir.ui.menu,name:project_scrum.menu_product_backlog |
3089 | +msgid "Product Backlogs" |
3090 | +msgstr "Pilas de producto" |
3091 | + |
3092 | +#. module: project_scrum |
3093 | +#: selection:project.scrum.feature,priority:0 |
3094 | +msgid "5 - Very Low" |
3095 | +msgstr "5 - Muy baja" |
3096 | + |
3097 | +#. module: project_scrum |
3098 | +#: field:project.project,is_scrum:0 |
3099 | +#: field:project.task,is_scrum:0 |
3100 | +msgid "Scrum" |
3101 | +msgstr "Scrum" |
3102 | + |
3103 | +#. module: project_scrum |
3104 | +#: help:project.scrum.product.backlog,expected_hours:0 |
3105 | +msgid "Total planned hours calculated from features." |
3106 | +msgstr "Total de horas planeadas calculadas de las caracterÃsticas." |
3107 | + |
3108 | +#. module: project_scrum |
3109 | +#: view:project.scrum.product.backlog:0 |
3110 | +#: selection:project.scrum.product.backlog,state:0 |
3111 | +#: view:project.scrum.release.backlog:0 |
3112 | +#: selection:project.scrum.release.backlog,state:0 |
3113 | +#: view:project.scrum.sprint:0 |
3114 | +msgid "Pending" |
3115 | +msgstr "Pendiente" |
3116 | + |
3117 | +#. module: project_scrum |
3118 | +#: field:project.scrum.product.backlog,name:0 |
3119 | +msgid "Product Name" |
3120 | +msgstr "Nombre del producto" |
3121 | + |
3122 | +#. module: project_scrum |
3123 | +#: view:project.scrum.feature:0 |
3124 | +#: selection:project.scrum.feature,state:0 |
3125 | +#: view:project.scrum.product.backlog:0 |
3126 | +#: selection:project.scrum.product.backlog,state:0 |
3127 | +#: view:project.scrum.release.backlog:0 |
3128 | +#: selection:project.scrum.release.backlog,state:0 |
3129 | +#: view:project.scrum.sprint:0 |
3130 | +msgid "Done" |
3131 | +msgstr "Realizado" |
3132 | + |
3133 | +#. module: project_scrum |
3134 | +#: view:project.scrum.feature:0 |
3135 | +#: view:project.scrum.product.backlog:0 |
3136 | +#: field:project.scrum.product.backlog,stage_id:0 |
3137 | +#: view:project.scrum.release.backlog:0 |
3138 | +#: field:project.scrum.release.backlog,stage_id:0 |
3139 | +#: view:project.scrum.sprint:0 |
3140 | +#: field:project.scrum.sprint,stage_id:0 |
3141 | +msgid "Stage" |
3142 | +msgstr "Etapa" |
3143 | + |
3144 | +#. module: project_scrum |
3145 | +#: selection:project.scrum.feature,priority:0 |
3146 | +msgid "3 - Medium" |
3147 | +msgstr "3 - Media" |
3148 | + |
3149 | +#. module: project_scrum |
3150 | +#: help:project.scrum.product.backlog,effective_hours:0 |
3151 | +msgid "Total spent hours calculated from features." |
3152 | +msgstr "Total de horas consumidas calculadas de las caracterÃsticas." |
3153 | + |
3154 | +#. module: project_scrum |
3155 | +#: code:addons/project_scrum/project_scrum.py:1105 |
3156 | +#, python-format |
3157 | +msgid "You can not cancel a product backlog if all release backlogs related to it are not cancelled or done" |
3158 | +msgstr "No puedes cancelar una pila de producto si todos las pilas de liberación relacionadas no se encuentran canceladas o hechas" |
3159 | + |
3160 | +#. module: project_scrum |
3161 | +#: help:project.scrum.release.backlog,deadline:0 |
3162 | +msgid "Calculated Deadline, will be empty if any sprint has no deadline." |
3163 | +msgstr "Fecha lÃmite calculada, se encontrara vacÃa si algún sprint no tiene fecha lÃmite." |
3164 | + |
3165 | +#. module: project_scrum |
3166 | +#: view:project.scrum.feature:0 |
3167 | +msgid "Feature Summary" |
3168 | +msgstr "Resumen de caracterÃstica" |
3169 | + |
3170 | +#. module: project_scrum |
3171 | +#: model:ir.actions.act_window,help:project_scrum.action_product_backlog |
3172 | +msgid "<p class=\"oe_view_nocontent_create\">Create new Product Backlog</p>\n" |
3173 | +" " |
3174 | +msgstr "<p class=\"oe_view_nocontent_create\">Crear nueva pila de producto</p>\n" |
3175 | +" " |
3176 | + |
3177 | +#. module: project_scrum |
3178 | +#: help:project.scrum.feature,partner_id:0 |
3179 | +msgid "Contact or person responsible of keeping the business perspective in scrum projects." |
3180 | +msgstr "Contacto o persona responsable de mantener la perspectiva del negocio en proyectos scrum." |
3181 | + |
3182 | +#. module: project_scrum |
3183 | +#: view:project.scrum.feature:0 |
3184 | +#: view:project.scrum.product.backlog:0 |
3185 | +#: view:project.scrum.release.backlog:0 |
3186 | +#: view:project.scrum.sprint:0 |
3187 | +msgid "Delete" |
3188 | +msgstr "Suprimir" |
3189 | + |
3190 | +#. module: project_scrum |
3191 | +#: field:project.scrum.feature,task_ids:0 |
3192 | +#: view:project.scrum.sprint:0 |
3193 | +#: field:project.scrum.sprint,task_ids:0 |
3194 | +msgid "Tasks" |
3195 | +msgstr "Tareas" |
3196 | + |
3197 | +#. module: project_scrum |
3198 | +#: sql_constraint:project.scrum.feature:0 |
3199 | +msgid "Code must be unique for every feature related to a Product Backlog" |
3200 | +msgstr "El código debe ser único para cada caracterÃstica relacionada a la pila de producto" |
3201 | + |
3202 | +#. module: project_scrum |
3203 | +#: view:project.scrum.sprint:0 |
3204 | +msgid "Are you sure you want to mark all features related to this sprint as done?" |
3205 | +msgstr "¿Estás seguro que deseas marcar todas las caracterÃsticas relacionadas a este sprint como realizadas?" |
3206 | + |
3207 | +#. module: project_scrum |
3208 | +#: constraint:project.scrum.feature:0 |
3209 | +#: constraint:project.scrum.sprint:0 |
3210 | +msgid "The selected Release Backlog must belong to the selected Product Backlog" |
3211 | +msgstr "La pila de liberación seleccionada debe pertenecer a la pila de producto seleccionada" |
3212 | + |
3213 | +#. module: project_scrum |
3214 | +#: constraint:project.task:0 |
3215 | +msgid "The selected Release Backlog must belong to the selected Product Backlog." |
3216 | +msgstr "La pila de liberación seleccionada debe pertenecer a la pila de producto seleccionada." |
3217 | + |
3218 | +#. module: project_scrum |
3219 | +#: view:project.scrum.sprint:0 |
3220 | +msgid "Are you sure you want to set as done this sprint?" |
3221 | +msgstr "¿Estás seguro que deseas marcar como realizado este sprint?" |
3222 | + |
3223 | +#. module: project_scrum |
3224 | +#: field:project.scrum.feature,date_start:0 |
3225 | +#: field:project.scrum.release.backlog,date_start:0 |
3226 | +#: field:project.scrum.sprint,date_start:0 |
3227 | +msgid "Start Date" |
3228 | +msgstr "Fecha inicial" |
3229 | + |
3230 | +#. module: project_scrum |
3231 | +#: help:project.scrum.release.backlog,effective_hours:0 |
3232 | +msgid "Total spent hours calculated from sprints." |
3233 | +msgstr "Total de horas consumidas calculadas de los sprints." |
3234 | + |
3235 | +#. module: project_scrum |
3236 | +#: view:project.scrum.product.backlog:0 |
3237 | +#: field:project.scrum.product.backlog,member_ids:0 |
3238 | +#: view:project.scrum.sprint:0 |
3239 | +#: field:project.scrum.sprint,member_ids:0 |
3240 | +msgid "Team Members" |
3241 | +msgstr "Miembros del Equipo" |
3242 | + |
3243 | +#. module: project_scrum |
3244 | +#: help:project.scrum.feature,expected_hours:0 |
3245 | +msgid "Total planned hours for the development of this feature.\n" |
3246 | +"Recommended values are:\n" |
3247 | +" 1h, 2h, 4h, or 8h" |
3248 | +msgstr "Total de horas planneadas para el desarrollo de esta caracterÃstica.\n" |
3249 | +"Los valores recomendados son:\n" |
3250 | +" 1h, 2h, 4h, o 8h" |
3251 | + |
3252 | +#. module: project_scrum |
3253 | +#: model:ir.actions.act_window,help:project_scrum.action_sprint |
3254 | +msgid "<p class=\"oe_view_nocontent_create\">Create new Sprint</p>\n" |
3255 | +" " |
3256 | +msgstr "<p class=\"oe_view_nocontent_create\">Crear un nuevo sprint</p>\n" |
3257 | +" " |
3258 | + |
3259 | +#. module: project_scrum |
3260 | +#: view:project.scrum.feature:0 |
3261 | +msgid "Code..." |
3262 | +msgstr "Código" |
3263 | + |
3264 | +#. module: project_scrum |
3265 | +#: view:project.scrum.feature:0 |
3266 | +msgid "Low" |
3267 | +msgstr "Baja" |
3268 | + |
3269 | +#. module: project_scrum |
3270 | +#: view:project.scrum.product.backlog:0 |
3271 | +#: view:project.scrum.release.backlog:0 |
3272 | +#: view:project.scrum.sprint:0 |
3273 | +msgid "Closed" |
3274 | +msgstr "Cerrado" |
3275 | + |
3276 | +#. module: project_scrum |
3277 | +#: code:addons/project_scrum/project_scrum.py:442 |
3278 | +#, python-format |
3279 | +msgid "All tasks were created before." |
3280 | +msgstr "Todas las tareas fueron creadas anteriormente." |
3281 | + |
3282 | +#. module: project_scrum |
3283 | +#: view:project.scrum.product.backlog:0 |
3284 | +msgid "Are you sure you want to cancel this product backlog?" |
3285 | +msgstr "¿Estás seguro que deseas cancelar esta pila de producto?" |
3286 | + |
3287 | +#. module: project_scrum |
3288 | +#: field:project.scrum.feature,state:0 |
3289 | +msgid "Status" |
3290 | +msgstr "Estado" |
3291 | + |
3292 | +#. module: project_scrum |
3293 | +#: view:project.scrum.feature:0 |
3294 | +#: view:project.scrum.product.backlog:0 |
3295 | +#: view:project.scrum.release.backlog:0 |
3296 | +#: view:project.scrum.sprint:0 |
3297 | +msgid "Ã" |
3298 | +msgstr "Ã" |
3299 | + |
3300 | +#. module: project_scrum |
3301 | +#: field:project.scrum.sprint,task_from_features:0 |
3302 | +msgid "Tasks from features" |
3303 | +msgstr "Tareas de caracterÃsticas" |
3304 | + |
3305 | +#. module: project_scrum |
3306 | +#: field:project.scrum.feature,partner_id:0 |
3307 | +msgid "Product Owner" |
3308 | +msgstr "Propietario del producto" |
3309 | + |
3310 | +#. module: project_scrum |
3311 | +#: view:project.scrum.sprint:0 |
3312 | +msgid "Are you sure you want to cancel this sprint?" |
3313 | +msgstr "¿Estás seguro que deseas cancelar este sprint?" |
3314 | + |
3315 | +#. module: project_scrum |
3316 | +#: model:ir.actions.act_window,help:project_scrum.action_feature_type |
3317 | +msgid "<p class=\"oe_view_nocontent_create\">Create new Feature Type</p>\n" |
3318 | +" " |
3319 | +msgstr "<p class=\"oe_view_nocontent_create\">Crear nuevo tipo de caracterÃstica</p>\n" |
3320 | +" " |
3321 | + |
3322 | +#. module: project_scrum |
3323 | +#: code:addons/project_scrum/project_scrum.py:891 |
3324 | +#: code:addons/project_scrum/project_scrum.py:1098 |
3325 | +#, python-format |
3326 | +msgid "There is no cancelled state configured for the project %s" |
3327 | +msgstr "No hay un estado cancelado configurado para el proyecto %s" |
3328 | + |
3329 | +#. module: project_scrum |
3330 | +#: code:addons/project_scrum/project_scrum.py:1088 |
3331 | +#, python-format |
3332 | +msgid "You can not set as done a product backlog if all release backlogs related to it are not cancelled or done" |
3333 | +msgstr "No puedes marcar como realizada una pila de producto si todas las pilas de liberación relacionadas no se encuentran canceladas o realizadas" |
3334 | + |
3335 | +#. module: project_scrum |
3336 | +#: code:addons/project_scrum/project_scrum.py:430 |
3337 | +#: code:addons/project_scrum/project_scrum.py:927 |
3338 | +#: code:addons/project_scrum/project_scrum.py:1134 |
3339 | +#, python-format |
3340 | +msgid "There is no draft state configured." |
3341 | +msgstr "No hay un estado borrador configurado." |
3342 | + |
3343 | +#. module: project_scrum |
3344 | +#: field:project.scrum.feature,effective_hours:0 |
3345 | +#: field:project.scrum.product.backlog,effective_hours:0 |
3346 | +#: field:project.scrum.release.backlog,effective_hours:0 |
3347 | +#: field:project.scrum.sprint,effective_hours:0 |
3348 | +msgid "Spent Hour(s)" |
3349 | +msgstr "Horas consumidas" |
3350 | + |
3351 | +#. module: project_scrum |
3352 | +#: field:project.scrum.feature,name:0 |
3353 | +msgid "Feature Name" |
3354 | +msgstr "Nombre de la caracterÃstica" |
3355 | + |
3356 | +#. module: project_scrum |
3357 | +#: view:project.scrum.feature.type:0 |
3358 | +#: field:project.task,feature_type_id:0 |
3359 | +msgid "Feature Type" |
3360 | +msgstr "Tipo de caracterÃstica" |
3361 | + |
3362 | +#. module: project_scrum |
3363 | +#: help:project.scrum.release.backlog,progress:0 |
3364 | +msgid "Total progress percentage calculated from sprints" |
3365 | +msgstr "Porcentaje de progreso total calculado de los sprints" |
3366 | + |
3367 | +#. module: project_scrum |
3368 | +#: code:addons/project_scrum/project_scrum.py:430 |
3369 | +#: code:addons/project_scrum/project_scrum.py:442 |
3370 | +#: code:addons/project_scrum/project_scrum.py:476 |
3371 | +#: code:addons/project_scrum/project_scrum.py:492 |
3372 | +#: code:addons/project_scrum/project_scrum.py:874 |
3373 | +#: code:addons/project_scrum/project_scrum.py:881 |
3374 | +#: code:addons/project_scrum/project_scrum.py:891 |
3375 | +#: code:addons/project_scrum/project_scrum.py:898 |
3376 | +#: code:addons/project_scrum/project_scrum.py:927 |
3377 | +#: code:addons/project_scrum/project_scrum.py:1081 |
3378 | +#: code:addons/project_scrum/project_scrum.py:1088 |
3379 | +#: code:addons/project_scrum/project_scrum.py:1098 |
3380 | +#: code:addons/project_scrum/project_scrum.py:1105 |
3381 | +#: code:addons/project_scrum/project_scrum.py:1134 |
3382 | +#, python-format |
3383 | +msgid "Error" |
3384 | +msgstr "Error" |
3385 | + |
3386 | +#. module: project_scrum |
3387 | +#: field:project.scrum.feature,code:0 |
3388 | +#: field:project.scrum.feature.type,code:0 |
3389 | +msgid "Code" |
3390 | +msgstr "Código" |
3391 | + |
3392 | +#. module: project_scrum |
3393 | +#: model:ir.actions.act_window,name:project_scrum.action_feature |
3394 | +#: model:ir.ui.menu,name:project_scrum.menu_feature |
3395 | +#: view:project.scrum.product.backlog:0 |
3396 | +#: field:project.scrum.product.backlog,feature_ids:0 |
3397 | +#: view:project.scrum.release.backlog:0 |
3398 | +#: field:project.scrum.release.backlog,feature_ids:0 |
3399 | +#: view:project.scrum.sprint:0 |
3400 | +#: field:project.scrum.sprint,feature_ids:0 |
3401 | +msgid "Features" |
3402 | +msgstr "CaracterÃsticas" |
3403 | + |
3404 | +#. module: project_scrum |
3405 | +#: model:project.scrum.feature.type,name:project_scrum.data_feature_type_sales |
3406 | +msgid "Sales" |
3407 | +msgstr "Ventas" |
3408 | + |
3409 | +#. module: project_scrum |
3410 | +#: help:project.scrum.release.backlog,date_start:0 |
3411 | +msgid "Calculated Start Date, will be empty if any sprint has no start date." |
3412 | +msgstr "Fecha inicial calculadada, se encontrara vacÃa si algún sprint no posee fecha inicial. " |
3413 | + |
3414 | +#. module: project_scrum |
3415 | +#: help:project.scrum.product.backlog,progress:0 |
3416 | +msgid "Total progress percentage calculated from features" |
3417 | +msgstr "Porcentaje de progresos total calculado de las caracterÃsticas" |
3418 | + |
3419 | +#. module: project_scrum |
3420 | +#: code:addons/project_scrum/project_scrum.py:477 |
3421 | +#: code:addons/project_scrum/project_scrum.py:493 |
3422 | +#, python-format |
3423 | +msgid "All tasks must be done or cancelled in order to cancel this sprint." |
3424 | +msgstr "Todas las tareas deben ser realizadas o canceladas para cancelar este sprint." |
3425 | + |
3426 | +#. module: project_scrum |
3427 | +#: view:project.scrum.feature:0 |
3428 | +#: view:project.scrum.product.backlog:0 |
3429 | +#: view:project.scrum.release.backlog:0 |
3430 | +#: view:project.scrum.sprint:0 |
3431 | +msgid "Cancel" |
3432 | +msgstr "Cancelar" |
3433 | + |
3434 | +#. module: project_scrum |
3435 | +#: view:project.scrum.feature:0 |
3436 | +msgid "Open" |
3437 | +msgstr "Abrir" |
3438 | + |
3439 | +#. module: project_scrum |
3440 | +#: field:project.scrum.feature.type,name:0 |
3441 | +msgid "Type Name" |
3442 | +msgstr "Nombre de tipo" |
3443 | + |
3444 | +#. module: project_scrum |
3445 | +#: view:project.scrum.feature:0 |
3446 | +#: selection:project.scrum.feature,state:0 |
3447 | +#: view:project.scrum.product.backlog:0 |
3448 | +#: selection:project.scrum.product.backlog,state:0 |
3449 | +#: view:project.scrum.release.backlog:0 |
3450 | +#: selection:project.scrum.release.backlog,state:0 |
3451 | +#: view:project.scrum.sprint:0 |
3452 | +msgid "In Progress" |
3453 | +msgstr "En progreso" |
3454 | + |
3455 | +#. module: project_scrum |
3456 | +#: view:project.scrum.feature:0 |
3457 | +#: view:project.scrum.product.backlog:0 |
3458 | +#: view:project.scrum.release.backlog:0 |
3459 | +#: view:project.scrum.sprint:0 |
3460 | +msgid "Remaining Hours" |
3461 | +msgstr "Horas restantes" |
3462 | + |
3463 | +#. module: project_scrum |
3464 | +#: help:project.scrum.sprint,feature_ids:0 |
3465 | +msgid "Features to be developed in this sprint" |
3466 | +msgstr "CaracterÃsticas para ser desarrolladas en este sprint" |
3467 | + |
3468 | +#. module: project_scrum |
3469 | +#: model:ir.actions.act_window,name:project_scrum.action_release_backlog |
3470 | +#: view:project.scrum.feature:0 |
3471 | +#: field:project.scrum.feature,release_backlog_id:0 |
3472 | +#: view:project.scrum.release.backlog:0 |
3473 | +#: view:project.scrum.sprint:0 |
3474 | +#: field:project.scrum.sprint,release_backlog_id:0 |
3475 | +#: field:project.task,release_backlog_id:0 |
3476 | +msgid "Release Backlog" |
3477 | +msgstr "Pila de liberación" |
3478 | + |
3479 | +#. module: project_scrum |
3480 | +#: view:project.scrum.feature:0 |
3481 | +#: field:project.task,feature_id:0 |
3482 | +msgid "Feature" |
3483 | +msgstr "CaracterÃstica" |
3484 | + |
3485 | +#. module: project_scrum |
3486 | +#: view:project.scrum.product.backlog:0 |
3487 | +#: view:project.scrum.release.backlog:0 |
3488 | +msgid "My Backlogs" |
3489 | +msgstr "Mis pilas" |
3490 | + |
3491 | +#. module: project_scrum |
3492 | +#: view:project.scrum.feature:0 |
3493 | +msgid "Very Low" |
3494 | +msgstr "Muy baja" |
3495 | + |
3496 | +#. module: project_scrum |
3497 | +#: view:project.scrum.product.backlog:0 |
3498 | +#: view:project.scrum.release.backlog:0 |
3499 | +msgid "Are you sure you want to set as done this release backlog?" |
3500 | +msgstr "¿Estás seguro que quieres marcar como realizada esta pila de liberación?" |
3501 | + |
3502 | +#. module: project_scrum |
3503 | +#: constraint:project.task:0 |
3504 | +msgid "There was an error checking the relationship between tasks. Please check if you selected an invalid task." |
3505 | +msgstr "Hubo un error al comprobar la relación entre tareas. Por favor, compruebe si ha seleccionado una tareas inválida." |
3506 | + |
3507 | +#. module: project_scrum |
3508 | +#: view:project.scrum.feature:0 |
3509 | +#: field:project.scrum.feature,description:0 |
3510 | +msgid "Description" |
3511 | +msgstr "Descripción" |
3512 | + |
3513 | +#. module: project_scrum |
3514 | +#: view:project.scrum.sprint:0 |
3515 | +msgid "Features Done" |
3516 | +msgstr "CaracterÃsticas Realizadas" |
3517 | + |
3518 | +#. module: project_scrum |
3519 | +#: field:project.scrum.release.backlog,name:0 |
3520 | +msgid "Release Name" |
3521 | +msgstr "Nombre de la liberación" |
3522 | + |
3523 | +#. module: project_scrum |
3524 | +#: sql_constraint:project.scrum.feature.type:0 |
3525 | +msgid "Code must be unique for every feature type." |
3526 | +msgstr "El código debe ser único para cada caracterÃstica." |
3527 | + |
3528 | +#. module: project_scrum |
3529 | +#: code:addons/project_scrum/project_scrum.py:874 |
3530 | +#: code:addons/project_scrum/project_scrum.py:1081 |
3531 | +#, python-format |
3532 | +msgid "There is no done state configured for the project %s" |
3533 | +msgstr "No hay un estado realizado configurado para el proyecto %s" |
3534 | + |
3535 | +#. module: project_scrum |
3536 | +#: field:project.scrum.sprint,name:0 |
3537 | +msgid "Sprint Name" |
3538 | +msgstr "Nombre del sprint" |
3539 | + |
3540 | +#. module: project_scrum |
3541 | +#: model:ir.ui.menu,name:project_scrum.menu_scrum |
3542 | +msgid "Scrum Project" |
3543 | +msgstr "Scrum Project" |
3544 | + |
3545 | +#. module: project_scrum |
3546 | +#: help:project.scrum.product.backlog,date_end:0 |
3547 | +msgid "Calculated End Date, will be empty if any feature has no end date." |
3548 | +msgstr "Fecha final calculada, se encontrará vacÃa si alguna caracterÃstica no posee fecha final." |
3549 | + |
3550 | +#. module: project_scrum |
3551 | +#: help:project.scrum.product.backlog,deadline:0 |
3552 | +msgid "Calculated Deadline, will be empty if any feature has no deadline." |
3553 | +msgstr "Fecha lÃmite calculada, se encontrará vacÃa si a lguna caracterÃstica no posee fecha lÃmite." |
3554 | + |
3555 | +#. module: project_scrum |
3556 | +#: model:ir.actions.act_window,help:project_scrum.action_feature |
3557 | +msgid "<p class=\"oe_view_nocontent_create\">Create new Feature</p>\n" |
3558 | +" " |
3559 | +msgstr "<p class=\"oe_view_nocontent_create\">Crear nueva caracterÃstica</p>\n" |
3560 | +" " |
3561 | + |
3562 | +#. module: project_scrum |
3563 | +#: help:project.scrum.release.backlog,date_end:0 |
3564 | +msgid "Calculated End Date, will be empty if any sprint has no end date." |
3565 | +msgstr "Fecha final calculada, se encontrará vacÃa si algún sprint no posee fecha final." |
3566 | + |
3567 | +#. module: project_scrum |
3568 | +#: view:project.scrum.sprint:0 |
3569 | +msgid "Tasks from Features" |
3570 | +msgstr "Tareas de caracterÃsticas" |
3571 | + |
3572 | +#. module: project_scrum |
3573 | +#: code:addons/project_scrum/project_scrum.py:898 |
3574 | +#, python-format |
3575 | +msgid "You can not cancel a release backlog if all sprints related to it are not cancelled or done" |
3576 | +msgstr "No puedes cancelar una pila de liberación si todos los sprints relacionados no se encuentran cancelados o realizados" |
3577 | + |
3578 | +#. module: project_scrum |
3579 | +#: help:project.scrum.feature,remaining_hours:0 |
3580 | +#: help:project.scrum.product.backlog,remaining_hours:0 |
3581 | +#: help:project.scrum.release.backlog,remaining_hours:0 |
3582 | +msgid "Difference between planned hours and spent hours." |
3583 | +msgstr "Diferencia entre horas planeadas y consumidas." |
3584 | + |
3585 | +#. module: project_scrum |
3586 | +#: view:project.scrum.feature:0 |
3587 | +msgid "Medium" |
3588 | +msgstr "Media" |
3589 | + |
3590 | +#. module: project_scrum |
3591 | +#: model:ir.actions.act_window,name:project_scrum.action_feature_type |
3592 | +#: model:ir.ui.menu,name:project_scrum.menu_feature_type |
3593 | +msgid "Feature Types" |
3594 | +msgstr "Tipos de caracterÃstica" |
3595 | + |
3596 | +#. module: project_scrum |
3597 | +#: view:project.task:0 |
3598 | +msgid "Sequence" |
3599 | +msgstr "Secuencia" |
3600 | + |
3601 | +#. module: project_scrum |
3602 | +#: selection:project.scrum.feature,priority:0 |
3603 | +msgid "4 - Low" |
3604 | +msgstr "4 - Baja" |
3605 | + |
3606 | +#. module: project_scrum |
3607 | +#: view:project.scrum.feature:0 |
3608 | +msgid "High" |
3609 | +msgstr "Alta" |
3610 | + |
3611 | +#. module: project_scrum |
3612 | +#: view:project.scrum.feature:0 |
3613 | +msgid "Add a Description..." |
3614 | +msgstr "Agregar una descripción..." |
3615 | + |
3616 | +#. module: project_scrum |
3617 | +#: field:project.scrum.feature,remaining_hours:0 |
3618 | +#: field:project.scrum.product.backlog,remaining_hours:0 |
3619 | +#: field:project.scrum.release.backlog,remaining_hours:0 |
3620 | +#: field:project.scrum.sprint,remaining_hours:0 |
3621 | +msgid "Remaining Hour(s)" |
3622 | +msgstr "Horas restantes" |
3623 | + |
3624 | +#. module: project_scrum |
3625 | +#: code:addons/project_scrum/project_scrum.py:881 |
3626 | +#, python-format |
3627 | +msgid "You can not set as done a release backlog if all sprints related to it are not cancelled or done" |
3628 | +msgstr "No puedes marcar como realizada una pila de liberación si todos los sprints relacionado no se encuentran cancelados o realizados" |
3629 | + |
3630 | +#. module: project_scrum |
3631 | +#: view:project.scrum.sprint:0 |
3632 | +#: field:project.task,sprint_id:0 |
3633 | +msgid "Sprint" |
3634 | +msgstr "Sprint" |
3635 | + |
3636 | |
3637 | === added file 'project_scrum/i18n/project_scrum.pot' |
3638 | --- project_scrum/i18n/project_scrum.pot 1970-01-01 00:00:00 +0000 |
3639 | +++ project_scrum/i18n/project_scrum.pot 2014-03-27 17:09:06 +0000 |
3640 | @@ -0,0 +1,820 @@ |
3641 | +# Translation of OpenERP Server. |
3642 | +# This file contains the translation of the following modules: |
3643 | +# * project_scrum |
3644 | +# |
3645 | +msgid "" |
3646 | +msgstr "" |
3647 | +"Project-Id-Version: OpenERP Server 7.0\n" |
3648 | +"Report-Msgid-Bugs-To: \n" |
3649 | +"POT-Creation-Date: 2014-03-21 21:11+0000\n" |
3650 | +"PO-Revision-Date: 2014-03-21 21:11+0000\n" |
3651 | +"Last-Translator: <>\n" |
3652 | +"Language-Team: \n" |
3653 | +"MIME-Version: 1.0\n" |
3654 | +"Content-Type: text/plain; charset=UTF-8\n" |
3655 | +"Content-Transfer-Encoding: \n" |
3656 | +"Plural-Forms: \n" |
3657 | + |
3658 | +#. module: project_scrum |
3659 | +#: model:project.scrum.feature.type,name:project_scrum.data_feature_type_hr |
3660 | +msgid "Human Resources" |
3661 | +msgstr "" |
3662 | + |
3663 | +#. module: project_scrum |
3664 | +#: view:project.scrum.feature:0 |
3665 | +#: view:project.scrum.product.backlog:0 |
3666 | +#: view:project.scrum.release.backlog:0 |
3667 | +#: view:project.scrum.sprint:0 |
3668 | +msgid "Group By..." |
3669 | +msgstr "" |
3670 | + |
3671 | +#. module: project_scrum |
3672 | +#: view:project.scrum.feature:0 |
3673 | +msgid "My Features" |
3674 | +msgstr "" |
3675 | + |
3676 | +#. module: project_scrum |
3677 | +#: view:project.scrum.feature:0 |
3678 | +msgid "Very High" |
3679 | +msgstr "" |
3680 | + |
3681 | +#. module: project_scrum |
3682 | +#: view:project.task:0 |
3683 | +#: field:project.task,next_task_ids:0 |
3684 | +msgid "Next Tasks" |
3685 | +msgstr "" |
3686 | + |
3687 | +#. module: project_scrum |
3688 | +#: view:project.scrum.release.backlog:0 |
3689 | +msgid "Are you sure you want to cancel this release backlog?" |
3690 | +msgstr "" |
3691 | + |
3692 | +#. module: project_scrum |
3693 | +#: constraint:project.scrum.sprint:0 |
3694 | +msgid "Deadline must be greater than Start Date" |
3695 | +msgstr "" |
3696 | + |
3697 | +#. module: project_scrum |
3698 | +#: field:project.scrum.feature,progress:0 |
3699 | +#: field:project.scrum.product.backlog,progress:0 |
3700 | +#: field:project.scrum.release.backlog,progress:0 |
3701 | +#: field:project.scrum.sprint,progress:0 |
3702 | +msgid "Progress (%)" |
3703 | +msgstr "" |
3704 | + |
3705 | +#. module: project_scrum |
3706 | +#: field:project.scrum.feature,expected_hours:0 |
3707 | +#: field:project.scrum.product.backlog,expected_hours:0 |
3708 | +#: field:project.scrum.release.backlog,expected_hours:0 |
3709 | +#: field:project.scrum.sprint,expected_hours:0 |
3710 | +msgid "Initially Planned Hour(s)" |
3711 | +msgstr "" |
3712 | + |
3713 | +#. module: project_scrum |
3714 | +#: view:project.task:0 |
3715 | +#: field:project.task,previous_task_ids:0 |
3716 | +msgid "Previous Tasks" |
3717 | +msgstr "" |
3718 | + |
3719 | +#. module: project_scrum |
3720 | +#: view:project.scrum.feature:0 |
3721 | +#: selection:project.scrum.feature,state:0 |
3722 | +msgid "Approved" |
3723 | +msgstr "" |
3724 | + |
3725 | +#. module: project_scrum |
3726 | +#: selection:project.scrum.feature,priority:0 |
3727 | +msgid "2 - High" |
3728 | +msgstr "" |
3729 | + |
3730 | +#. module: project_scrum |
3731 | +#: model:project.scrum.feature.type,name:project_scrum.data_feature_type_account |
3732 | +msgid "Account" |
3733 | +msgstr "" |
3734 | + |
3735 | +#. module: project_scrum |
3736 | +#: model:ir.model,name:project_scrum.model_project_task |
3737 | +msgid "Task" |
3738 | +msgstr "" |
3739 | + |
3740 | +#. module: project_scrum |
3741 | +#: model:ir.actions.act_window,name:project_scrum.action_product_backlog |
3742 | +#: view:project.scrum.feature:0 |
3743 | +#: field:project.scrum.feature,product_backlog_id:0 |
3744 | +#: view:project.scrum.product.backlog:0 |
3745 | +#: view:project.scrum.release.backlog:0 |
3746 | +#: field:project.scrum.release.backlog,product_backlog_id:0 |
3747 | +#: view:project.scrum.sprint:0 |
3748 | +#: field:project.scrum.sprint,product_backlog_id:0 |
3749 | +#: field:project.task,product_backlog_id:0 |
3750 | +msgid "Product Backlog" |
3751 | +msgstr "" |
3752 | + |
3753 | +#. module: project_scrum |
3754 | +#: model:ir.model,name:project_scrum.model_project_project |
3755 | +#: view:project.scrum.feature:0 |
3756 | +#: field:project.scrum.feature,project_id:0 |
3757 | +#: model:project.scrum.feature.type,name:project_scrum.data_feature_type_project |
3758 | +#: view:project.scrum.product.backlog:0 |
3759 | +#: field:project.scrum.product.backlog,project_id:0 |
3760 | +#: view:project.scrum.release.backlog:0 |
3761 | +#: field:project.scrum.release.backlog,project_id:0 |
3762 | +#: field:project.scrum.release.backlog,user_id:0 |
3763 | +#: view:project.scrum.sprint:0 |
3764 | +#: field:project.scrum.sprint,project_id:0 |
3765 | +msgid "Project" |
3766 | +msgstr "" |
3767 | + |
3768 | +#. module: project_scrum |
3769 | +#: selection:project.scrum.feature,priority:0 |
3770 | +msgid "1 - Very High" |
3771 | +msgstr "" |
3772 | + |
3773 | +#. module: project_scrum |
3774 | +#: view:project.scrum.sprint:0 |
3775 | +msgid "Are you sure you want to create a task for each feature related to this sprint?" |
3776 | +msgstr "" |
3777 | + |
3778 | +#. module: project_scrum |
3779 | +#: view:project.scrum.feature:0 |
3780 | +#: selection:project.scrum.feature,state:0 |
3781 | +#: view:project.scrum.product.backlog:0 |
3782 | +#: selection:project.scrum.product.backlog,state:0 |
3783 | +#: view:project.scrum.release.backlog:0 |
3784 | +#: selection:project.scrum.release.backlog,state:0 |
3785 | +#: view:project.scrum.sprint:0 |
3786 | +msgid "Cancelled" |
3787 | +msgstr "" |
3788 | + |
3789 | +#. module: project_scrum |
3790 | +#: field:project.scrum.feature,color:0 |
3791 | +#: field:project.scrum.product.backlog,color:0 |
3792 | +#: field:project.scrum.release.backlog,color:0 |
3793 | +#: field:project.scrum.sprint,color:0 |
3794 | +msgid "Color Index" |
3795 | +msgstr "" |
3796 | + |
3797 | +#. module: project_scrum |
3798 | +#: constraint:project.task:0 |
3799 | +msgid "The selected Feature must belong to the selected Sprint." |
3800 | +msgstr "" |
3801 | + |
3802 | +#. module: project_scrum |
3803 | +#: constraint:project.task:0 |
3804 | +msgid "The selected Sprint must belong to the selected Release Backlog." |
3805 | +msgstr "" |
3806 | + |
3807 | +#. module: project_scrum |
3808 | +#: model:ir.ui.menu,name:project_scrum.menu_release_backlog |
3809 | +#: view:project.scrum.product.backlog:0 |
3810 | +#: field:project.scrum.product.backlog,release_backlog_ids:0 |
3811 | +msgid "Release Backlogs" |
3812 | +msgstr "" |
3813 | + |
3814 | +#. module: project_scrum |
3815 | +#: field:project.scrum.feature,deadline:0 |
3816 | +#: field:project.scrum.product.backlog,deadline:0 |
3817 | +#: field:project.scrum.release.backlog,deadline:0 |
3818 | +#: field:project.scrum.sprint,deadline:0 |
3819 | +msgid "Deadline" |
3820 | +msgstr "" |
3821 | + |
3822 | +#. module: project_scrum |
3823 | +#: view:project.scrum.sprint:0 |
3824 | +msgid "My Sprints" |
3825 | +msgstr "" |
3826 | + |
3827 | +#. module: project_scrum |
3828 | +#: help:project.scrum.release.backlog,expected_hours:0 |
3829 | +msgid "Total planned hours calculated from sprints." |
3830 | +msgstr "" |
3831 | + |
3832 | +#. module: project_scrum |
3833 | +#: view:project.scrum.feature:0 |
3834 | +#: view:project.scrum.product.backlog:0 |
3835 | +#: view:project.scrum.release.backlog:0 |
3836 | +#: view:project.scrum.sprint:0 |
3837 | +msgid "Edit..." |
3838 | +msgstr "" |
3839 | + |
3840 | +#. module: project_scrum |
3841 | +#: help:project.scrum.feature,effective_hours:0 |
3842 | +msgid "Total effective hours from tasks related to this feature." |
3843 | +msgstr "" |
3844 | + |
3845 | +#. module: project_scrum |
3846 | +#: model:ir.actions.act_window,name:project_scrum.action_sprint |
3847 | +#: model:ir.ui.menu,name:project_scrum.menu_sprint |
3848 | +#: view:project.scrum.feature:0 |
3849 | +#: field:project.scrum.feature,sprint_ids:0 |
3850 | +#: view:project.scrum.release.backlog:0 |
3851 | +#: field:project.scrum.release.backlog,sprint_ids:0 |
3852 | +msgid "Sprints" |
3853 | +msgstr "" |
3854 | + |
3855 | +#. module: project_scrum |
3856 | +#: help:project.scrum.feature,sprint_ids:0 |
3857 | +msgid "Sprints in which the feature has been used." |
3858 | +msgstr "" |
3859 | + |
3860 | +#. module: project_scrum |
3861 | +#: field:project.scrum.feature,date_end:0 |
3862 | +#: field:project.scrum.product.backlog,date_end:0 |
3863 | +#: field:project.scrum.release.backlog,date_end:0 |
3864 | +#: field:project.scrum.sprint,date_end:0 |
3865 | +msgid "End Date" |
3866 | +msgstr "" |
3867 | + |
3868 | +#. module: project_scrum |
3869 | +#: model:ir.actions.act_window,help:project_scrum.action_release_backlog |
3870 | +msgid "<p class=\"oe_view_nocontent_create\">Create new Release Backlog</p>\n" |
3871 | +" " |
3872 | +msgstr "" |
3873 | + |
3874 | +#. module: project_scrum |
3875 | +#: view:project.scrum.feature:0 |
3876 | +#: field:project.scrum.feature,priority:0 |
3877 | +msgid "Priority" |
3878 | +msgstr "" |
3879 | + |
3880 | +#. module: project_scrum |
3881 | +#: field:project.scrum.product.backlog,state:0 |
3882 | +#: field:project.scrum.release.backlog,state:0 |
3883 | +#: field:project.scrum.sprint,state:0 |
3884 | +msgid "State" |
3885 | +msgstr "" |
3886 | + |
3887 | +#. module: project_scrum |
3888 | +#: constraint:project.task:0 |
3889 | +msgid "The selected Product Backlog must belong to the selected Project." |
3890 | +msgstr "" |
3891 | + |
3892 | +#. module: project_scrum |
3893 | +#: view:project.scrum.feature:0 |
3894 | +#: selection:project.scrum.feature,state:0 |
3895 | +#: view:project.scrum.product.backlog:0 |
3896 | +#: selection:project.scrum.product.backlog,state:0 |
3897 | +#: view:project.scrum.release.backlog:0 |
3898 | +#: selection:project.scrum.release.backlog,state:0 |
3899 | +#: view:project.scrum.sprint:0 |
3900 | +msgid "New" |
3901 | +msgstr "" |
3902 | + |
3903 | +#. module: project_scrum |
3904 | +#: view:project.scrum.feature:0 |
3905 | +#: field:project.scrum.feature,type_id:0 |
3906 | +msgid "Type" |
3907 | +msgstr "" |
3908 | + |
3909 | +#. module: project_scrum |
3910 | +#: view:project.scrum.feature:0 |
3911 | +#: field:project.scrum.feature,user_id:0 |
3912 | +#: view:project.scrum.product.backlog:0 |
3913 | +#: field:project.scrum.product.backlog,user_id:0 |
3914 | +#: view:project.scrum.release.backlog:0 |
3915 | +#: view:project.scrum.sprint:0 |
3916 | +#: field:project.scrum.sprint,user_id:0 |
3917 | +msgid "Scrum Master" |
3918 | +msgstr "" |
3919 | + |
3920 | +#. module: project_scrum |
3921 | +#: model:ir.ui.menu,name:project_scrum.menu_product_backlog |
3922 | +msgid "Product Backlogs" |
3923 | +msgstr "" |
3924 | + |
3925 | +#. module: project_scrum |
3926 | +#: selection:project.scrum.feature,priority:0 |
3927 | +msgid "5 - Very Low" |
3928 | +msgstr "" |
3929 | + |
3930 | +#. module: project_scrum |
3931 | +#: field:project.project,is_scrum:0 |
3932 | +#: field:project.task,is_scrum:0 |
3933 | +msgid "Scrum" |
3934 | +msgstr "" |
3935 | + |
3936 | +#. module: project_scrum |
3937 | +#: help:project.scrum.product.backlog,expected_hours:0 |
3938 | +msgid "Total planned hours calculated from features." |
3939 | +msgstr "" |
3940 | + |
3941 | +#. module: project_scrum |
3942 | +#: view:project.scrum.product.backlog:0 |
3943 | +#: selection:project.scrum.product.backlog,state:0 |
3944 | +#: view:project.scrum.release.backlog:0 |
3945 | +#: selection:project.scrum.release.backlog,state:0 |
3946 | +#: view:project.scrum.sprint:0 |
3947 | +msgid "Pending" |
3948 | +msgstr "" |
3949 | + |
3950 | +#. module: project_scrum |
3951 | +#: field:project.scrum.product.backlog,name:0 |
3952 | +msgid "Product Name" |
3953 | +msgstr "" |
3954 | + |
3955 | +#. module: project_scrum |
3956 | +#: view:project.scrum.feature:0 |
3957 | +#: selection:project.scrum.feature,state:0 |
3958 | +#: view:project.scrum.product.backlog:0 |
3959 | +#: selection:project.scrum.product.backlog,state:0 |
3960 | +#: view:project.scrum.release.backlog:0 |
3961 | +#: selection:project.scrum.release.backlog,state:0 |
3962 | +#: view:project.scrum.sprint:0 |
3963 | +msgid "Done" |
3964 | +msgstr "" |
3965 | + |
3966 | +#. module: project_scrum |
3967 | +#: view:project.scrum.feature:0 |
3968 | +#: view:project.scrum.product.backlog:0 |
3969 | +#: field:project.scrum.product.backlog,stage_id:0 |
3970 | +#: view:project.scrum.release.backlog:0 |
3971 | +#: field:project.scrum.release.backlog,stage_id:0 |
3972 | +#: view:project.scrum.sprint:0 |
3973 | +#: field:project.scrum.sprint,stage_id:0 |
3974 | +msgid "Stage" |
3975 | +msgstr "" |
3976 | + |
3977 | +#. module: project_scrum |
3978 | +#: selection:project.scrum.feature,priority:0 |
3979 | +msgid "3 - Medium" |
3980 | +msgstr "" |
3981 | + |
3982 | +#. module: project_scrum |
3983 | +#: help:project.scrum.product.backlog,effective_hours:0 |
3984 | +msgid "Total spent hours calculated from features." |
3985 | +msgstr "" |
3986 | + |
3987 | +#. module: project_scrum |
3988 | +#: code:addons/project_scrum/project_scrum.py:1105 |
3989 | +#, python-format |
3990 | +msgid "You can not cancel a product backlog if all release backlogs related to it are not cancelled or done" |
3991 | +msgstr "" |
3992 | + |
3993 | +#. module: project_scrum |
3994 | +#: help:project.scrum.release.backlog,deadline:0 |
3995 | +msgid "Calculated Deadline, will be empty if any sprint has no deadline." |
3996 | +msgstr "" |
3997 | + |
3998 | +#. module: project_scrum |
3999 | +#: view:project.scrum.feature:0 |
4000 | +msgid "Feature Summary" |
4001 | +msgstr "" |
4002 | + |
4003 | +#. module: project_scrum |
4004 | +#: model:ir.actions.act_window,help:project_scrum.action_product_backlog |
4005 | +msgid "<p class=\"oe_view_nocontent_create\">Create new Product Backlog</p>\n" |
4006 | +" " |
4007 | +msgstr "" |
4008 | + |
4009 | +#. module: project_scrum |
4010 | +#: help:project.scrum.feature,partner_id:0 |
4011 | +msgid "Contact or person responsible of keeping the business perspective in scrum projects." |
4012 | +msgstr "" |
4013 | + |
4014 | +#. module: project_scrum |
4015 | +#: view:project.scrum.feature:0 |
4016 | +#: view:project.scrum.product.backlog:0 |
4017 | +#: view:project.scrum.release.backlog:0 |
4018 | +#: view:project.scrum.sprint:0 |
4019 | +msgid "Delete" |
4020 | +msgstr "" |
4021 | + |
4022 | +#. module: project_scrum |
4023 | +#: field:project.scrum.feature,task_ids:0 |
4024 | +#: view:project.scrum.sprint:0 |
4025 | +#: field:project.scrum.sprint,task_ids:0 |
4026 | +msgid "Tasks" |
4027 | +msgstr "" |
4028 | + |
4029 | +#. module: project_scrum |
4030 | +#: sql_constraint:project.scrum.feature:0 |
4031 | +msgid "Code must be unique for every feature related to a Product Backlog" |
4032 | +msgstr "" |
4033 | + |
4034 | +#. module: project_scrum |
4035 | +#: view:project.scrum.sprint:0 |
4036 | +msgid "Are you sure you want to mark all features related to this sprint as done?" |
4037 | +msgstr "" |
4038 | + |
4039 | +#. module: project_scrum |
4040 | +#: constraint:project.scrum.feature:0 |
4041 | +#: constraint:project.scrum.sprint:0 |
4042 | +msgid "The selected Release Backlog must belong to the selected Product Backlog" |
4043 | +msgstr "" |
4044 | + |
4045 | +#. module: project_scrum |
4046 | +#: constraint:project.task:0 |
4047 | +msgid "The selected Release Backlog must belong to the selected Product Backlog." |
4048 | +msgstr "" |
4049 | + |
4050 | +#. module: project_scrum |
4051 | +#: view:project.scrum.sprint:0 |
4052 | +msgid "Are you sure you want to set as done this sprint?" |
4053 | +msgstr "" |
4054 | + |
4055 | +#. module: project_scrum |
4056 | +#: field:project.scrum.feature,date_start:0 |
4057 | +#: field:project.scrum.release.backlog,date_start:0 |
4058 | +#: field:project.scrum.sprint,date_start:0 |
4059 | +msgid "Start Date" |
4060 | +msgstr "" |
4061 | + |
4062 | +#. module: project_scrum |
4063 | +#: help:project.scrum.release.backlog,effective_hours:0 |
4064 | +msgid "Total spent hours calculated from sprints." |
4065 | +msgstr "" |
4066 | + |
4067 | +#. module: project_scrum |
4068 | +#: view:project.scrum.product.backlog:0 |
4069 | +#: field:project.scrum.product.backlog,member_ids:0 |
4070 | +#: view:project.scrum.sprint:0 |
4071 | +#: field:project.scrum.sprint,member_ids:0 |
4072 | +msgid "Team Members" |
4073 | +msgstr "" |
4074 | + |
4075 | +#. module: project_scrum |
4076 | +#: help:project.scrum.feature,expected_hours:0 |
4077 | +msgid "Total planned hours for the development of this feature.\n" |
4078 | +"Recommended values are:\n" |
4079 | +" 1h, 2h, 4h, or 8h" |
4080 | +msgstr "" |
4081 | + |
4082 | +#. module: project_scrum |
4083 | +#: model:ir.actions.act_window,help:project_scrum.action_sprint |
4084 | +msgid "" |
4085 | + |
4086 | +#. module: project_scrum |
4087 | +#: view:project.scrum.feature:0 |
4088 | +msgid "Code..." |
4089 | +msgstr "" |
4090 | + |
4091 | +#. module: project_scrum |
4092 | +#: view:project.scrum.feature:0 |
4093 | +msgid "Low" |
4094 | +msgstr "" |
4095 | + |
4096 | +#. module: project_scrum |
4097 | +#: view:project.scrum.product.backlog:0 |
4098 | +#: view:project.scrum.release.backlog:0 |
4099 | +#: view:project.scrum.sprint:0 |
4100 | +msgid "Closed" |
4101 | +msgstr "" |
4102 | + |
4103 | +#. module: project_scrum |
4104 | +#: code:addons/project_scrum/project_scrum.py:442 |
4105 | +#, python-format |
4106 | +msgid "All tasks were created before." |
4107 | +msgstr "" |
4108 | + |
4109 | +#. module: project_scrum |
4110 | +#: view:project.scrum.product.backlog:0 |
4111 | +msgid "Are you sure you want to cancel this product backlog?" |
4112 | +msgstr "" |
4113 | + |
4114 | +#. module: project_scrum |
4115 | +#: field:project.scrum.feature,state:0 |
4116 | +msgid "Status" |
4117 | +msgstr "" |
4118 | + |
4119 | +#. module: project_scrum |
4120 | +#: view:project.scrum.feature:0 |
4121 | +#: view:project.scrum.product.backlog:0 |
4122 | +#: view:project.scrum.release.backlog:0 |
4123 | +#: view:project.scrum.sprint:0 |
4124 | +msgid "Ã" |
4125 | +msgstr "" |
4126 | + |
4127 | +#. module: project_scrum |
4128 | +#: field:project.scrum.sprint,task_from_features:0 |
4129 | +msgid "Tasks from features" |
4130 | +msgstr "" |
4131 | + |
4132 | +#. module: project_scrum |
4133 | +#: field:project.scrum.feature,partner_id:0 |
4134 | +msgid "Product Owner" |
4135 | +msgstr "" |
4136 | + |
4137 | +#. module: project_scrum |
4138 | +#: view:project.scrum.sprint:0 |
4139 | +msgid "Are you sure you want to cancel this sprint?" |
4140 | +msgstr "" |
4141 | + |
4142 | +#. module: project_scrum |
4143 | +#: model:ir.actions.act_window,help:project_scrum.action_feature_type |
4144 | +msgid "<p class=\"oe_view_nocontent_create\">Create new Feature Type</p>\n" |
4145 | +" " |
4146 | +msgstr "" |
4147 | + |
4148 | +#. module: project_scrum |
4149 | +#: code:addons/project_scrum/project_scrum.py:891 |
4150 | +#: code:addons/project_scrum/project_scrum.py:1098 |
4151 | +#, python-format |
4152 | +msgid "There is no cancelled state configured for the project %s" |
4153 | +msgstr "" |
4154 | + |
4155 | +#. module: project_scrum |
4156 | +#: code:addons/project_scrum/project_scrum.py:1088 |
4157 | +#, python-format |
4158 | +msgid "You can not set as done a product backlog if all release backlogs related to it are not cancelled or done" |
4159 | +msgstr "" |
4160 | + |
4161 | +#. module: project_scrum |
4162 | +#: code:addons/project_scrum/project_scrum.py:430 |
4163 | +#: code:addons/project_scrum/project_scrum.py:927 |
4164 | +#: code:addons/project_scrum/project_scrum.py:1134 |
4165 | +#, python-format |
4166 | +msgid "There is no draft state configured." |
4167 | +msgstr "" |
4168 | + |
4169 | +#. module: project_scrum |
4170 | +#: field:project.scrum.feature,effective_hours:0 |
4171 | +#: field:project.scrum.product.backlog,effective_hours:0 |
4172 | +#: field:project.scrum.release.backlog,effective_hours:0 |
4173 | +#: field:project.scrum.sprint,effective_hours:0 |
4174 | +msgid "Spent Hour(s)" |
4175 | +msgstr "" |
4176 | + |
4177 | +#. module: project_scrum |
4178 | +#: field:project.scrum.feature,name:0 |
4179 | +msgid "Feature Name" |
4180 | +msgstr "" |
4181 | + |
4182 | +#. module: project_scrum |
4183 | +#: view:project.scrum.feature.type:0 |
4184 | +#: field:project.task,feature_type_id:0 |
4185 | +msgid "Feature Type" |
4186 | +msgstr "" |
4187 | + |
4188 | +#. module: project_scrum |
4189 | +#: help:project.scrum.release.backlog,progress:0 |
4190 | +msgid "Total progress percentage calculated from sprints" |
4191 | +msgstr "" |
4192 | + |
4193 | +#. module: project_scrum |
4194 | +#: code:addons/project_scrum/project_scrum.py:430 |
4195 | +#: code:addons/project_scrum/project_scrum.py:442 |
4196 | +#: code:addons/project_scrum/project_scrum.py:476 |
4197 | +#: code:addons/project_scrum/project_scrum.py:492 |
4198 | +#: code:addons/project_scrum/project_scrum.py:874 |
4199 | +#: code:addons/project_scrum/project_scrum.py:881 |
4200 | +#: code:addons/project_scrum/project_scrum.py:891 |
4201 | +#: code:addons/project_scrum/project_scrum.py:898 |
4202 | +#: code:addons/project_scrum/project_scrum.py:927 |
4203 | +#: code:addons/project_scrum/project_scrum.py:1081 |
4204 | +#: code:addons/project_scrum/project_scrum.py:1088 |
4205 | +#: code:addons/project_scrum/project_scrum.py:1098 |
4206 | +#: code:addons/project_scrum/project_scrum.py:1105 |
4207 | +#: code:addons/project_scrum/project_scrum.py:1134 |
4208 | +#, python-format |
4209 | +msgid "Error" |
4210 | +msgstr "" |
4211 | + |
4212 | +#. module: project_scrum |
4213 | +#: field:project.scrum.feature,code:0 |
4214 | +#: field:project.scrum.feature.type,code:0 |
4215 | +msgid "Code" |
4216 | +msgstr "" |
4217 | + |
4218 | +#. module: project_scrum |
4219 | +#: model:ir.actions.act_window,name:project_scrum.action_feature |
4220 | +#: model:ir.ui.menu,name:project_scrum.menu_feature |
4221 | +#: view:project.scrum.product.backlog:0 |
4222 | +#: field:project.scrum.product.backlog,feature_ids:0 |
4223 | +#: view:project.scrum.release.backlog:0 |
4224 | +#: field:project.scrum.release.backlog,feature_ids:0 |
4225 | +#: view:project.scrum.sprint:0 |
4226 | +#: field:project.scrum.sprint,feature_ids:0 |
4227 | +msgid "Features" |
4228 | +msgstr "" |
4229 | + |
4230 | +#. module: project_scrum |
4231 | +#: model:project.scrum.feature.type,name:project_scrum.data_feature_type_sales |
4232 | +msgid "Sales" |
4233 | +msgstr "" |
4234 | + |
4235 | +#. module: project_scrum |
4236 | +#: help:project.scrum.release.backlog,date_start:0 |
4237 | +msgid "Calculated Start Date, will be empty if any sprint has no start date." |
4238 | +msgstr "" |
4239 | + |
4240 | +#. module: project_scrum |
4241 | +#: help:project.scrum.product.backlog,progress:0 |
4242 | +msgid "Total progress percentage calculated from features" |
4243 | +msgstr "" |
4244 | + |
4245 | +#. module: project_scrum |
4246 | +#: code:addons/project_scrum/project_scrum.py:477 |
4247 | +#: code:addons/project_scrum/project_scrum.py:493 |
4248 | +#, python-format |
4249 | +msgid "All tasks must be done or cancelled in order to cancel this sprint." |
4250 | +msgstr "" |
4251 | + |
4252 | +#. module: project_scrum |
4253 | +#: view:project.scrum.feature:0 |
4254 | +#: view:project.scrum.product.backlog:0 |
4255 | +#: view:project.scrum.release.backlog:0 |
4256 | +#: view:project.scrum.sprint:0 |
4257 | +msgid "Cancel" |
4258 | +msgstr "" |
4259 | + |
4260 | +#. module: project_scrum |
4261 | +#: view:project.scrum.feature:0 |
4262 | +msgid "Open" |
4263 | +msgstr "" |
4264 | + |
4265 | +#. module: project_scrum |
4266 | +#: field:project.scrum.feature.type,name:0 |
4267 | +msgid "Type Name" |
4268 | +msgstr "" |
4269 | + |
4270 | +#. module: project_scrum |
4271 | +#: view:project.scrum.feature:0 |
4272 | +#: selection:project.scrum.feature,state:0 |
4273 | +#: view:project.scrum.product.backlog:0 |
4274 | +#: selection:project.scrum.product.backlog,state:0 |
4275 | +#: view:project.scrum.release.backlog:0 |
4276 | +#: selection:project.scrum.release.backlog,state:0 |
4277 | +#: view:project.scrum.sprint:0 |
4278 | +msgid "In Progress" |
4279 | +msgstr "" |
4280 | + |
4281 | +#. module: project_scrum |
4282 | +#: view:project.scrum.feature:0 |
4283 | +#: view:project.scrum.product.backlog:0 |
4284 | +#: view:project.scrum.release.backlog:0 |
4285 | +#: view:project.scrum.sprint:0 |
4286 | +msgid "Remaining Hours" |
4287 | +msgstr "" |
4288 | + |
4289 | +#. module: project_scrum |
4290 | +#: help:project.scrum.sprint,feature_ids:0 |
4291 | +msgid "Features to be developed in this sprint" |
4292 | +msgstr "" |
4293 | + |
4294 | +#. module: project_scrum |
4295 | +#: model:ir.actions.act_window,name:project_scrum.action_release_backlog |
4296 | +#: view:project.scrum.feature:0 |
4297 | +#: field:project.scrum.feature,release_backlog_id:0 |
4298 | +#: view:project.scrum.release.backlog:0 |
4299 | +#: view:project.scrum.sprint:0 |
4300 | +#: field:project.scrum.sprint,release_backlog_id:0 |
4301 | +#: field:project.task,release_backlog_id:0 |
4302 | +msgid "Release Backlog" |
4303 | +msgstr "" |
4304 | + |
4305 | +#. module: project_scrum |
4306 | +#: view:project.scrum.feature:0 |
4307 | +#: field:project.task,feature_id:0 |
4308 | +msgid "Feature" |
4309 | +msgstr "" |
4310 | + |
4311 | +#. module: project_scrum |
4312 | +#: view:project.scrum.product.backlog:0 |
4313 | +#: view:project.scrum.release.backlog:0 |
4314 | +msgid "My Backlogs" |
4315 | +msgstr "" |
4316 | + |
4317 | +#. module: project_scrum |
4318 | +#: view:project.scrum.feature:0 |
4319 | +msgid "Very Low" |
4320 | +msgstr "" |
4321 | + |
4322 | +#. module: project_scrum |
4323 | +#: view:project.scrum.product.backlog:0 |
4324 | +#: view:project.scrum.release.backlog:0 |
4325 | +msgid "Are you sure you want to set as done this release backlog?" |
4326 | +msgstr "" |
4327 | + |
4328 | +#. module: project_scrum |
4329 | +#: constraint:project.task:0 |
4330 | +msgid "There was an error checking the relationship between tasks. Please check if you selected an invalid task." |
4331 | +msgstr "" |
4332 | + |
4333 | +#. module: project_scrum |
4334 | +#: view:project.scrum.feature:0 |
4335 | +#: field:project.scrum.feature,description:0 |
4336 | +msgid "Description" |
4337 | +msgstr "" |
4338 | + |
4339 | +#. module: project_scrum |
4340 | +#: view:project.scrum.sprint:0 |
4341 | +msgid "Features Done" |
4342 | +msgstr "" |
4343 | + |
4344 | +#. module: project_scrum |
4345 | +#: field:project.scrum.release.backlog,name:0 |
4346 | +msgid "Release Name" |
4347 | +msgstr "" |
4348 | + |
4349 | +#. module: project_scrum |
4350 | +#: sql_constraint:project.scrum.feature.type:0 |
4351 | +msgid "Code must be unique for every feature type." |
4352 | +msgstr "" |
4353 | + |
4354 | +#. module: project_scrum |
4355 | +#: code:addons/project_scrum/project_scrum.py:874 |
4356 | +#: code:addons/project_scrum/project_scrum.py:1081 |
4357 | +#, python-format |
4358 | +msgid "There is no done state configured for the project %s" |
4359 | +msgstr "" |
4360 | + |
4361 | +#. module: project_scrum |
4362 | +#: field:project.scrum.sprint,name:0 |
4363 | +msgid "Sprint Name" |
4364 | +msgstr "" |
4365 | + |
4366 | +#. module: project_scrum |
4367 | +#: model:ir.ui.menu,name:project_scrum.menu_scrum |
4368 | +msgid "Scrum Project" |
4369 | +msgstr "" |
4370 | + |
4371 | +#. module: project_scrum |
4372 | +#: help:project.scrum.product.backlog,date_end:0 |
4373 | +msgid "Calculated End Date, will be empty if any feature has no end date." |
4374 | +msgstr "" |
4375 | + |
4376 | +#. module: project_scrum |
4377 | +#: help:project.scrum.product.backlog,deadline:0 |
4378 | +msgid "Calculated Deadline, will be empty if any feature has no deadline." |
4379 | +msgstr "" |
4380 | + |
4381 | +#. module: project_scrum |
4382 | +#: model:ir.actions.act_window,help:project_scrum.action_feature |
4383 | +msgid "<p class=\"oe_view_nocontent_create\">Create new Feature</p>\n" |
4384 | +" " |
4385 | +msgstr "" |
4386 | + |
4387 | +#. module: project_scrum |
4388 | +#: help:project.scrum.release.backlog,date_end:0 |
4389 | +msgid "Calculated End Date, will be empty if any sprint has no end date." |
4390 | +msgstr "" |
4391 | + |
4392 | +#. module: project_scrum |
4393 | +#: view:project.scrum.sprint:0 |
4394 | +msgid "Tasks from Features" |
4395 | +msgstr "" |
4396 | + |
4397 | +#. module: project_scrum |
4398 | +#: code:addons/project_scrum/project_scrum.py:898 |
4399 | +#, python-format |
4400 | +msgid "You can not cancel a release backlog if all sprints related to it are not cancelled or done" |
4401 | +msgstr "" |
4402 | + |
4403 | +#. module: project_scrum |
4404 | +#: help:project.scrum.feature,remaining_hours:0 |
4405 | +#: help:project.scrum.product.backlog,remaining_hours:0 |
4406 | +#: help:project.scrum.release.backlog,remaining_hours:0 |
4407 | +msgid "Difference between planned hours and spent hours." |
4408 | +msgstr "" |
4409 | + |
4410 | +#. module: project_scrum |
4411 | +#: view:project.scrum.feature:0 |
4412 | +msgid "Medium" |
4413 | +msgstr "" |
4414 | + |
4415 | +#. module: project_scrum |
4416 | +#: model:ir.actions.act_window,name:project_scrum.action_feature_type |
4417 | +#: model:ir.ui.menu,name:project_scrum.menu_feature_type |
4418 | +msgid "Feature Types" |
4419 | +msgstr "" |
4420 | + |
4421 | +#. module: project_scrum |
4422 | +#: view:project.task:0 |
4423 | +msgid "Sequence" |
4424 | +msgstr "" |
4425 | + |
4426 | +#. module: project_scrum |
4427 | +#: selection:project.scrum.feature,priority:0 |
4428 | +msgid "4 - Low" |
4429 | +msgstr "" |
4430 | + |
4431 | +#. module: project_scrum |
4432 | +#: view:project.scrum.feature:0 |
4433 | +msgid "High" |
4434 | +msgstr "" |
4435 | + |
4436 | +#. module: project_scrum |
4437 | +#: view:project.scrum.feature:0 |
4438 | +msgid "Add a Description..." |
4439 | +msgstr "" |
4440 | + |
4441 | +#. module: project_scrum |
4442 | +#: field:project.scrum.feature,remaining_hours:0 |
4443 | +#: field:project.scrum.product.backlog,remaining_hours:0 |
4444 | +#: field:project.scrum.release.backlog,remaining_hours:0 |
4445 | +#: field:project.scrum.sprint,remaining_hours:0 |
4446 | +msgid "Remaining Hour(s)" |
4447 | +msgstr "" |
4448 | + |
4449 | +#. module: project_scrum |
4450 | +#: code:addons/project_scrum/project_scrum.py:881 |
4451 | +#, python-format |
4452 | +msgid "You can not set as done a release backlog if all sprints related to it are not cancelled or done" |
4453 | +msgstr "" |
4454 | + |
4455 | +#. module: project_scrum |
4456 | +#: view:project.scrum.sprint:0 |
4457 | +#: field:project.task,sprint_id:0 |
4458 | +msgid "Sprint" |
4459 | +msgstr "" |
4460 | + |
4461 | |
4462 | === added file 'project_scrum/project_scrum.py' |
4463 | --- project_scrum/project_scrum.py 1970-01-01 00:00:00 +0000 |
4464 | +++ project_scrum/project_scrum.py 2014-03-27 17:09:06 +0000 |
4465 | @@ -0,0 +1,1152 @@ |
4466 | +# -*- coding: utf-8 -*- |
4467 | +############################################################################## |
4468 | +# |
4469 | +# OpenERP, Open Source Management Solution |
4470 | +# Addons modules by CLEARCORP S.A. |
4471 | +# Copyright (C) 2009-TODAY CLEARCORP S.A. (<http://clearcorp.co.cr>). |
4472 | +# |
4473 | +# This program is free software: you can redistribute it and/or modify |
4474 | +# it under the terms of the GNU Affero General Public License as |
4475 | +# published by the Free Software Foundation, either version 3 of the |
4476 | +# License, or (at your option) any later version. |
4477 | +# |
4478 | +# This program is distributed in the hope that it will be useful, |
4479 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
4480 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4481 | +# GNU Affero General Public License for more details. |
4482 | +# |
4483 | +# You should have received a copy of the GNU Affero General Public License |
4484 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
4485 | +# |
4486 | +############################################################################## |
4487 | + |
4488 | +from openerp.osv import osv, fields |
4489 | +from openerp.tools.translate import _ |
4490 | +from datetime import datetime |
4491 | + |
4492 | +# Mapping between task priority and |
4493 | +# feature priority |
4494 | +PRIORITY = { |
4495 | + 5: '4', |
4496 | + 4: '3', |
4497 | + 3: '2', |
4498 | + 2: '1', |
4499 | + 1: '0', |
4500 | + } |
4501 | + |
4502 | +STATES = [('draft', 'New'),('open', 'In Progress'), |
4503 | + ('pending', 'Pending'), ('done', 'Done'), |
4504 | + ('cancelled', 'Cancelled')] |
4505 | + |
4506 | +class project(osv.Model): |
4507 | + |
4508 | + _inherit = 'project.project' |
4509 | + |
4510 | + _columns = { |
4511 | + 'is_scrum': fields.boolean('Scrum'), |
4512 | + } |
4513 | + |
4514 | +class featureType(osv.Model): |
4515 | + |
4516 | + _name = 'project.scrum.feature.type' |
4517 | + |
4518 | + _columns = { |
4519 | + 'code': fields.char('Code', size=16, required=True), |
4520 | + 'name': fields.char('Type Name', size=128, required=True, translate=True), |
4521 | + } |
4522 | + |
4523 | + _sql_constraints = [('unique_code','UNIQUE(code)','Code must be unique for every feature type.')] |
4524 | + |
4525 | + def name_get(self, cr, uid, ids, context=None): |
4526 | + res =[] |
4527 | + for r in self.read(cr, uid, ids, ['code', 'name'], context=context): |
4528 | + name = '%s - %s' %(r['code'],r['name']) |
4529 | + res.append((r['id'], name)) |
4530 | + return res |
4531 | + |
4532 | +class Feature(osv.Model): |
4533 | + |
4534 | + _name = 'project.scrum.feature' |
4535 | + |
4536 | + def _date_start(self, cr, uid, ids, field_name, arg, context=None): |
4537 | + """Calculate the date_start based on the tasks from sprints |
4538 | + related to each feature""" |
4539 | + res = {} |
4540 | + for id in ids: |
4541 | + sprint_ids = [x.id for x in |
4542 | + self.browse(cr, uid, id, |
4543 | + context=context).sprint_ids] |
4544 | + task_obj = self.pool.get('project.task') |
4545 | + task_ids = task_obj.search(cr, uid, |
4546 | + [('sprint_id','in',sprint_ids), |
4547 | + ('feature_id','=',id), |
4548 | + '!',('state','in',['cancelled','draft'])], |
4549 | + context=context) |
4550 | + tasks = task_obj.browse(cr,uid,task_ids,context=context) |
4551 | + date_start = False |
4552 | + for task in tasks: |
4553 | + if task.date_start: |
4554 | + date = datetime.strptime(task.date_start,'%Y-%m-%d %H:%M:%S') |
4555 | + if not date_start: |
4556 | + date_start = date |
4557 | + else: |
4558 | + if date_start > date: |
4559 | + date_start = date |
4560 | + if date_start: |
4561 | + date_start = datetime.strftime(date_start,'%Y-%m-%d %H:%M:%S') |
4562 | + res[id] = date_start |
4563 | + return res |
4564 | + |
4565 | + def _date_end(self, cr, uid, ids, field_name, arg, context=None): |
4566 | + """Calculate the end date based on the tasks from sprints |
4567 | + related to each feature""" |
4568 | + res = {} |
4569 | + for id in ids: |
4570 | + sprint_ids = [x.id for x in |
4571 | + self.browse(cr, uid, id, |
4572 | + context=context).sprint_ids] |
4573 | + task_obj = self.pool.get('project.task') |
4574 | + task_ids = task_obj.search(cr, uid, |
4575 | + [('sprint_id','in',sprint_ids), |
4576 | + ('feature_id','=',id), |
4577 | + '!',('state','in',['cancelled','draft'])], |
4578 | + context=context) |
4579 | + tasks = task_obj.browse(cr,uid,task_ids,context=context) |
4580 | + date_end = False |
4581 | + for task in tasks: |
4582 | + if task.date_end: |
4583 | + date = datetime.strptime(task.date_end,'%Y-%m-%d %H:%M:%S') |
4584 | + if not date_end: |
4585 | + date_end = date |
4586 | + else: |
4587 | + if date > date_end: |
4588 | + date_end = date |
4589 | + if date_end: |
4590 | + date_end = datetime.strftime(date_end,'%Y-%m-%d %H:%M:%S') |
4591 | + res[id] = date_end |
4592 | + return res |
4593 | + |
4594 | + def _deadline(self, cr, uid, ids, field_name, arg, context=None): |
4595 | + """Calculate the deadline based on the tasks from sprints |
4596 | + related to each feature""" |
4597 | + res = {} |
4598 | + for id in ids: |
4599 | + sprint_ids = [x.id for x in |
4600 | + self.browse(cr, uid, id, |
4601 | + context=context).sprint_ids] |
4602 | + task_obj = self.pool.get('project.task') |
4603 | + task_ids = task_obj.search(cr, uid, |
4604 | + [('sprint_id','in',sprint_ids), |
4605 | + ('feature_id','=',id), |
4606 | + '!',('state','in',['cancelled','draft'])], |
4607 | + context=context) |
4608 | + tasks = task_obj.browse(cr,uid,task_ids,context=context) |
4609 | + deadline = False |
4610 | + for task in tasks: |
4611 | + if task.date_deadline: |
4612 | + date = datetime.strptime(task.date_deadline,'%Y-%m-%d') |
4613 | + if not deadline: |
4614 | + deadline = date |
4615 | + else: |
4616 | + if date > deadline: |
4617 | + deadline = date |
4618 | + if deadline: |
4619 | + deadline = datetime.strftime(deadline,'%Y-%m-%d') |
4620 | + res[id] = deadline |
4621 | + return res |
4622 | + |
4623 | + def _effective_hours(self, cr, uid, ids, field_name, arg, context=None): |
4624 | + """Calculate the planned hours based on the tasks from sprints |
4625 | + related to each feature""" |
4626 | + res = {} |
4627 | + for id in ids: |
4628 | + sprint_ids = [x.id for x in |
4629 | + self.browse(cr, uid, id, |
4630 | + context=context).sprint_ids] |
4631 | + task_obj = self.pool.get('project.task') |
4632 | + task_ids = task_obj.search(cr, uid, |
4633 | + [('sprint_id','in',sprint_ids), |
4634 | + ('feature_id','=',id)], |
4635 | + context=context) |
4636 | + tasks = task_obj.browse(cr,uid,task_ids,context=context) |
4637 | + sum = reduce(lambda result,task: result+task.effective_hours, |
4638 | + tasks, 0.0) |
4639 | + res[id] = sum |
4640 | + return res |
4641 | + |
4642 | + def _remaining_hours(self, cr, uid, ids, field_name, arg, context=None): |
4643 | + """Calculate the difference between planned and effective hours""" |
4644 | + res={} |
4645 | + features = self.browse(cr, uid, ids, context=context) |
4646 | + for feature in features: |
4647 | + res[feature.id] = feature.expected_hours - \ |
4648 | + feature.effective_hours |
4649 | + return res |
4650 | + |
4651 | + def _progress(self, cr, uid, ids, field_name, arg, context=None): |
4652 | + """Calculate the total progress based on the tasks from sprints |
4653 | + related to each feature""" |
4654 | + res = {} |
4655 | + for id in ids: |
4656 | + sprint_ids = [x.id for x in |
4657 | + self.browse(cr, uid, id, |
4658 | + context=context).sprint_ids] |
4659 | + task_obj = self.pool.get('project.task') |
4660 | + task_ids = task_obj.search(cr, uid, |
4661 | + [('sprint_id','in',sprint_ids), |
4662 | + ('feature_id','=',id)], |
4663 | + context=context) |
4664 | + tasks = task_obj.browse(cr,uid,task_ids,context=context) |
4665 | + if tasks: |
4666 | + sum = reduce(lambda result,task: result+task.progress, |
4667 | + tasks, 0.0) |
4668 | + res[id] = sum/len(tasks) |
4669 | + else: |
4670 | + res[id] = 0.0 |
4671 | + return res |
4672 | + |
4673 | + def set_open(self, cr, uid, ids, context=None): |
4674 | + return self.write(cr, uid, ids, {'state':'open'}, context=context) |
4675 | + |
4676 | + def set_approved(self, cr, uid, ids, context=None): |
4677 | + return self.write(cr, uid, ids, {'state':'approved'}, context=context) |
4678 | + |
4679 | + def set_done(self, cr, uid, ids, context=None): |
4680 | + return self.write(cr, uid, ids, {'state':'done'}, context=context) |
4681 | + |
4682 | + def set_cancel(self, cr, uid, ids, context=None): |
4683 | + return self.write(cr, uid, ids, {'state':'cancelled'}, context=context) |
4684 | + |
4685 | + def set_very_low_priority(self, cr, uid, ids, context=None): |
4686 | + return self.write(cr, uid, ids, {'priority':5}, context=context) |
4687 | + |
4688 | + def set_low_priority(self, cr, uid, ids, context=None): |
4689 | + return self.write(cr, uid, ids, {'priority':4}, context=context) |
4690 | + |
4691 | + def set_medium_priority(self, cr, uid, ids, context=None): |
4692 | + return self.write(cr, uid, ids, {'priority':3}, context=context) |
4693 | + |
4694 | + def set_high_priority(self, cr, uid, ids, context=None): |
4695 | + return self.write(cr, uid, ids, {'priority':2}, context=context) |
4696 | + |
4697 | + def set_very_high_priority(self, cr, uid, ids, context=None): |
4698 | + return self.write(cr, uid, ids, {'priority':1}, context=context) |
4699 | + |
4700 | + def _check_release_backlog(self, cr, uid, ids, context=None): |
4701 | + for feature in self.browse(cr, uid, ids, context=context): |
4702 | + if feature.release_backlog_id and \ |
4703 | + not feature.release_backlog_id in \ |
4704 | + feature.product_backlog_id.release_backlog_ids: |
4705 | + return False |
4706 | + return True |
4707 | + |
4708 | + _columns = { |
4709 | + 'name': fields.char('Feature Name', size=128, required=True), |
4710 | + 'code': fields.char('Code', size=16, required=True), |
4711 | + 'product_backlog_id': fields.many2one('project.scrum.product.backlog', |
4712 | + string='Product Backlog', required=True, domain="[('state','in',['draft','open','pending'])]"), |
4713 | + 'release_backlog_id': fields.many2one('project.scrum.release.backlog', |
4714 | + string='Release Backlog', domain="[('product_backlog_id','=',product_backlog_id)," |
4715 | + "'|',('state','=','open'),('state','=','pending')]"), |
4716 | + 'project_id': fields.related('product_backlog_id', 'project_id', type='many2one', |
4717 | + relation='project.project', string='Project', store=True), |
4718 | + 'user_id': fields.related('product_backlog_id', 'user_id', type='many2one', |
4719 | + relation='res.users', string='Scrum Master', store=True), |
4720 | + 'description': fields.text('Description'), |
4721 | + 'partner_id': fields.many2one('res.partner', string='Product Owner', |
4722 | + domain="[('customer','=',True)]", |
4723 | + help='Contact or person responsible of keeping the ' |
4724 | + 'business perspective in scrum projects.'), |
4725 | + 'type_id': fields.many2one('project.scrum.feature.type', string='Type'), |
4726 | + 'priority': fields.selection([(5, '5 - Very Low'),(4,'4 - Low'),(3,'3 - Medium'),(2,'2 - High'), |
4727 | + (1,'1 - Very High')], string='Priority', required=True), |
4728 | + 'sprint_ids': fields.many2many( |
4729 | + 'project.scrum.sprint', readonly=True, string='Sprints', |
4730 | + rel='project_scrum_sprint_backlog', |
4731 | + help='Sprints in which the feature has been used.'), |
4732 | + 'task_ids': fields.one2many('project.task', 'feature_id', string='Tasks', readonly=True), |
4733 | + 'date_start': fields.function(_date_start, type='datetime', string='Start Date'), |
4734 | + 'date_end': fields.function(_date_end, type='datetime', string='End Date'), |
4735 | + 'deadline': fields.function(_deadline, type='date', string='Deadline'), |
4736 | + 'expected_hours': fields.float('Initially Planned Hour(s)', |
4737 | + help='Total planned hours for the development of ' |
4738 | + 'this feature.\nRecommended values are:\n 1h, 2h, 4h,' |
4739 | + ' or 8h'), |
4740 | + 'effective_hours': fields.function( |
4741 | + _effective_hours, type='float', string='Spent Hour(s)', |
4742 | + help='Total effective hours from tasks related to this feature.'), |
4743 | + 'remaining_hours': fields.function( |
4744 | + _remaining_hours, type='float', string='Remaining Hour(s)', |
4745 | + help='Difference between planned hours and spent hours.'), |
4746 | + 'progress': fields.function(_progress, type='float', string='Progress (%)'), |
4747 | + 'state': fields.selection([('draft','New'), ('approved','Approved'), |
4748 | + ('open','In Progress'), ('cancelled', 'Cancelled'),('done','Done'),], |
4749 | + 'Status', required=True), |
4750 | + 'color': fields.integer('Color Index'), |
4751 | + } |
4752 | + |
4753 | + _defaults = { |
4754 | + 'priority': 3, |
4755 | + 'state': 'draft', |
4756 | + 'product_backlog_id': lambda self, cr, uid, c: c.get('product_backlog_id', False), |
4757 | + 'release_backlog_id': lambda self, cr, uid, c: c.get('release_backlog_id', False), |
4758 | + } |
4759 | + |
4760 | + def name_get(self, cr, uid, ids, context=None): |
4761 | + res =[] |
4762 | + for r in self.read(cr, uid, ids, ['code', 'name'], context=context): |
4763 | + name = '%s - %s' %(r['code'],r['name']) |
4764 | + res.append((r['id'], name)) |
4765 | + return res |
4766 | + |
4767 | + def name_search(self, cr, uid, name='', args=None, operator='ilike', context=None, limit=50): |
4768 | + ids = [] |
4769 | + if name: |
4770 | + ids = self.search(cr, uid, |
4771 | + ['|',('code',operator,name), |
4772 | + ('name',operator,name)] + args, |
4773 | + limit=limit, context=context) |
4774 | + else: |
4775 | + ids = self.search(cr, uid, args, limit=limit, context=context) |
4776 | + |
4777 | + return self.name_get(cr, uid, ids, context=context) |
4778 | + |
4779 | + def copy(self, cr, uid, id, defaults, context=None): |
4780 | + feature = self.browse(cr, uid, id, context=context) |
4781 | + defaults['code'] = feature.code + ' (copy)' |
4782 | + return super(Feature, self).copy(cr, uid, id, defaults, context=context) |
4783 | + |
4784 | + _constraints = [(_check_release_backlog,'The selected Release Backlog must belong to ' |
4785 | + 'the selected Product Backlog',['Release Backlog'])] |
4786 | + |
4787 | + _sql_constraints = [('unique_code_product','UNIQUE(code,product_backlog_id)', |
4788 | + 'Code must be unique for every feature related to a Product Backlog')] |
4789 | + |
4790 | +class Sprint(osv.Model): |
4791 | + |
4792 | + _name = 'project.scrum.sprint' |
4793 | + |
4794 | + def _date_end(self, cr, uid, ids, field_name, arg, context=None): |
4795 | + """Calculate End date as the highest End Date from |
4796 | + tasks related to this sprint""" |
4797 | + res = {} |
4798 | + for id in ids: |
4799 | + tasks = self.browse(cr, uid, id, context=context).task_ids |
4800 | + date_end = False |
4801 | + for task in tasks: |
4802 | + if task.date_end and task.state not in ('draft','cancelled'): |
4803 | + date = datetime.strptime(task.date_end, '%Y-%m-%d %H:%M:%S') |
4804 | + if not date_end: |
4805 | + date_end = date |
4806 | + else: |
4807 | + if date > date_end: |
4808 | + date_end = date |
4809 | + if date_end: |
4810 | + date_end = date_end.strftime('%Y-%m-%d %H:%M:%S') |
4811 | + res[id] = date_end |
4812 | + return res |
4813 | + |
4814 | + def _expected_hours(self, cr, uid, ids, field_name, arg, context=None): |
4815 | + """Calculate the expected hours from features related to this |
4816 | + sprint.""" |
4817 | + res = {} |
4818 | + for id in ids: |
4819 | + features = self.browse(cr, uid, id, context=context).feature_ids |
4820 | + sum = reduce(lambda result,feature: result+feature.expected_hours, |
4821 | + features, 0.0) |
4822 | + res[id] = sum |
4823 | + return res |
4824 | + |
4825 | + def _effective_hours(self, cr, uid, ids, field_name, arg, context=None): |
4826 | + """Calculate the effective hours using the work done in tasks |
4827 | + related to this sprint.""" |
4828 | + res = {} |
4829 | + for id in ids: |
4830 | + tasks = self.browse(cr, uid, id, context=context).task_ids |
4831 | + sum = reduce(lambda result,task: result+task.effective_hours, |
4832 | + tasks, 0.0) |
4833 | + res[id] = sum |
4834 | + return res |
4835 | + |
4836 | + def _remaining_hours(self, cr, uid, ids, field_name, arg, context=None): |
4837 | + """Calculate the difference between planned and effective hours.""" |
4838 | + res = {} |
4839 | + sprints = self.browse(cr, uid, ids, context=context) |
4840 | + for sprint in sprints: |
4841 | + res[sprint.id] = sprint.expected_hours - sprint.effective_hours |
4842 | + return res |
4843 | + |
4844 | + def _progress(self, cr, uid, ids, field_name, arg, context=None): |
4845 | + """Calculate the progress using the progress in tasks related |
4846 | + to this sprint.""" |
4847 | + res = {} |
4848 | + for id in ids: |
4849 | + tasks = self.browse(cr, uid, id, context=context).task_ids |
4850 | + if tasks: |
4851 | + sum = reduce(lambda result,task: result+task.progress, |
4852 | + tasks, 0.0) |
4853 | + res[id] = sum/len(tasks) |
4854 | + else: |
4855 | + # set a zero if no tasks are available |
4856 | + res[id] = 0.0 |
4857 | + return res |
4858 | + |
4859 | + def onchange_product_backlog(self, cr, uid, ids, product_backlog_id, context=None): |
4860 | + vals = {} |
4861 | + if product_backlog_id: |
4862 | + backlog = self.pool.get('project.scrum.product.backlog').browse( |
4863 | + cr,uid,product_backlog_id,context=context) |
4864 | + vals['project_id'] = backlog.project_id.id |
4865 | + else: |
4866 | + vals['project_id'] = False |
4867 | + return {'value': vals} |
4868 | + |
4869 | + def onchange_project(self, cr, uid, ids, project_id, stage_id, context=None): |
4870 | + if project_id: |
4871 | + type_ids = [x.id for x in self.pool.get('project.project').browse( |
4872 | + cr, uid, project_id, context=context).type_ids] |
4873 | + if not stage_id in type_ids: |
4874 | + stage = self.get_default_stage_id(cr, uid, project_id, context=context) |
4875 | + return {'value': {'stage_id': stage}} |
4876 | + else: |
4877 | + return {} |
4878 | + return { |
4879 | + 'value': { |
4880 | + 'stage_id': self.get_default_stage(cr, uid, context=context) |
4881 | + } |
4882 | + } |
4883 | + |
4884 | + def get_default_stage(self, cr ,uid, context=None): |
4885 | + type_obj = self.pool.get('project.task.type') |
4886 | + type = type_obj.search(cr, uid, [('state','=','draft')], |
4887 | + context=context, limit=1)[0] |
4888 | + if not type: |
4889 | + raise osv.except_osv(_('Error'),_('There is no ''draft'' state configured.')) |
4890 | + return type |
4891 | + |
4892 | + def get_default_stage_id(self, cr ,uid, project_id, context=None): |
4893 | + type_obj = self.pool.get('project.task.type') |
4894 | + type = type_obj.search(cr,uid, |
4895 | + [('project_ids','=',project_id)], context=context, limit=1)[0] |
4896 | + return type |
4897 | + |
4898 | + def tasks_from_features(self, cr, uid, ids, context=None): |
4899 | + sprint = self.browse(cr, uid, ids[0], context=context) |
4900 | + if sprint.task_from_features: |
4901 | + raise osv.except_osv(_('Error'),_('All tasks were created before.')) |
4902 | + task_obj = self.pool.get('project.task') |
4903 | + for feature in sprint.feature_ids: |
4904 | + values = { |
4905 | + 'project_id': sprint.project_id.id, |
4906 | + 'product_backlog_id': sprint.product_backlog_id.id, |
4907 | + 'release_backlog_id': sprint.release_backlog_id.id, |
4908 | + 'sprint_id': sprint.id, |
4909 | + 'feature_id': feature.id, |
4910 | + 'user_id': uid, |
4911 | + 'planned_hours': feature.expected_hours, |
4912 | + 'remaining_hours': feature.expected_hours, |
4913 | + 'date_start': sprint.date_start, |
4914 | + 'date_end': sprint.deadline, |
4915 | + 'date_deadline': sprint.deadline, |
4916 | + 'priority': PRIORITY[feature.priority], |
4917 | + 'description': feature.description, |
4918 | + 'name': feature.code + ' ' + feature.name, |
4919 | + } |
4920 | + task_obj.create(cr, uid, values, context=context) |
4921 | + self.write(cr, uid, ids[0], {'task_from_features': True}, context=context) |
4922 | + return True |
4923 | + |
4924 | + def set_features_done(self, cr, uid, ids, context=None): |
4925 | + sprint = self.browse(cr, uid, ids[0], context=context) |
4926 | + for feature in sprint.feature_ids: |
4927 | + if not feature.state in ('done','cancelled'): |
4928 | + feature.write({'state': 'done'}, context=context) |
4929 | + return True |
4930 | + |
4931 | + def set_done(self, cr, uid, ids, context=None): |
4932 | + if not isinstance(ids,list): |
4933 | + ids = [ids] |
4934 | + sprint = self.browse(cr, uid, ids[0], context=context) |
4935 | + for task in sprint.task_ids: |
4936 | + if not task.state in ['done','cancelled']: |
4937 | + raise osv.except_osv(_('Error'), |
4938 | + _('All tasks must be done or cancelled in order ' |
4939 | + 'to cancel this sprint.')) |
4940 | + project = sprint.project_id |
4941 | + id = False |
4942 | + for stage in project.type_ids: |
4943 | + if stage.state == 'done': |
4944 | + id = stage.id |
4945 | + break |
4946 | + self.write(cr, uid, ids[0], {'stage_id': id}, context) |
4947 | + return True |
4948 | + |
4949 | + def set_cancel(self, cr, uid, ids, context=None): |
4950 | + sprint = self.browse(cr, uid, ids[0], context=context) |
4951 | + for task in sprint.task_ids: |
4952 | + if not task.state in ['done','cancelled']: |
4953 | + raise osv.except_osv(_('Error'), |
4954 | + _('All tasks must be done or cancelled in order ' |
4955 | + 'to cancel this sprint.')) |
4956 | + project = sprint.project_id |
4957 | + id = False |
4958 | + for stage in project.type_ids: |
4959 | + if stage.state == 'cancelled': |
4960 | + id = stage.id |
4961 | + break |
4962 | + self.write(cr, uid, ids[0], {'stage_id': id}, context) |
4963 | + return True |
4964 | + |
4965 | + def _check_release_backlog(self, cr, uid, ids, context=None): |
4966 | + sprints = self.browse(cr, uid, ids, context=context) |
4967 | + for sprint in sprints: |
4968 | + if sprint.release_backlog_id and sprint.product_backlog_id: |
4969 | + if sprint.release_backlog_id.product_backlog_id != sprint.product_backlog_id: |
4970 | + return False |
4971 | + return True |
4972 | + |
4973 | + def _check_deadline(self, cr, uid, ids, context=None): |
4974 | + sprints = self.browse(cr, uid, ids, context=context) |
4975 | + for sprint in sprints: |
4976 | + date_start = datetime.strptime(sprint.date_start, '%Y-%m-%d %H:%M:%S') |
4977 | + deadline = datetime.strptime(sprint.deadline, '%Y-%m-%d') |
4978 | + if deadline < date_start: |
4979 | + return False |
4980 | + return True |
4981 | + |
4982 | + _columns = { |
4983 | + 'name': fields.char('Sprint Name', size=128, required=True), |
4984 | + 'product_backlog_id': fields.many2one('project.scrum.product.backlog', |
4985 | + string='Product Backlog', domain="['|',('state','=','open')," |
4986 | + "('state','=','pending')]", required=True), |
4987 | + 'release_backlog_id': fields.many2one('project.scrum.release.backlog', |
4988 | + required=True, string='Release Backlog', domain="[('product_backlog_id','=',product_backlog_id)," |
4989 | + "'|',('state','=','open'),('state','=','pending')]"), |
4990 | + 'project_id': fields.related('release_backlog_id','product_backlog_id','project_id', |
4991 | + relation='project.project', type='many2one', string='Project', store=True, readonly=True), |
4992 | + 'user_id': fields.related('release_backlog_id','product_backlog_id','project_id', 'user_id', |
4993 | + relation='res.users', type='many2one', string='Scrum Master', store=True), |
4994 | + 'member_ids': fields.related('release_backlog_id','product_backlog_id','project_id', 'members', |
4995 | + relation='res.users', type='many2many', string='Team Members', readonly=True), |
4996 | + 'task_ids': fields.one2many('project.task', 'sprint_id', string='Tasks'), |
4997 | + 'feature_ids': fields.many2many('project.scrum.feature', rel='project_scrum_sprint_backlog', |
4998 | + string='Features', help='Features to be developed in this sprint', |
4999 | + domain="[('state','in',['approved','open']),('release_backlog_id','=',release_backlog_id)," |
5000 | + "('release_backlog_id','!=',False)]"), |
The diff has been truncated for viewing.