Merge lp:~savoirfairelinux-openerp/partner-contact-management/partner-contact-management-base_contact_add_modules into lp:~partner-contact-core-editors/partner-contact-management/7.0
- partner-contact-management-base_contact_add_modules
- Merge into 7.0
Status: | Superseded |
---|---|
Proposed branch: | lp:~savoirfairelinux-openerp/partner-contact-management/partner-contact-management-base_contact_add_modules |
Merge into: | lp:~partner-contact-core-editors/partner-contact-management/7.0 |
Prerequisite: | lp:~savoirfairelinux-openerp/partner-contact-management/partner-contact-management-base_contact |
Diff against target: |
2416 lines (+2295/-0) 23 files modified
base_contact_by_functions/__init__.py (+27/-0) base_contact_by_functions/__openerp__.py (+56/-0) base_contact_by_functions/functions.py (+41/-0) base_contact_by_functions/functions_view.xml (+38/-0) base_contact_by_functions/i18n/base_contact_by_functions.pot (+353/-0) base_contact_by_functions/i18n/fr.po (+353/-0) base_contact_by_functions/res_institutions.py (+49/-0) base_contact_by_functions/res_institutions_view.xml (+55/-0) base_contact_by_functions/res_partner.py (+102/-0) base_contact_by_functions/res_partner_view.xml (+526/-0) base_contact_by_functions/security/ir.model.access.csv (+5/-0) base_contact_by_functions/tests/__init__.py (+31/-0) base_contact_by_functions/tests/test_functions.py (+98/-0) base_contact_by_functions/tests/test_institutions.py (+99/-0) base_contact_by_functions/tests/test_partner_category.py (+105/-0) base_contact_by_functions_partner_firstname/__init__.py (+25/-0) base_contact_by_functions_partner_firstname/__openerp__.py (+53/-0) base_contact_by_functions_partner_firstname/i18n/base_contact_by_functions_partner_firstname.pot (+27/-0) base_contact_by_functions_partner_firstname/i18n/fr.po (+27/-0) base_contact_by_functions_partner_firstname/res_partner.py (+76/-0) base_contact_by_functions_partner_firstname/res_partner_view.xml (+71/-0) base_contact_by_functions_partner_firstname/tests/__init__.py (+27/-0) base_contact_by_functions_partner_firstname/tests/test_partner.py (+51/-0) |
To merge this branch: | bzr merge lp:~savoirfairelinux-openerp/partner-contact-management/partner-contact-management-base_contact_add_modules |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Sandy Carter (http://www.savoirfairelinux.com) | Approve | ||
Partner and Contact Core Editors | Pending | ||
Review via email: mp+204016@code.launchpad.net |
This proposal has been superseded by a proposal from 2014-04-30.
Commit message
Description of the change
- [ADD] added base_contact_
- [ADD] Added base_contact_
The base_contact_
- 33. By Sandy Carter (http://www.savoirfairelinux.com)
-
[FIX] base_location - Add context propagation to base_location
- 34. By El Hadji Dem (http://www.savoirfairelinux.com)
-
[ADD] Add passport and passport_partner modules: You can manage several passports for each contact.
- 35. By Jonathan Nemry (Acsone)
-
[MRG]
For Partner:
1) Create always the SQL constraint on 'lastname'
2) Better implementation of "_write_name" allowing more intuitive update of the partner name when processing from another model (ex: res_user), i.e., try to keep the firstname if unchanged
3) When duplicating a partner, avoid to repeat the firstname in the name
4) Beautify the inner form for children contacts (placing fields as in the main form)
5) Allow edition of the field name in the inner form if child is a companyFor User:
1) Reintegrate the name as "required"
2) When duplicating a user, avoid to repeat the firstname in the related partner name - 43. By El Hadji Dem (http://www.savoirfairelinux.com)
-
[IMP] is_company field is True by default and replace Organism by Parent Organism in form view
- 44. By Sandy Carter (http://www.savoirfairelinux.com)
-
adapt module for community firstname module
- 45. By Sandy Carter (http://www.savoirfairelinux.com)
-
Fix error when creating partner with contact info
Sandy Carter (http://www.savoirfairelinux.com) (sandy-carter) : | # |
- 46. By Sandy Carter (http://www.savoirfairelinux.com)
-
Fix KeyError which sometimes arises when installing modules.
Assert that contact_id exists in vals
Unmerged revisions
- 46. By Sandy Carter (http://www.savoirfairelinux.com)
-
Fix KeyError which sometimes arises when installing modules.
Assert that contact_id exists in vals
- 45. By Sandy Carter (http://www.savoirfairelinux.com)
-
Fix error when creating partner with contact info
- 44. By Sandy Carter (http://www.savoirfairelinux.com)
-
adapt module for community firstname module
- 43. By El Hadji Dem (http://www.savoirfairelinux.com)
-
[IMP] is_company field is True by default and replace Organism by Parent Organism in form view
- 42. By El Hadji Dem (http://www.savoirfairelinux.com)
-
[ADD] added base_contact_
by_functions_ partner_ firstname module: It allows to add firstname before name.Name is considered like the lastname and we have firstname and lastname on partner view and contact view. - 41. By El Hadji Dem (http://www.savoirfairelinux.com)
-
[ADD] added base_contact_
by_functions module: It allow to manage contacts by function
Preview Diff
1 | === added directory 'base_contact_by_functions' |
2 | === added file 'base_contact_by_functions/__init__.py' |
3 | --- base_contact_by_functions/__init__.py 1970-01-01 00:00:00 +0000 |
4 | +++ base_contact_by_functions/__init__.py 2014-04-23 14:22:35 +0000 |
5 | @@ -0,0 +1,27 @@ |
6 | +# -*- encoding: utf-8 -*- |
7 | +############################################################################## |
8 | +# |
9 | +# OpenERP, Open Source Management Solution |
10 | +# This module copyright (C) 2013 Savoir-faire Linux |
11 | +# (<http://www.savoirfairelinux.com>). |
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 | +from . import res_partner |
29 | +from . import functions |
30 | +from . import res_institutions |
31 | + |
32 | +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: |
33 | |
34 | === added file 'base_contact_by_functions/__openerp__.py' |
35 | --- base_contact_by_functions/__openerp__.py 1970-01-01 00:00:00 +0000 |
36 | +++ base_contact_by_functions/__openerp__.py 2014-04-23 14:22:35 +0000 |
37 | @@ -0,0 +1,56 @@ |
38 | +# -*- encoding: utf-8 -*- |
39 | +############################################################################## |
40 | +# |
41 | +# OpenERP, Open Source Management Solution |
42 | +# This module copyright (C) 2013 Savoir-faire Linux |
43 | +# (<http://www.savoirfairelinux.com>). |
44 | +# |
45 | +# This program is free software: you can redistribute it and/or modify |
46 | +# it under the terms of the GNU Affero General Public License as |
47 | +# published by the Free Software Foundation, either version 3 of the |
48 | +# License, or (at your option) any later version. |
49 | +# |
50 | +# This program is distributed in the hope that it will be useful, |
51 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
52 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
53 | +# GNU Affero General Public License for more details. |
54 | +# |
55 | +# You should have received a copy of the GNU Affero General Public License |
56 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
57 | +# |
58 | +############################################################################## |
59 | + |
60 | +{ |
61 | + 'name': 'Contacts by Functions', |
62 | + 'version': '0.1', |
63 | + 'author': 'Savoir-faire Linux', |
64 | + 'maintainer': 'Savoir-faire Linux', |
65 | + 'website': 'http://www.savoirfairelinux.com', |
66 | + 'category': 'Customer Relationship Management', |
67 | + 'description': """ |
68 | +Contacts by Functions |
69 | +===================== |
70 | + |
71 | +This module allows you to manage contacts by functions |
72 | + |
73 | +Contributors |
74 | +------------ |
75 | +* EL Hadji Dem (elhadji.dem@savoirfairelinux.com) |
76 | +""", |
77 | + 'depends': [ |
78 | + 'base_contact', |
79 | + ], |
80 | + 'external_dependencies': {}, |
81 | + 'data': [ |
82 | + 'functions_view.xml', |
83 | + 'res_institutions_view.xml', |
84 | + 'res_partner_view.xml', |
85 | + 'security/ir.model.access.csv', |
86 | + ], |
87 | + 'demo': [], |
88 | + 'test': [], |
89 | + 'installable': True, |
90 | + 'active': False, |
91 | +} |
92 | + |
93 | +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: |
94 | |
95 | === added file 'base_contact_by_functions/functions.py' |
96 | --- base_contact_by_functions/functions.py 1970-01-01 00:00:00 +0000 |
97 | +++ base_contact_by_functions/functions.py 2014-04-23 14:22:35 +0000 |
98 | @@ -0,0 +1,41 @@ |
99 | +# -*- encoding: utf-8 -*- |
100 | +############################################################################## |
101 | +# |
102 | +# OpenERP, Open Source Management Solution |
103 | +# This module copyright (C) 2013 Savoir-faire Linux |
104 | +# (<http://www.savoirfairelinux.com>). |
105 | +# |
106 | +# This program is free software: you can redistribute it and/or modify |
107 | +# it under the terms of the GNU Affero General Public License as |
108 | +# published by the Free Software Foundation, either version 3 of the |
109 | +# License, or (at your option) any later version. |
110 | +# |
111 | +# This program is distributed in the hope that it will be useful, |
112 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
113 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
114 | +# GNU Affero General Public License for more details. |
115 | +# |
116 | +# You should have received a copy of the GNU Affero General Public License |
117 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
118 | +# |
119 | +############################################################################## |
120 | + |
121 | +from openerp.osv import fields, orm |
122 | + |
123 | + |
124 | +class functions(orm.Model): |
125 | + _description = 'Functions' |
126 | + _name = 'functions' |
127 | + _columns = { |
128 | + 'name': fields.char('Name', size=256, required=True, select=True, |
129 | + help='Name of function.'), |
130 | + 'acronym': fields.char('Acronym', size=50, help='Acronym of function.'), |
131 | + 'partner_ids': fields.many2many('res.partner', |
132 | + 'function_partner_rel', |
133 | + 'function_id', |
134 | + 'partner_id', |
135 | + 'Functions'), |
136 | + 'institution_id': fields.many2one("res.institution", 'institution'), |
137 | + } |
138 | + |
139 | +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: |
140 | |
141 | === added file 'base_contact_by_functions/functions_view.xml' |
142 | --- base_contact_by_functions/functions_view.xml 1970-01-01 00:00:00 +0000 |
143 | +++ base_contact_by_functions/functions_view.xml 2014-04-23 14:22:35 +0000 |
144 | @@ -0,0 +1,38 @@ |
145 | +<?xml version="1.0" ?> |
146 | +<openerp> |
147 | + <data> |
148 | + <!-- Tree Views functions--> |
149 | + <record model="ir.ui.view" id="functions_tree_view"> |
150 | + <field name="name">Functions Tree View</field> |
151 | + <field name="model">functions</field> |
152 | + <field name="type">tree</field> |
153 | + <field name="arch" type="xml"> |
154 | + <tree string="FunctionsTree" version="7.0"> |
155 | + <field name="name"/> |
156 | + <field name="acronym"/> |
157 | + </tree> |
158 | + </field> |
159 | + </record> |
160 | + <!-- Form Views functions--> |
161 | + <record model="ir.ui.view" id="functions_form_view"> |
162 | + <field name="name">Functions Form View</field> |
163 | + <field name="model">functions</field> |
164 | + <field name="type">form</field> |
165 | + <field name="arch" type="xml"> |
166 | + <form string="FunctionsForm" version="7.0" > |
167 | + <group col="4"> |
168 | + <field name="name"/> |
169 | + <field name="acronym"/> |
170 | + </group> |
171 | + </form> |
172 | + </field> |
173 | + </record> |
174 | + <!-- Actions --> |
175 | + <record model="ir.actions.act_window" id="action_functions_tree_list"> |
176 | + <field name="name">Functions</field> |
177 | + <field name="view_id" ref="functions_tree_view"/> |
178 | + <field name="res_model">functions</field> |
179 | + <field name="view_mode">tree,form</field> |
180 | + </record> |
181 | + </data> |
182 | +</openerp> |
183 | |
184 | === added directory 'base_contact_by_functions/i18n' |
185 | === added file 'base_contact_by_functions/i18n/base_contact_by_functions.pot' |
186 | --- base_contact_by_functions/i18n/base_contact_by_functions.pot 1970-01-01 00:00:00 +0000 |
187 | +++ base_contact_by_functions/i18n/base_contact_by_functions.pot 2014-04-23 14:22:35 +0000 |
188 | @@ -0,0 +1,353 @@ |
189 | +# Translation of OpenERP Server. |
190 | +# This file contains the translation of the following modules: |
191 | +# * base_contact_by_functions |
192 | +# |
193 | +msgid "" |
194 | +msgstr "" |
195 | +"Project-Id-Version: OpenERP Server 7.0\n" |
196 | +"Report-Msgid-Bugs-To: \n" |
197 | +"POT-Creation-Date: 2014-01-28 22:15+0000\n" |
198 | +"PO-Revision-Date: 2014-01-28 17:15-0500\n" |
199 | +"Last-Translator: EL Hadji DEM <elhadji.dem@savoirfairelinux.com>\n" |
200 | +"Language-Team: \n" |
201 | +"MIME-Version: 1.0\n" |
202 | +"Content-Type: text/plain; charset=UTF-8\n" |
203 | +"Content-Transfer-Encoding: 8bit\n" |
204 | +"Plural-Forms: \n" |
205 | +"X-Generator: Poedit 1.5.4\n" |
206 | + |
207 | +#. module: base_contact_by_functions |
208 | +#: field:res.category.functions,category_id:0 |
209 | +msgid "Category" |
210 | +msgstr "" |
211 | + |
212 | +#. module: base_contact_by_functions |
213 | +#: view:res.partner:0 |
214 | +msgid "City" |
215 | +msgstr "" |
216 | + |
217 | +#. module: base_contact_by_functions |
218 | +#: field:functions,partner_ids:0 |
219 | +#: model:ir.actions.act_window,name:base_contact_by_functions.action_functions_tree_list |
220 | +#: model:ir.model,name:base_contact_by_functions.model_functions |
221 | +#: field:res.category.functions,functions_id:0 view:res.institution:0 |
222 | +#: field:res.institution,institutionfunction_ids:0 |
223 | +#: field:res.institution.functions,functions_id:0 view:res.partner:0 |
224 | +#: field:res.partner,functions_ids:0 view:res.partner.category:0 |
225 | +#: field:res.partner.category,categoryfunction_ids:0 |
226 | +msgid "Functions" |
227 | +msgstr "" |
228 | + |
229 | +#. module: base_contact_by_functions |
230 | +#: view:res.partner:0 |
231 | +msgid "History (Functions)" |
232 | +msgstr "" |
233 | + |
234 | +#. module: base_contact_by_functions |
235 | +#: model:ir.model,name:base_contact_by_functions.model_res_institution_functions |
236 | +msgid "Institutions functions" |
237 | +msgstr "" |
238 | + |
239 | +#. module: base_contact_by_functions |
240 | +#: help:res.partner,delivered_country:0 |
241 | +msgid "Country for which a passport is delivered" |
242 | +msgstr "" |
243 | + |
244 | +#. module: base_contact_by_functions |
245 | +#: model:ir.actions.act_window,name:base_contact_by_functions.action_partner_contact_form |
246 | +msgid "Contacts" |
247 | +msgstr "" |
248 | + |
249 | +#. module: base_contact_by_functions |
250 | +#: view:res.partner:0 |
251 | +msgid "Street..." |
252 | +msgstr "" |
253 | + |
254 | +#. module: base_contact_by_functions |
255 | +#: view:res.institution:0 |
256 | +msgid "Add functions for this institution" |
257 | +msgstr "" |
258 | + |
259 | +#. module: base_contact_by_functions |
260 | +#: view:functions:0 view:res.institution:0 view:res.partner.category:0 |
261 | +msgid "FunctionsTree" |
262 | +msgstr "" |
263 | + |
264 | +#. module: base_contact_by_functions |
265 | +#: sql_constraint:res.institution:0 |
266 | +msgid "Name already exists" |
267 | +msgstr "" |
268 | + |
269 | +#. module: base_contact_by_functions |
270 | +#: view:res.partner:0 |
271 | +msgid "State" |
272 | +msgstr "" |
273 | + |
274 | +#. module: base_contact_by_functions |
275 | +#: help:res.category.functions,sequence:0 |
276 | +#: help:res.institution.functions,sequence:0 |
277 | +msgid "Used to order" |
278 | +msgstr "" |
279 | + |
280 | +#. module: base_contact_by_functions |
281 | +#: view:functions:0 view:res.institution:0 view:res.partner.category:0 |
282 | +msgid "FunctionsForm" |
283 | +msgstr "" |
284 | + |
285 | +#. module: base_contact_by_functions |
286 | +#: view:res.partner:0 |
287 | +msgid "e.g. Sales Director" |
288 | +msgstr "" |
289 | + |
290 | +#. module: base_contact_by_functions |
291 | +#: help:functions,acronym:0 |
292 | +msgid "Acronym of function." |
293 | +msgstr "" |
294 | + |
295 | +#. module: base_contact_by_functions |
296 | +#: view:res.partner:0 |
297 | +msgid "Tags..." |
298 | +msgstr "" |
299 | + |
300 | +#. module: base_contact_by_functions |
301 | +#: field:res.partner,start_date:0 |
302 | +msgid "Start date" |
303 | +msgstr "" |
304 | + |
305 | +#. module: base_contact_by_functions |
306 | +#: view:res.institution:0 |
307 | +msgid "InstitutionsForm" |
308 | +msgstr "" |
309 | + |
310 | +#. module: base_contact_by_functions |
311 | +#: view:res.partner:0 |
312 | +msgid "Fax:" |
313 | +msgstr "" |
314 | + |
315 | +#. module: base_contact_by_functions |
316 | +#: field:res.partner,expiration_date:0 |
317 | +msgid "Expiration date" |
318 | +msgstr "" |
319 | + |
320 | +#. module: base_contact_by_functions |
321 | +#: view:res.partner:0 |
322 | +msgid "Function" |
323 | +msgstr "" |
324 | + |
325 | +#. module: base_contact_by_functions |
326 | +#: view:res.partner:0 |
327 | +msgid "Parent Organism" |
328 | +msgstr "" |
329 | + |
330 | +#. module: base_contact_by_functions |
331 | +#: view:res.partner:0 |
332 | +msgid "Zip" |
333 | +msgstr "" |
334 | + |
335 | +#. module: base_contact_by_functions |
336 | +#: field:res.partner,delivered_country:0 |
337 | +msgid "Country Passport" |
338 | +msgstr "" |
339 | + |
340 | +#. module: base_contact_by_functions |
341 | +#: field:res.partner,other_contact_history_ids:0 |
342 | +msgid "unknown" |
343 | +msgstr "" |
344 | + |
345 | +#. module: base_contact_by_functions |
346 | +#: model:ir.actions.act_window,name:base_contact_by_functions.action_partner_customer_form |
347 | +msgid "Company" |
348 | +msgstr "" |
349 | + |
350 | +#. module: base_contact_by_functions |
351 | +#: model:ir.model,name:base_contact_by_functions.model_res_category_functions |
352 | +msgid "Categories functions" |
353 | +msgstr "" |
354 | + |
355 | +#. module: base_contact_by_functions |
356 | +#: help:res.institution,name:0 |
357 | +msgid "Name of institution." |
358 | +msgstr "" |
359 | + |
360 | +#. module: base_contact_by_functions |
361 | +#: help:res.partner,naming:0 |
362 | +msgid "Naming." |
363 | +msgstr "" |
364 | + |
365 | +#. module: base_contact_by_functions |
366 | +#: view:res.partner:0 |
367 | +msgid "Tag" |
368 | +msgstr "" |
369 | + |
370 | +#. module: base_contact_by_functions |
371 | +#: view:res.partner:0 |
372 | +msgid "Passport information" |
373 | +msgstr "" |
374 | + |
375 | +#. module: base_contact_by_functions |
376 | +#: view:res.partner:0 |
377 | +msgid "Address" |
378 | +msgstr "" |
379 | + |
380 | +#. module: base_contact_by_functions |
381 | +#: view:res.partner:0 |
382 | +msgid "Parent organism" |
383 | +msgstr "" |
384 | + |
385 | +#. module: base_contact_by_functions |
386 | +#: view:res.partner:0 |
387 | +msgid "have the same form for contact and other postions" |
388 | +msgstr "" |
389 | + |
390 | +#. module: base_contact_by_functions |
391 | +#: view:res.partner:0 |
392 | +msgid "Select functions for this organism" |
393 | +msgstr "" |
394 | + |
395 | +#. module: base_contact_by_functions |
396 | +#: view:res.partner:0 |
397 | +msgid "Phone:" |
398 | +msgstr "" |
399 | + |
400 | +#. module: base_contact_by_functions |
401 | +#: field:functions,name:0 field:res.institution,name:0 |
402 | +msgid "Name" |
403 | +msgstr "" |
404 | + |
405 | +#. module: base_contact_by_functions |
406 | +#: view:res.partner:0 |
407 | +msgid "ZIP" |
408 | +msgstr "" |
409 | + |
410 | +#. module: base_contact_by_functions |
411 | +#: view:res.partner:0 |
412 | +msgid "Use organism address" |
413 | +msgstr "" |
414 | + |
415 | +#. module: base_contact_by_functions |
416 | +#: view:res.partner:0 |
417 | +msgid "Country" |
418 | +msgstr "" |
419 | + |
420 | +#. module: base_contact_by_functions |
421 | +#: field:functions,institution_id:0 |
422 | +msgid "institution" |
423 | +msgstr "" |
424 | + |
425 | +#. module: base_contact_by_functions |
426 | +#: view:res.partner:0 |
427 | +msgid "Is an Organism" |
428 | +msgstr "" |
429 | + |
430 | +#. module: base_contact_by_functions |
431 | +#: field:res.partner,function_id:0 |
432 | +msgid "Position Occupied" |
433 | +msgstr "" |
434 | + |
435 | +#. module: base_contact_by_functions |
436 | +#: view:res.partner:0 |
437 | +msgid "Contact" |
438 | +msgstr "" |
439 | + |
440 | +#. module: base_contact_by_functions |
441 | +#: help:res.institution,sequence:0 |
442 | +msgid "Used to order the institutions" |
443 | +msgstr "" |
444 | + |
445 | +#. module: base_contact_by_functions |
446 | +#: view:res.partner:0 |
447 | +msgid "Mobile:" |
448 | +msgstr "" |
449 | + |
450 | +#. module: base_contact_by_functions |
451 | +#: model:ir.model,name:base_contact_by_functions.model_res_partner_category |
452 | +msgid "Partner Categories" |
453 | +msgstr "" |
454 | + |
455 | +#. module: base_contact_by_functions |
456 | +#: view:res.partner:0 |
457 | +msgid "Organism" |
458 | +msgstr "" |
459 | + |
460 | +#. module: base_contact_by_functions |
461 | +#: model:ir.actions.act_window,name:base_contact_by_functions.action_institutions_tree_list |
462 | +#: model:ir.model,name:base_contact_by_functions.model_res_institution |
463 | +#: field:res.institution.functions,institution_id:0 |
464 | +msgid "Institutions" |
465 | +msgstr "" |
466 | + |
467 | +#. module: base_contact_by_functions |
468 | +#: view:res.partner:0 |
469 | +msgid "History" |
470 | +msgstr "" |
471 | + |
472 | +#. module: base_contact_by_functions |
473 | +#: field:res.partner,end_date:0 |
474 | +msgid "End date" |
475 | +msgstr "" |
476 | + |
477 | +#. module: base_contact_by_functions |
478 | +#: view:res.partner.category:0 |
479 | +msgid "Add function" |
480 | +msgstr "" |
481 | + |
482 | +#. module: base_contact_by_functions |
483 | +#: view:res.partner:0 |
484 | +msgid "Bank Details" |
485 | +msgstr "" |
486 | + |
487 | +#. module: base_contact_by_functions |
488 | +#: view:res.institution:0 |
489 | +msgid "InstitutionsTree" |
490 | +msgstr "" |
491 | + |
492 | +#. module: base_contact_by_functions |
493 | +#: field:res.category.functions,sequence:0 field:res.institution,sequence:0 |
494 | +#: field:res.institution.functions,sequence:0 |
495 | +msgid "Sequence" |
496 | +msgstr "" |
497 | + |
498 | +#. module: base_contact_by_functions |
499 | +#: view:res.partner:0 |
500 | +msgid "Bank Accounts" |
501 | +msgstr "" |
502 | + |
503 | +#. module: base_contact_by_functions |
504 | +#: view:res.partner:0 |
505 | +msgid "No, Street, Apartment/Office" |
506 | +msgstr "" |
507 | + |
508 | +#. module: base_contact_by_functions |
509 | +#: view:res.partner:0 |
510 | +msgid "Use address organism" |
511 | +msgstr "" |
512 | + |
513 | +#. module: base_contact_by_functions |
514 | +#: field:functions,acronym:0 |
515 | +msgid "Acronym" |
516 | +msgstr "" |
517 | + |
518 | +#. module: base_contact_by_functions |
519 | +#: help:functions,name:0 |
520 | +msgid "Name of function." |
521 | +msgstr "" |
522 | + |
523 | +#. module: base_contact_by_functions |
524 | +#: help:res.partner,passport_number:0 |
525 | +msgid "Passport number." |
526 | +msgstr "" |
527 | + |
528 | +#. module: base_contact_by_functions |
529 | +#: field:res.partner,passport_number:0 |
530 | +msgid "Passport Number" |
531 | +msgstr "" |
532 | + |
533 | +#. module: base_contact_by_functions |
534 | +#: model:ir.model,name:base_contact_by_functions.model_res_partner |
535 | +msgid "Partner" |
536 | +msgstr "" |
537 | + |
538 | +#. module: base_contact_by_functions |
539 | +#: field:res.partner,naming:0 |
540 | +msgid "Naming" |
541 | +msgstr "" |
542 | |
543 | === added file 'base_contact_by_functions/i18n/fr.po' |
544 | --- base_contact_by_functions/i18n/fr.po 1970-01-01 00:00:00 +0000 |
545 | +++ base_contact_by_functions/i18n/fr.po 2014-04-23 14:22:35 +0000 |
546 | @@ -0,0 +1,353 @@ |
547 | +# Translation of OpenERP Server. |
548 | +# This file contains the translation of the following modules: |
549 | +# * base_contact_by_functions |
550 | +# |
551 | +msgid "" |
552 | +msgstr "" |
553 | +"Project-Id-Version: OpenERP Server 7.0\n" |
554 | +"Report-Msgid-Bugs-To: \n" |
555 | +"POT-Creation-Date: 2014-01-29 15:16+0000\n" |
556 | +"PO-Revision-Date: 2014-01-29 10:19-0500\n" |
557 | +"Last-Translator: EL Hadji DEM <elhadji.dem@savoirfairelinux.com>\n" |
558 | +"Language-Team: \n" |
559 | +"MIME-Version: 1.0\n" |
560 | +"Content-Type: text/plain; charset=UTF-8\n" |
561 | +"Content-Transfer-Encoding: 8bit\n" |
562 | +"Plural-Forms: \n" |
563 | +"X-Generator: Poedit 1.5.4\n" |
564 | + |
565 | +#. module: base_contact_by_functions |
566 | +#: field:res.category.functions,category_id:0 |
567 | +msgid "Category" |
568 | +msgstr "Catégorie" |
569 | + |
570 | +#. module: base_contact_by_functions |
571 | +#: view:res.partner:0 |
572 | +msgid "City" |
573 | +msgstr "Ville" |
574 | + |
575 | +#. module: base_contact_by_functions |
576 | +#: field:functions,partner_ids:0 |
577 | +#: model:ir.actions.act_window,name:base_contact_by_functions.action_functions_tree_list |
578 | +#: model:ir.model,name:base_contact_by_functions.model_functions |
579 | +#: field:res.category.functions,functions_id:0 view:res.institution:0 |
580 | +#: field:res.institution,institutionfunction_ids:0 |
581 | +#: field:res.institution.functions,functions_id:0 view:res.partner:0 |
582 | +#: field:res.partner,functions_ids:0 view:res.partner.category:0 |
583 | +#: field:res.partner.category,categoryfunction_ids:0 |
584 | +msgid "Functions" |
585 | +msgstr "Fonctions" |
586 | + |
587 | +#. module: base_contact_by_functions |
588 | +#: view:res.partner:0 |
589 | +msgid "History (Functions)" |
590 | +msgstr "Historique (Fonctions)" |
591 | + |
592 | +#. module: base_contact_by_functions |
593 | +#: model:ir.model,name:base_contact_by_functions.model_res_institution_functions |
594 | +msgid "Institutions functions" |
595 | +msgstr "Fonctions des institutions" |
596 | + |
597 | +#. module: base_contact_by_functions |
598 | +#: help:res.partner,delivered_country:0 |
599 | +msgid "Country for which a passport is delivered" |
600 | +msgstr "Pays pour lequel le passeport est délivré" |
601 | + |
602 | +#. module: base_contact_by_functions |
603 | +#: model:ir.actions.act_window,name:base_contact_by_functions.action_partner_contact_form |
604 | +msgid "Contacts" |
605 | +msgstr "Contacts" |
606 | + |
607 | +#. module: base_contact_by_functions |
608 | +#: view:res.partner:0 |
609 | +msgid "Street..." |
610 | +msgstr "Rue..." |
611 | + |
612 | +#. module: base_contact_by_functions |
613 | +#: view:res.institution:0 |
614 | +msgid "Add functions for this institution" |
615 | +msgstr "Ajouter des fonctions de cette institution" |
616 | + |
617 | +#. module: base_contact_by_functions |
618 | +#: view:functions:0 view:res.institution:0 view:res.partner.category:0 |
619 | +msgid "FunctionsTree" |
620 | +msgstr "FonctionsTree" |
621 | + |
622 | +#. module: base_contact_by_functions |
623 | +#: sql_constraint:res.institution:0 |
624 | +msgid "Name already exists" |
625 | +msgstr "Le nom existe déjà" |
626 | + |
627 | +#. module: base_contact_by_functions |
628 | +#: view:res.partner:0 |
629 | +msgid "State" |
630 | +msgstr "Etat" |
631 | + |
632 | +#. module: base_contact_by_functions |
633 | +#: help:res.category.functions,sequence:0 |
634 | +#: help:res.institution.functions,sequence:0 |
635 | +msgid "Used to order" |
636 | +msgstr "Permet d'ordonner" |
637 | + |
638 | +#. module: base_contact_by_functions |
639 | +#: view:functions:0 view:res.institution:0 view:res.partner.category:0 |
640 | +msgid "FunctionsForm" |
641 | +msgstr "FonctionsForm" |
642 | + |
643 | +#. module: base_contact_by_functions |
644 | +#: view:res.partner:0 |
645 | +msgid "e.g. Sales Director" |
646 | +msgstr "ex: Directeur de vente" |
647 | + |
648 | +#. module: base_contact_by_functions |
649 | +#: help:functions,acronym:0 |
650 | +msgid "Acronym of function." |
651 | +msgstr "Acronyme de la fonction." |
652 | + |
653 | +#. module: base_contact_by_functions |
654 | +#: view:res.partner:0 |
655 | +msgid "Tags..." |
656 | +msgstr "Etiquettes..." |
657 | + |
658 | +#. module: base_contact_by_functions |
659 | +#: field:res.partner,start_date:0 |
660 | +msgid "Start date" |
661 | +msgstr "Date de début" |
662 | + |
663 | +#. module: base_contact_by_functions |
664 | +#: view:res.institution:0 |
665 | +msgid "InstitutionsForm" |
666 | +msgstr "InstitutionsForm" |
667 | + |
668 | +#. module: base_contact_by_functions |
669 | +#: view:res.partner:0 |
670 | +msgid "Fax:" |
671 | +msgstr "Télécopie :" |
672 | + |
673 | +#. module: base_contact_by_functions |
674 | +#: field:res.partner,expiration_date:0 |
675 | +msgid "Expiration date" |
676 | +msgstr "Date d'expiration" |
677 | + |
678 | +#. module: base_contact_by_functions |
679 | +#: view:res.partner:0 |
680 | +msgid "Function" |
681 | +msgstr "Fonction" |
682 | + |
683 | +#. module: base_contact_by_functions |
684 | +#: view:res.partner:0 |
685 | +msgid "Fax" |
686 | +msgstr "Télécopie" |
687 | + |
688 | +#. module: base_contact_by_functions |
689 | +#: view:res.partner:0 |
690 | +msgid "Parent Organism" |
691 | +msgstr "Organisme parent" |
692 | + |
693 | +#. module: base_contact_by_functions |
694 | +#: field:res.partner,delivered_country:0 |
695 | +msgid "Country Passport" |
696 | +msgstr "Pays de délivrance du passeport" |
697 | + |
698 | +#. module: base_contact_by_functions |
699 | +#: field:res.partner,other_contact_history_ids:0 |
700 | +msgid "unknown" |
701 | +msgstr "inconnu" |
702 | + |
703 | +#. module: base_contact_by_functions |
704 | +#: model:ir.actions.act_window,name:base_contact_by_functions.action_partner_customer_form |
705 | +msgid "Company" |
706 | +msgstr "Organisme" |
707 | + |
708 | +#. module: base_contact_by_functions |
709 | +#: model:ir.model,name:base_contact_by_functions.model_res_category_functions |
710 | +msgid "Categories functions" |
711 | +msgstr "Catégories functions" |
712 | + |
713 | +#. module: base_contact_by_functions |
714 | +#: help:res.institution,name:0 |
715 | +msgid "Name of institution." |
716 | +msgstr "Nom de l'institution." |
717 | + |
718 | +#. module: base_contact_by_functions |
719 | +#: help:res.partner,naming:0 |
720 | +msgid "Naming." |
721 | +msgstr "Appellation" |
722 | + |
723 | +#. module: base_contact_by_functions |
724 | +#: view:res.partner:0 |
725 | +msgid "Tag" |
726 | +msgstr "Etiquette" |
727 | + |
728 | +#. module: base_contact_by_functions |
729 | +#: view:res.partner:0 |
730 | +msgid "Passport information" |
731 | +msgstr "Informations du passeport" |
732 | + |
733 | +#. module: base_contact_by_functions |
734 | +#: view:res.partner:0 |
735 | +msgid "Address" |
736 | +msgstr "Adresse" |
737 | + |
738 | +#. module: base_contact_by_functions |
739 | +#: view:res.partner:0 |
740 | +msgid "Parent organism" |
741 | +msgstr "Organisme parent" |
742 | + |
743 | +#. module: base_contact_by_functions |
744 | +#: view:res.partner:0 |
745 | +msgid "have the same form for contact and other postions" |
746 | +msgstr "Avoir le même formulaire de contact et d'autres postions" |
747 | + |
748 | +#. module: base_contact_by_functions |
749 | +#: view:res.partner:0 |
750 | +msgid "Select functions for this organism" |
751 | +msgstr "Sélectionner les fonctions de cet organisme" |
752 | + |
753 | +#. module: base_contact_by_functions |
754 | +#: view:res.partner:0 |
755 | +msgid "Phone:" |
756 | +msgstr "Téléphone:" |
757 | + |
758 | +#. module: base_contact_by_functions |
759 | +#: field:functions,name:0 field:res.institution,name:0 |
760 | +msgid "Name" |
761 | +msgstr "Nom" |
762 | + |
763 | +#. module: base_contact_by_functions |
764 | +#: view:res.partner:0 |
765 | +msgid "ZIP" |
766 | +msgstr "Code postal" |
767 | + |
768 | +#. module: base_contact_by_functions |
769 | +#: view:res.partner:0 |
770 | +msgid "Use organism address" |
771 | +msgstr "Utilisez l'adresse de l'organisme" |
772 | + |
773 | +#. module: base_contact_by_functions |
774 | +#: view:res.partner:0 |
775 | +msgid "Country" |
776 | +msgstr "Pays" |
777 | + |
778 | +#. module: base_contact_by_functions |
779 | +#: field:functions,institution_id:0 |
780 | +msgid "institution" |
781 | +msgstr "institution" |
782 | + |
783 | +#. module: base_contact_by_functions |
784 | +#: view:res.partner:0 |
785 | +msgid "Is an Organism" |
786 | +msgstr "Est un Organisme" |
787 | + |
788 | +#. module: base_contact_by_functions |
789 | +#: field:res.partner,function_id:0 |
790 | +msgid "Position Occupied" |
791 | +msgstr "Fonction Occupée" |
792 | + |
793 | +#. module: base_contact_by_functions |
794 | +#: view:res.partner:0 |
795 | +msgid "Contact" |
796 | +msgstr "Contact" |
797 | + |
798 | +#. module: base_contact_by_functions |
799 | +#: help:res.institution,sequence:0 |
800 | +msgid "Used to order the institutions" |
801 | +msgstr "Permet d'ordonner les institutions" |
802 | + |
803 | +#. module: base_contact_by_functions |
804 | +#: view:res.partner:0 |
805 | +msgid "Mobile:" |
806 | +msgstr "Portable :" |
807 | + |
808 | +#. module: base_contact_by_functions |
809 | +#: model:ir.model,name:base_contact_by_functions.model_res_partner_category |
810 | +msgid "Partner Categories" |
811 | +msgstr "Catégories de partenaires" |
812 | + |
813 | +#. module: base_contact_by_functions |
814 | +#: view:res.partner:0 |
815 | +msgid "Organism" |
816 | +msgstr "Organisme" |
817 | + |
818 | +#. module: base_contact_by_functions |
819 | +#: model:ir.actions.act_window,name:base_contact_by_functions.action_institutions_tree_list |
820 | +#: model:ir.model,name:base_contact_by_functions.model_res_institution |
821 | +#: field:res.institution.functions,institution_id:0 |
822 | +msgid "Institutions" |
823 | +msgstr "Institutions" |
824 | + |
825 | +#. module: base_contact_by_functions |
826 | +#: view:res.partner:0 |
827 | +msgid "History" |
828 | +msgstr "Historique" |
829 | + |
830 | +#. module: base_contact_by_functions |
831 | +#: field:res.partner,end_date:0 |
832 | +msgid "End date" |
833 | +msgstr "Date de fin" |
834 | + |
835 | +#. module: base_contact_by_functions |
836 | +#: view:res.partner.category:0 |
837 | +msgid "Add function" |
838 | +msgstr "Ajouter fonction" |
839 | + |
840 | +#. module: base_contact_by_functions |
841 | +#: view:res.partner:0 |
842 | +msgid "Bank Details" |
843 | +msgstr "Coordonnées bancaires" |
844 | + |
845 | +#. module: base_contact_by_functions |
846 | +#: view:res.institution:0 |
847 | +msgid "InstitutionsTree" |
848 | +msgstr "InstitutionsTree" |
849 | + |
850 | +#. module: base_contact_by_functions |
851 | +#: field:res.category.functions,sequence:0 field:res.institution,sequence:0 |
852 | +#: field:res.institution.functions,sequence:0 |
853 | +msgid "Sequence" |
854 | +msgstr "Séquence" |
855 | + |
856 | +#. module: base_contact_by_functions |
857 | +#: view:res.partner:0 |
858 | +msgid "Bank Accounts" |
859 | +msgstr "Comptes bancaires" |
860 | + |
861 | +#. module: base_contact_by_functions |
862 | +#: view:res.partner:0 |
863 | +msgid "No, Street, Apartment/Office" |
864 | +msgstr "No, Rue, Appartement/Bureau" |
865 | + |
866 | +#. module: base_contact_by_functions |
867 | +#: view:res.partner:0 |
868 | +msgid "Use address organism" |
869 | +msgstr "Utiliser l'adresse de l'organisme" |
870 | + |
871 | +#. module: base_contact_by_functions |
872 | +#: field:functions,acronym:0 |
873 | +msgid "Acronym" |
874 | +msgstr "Acronyme" |
875 | + |
876 | +#. module: base_contact_by_functions |
877 | +#: help:functions,name:0 |
878 | +msgid "Name of function." |
879 | +msgstr "Nom de la fonction." |
880 | + |
881 | +#. module: base_contact_by_functions |
882 | +#: help:res.partner,passport_number:0 |
883 | +msgid "Passport number." |
884 | +msgstr "Numéro de passeport." |
885 | + |
886 | +#. module: base_contact_by_functions |
887 | +#: field:res.partner,passport_number:0 |
888 | +msgid "Passport Number" |
889 | +msgstr "Numéro de passeport." |
890 | + |
891 | +#. module: base_contact_by_functions |
892 | +#: model:ir.model,name:base_contact_by_functions.model_res_partner |
893 | +msgid "Partner" |
894 | +msgstr "Partenaire" |
895 | + |
896 | +#. module: base_contact_by_functions |
897 | +#: field:res.partner,naming:0 |
898 | +msgid "Naming" |
899 | +msgstr "Appellation" |
900 | |
901 | === added file 'base_contact_by_functions/res_institutions.py' |
902 | --- base_contact_by_functions/res_institutions.py 1970-01-01 00:00:00 +0000 |
903 | +++ base_contact_by_functions/res_institutions.py 2014-04-23 14:22:35 +0000 |
904 | @@ -0,0 +1,49 @@ |
905 | +# -*- encoding: utf-8 -*- |
906 | +############################################################################## |
907 | +# |
908 | +# OpenERP, Open Source Management Solution |
909 | +# This module copyright (C) 2013 Savoir-faire Linux |
910 | +# (<http://www.savoirfairelinux.com>). |
911 | +# |
912 | +# This program is free software: you can redistribute it and/or modify |
913 | +# it under the terms of the GNU Affero General Public License as |
914 | +# published by the Free Software Foundation, either version 3 of the |
915 | +# License, or (at your option) any later version. |
916 | +# |
917 | +# This program is distributed in the hope that it will be useful, |
918 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
919 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
920 | +# GNU Affero General Public License for more details. |
921 | +# |
922 | +# You should have received a copy of the GNU Affero General Public License |
923 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
924 | +# |
925 | +############################################################################## |
926 | + |
927 | +from openerp.osv import fields, orm |
928 | + |
929 | + |
930 | +class res_institutions(orm.Model): |
931 | + _description = 'Institutions' |
932 | + _name = 'res.institution' |
933 | + _order = 'sequence asc' |
934 | + _columns = { |
935 | + 'name': fields.char('Name', size=256, required=True, select=True, |
936 | + help='Name of institution.'), |
937 | + 'sequence': fields.integer('Sequence', help="Used to order the institutions"), |
938 | + 'institutionfunction_ids': fields.one2many('res.institution.functions', 'institution_id', 'Functions'), |
939 | + } |
940 | + _sql_constraints = [('institution_name_unique', 'unique(name)', 'Name already exists')] |
941 | + |
942 | + |
943 | +class res_institutions_functions(orm.Model): |
944 | + _description = 'Institutions functions' |
945 | + _name = 'res.institution.functions' |
946 | + _order = 'sequence asc' |
947 | + _columns = { |
948 | + 'functions_id': fields.many2one('functions', 'Functions', required='True'), |
949 | + 'sequence': fields.integer('Sequence', help="Used to order"), |
950 | + 'institution_id': fields.many2one('res.institution', 'Institutions'), |
951 | + } |
952 | + |
953 | +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: |
954 | |
955 | === added file 'base_contact_by_functions/res_institutions_view.xml' |
956 | --- base_contact_by_functions/res_institutions_view.xml 1970-01-01 00:00:00 +0000 |
957 | +++ base_contact_by_functions/res_institutions_view.xml 2014-04-23 14:22:35 +0000 |
958 | @@ -0,0 +1,55 @@ |
959 | +<?xml version="1.0" ?> |
960 | +<openerp> |
961 | + <data> |
962 | + <!-- Tree Views Institutions--> |
963 | + <record model="ir.ui.view" id="institutions_tree_view"> |
964 | + <field name="name">Institutions Tree View</field> |
965 | + <field name="model">res.institution</field> |
966 | + <field name="type">tree</field> |
967 | + <field name="arch" type="xml"> |
968 | + <tree string="InstitutionsTree" version="7.0"> |
969 | + <field name="name"/> |
970 | + <field name="sequence"/> |
971 | + </tree> |
972 | + </field> |
973 | + </record> |
974 | + <!-- Form Views Institutions--> |
975 | + <record model="ir.ui.view" id="institutions_form_view"> |
976 | + <field name="name">Institutions Form View</field> |
977 | + <field name="model">res.institution</field> |
978 | + <field name="type">form</field> |
979 | + <field name="arch" type="xml"> |
980 | + <form string="InstitutionsForm" version="7.0" > |
981 | + <group col="4"> |
982 | + <field name="name"/> |
983 | + <field name="sequence"/> |
984 | + </group> |
985 | + <notebook position="inside"> |
986 | + <page string="Functions"> |
987 | + <separator string="Add functions for this institution"/> |
988 | + <group col="2" colspan="4"> |
989 | + <field name="institutionfunction_ids" nolabel="1"> |
990 | + <tree string="FunctionsTree"> |
991 | + <field name="sequence"/> |
992 | + <field name="functions_id"/> |
993 | + </tree> |
994 | + <form string="FunctionsForm"> |
995 | + <field name="functions_id"/> |
996 | + <field name="sequence"/> |
997 | + </form> |
998 | + </field> |
999 | + </group> |
1000 | + </page> |
1001 | + </notebook> |
1002 | + </form> |
1003 | + </field> |
1004 | + </record> |
1005 | + <!-- Actions --> |
1006 | + <record model="ir.actions.act_window" id="action_institutions_tree_list"> |
1007 | + <field name="name">Institutions</field> |
1008 | + <field name="view_id" ref="institutions_tree_view"/> |
1009 | + <field name="res_model">res.institution</field> |
1010 | + <field name="view_mode">tree,form</field> |
1011 | + </record> |
1012 | + </data> |
1013 | +</openerp> |
1014 | |
1015 | === added file 'base_contact_by_functions/res_partner.py' |
1016 | --- base_contact_by_functions/res_partner.py 1970-01-01 00:00:00 +0000 |
1017 | +++ base_contact_by_functions/res_partner.py 2014-04-23 14:22:35 +0000 |
1018 | @@ -0,0 +1,102 @@ |
1019 | +# -*- encoding: utf-8 -*- |
1020 | +############################################################################## |
1021 | +# |
1022 | +# OpenERP, Open Source Management Solution |
1023 | +# This module copyright (C) 2013 Savoir-faire Linux |
1024 | +# (<http://www.savoirfairelinux.com>). |
1025 | +# |
1026 | +# This program is free software: you can redistribute it and/or modify |
1027 | +# it under the terms of the GNU Affero General Public License as |
1028 | +# published by the Free Software Foundation, either version 3 of the |
1029 | +# License, or (at your option) any later version. |
1030 | +# |
1031 | +# This program is distributed in the hope that it will be useful, |
1032 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
1033 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1034 | +# GNU Affero General Public License for more details. |
1035 | +# |
1036 | +# You should have received a copy of the GNU Affero General Public License |
1037 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
1038 | +# |
1039 | +############################################################################## |
1040 | + |
1041 | +import time |
1042 | +from openerp.osv import orm, fields |
1043 | + |
1044 | + |
1045 | +class res_partner_category(orm.Model): |
1046 | + """ |
1047 | + Inherits partner_category |
1048 | + """ |
1049 | + _inherit = 'res.partner.category' |
1050 | + _columns = { |
1051 | + 'categoryfunction_ids': fields.one2many('res.category.functions', 'category_id', 'Functions'), |
1052 | + } |
1053 | + |
1054 | + |
1055 | +class res_category_functions(orm.Model): |
1056 | + """ |
1057 | + Adds this class to link category and functions |
1058 | + """ |
1059 | + _description = 'Categories functions' |
1060 | + _name = 'res.category.functions' |
1061 | + _order = 'sequence asc' |
1062 | + _columns = { |
1063 | + 'functions_id': fields.many2one('functions', 'Functions', required='True'), |
1064 | + 'sequence': fields.integer('Sequence', help="Used to order"), |
1065 | + 'category_id': fields.many2one('res.partner.category', 'Category'), |
1066 | + } |
1067 | + |
1068 | + |
1069 | +class res_partner(orm.Model): |
1070 | + """ |
1071 | + Inherits partner and adds functions_ids : List of functions |
1072 | + """ |
1073 | + _inherit = 'res.partner' |
1074 | + |
1075 | + def onchange_partner_function(self, cr, uid, ids, part, context=None): |
1076 | + if not part: |
1077 | + return {'value': None} |
1078 | + partner_ids = self.pool.get('res.partner').search(cr, uid, [('id', '=', part)]) |
1079 | + functions_ids = self.pool.get('res.partner').browse(cr, uid, partner_ids, context=context)[0].functions_ids |
1080 | + result = [] |
1081 | + if functions_ids: |
1082 | + for line in functions_ids: |
1083 | + result.append(line.id) |
1084 | + dom = {'function_id': [('id', 'in', result)]} |
1085 | + return {'domain': dom} |
1086 | + |
1087 | + def _get_history_lines(self, cr, uid, ids, name, arg, context=None): |
1088 | + res = {} |
1089 | + res_partner_pool = self.pool.get('res.partner') |
1090 | + for record in self.browse(cr, uid, ids, context=context): |
1091 | + |
1092 | + if record.is_company: |
1093 | + return res |
1094 | + contact_ids = res_partner_pool.search(cr, uid, |
1095 | + [('contact_id', '=', record.id), |
1096 | + ('active', '=', False)], |
1097 | + context=context) |
1098 | + res[record.id] = [x.id for x in res_partner_pool.browse(cr, uid, contact_ids) |
1099 | + if x.end_date and x.end_date <= time.strftime('%Y-%m-%d')] |
1100 | + return res |
1101 | + |
1102 | + _columns = { |
1103 | + 'functions_ids': fields.many2many('functions', 'function_partner_rel', 'partner_id', |
1104 | + 'function_id', 'Functions'), |
1105 | + 'start_date': fields.date('Start date'), |
1106 | + 'end_date': fields.date('End date'), |
1107 | + 'naming': fields.char('Naming', size=256, help="Naming."), |
1108 | + 'function_id': fields.many2one('functions', 'Position Occupied'), |
1109 | + 'other_contact_history_ids': fields.function(_get_history_lines, |
1110 | + relation="res.partner", |
1111 | + method=True, |
1112 | + type="one2many"), |
1113 | + # Replace company by Organism |
1114 | + 'use_parent_address': fields.boolean( |
1115 | + 'Use Organism Address', |
1116 | + help="Select this if you want to set organism's address information for this contact"), |
1117 | + |
1118 | + } |
1119 | + |
1120 | +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: |
1121 | |
1122 | === added file 'base_contact_by_functions/res_partner_view.xml' |
1123 | --- base_contact_by_functions/res_partner_view.xml 1970-01-01 00:00:00 +0000 |
1124 | +++ base_contact_by_functions/res_partner_view.xml 2014-04-23 14:22:35 +0000 |
1125 | @@ -0,0 +1,526 @@ |
1126 | +<?xml version = "1.0" encoding="utf-8"?> |
1127 | +<openerp> |
1128 | + <data> |
1129 | + <!--Add list of functions in partner view--> |
1130 | + <record id="view_contact_by_function_form" model="ir.ui.view"> |
1131 | + <field name="name">contact.functions.form.inherit</field> |
1132 | + <field name="model">res.partner</field> |
1133 | + <field name="inherit_id" ref="base.view_partner_form"/> |
1134 | + <field name="arch" type="xml"> |
1135 | + <field name="use_parent_address" position="replace"> |
1136 | + <field name="use_parent_address" |
1137 | + class="oe_edit_only oe_inline" |
1138 | + on_change="onchange_address(use_parent_address, parent_id)" |
1139 | + attrs="{'invisible': [('parent_id','=', False),('use_parent_address','=',False)]}" |
1140 | + string="Use organism address"/> |
1141 | + </field> |
1142 | + <label for="use_parent_address" position="replace"> |
1143 | + <label for="use_parent_address" |
1144 | + class="oe_edit_only" |
1145 | + attrs="{'invisible': [('parent_id','=', False),('use_parent_address','=',False)]}" |
1146 | + string="Use organism address"/> |
1147 | + </label> |
1148 | + <!--Add ')' at the end of 'Is an Organism?'--> |
1149 | + <label for="is_company" position="replace"> |
1150 | + <label for="is_company" string="Is an Organism"/>) |
1151 | + </label> |
1152 | + <!--Replace Street placeholder by No, Street, Apartment/Office--> |
1153 | + <field name="street" position="attributes"> |
1154 | + <attribute name="placeholder">No, Street, Apartment/Office</attribute> |
1155 | + </field> |
1156 | + <field name="fax" position="attributes"> |
1157 | + <attribute name="string">Fax</attribute> |
1158 | + </field> |
1159 | + |
1160 | + <notebook position="inside"> |
1161 | + <page string="Functions" |
1162 | + attrs="{'invisible': [('is_company','=',False), ('child_ids', '=', [])]}" |
1163 | + autofocus="autofocus"> |
1164 | + <separator string="Select functions for this organism"/> |
1165 | + <field name="functions_ids"/> |
1166 | + </page> |
1167 | + <page string="History (Functions)" attrs="{'invisible': ['|','|',('is_company','=',True),('contact_id','!=',False),('other_contact_history_ids','=',[])]}"> |
1168 | + <separator string="History"/> |
1169 | + <field name="other_contact_history_ids" mode="kanban" |
1170 | + attrs="{'invisible': [('other_contact_history_ids','=',False)]}"> |
1171 | + <kanban> |
1172 | + <field name="color"/> |
1173 | + <field name="name"/> |
1174 | + <field name="title"/> |
1175 | + <field name="email"/> |
1176 | + <field name="parent_id" string="Organism"/> |
1177 | + <field name="is_company"/> |
1178 | + <field name="function_id" string="Function"/> |
1179 | + <field name="phone"/> |
1180 | + <field name="street"/> |
1181 | + <field name="street2"/> |
1182 | + <field name="zip"/> |
1183 | + <field name="city"/> |
1184 | + <field name="country_id"/> |
1185 | + <field name="mobile"/> |
1186 | + <field name="fax"/> |
1187 | + <field name="state_id"/> |
1188 | + <field name="has_image"/> |
1189 | + <templates> |
1190 | + <t t-name="kanban-box"> |
1191 | + <div class="oe_kanban_vignette oe_semantic_html_override"> |
1192 | + <a type="open"> |
1193 | + <t t-if="record.has_image.raw_value === true"> |
1194 | + <img t-att-src="kanban_image('res.partner', 'image_small', record.id.value)" |
1195 | + class="oe_kanban_image"/> |
1196 | + </t> |
1197 | + <t t-if="record.has_image.raw_value === false"> |
1198 | + <t t-if="record.is_company.raw_value === true"> |
1199 | + <img t-att-src='_s + "/base/static/src/img/company_image.png"' |
1200 | + class="oe_kanban_image"/> |
1201 | + </t> |
1202 | + <t t-if="record.is_company.raw_value === false"> |
1203 | + <img t-att-src='_s + "/base/static/src/img/avatar.png"' |
1204 | + class="oe_kanban_image"/> |
1205 | + </t> |
1206 | + </t> |
1207 | + </a> |
1208 | + <div class="oe_kanban_details"> |
1209 | + <h4 class="oe_partner_heading"> |
1210 | + <a type="open"> |
1211 | + <field name="name"/> |
1212 | + </a> |
1213 | + </h4> |
1214 | + <div class="oe_kanban_partner_categories"/> |
1215 | + <div class="oe_kanban_partner_links"/> |
1216 | + <ul> |
1217 | + <li t-if="!record.parent_id.raw_value and record.function_id.raw_value"> |
1218 | + <field name="function_id"/> |
1219 | + </li> |
1220 | + <li t-if="record.parent_id.raw_value and record.function_id.raw_value"> |
1221 | + <field name="function_id"/> |
1222 | + , |
1223 | + <field name="parent_id"/> |
1224 | + </li> |
1225 | + <li t-if="record.city.raw_value and !record.country.raw_value"> |
1226 | + <field name="city"/> |
1227 | + </li> |
1228 | + <li t-if="!record.city.raw_value and record.country.raw_value"> |
1229 | + <field name="country"/> |
1230 | + </li> |
1231 | + <li t-if="record.city.raw_value and record.country.raw_value"> |
1232 | + <field name="city"/> |
1233 | + , |
1234 | + <field name="country"/> |
1235 | + </li> |
1236 | + <li t-if="record.email.raw_value"> |
1237 | + <a t-attf-href="mailto:#{record.email.raw_value}"> |
1238 | + <field name="email"/> |
1239 | + </a> |
1240 | + </li> |
1241 | + </ul> |
1242 | + </div> |
1243 | + </div> |
1244 | + </t> |
1245 | + </templates> |
1246 | + </kanban> |
1247 | + <form string="Contact" version="7.0"> |
1248 | + <sheet> |
1249 | + <field name="image" widget='image' class="oe_avatar oe_left" |
1250 | + options='{"preview_image": "image_medium"}'/> |
1251 | + <div class="oe_title"> |
1252 | + <label for="name" class="oe_edit_only"/> |
1253 | + <h1> |
1254 | + <field name="name" style="width: 70%%"/> |
1255 | + </h1> |
1256 | + </div> |
1257 | + <group> |
1258 | + <!-- inherited part --> |
1259 | + <field name="category_id" widget="many2many_tags" |
1260 | + placeholder="Tags..." style="width: 70%%" string="Tag"/> |
1261 | + <field name="parent_id" |
1262 | + placeholder="Organism" |
1263 | + domain="[('is_company','=',True)]" |
1264 | + string="Parent Organism"/> |
1265 | + <!-- inherited part end --> |
1266 | + <field name="function_id" placeholder="e.g. Sales Director"/> |
1267 | + <group colspan="4"> |
1268 | + <field name="start_date" /> |
1269 | + <field name="end_date"/> |
1270 | + <field name="naming"/> |
1271 | + </group> |
1272 | + <field name="email"/> |
1273 | + <field name="phone"/> |
1274 | + <field name="mobile"/> |
1275 | + </group> |
1276 | + <div> |
1277 | + <field name="use_parent_address"/> |
1278 | + <label for="use_parent_address" string="Use organism address"/> |
1279 | + </div> |
1280 | + <group> |
1281 | + <label for="type"/> |
1282 | + <div name="div_type"> |
1283 | + <field class="oe_inline" name="type"/> |
1284 | + </div> |
1285 | + <label for="street" string="Address" |
1286 | + attrs="{'invisible': [('use_parent_address','=', True)]}"/> |
1287 | + <div attrs="{'invisible': [('use_parent_address','=', True)]}" |
1288 | + name="div_address"> |
1289 | + <field name="street" placeholder="Street..."/> |
1290 | + <field name="street2"/> |
1291 | + <div class="address_format"> |
1292 | + <field name="city" placeholder="City" style="width: 40%%"/> |
1293 | + <field name="state_id" class="oe_no_button" |
1294 | + placeholder="State" style="width: 37%%" |
1295 | + options='{"no_open": True}' on_change="onchange_state(state_id)"/> |
1296 | + <field name="zip" placeholder="ZIP" style="width: 20%%"/> |
1297 | + </div> |
1298 | + <field name="country_id" placeholder="Country" |
1299 | + class="oe_no_button" options='{"no_open": True}'/> |
1300 | + </div> |
1301 | + </group> |
1302 | + <field name="supplier" invisible="True"/> |
1303 | + <group string="Bank Accounts"> |
1304 | + <field name="bank_ids" nolabel="1"> |
1305 | + <tree string="Bank Details"> |
1306 | + <field name="state" invisible="1"/> |
1307 | + <field name="sequence" invisible="1"/> |
1308 | + <field name="acc_number"/> |
1309 | + <field name="bank_name"/> |
1310 | + <field name="owner_name"/> |
1311 | + </tree> |
1312 | + </field> |
1313 | + </group> |
1314 | + </sheet> |
1315 | + </form> |
1316 | + </field> |
1317 | + </page> |
1318 | + </notebook> |
1319 | + <!--Replace function by function_id defined by organism--> |
1320 | + <field name="function" position="replace"/> |
1321 | + </field> |
1322 | + |
1323 | + </record> |
1324 | + <!--Add start_date, end_date, naming and account bank in partner view--> |
1325 | + <record id="view_position_info_form" model="ir.ui.view"> |
1326 | + <field name="name">position.info.form.inherit</field> |
1327 | + <field name="model">res.partner</field> |
1328 | + <field name="inherit_id" ref="base_contact.view_partner_form_inherit"/> |
1329 | + <field name="arch" type="xml"> |
1330 | + <xpath expr="//field[@name='other_contact_ids']/form//field[@name='category_id']" |
1331 | + position="attributes"> |
1332 | + <attribute name="string">Tag</attribute> |
1333 | + </xpath> |
1334 | + <xpath expr="//field[@name='other_contact_ids']/form//field[@name='function']" |
1335 | + position="after"> |
1336 | + <group colspan="4"> |
1337 | + <field name="start_date" /> |
1338 | + <field name="end_date"/> |
1339 | + <field name="naming"/> |
1340 | + </group> |
1341 | + </xpath> |
1342 | + <xpath expr="//field[@name='other_contact_ids']/form//field[@name='supplier']" |
1343 | + position="after"> |
1344 | + <group string="Bank Accounts"> |
1345 | + <field name="bank_ids" nolabel="1"/> |
1346 | + </group> |
1347 | + </xpath> |
1348 | + <xpath expr="//field[@name='other_contact_ids']/form//field[@name='parent_id']" |
1349 | + position="replace"> |
1350 | + <group colspan="4"> |
1351 | + <field name="parent_id" placeholder="Organism" |
1352 | + domain="[('is_company','=',True)]" |
1353 | + on_change="onchange_partner_function(parent_id)" |
1354 | + string="Parent Organism"/> |
1355 | + </group> |
1356 | + </xpath> |
1357 | + <xpath expr="//field[@name='other_contact_ids']/form//field[@name='function']" |
1358 | + position="replace"> |
1359 | + <group colspan="4"> |
1360 | + <field name="function_id" string="Function"/> |
1361 | + </group> |
1362 | + </xpath> |
1363 | + <xpath expr="//field[@name='other_contact_ids']/form//label[@for='use_parent_address']" |
1364 | + position="replace"> |
1365 | + <label for="use_parent_address" string="Use address organism"/> |
1366 | + </xpath> |
1367 | + <xpath expr="//field[@name='other_contact_ids']/kanban//field[@name='function']" |
1368 | + position="replace"> |
1369 | + <group colspan="4"> |
1370 | + <field name="function_id" string="Function"/> |
1371 | + </group> |
1372 | + </xpath> |
1373 | + <xpath expr="//field[@name='other_contact_ids']/kanban//field[@name='has_image']" |
1374 | + position="after"> |
1375 | + <templates> |
1376 | + <t t-name="kanban-box"> |
1377 | + <t t-set="color" t-value="kanban_color(record.color.raw_value)"/> |
1378 | + <div t-att-class="color + (record.title.raw_value == 1 ? ' oe_kanban_color_alert' : '')" |
1379 | + style="position: relative"> |
1380 | + <a t-if="! read_only_mode" type="delete" |
1381 | + style="position: absolute; right: 0; padding: 4px; diplay: inline-block"> |
1382 | + X |
1383 | + </a> |
1384 | + <div class="oe_module_vignette"> |
1385 | + <a type="open"> |
1386 | + <t t-if="record.has_image.raw_value === true"> |
1387 | + <img t-att-src="kanban_image('res.partner', 'image', |
1388 | + record.id.value, {'preview_image': 'image_small'})" |
1389 | + class="oe_avatar oe_kanban_avatar_smallbox"/> |
1390 | + </t> |
1391 | + <t t-if="record.image and record.image.raw_value !== false"> |
1392 | + <img t-att-src="'data:image/png;base64,'+record.image.raw_value" |
1393 | + class="oe_avatar oe_kanban_avatar_smallbox"/> |
1394 | + </t> |
1395 | + <t t-if="record.has_image.raw_value === false |
1396 | + and (!record.image or record.image.raw_value === false)"> |
1397 | + <t t-if="record.is_company.raw_value === true"> |
1398 | + <img t-att-src='_s + "/base/static/src/img/company_image.png"' |
1399 | + class="oe_kanban_image oe_kanban_avatar_smallbox"/> |
1400 | + </t> |
1401 | + <t t-if="record.is_company.raw_value === false"> |
1402 | + <img t-att-src='_s + "/base/static/src/img/avatar.png"' |
1403 | + class="oe_kanban_image oe_kanban_avatar_smallbox"/> |
1404 | + </t> |
1405 | + </t> |
1406 | + </a> |
1407 | + <div class="oe_module_desc"> |
1408 | + <div class="oe_kanban_box_content oe_kanban_color_bglight oe_kanban_color_border"> |
1409 | + <table class="oe_kanban_table"> |
1410 | + <tr> |
1411 | + <td class="oe_kanban_title1" align="left" valign="middle"> |
1412 | + <h4> |
1413 | + <a type="open"> |
1414 | + <field name="name"/> |
1415 | + </a> |
1416 | + </h4> |
1417 | + <i> |
1418 | + <t t-if="record.parent_id.raw_value and !record.function_id.raw_value"> |
1419 | + <field name="parent_id"/> |
1420 | + </t> |
1421 | + <t t-if="!record.parent_id.raw_value and record.function_id.raw_value"> |
1422 | + <field name="function_id"/> |
1423 | + </t> |
1424 | + <t t-if="record.parent_id.raw_value and record.function_id.raw_value"> |
1425 | + <field name="function_id"/> |
1426 | + , |
1427 | + <field name="parent_id"/> |
1428 | + </t> |
1429 | + </i> |
1430 | + <div> |
1431 | + <a t-if="record.email.raw_value" title="Mail" |
1432 | + t-att-href="'mailto:'+record.email.value"> |
1433 | + <field name="email"/> |
1434 | + </a> |
1435 | + </div> |
1436 | + <div t-if="record.phone.raw_value"> |
1437 | + Phone: <field name="phone"/> |
1438 | + </div> |
1439 | + <div t-if="record.mobile.raw_value"> |
1440 | + Mobile: <field name="mobile"/> |
1441 | + </div> |
1442 | + <div t-if="record.fax.raw_value"> |
1443 | + Fax: <field name="fax"/> |
1444 | + </div> |
1445 | + </td> |
1446 | + </tr> |
1447 | + </table> |
1448 | + </div> |
1449 | + </div> |
1450 | + </div> |
1451 | + </div> |
1452 | + </t> |
1453 | + </templates> |
1454 | + </xpath> |
1455 | + have the same form for contact and other postions |
1456 | + <field name="parent_id" position="replace"> |
1457 | + <field name="parent_id" placeholder="Parent organism" |
1458 | + domain="[('is_company','=',True)]" |
1459 | + attrs="{'invisible': [('is_company','=', False)]}"/> |
1460 | + </field> |
1461 | + <xpath expr="//field[@name='child_ids']/form//field[@name='supplier']" |
1462 | + position="after"> |
1463 | + <group string="Bank Accounts"> |
1464 | + <field name="bank_ids" nolabel="1"/> |
1465 | + </group> |
1466 | + </xpath> |
1467 | + |
1468 | + <xpath expr="//field[@name='child_ids']/form//field[@name='function']" |
1469 | + position="after"> |
1470 | + <group colspan="4"> |
1471 | + <field name="start_date" /> |
1472 | + <field name="end_date"/> |
1473 | + <field name="naming"/> |
1474 | + </group> |
1475 | + </xpath> |
1476 | + <xpath expr="//field[@name='child_ids']/form//field[@name='function']" |
1477 | + position="replace"> |
1478 | + <group colspan="4"> |
1479 | + <field name="parent_id" |
1480 | + placeholder="Organism" |
1481 | + domain="[('is_company','=',True)]" |
1482 | + string="Parent organism" /> |
1483 | + <field name="function_id" |
1484 | + readonly="False" |
1485 | + domain="[('id', 'in', parent.functions_ids[0][2])]" |
1486 | + string="Function"/> |
1487 | + </group> |
1488 | + </xpath> |
1489 | + |
1490 | + <xpath expr="//field[@name='child_ids']/form//label[@for='use_parent_address']" |
1491 | + position="replace"> |
1492 | + <label for="use_parent_address" string="Use address organism"/> |
1493 | + </xpath> |
1494 | + |
1495 | + <xpath expr="//field[@name='child_ids']/kanban//field[@name='function']" |
1496 | + position="replace"> |
1497 | + <group colspan="4"> |
1498 | + <field name="function_id" string="Function"/> |
1499 | + </group> |
1500 | + </xpath> |
1501 | + <xpath expr="//field[@name='other_contact_ids']/kanban//field[@name='has_image']" |
1502 | + position="after"> |
1503 | + <templates> |
1504 | + <t t-name="kanban-box"> |
1505 | + <div class="oe_kanban_vignette oe_semantic_html_override"> |
1506 | + <a type="open"> |
1507 | + <t t-if="record.has_image.raw_value === true"> |
1508 | + <img t-att-src="kanban_image('res.partner', 'image_small', record.id.value)" |
1509 | + class="oe_kanban_image"/> |
1510 | + </t> |
1511 | + <t t-if="record.has_image.raw_value === false"> |
1512 | + <t t-if="record.is_company.raw_value === true"> |
1513 | + <img t-att-src='_s + "/base/static/src/img/company_image.png"' |
1514 | + class="oe_kanban_image"/> |
1515 | + </t> |
1516 | + <t t-if="record.is_company.raw_value === false"> |
1517 | + <img t-att-src='_s + "/base/static/src/img/avatar.png"' |
1518 | + class="oe_kanban_image"/> |
1519 | + </t> |
1520 | + </t> |
1521 | + </a> |
1522 | + <div class="oe_kanban_details"> |
1523 | + <h4 class="oe_partner_heading"> |
1524 | + <a type="open"> |
1525 | + <field name="name"/> |
1526 | + </a> |
1527 | + </h4> |
1528 | + <div class="oe_kanban_partner_categories"/> |
1529 | + <div class="oe_kanban_partner_links"/> |
1530 | + <ul> |
1531 | + <li t-if="record.parent_id.raw_value and !record.function_id.raw_value"> |
1532 | + <field name="parent_id"/> |
1533 | + </li> |
1534 | + <li t-if="!record.parent_id.raw_value and record.function_id.raw_value"> |
1535 | + <field name="function_id"/> |
1536 | + </li> |
1537 | + <li t-if="record.parent_id.raw_value and record.function_id.raw_value"> |
1538 | + <field name="function_id"/> |
1539 | + , |
1540 | + <field name="parent_id"/> |
1541 | + </li> |
1542 | + <li t-if="record.city.raw_value and !record.country.raw_value"> |
1543 | + <field name="city"/> |
1544 | + </li> |
1545 | + <li t-if="!record.city.raw_value and record.country.raw_value"> |
1546 | + <field name="country"/> |
1547 | + </li> |
1548 | + <li t-if="record.city.raw_value and record.country.raw_value"> |
1549 | + <field name="city"/> |
1550 | + , |
1551 | + <field name="country"/> |
1552 | + </li> |
1553 | + <li t-if="record.email.raw_value"> |
1554 | + <a t-attf-href="mailto:#{record.email.raw_value}"> |
1555 | + <field name="email"/> |
1556 | + </a> |
1557 | + </li> |
1558 | + </ul> |
1559 | + </div> |
1560 | + </div> |
1561 | + </t> |
1562 | + </templates> |
1563 | + </xpath> |
1564 | + </field> |
1565 | + </record> |
1566 | + <!-- Actions for organism --> |
1567 | + <record id="action_partner_customer_form" model="ir.actions.act_window"> |
1568 | + <field name="name">Company</field> |
1569 | + <field name="type">ir.actions.act_window</field> |
1570 | + <field name="res_model">res.partner</field> |
1571 | + <field name="view_type">form</field> |
1572 | + <field name="view_mode">kanban,tree,form</field> |
1573 | + <field name="domain">[('is_company','=',1)]</field> |
1574 | + <field name="context" eval="{'default_is_company': True}"/> |
1575 | + <field name="filter" eval="True"/> |
1576 | + </record> |
1577 | + <!-- Actions for Contacts --> |
1578 | + <record id="action_partner_contact_form" model="ir.actions.act_window"> |
1579 | + <field name="name">Contacts</field> |
1580 | + <field name="type">ir.actions.act_window</field> |
1581 | + <field name="res_model">res.partner</field> |
1582 | + <field name="view_type">form</field> |
1583 | + <field name="view_mode">kanban,tree,form</field> |
1584 | + <field name="domain">[('is_company','=',0)]</field> |
1585 | + <field name="filter" eval="True"/> |
1586 | + </record> |
1587 | + |
1588 | + <!--Add country,street fields in tree partner view--> |
1589 | + <record model="ir.ui.view" id="view_partner_tree_country_address"> |
1590 | + <field name="model">res.partner</field> |
1591 | + <field name="inherit_id" ref="base.view_partner_tree"/> |
1592 | + <field name="arch" type="xml"> |
1593 | + <field name="country_id" position="replace"/> |
1594 | + <field name="name" position="after"> |
1595 | + <field name="country_id"/> |
1596 | + </field> |
1597 | + <field name="email" position="after"> |
1598 | + <field name="street" string="Address"/> |
1599 | + </field> |
1600 | + </field> |
1601 | + </record> |
1602 | + |
1603 | + <!-- Inherit Categories adding functions --> |
1604 | + <record id="view_partner_category_functions_form" model="ir.ui.view"> |
1605 | + <field name="name">Partner Categories Functions</field> |
1606 | + <field name="model">res.partner.category</field> |
1607 | + <field name="inherit_id" ref="base.view_partner_category_form"/> |
1608 | + <field name="arch" type="xml"> |
1609 | + <xpath expr="//form[@string='Partner Category']/group[1]" |
1610 | + position="after"> |
1611 | + <notebook position="inside"> |
1612 | + <page string="Functions"> |
1613 | + <separator string="Add function"/> |
1614 | + <group col="2" colspan="4"> |
1615 | + <field name="categoryfunction_ids" nolabel="1"> |
1616 | + <tree string="FunctionsTree"> |
1617 | + <field name="sequence"/> |
1618 | + <field name="functions_id"/> |
1619 | + </tree> |
1620 | + <form string="FunctionsForm"> |
1621 | + <field name="functions_id"/> |
1622 | + <field name="sequence"/> |
1623 | + </form> |
1624 | + </field> |
1625 | + </group> |
1626 | + </page> |
1627 | + </notebook> |
1628 | + </xpath> |
1629 | + </field> |
1630 | + </record> |
1631 | + |
1632 | + <!--Replace company by organism--> |
1633 | + <record id="view_partner_simple_form" model="ir.ui.view"> |
1634 | + <field name="name">res.partner.simplified.form</field> |
1635 | + <field name="model">res.partner</field> |
1636 | + <field name="arch" type="xml"> |
1637 | + <label for="is_company" position="replace"> |
1638 | + <label for="is_company" string="Is an Organism"/> |
1639 | + </label> |
1640 | + <field name="parent_id" position="replace"> |
1641 | + <field name="parent_id" |
1642 | + placeholder="Organism" |
1643 | + domain="[('is_company', '=', True)]" |
1644 | + context="{'default_is_company': True, 'default_supplier': supplier}" |
1645 | + attrs="{'invisible': [('is_company','=', True),('parent_id', '=', False)]}" |
1646 | + on_change="onchange_address(use_parent_address, parent_id)"/> |
1647 | + </field> |
1648 | + </field> |
1649 | + </record> |
1650 | + </data> |
1651 | +</openerp> |
1652 | |
1653 | === added directory 'base_contact_by_functions/security' |
1654 | === added file 'base_contact_by_functions/security/ir.model.access.csv' |
1655 | --- base_contact_by_functions/security/ir.model.access.csv 1970-01-01 00:00:00 +0000 |
1656 | +++ base_contact_by_functions/security/ir.model.access.csv 2014-04-23 14:22:35 +0000 |
1657 | @@ -0,0 +1,5 @@ |
1658 | +"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" |
1659 | +"access_functions","functions_user","model_functions","base.group_user",1,1,1,1 |
1660 | +"access_res_category_functions","access_res_category_functions_user","model_res_category_functions","base.group_user",1,1,1,1 |
1661 | +"access_res_institution","access_res_institution_user","model_res_institution","base.group_user",1,1,1,1 |
1662 | +"access_res_institution_functions","access_res_institution_functions_user","model_res_institution_functions","base.group_user",1,1,1,1 |
1663 | |
1664 | === added directory 'base_contact_by_functions/tests' |
1665 | === added file 'base_contact_by_functions/tests/__init__.py' |
1666 | --- base_contact_by_functions/tests/__init__.py 1970-01-01 00:00:00 +0000 |
1667 | +++ base_contact_by_functions/tests/__init__.py 2014-04-23 14:22:35 +0000 |
1668 | @@ -0,0 +1,31 @@ |
1669 | +# -*- encoding: utf-8 -*- |
1670 | +############################################################################## |
1671 | +# |
1672 | +# OpenERP, Open Source Management Solution |
1673 | +# This module copyright (C) 2013 Savoir-faire Linux |
1674 | +# (<http://www.savoirfairelinux.com>). |
1675 | +# |
1676 | +# This program is free software: you can redistribute it and/or modify |
1677 | +# it under the terms of the GNU Affero General Public License as |
1678 | +# published by the Free Software Foundation, either version 3 of the |
1679 | +# License, or (at your option) any later version. |
1680 | +# |
1681 | +# This program is distributed in the hope that it will be useful, |
1682 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
1683 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1684 | +# GNU Affero General Public License for more details. |
1685 | +# |
1686 | +# You should have received a copy of the GNU Affero General Public License |
1687 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
1688 | +# |
1689 | +############################################################################## |
1690 | + |
1691 | +from . import test_functions |
1692 | +from . import test_institutions |
1693 | +from . import test_partner_category |
1694 | + |
1695 | +checks = [ |
1696 | + test_functions, |
1697 | + test_institutions, |
1698 | + test_partner_category |
1699 | +] |
1700 | |
1701 | === added file 'base_contact_by_functions/tests/test_functions.py' |
1702 | --- base_contact_by_functions/tests/test_functions.py 1970-01-01 00:00:00 +0000 |
1703 | +++ base_contact_by_functions/tests/test_functions.py 2014-04-23 14:22:35 +0000 |
1704 | @@ -0,0 +1,98 @@ |
1705 | +# -*- encoding: utf-8 -*- |
1706 | +############################################################################## |
1707 | +# |
1708 | +# OpenERP, Open Source Management Solution |
1709 | +# This module copyright (C) 2013 Savoir-faire Linux |
1710 | +# (<http://www.savoirfairelinux.com>). |
1711 | +# |
1712 | +# This program is free software: you can redistribute it and/or modify |
1713 | +# it under the terms of the GNU Affero General Public License as |
1714 | +# published by the Free Software Foundation, either version 3 of the |
1715 | +# License, or (at your option) any later version. |
1716 | +# |
1717 | +# This program is distributed in the hope that it will be useful, |
1718 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
1719 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1720 | +# GNU Affero General Public License for more details. |
1721 | +# |
1722 | +# You should have received a copy of the GNU Affero General Public License |
1723 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
1724 | +# |
1725 | +############################################################################## |
1726 | + |
1727 | +from openerp.tests.common import TransactionCase |
1728 | +from openerp.osv.orm import browse_record |
1729 | + |
1730 | + |
1731 | +class Base_Test_function(TransactionCase): |
1732 | + """ |
1733 | + Simple test creating a function |
1734 | + This is a base class for function test cases. |
1735 | + Inherit from this and setup values. |
1736 | + """ |
1737 | + |
1738 | + def setUp(self, vals={}): |
1739 | + """ |
1740 | + Setting up function. |
1741 | + """ |
1742 | + # Default test values |
1743 | + self.vals = {'name': 'This is a test function name', |
1744 | + 'acronym': 'This is a test function acronym', |
1745 | + } |
1746 | + super(Base_Test_function, self).setUp() |
1747 | + self.vals = dict(self.vals.items() + vals.items()) |
1748 | + # Create the function object; we will be testing this, so store in self |
1749 | + function_function = self.registry('functions') |
1750 | + self.function_id = function_function.create(self.cr, self.uid, self.vals, context=None) |
1751 | + |
1752 | + def test_function(self): |
1753 | + """ |
1754 | + Checking the function creation. |
1755 | + """ |
1756 | + function_function = self.registry('functions') |
1757 | + function_obj = function_function.browse(self.cr, self.uid, self.function_id, context=None) |
1758 | + for field in self.vals: |
1759 | + val = function_obj[field] |
1760 | + if type(val) == browse_record: |
1761 | + self.assertEquals(self.vals[field], val.id, |
1762 | + "IDs for %s don't match: (%i != %i)" % |
1763 | + (field, self.vals[field], val.id)) |
1764 | + else: |
1765 | + self.assertEquals(str(self.vals[field]), str(val), |
1766 | + "Values for %s don't match: (%s != %s)" % |
1767 | + (field, str(self.vals[field]), str(val))) |
1768 | + |
1769 | + |
1770 | +class Test_function_bad(Base_Test_function): |
1771 | + """ |
1772 | + Simple test creating a function, test against bad values |
1773 | + """ |
1774 | + def setUp(self): |
1775 | + """ |
1776 | + Setting up function, then changing the values to test against. |
1777 | + """ |
1778 | + super(Test_function_bad, self).setUp() |
1779 | + # Change vals to something wrong |
1780 | + self.vals = {'name': 'This is the wrong function name', |
1781 | + 'acronym': 'This is the wrong function acronym', |
1782 | + } |
1783 | + |
1784 | + def test_function(self): |
1785 | + """ |
1786 | + Checking the function creation, assertions should all be false. |
1787 | + """ |
1788 | + function_function = self.registry('functions') |
1789 | + function_obj = function_function.browse(self.cr, self.uid, self.function_id, context=None) |
1790 | + for field in self.vals: |
1791 | + val = function_obj[field] |
1792 | + if type(val) == browse_record: |
1793 | + self.assertNotEqual(self.vals[field], val.id, |
1794 | + "IDs for %s don't match: (%i != %i)" % |
1795 | + (field, self.vals[field], val.id)) |
1796 | + else: |
1797 | + self.assertNotEqual(str(self.vals[field]), str(val), |
1798 | + "Values for %s don't match: (%s != %s)" % |
1799 | + (field, str(self.vals[field]), str(val))) |
1800 | + |
1801 | + |
1802 | +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: |
1803 | |
1804 | === added file 'base_contact_by_functions/tests/test_institutions.py' |
1805 | --- base_contact_by_functions/tests/test_institutions.py 1970-01-01 00:00:00 +0000 |
1806 | +++ base_contact_by_functions/tests/test_institutions.py 2014-04-23 14:22:35 +0000 |
1807 | @@ -0,0 +1,99 @@ |
1808 | +# -*- encoding: utf-8 -*- |
1809 | +############################################################################## |
1810 | +# |
1811 | +# OpenERP, Open Source Management Solution |
1812 | +# This module copyright (C) 2013 Savoir-faire Linux |
1813 | +# (<http://www.savoirfairelinux.com>). |
1814 | +# |
1815 | +# This program is free software: you can redistribute it and/or modify |
1816 | +# it under the terms of the GNU Affero General Public License as |
1817 | +# published by the Free Software Foundation, either version 3 of the |
1818 | +# License, or (at your option) any later version. |
1819 | +# |
1820 | +# This program is distributed in the hope that it will be useful, |
1821 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
1822 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1823 | +# GNU Affero General Public License for more details. |
1824 | +# |
1825 | +# You should have received a copy of the GNU Affero General Public License |
1826 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
1827 | +# |
1828 | +############################################################################## |
1829 | + |
1830 | +from openerp.tests.common import TransactionCase |
1831 | +from openerp.osv.orm import browse_record |
1832 | + |
1833 | + |
1834 | +class Base_Test_institution(TransactionCase): |
1835 | + """ |
1836 | + Simple test creating a institution |
1837 | + This is a base class for institution test cases. |
1838 | + Inherit from this and setup values. |
1839 | + """ |
1840 | + |
1841 | + def setUp(self, vals={}): |
1842 | + """ |
1843 | + Setting up institution. |
1844 | + """ |
1845 | + # Default test values |
1846 | + self.vals = {'name': 'This is a test institution name', |
1847 | + 'sequence': '1', |
1848 | + 'institutionfunction_ids': '[]', |
1849 | + } |
1850 | + super(Base_Test_institution, self).setUp() |
1851 | + self.vals = dict(self.vals.items() + vals.items()) |
1852 | + # Create the institution object; we will be testing this, so store in self |
1853 | + institution_institution = self.registry('res.institution') |
1854 | + self.institution_id = institution_institution.create(self.cr, self.uid, self.vals, context=None) |
1855 | + |
1856 | + def test_institution(self): |
1857 | + """ |
1858 | + Checking the institution creation. |
1859 | + """ |
1860 | + institution_institution = self.registry('res.institution') |
1861 | + institution_obj = institution_institution.browse(self.cr, self.uid, self.institution_id, context=None) |
1862 | + for field in self.vals: |
1863 | + val = institution_obj[field] |
1864 | + if type(val) == browse_record: |
1865 | + self.assertEquals(self.vals[field], val.id, |
1866 | + "IDs for %s don't match: (%i != %i)" % |
1867 | + (field, self.vals[field], val.id)) |
1868 | + else: |
1869 | + self.assertEquals(str(self.vals[field]), str(val), |
1870 | + "Values for %s don't match: (%s != %s)" % |
1871 | + (field, str(self.vals[field]), str(val))) |
1872 | + |
1873 | + |
1874 | +class Test_institution_bad(Base_Test_institution): |
1875 | + """ |
1876 | + Simple test creating a institution, test against bad values |
1877 | + """ |
1878 | + def setUp(self): |
1879 | + """ |
1880 | + Setting up institution, then changing the values to test against. |
1881 | + """ |
1882 | + super(Test_institution_bad, self).setUp() |
1883 | + # Change vals to something wrong |
1884 | + self.vals = {'name': 'This is the wrong institution name', |
1885 | + 'sequence': '0', |
1886 | + } |
1887 | + |
1888 | + def test_institution(self): |
1889 | + """ |
1890 | + Checking the institution creation, assertions should all be false. |
1891 | + """ |
1892 | + institution_institution = self.registry('res.institution') |
1893 | + institution_obj = institution_institution.browse(self.cr, self.uid, self.institution_id, context=None) |
1894 | + for field in self.vals: |
1895 | + val = institution_obj[field] |
1896 | + if type(val) == browse_record: |
1897 | + self.assertNotEqual(self.vals[field], val.id, |
1898 | + "IDs for %s don't match: (%i != %i)" % |
1899 | + (field, self.vals[field], val.id)) |
1900 | + else: |
1901 | + self.assertNotEqual(str(self.vals[field]), str(val), |
1902 | + "Values for %s don't match: (%s != %s)" % |
1903 | + (field, str(self.vals[field]), str(val))) |
1904 | + |
1905 | + |
1906 | +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: |
1907 | |
1908 | === added file 'base_contact_by_functions/tests/test_partner_category.py' |
1909 | --- base_contact_by_functions/tests/test_partner_category.py 1970-01-01 00:00:00 +0000 |
1910 | +++ base_contact_by_functions/tests/test_partner_category.py 2014-04-23 14:22:35 +0000 |
1911 | @@ -0,0 +1,105 @@ |
1912 | +# -*- encoding: utf-8 -*- |
1913 | +############################################################################## |
1914 | +# |
1915 | +# OpenERP, Open Source Management Solution |
1916 | +# This module copyright (C) 2013 Savoir-faire Linux |
1917 | +# (<http://www.savoirfairelinux.com>). |
1918 | +# |
1919 | +# This program is free software: you can redistribute it and/or modify |
1920 | +# it under the terms of the GNU Affero General Public License as |
1921 | +# published by the Free Software Foundation, either version 3 of the |
1922 | +# License, or (at your option) any later version. |
1923 | +# |
1924 | +# This program is distributed in the hope that it will be useful, |
1925 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
1926 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1927 | +# GNU Affero General Public License for more details. |
1928 | +# |
1929 | +# You should have received a copy of the GNU Affero General Public License |
1930 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
1931 | +# |
1932 | +############################################################################## |
1933 | + |
1934 | +from openerp.tests.common import TransactionCase |
1935 | +from openerp.osv.orm import browse_record |
1936 | + |
1937 | + |
1938 | +class Base_Test_partner_category(TransactionCase): |
1939 | + """ |
1940 | + Simple test creating a partner_category |
1941 | + This is a base class for partner_category test cases. |
1942 | + Inherit from this and setup values. |
1943 | + """ |
1944 | + |
1945 | + def setUp(self, vals={}): |
1946 | + """ |
1947 | + Setting up partner_category. |
1948 | + """ |
1949 | + # Default test values |
1950 | + self.vals = {'name': 'This is a test partner_category name', |
1951 | + 'active': True, |
1952 | + } |
1953 | + super(Base_Test_partner_category, self).setUp() |
1954 | + # Create the parent |
1955 | + partner_category_partner = self.registry('res.partner.category') |
1956 | + self.vals['parent_id'] = partner_category_partner.create(self.cr, self.uid, { |
1957 | + 'name': 'Test parent', |
1958 | + 'active': True, }, context=None) |
1959 | + |
1960 | + self.vals = dict(self.vals.items() + vals.items()) |
1961 | + # Create the partner_category object; we will be testing this, so store in self |
1962 | + self.partner_category_id = partner_category_partner.create(self.cr, self.uid, self.vals, context=None) |
1963 | + |
1964 | + def test_partner_category(self): |
1965 | + """ |
1966 | + Checking the partner_category creation. |
1967 | + """ |
1968 | + partner_category = self.registry('res.partner.category') |
1969 | + partner_category_obj = partner_category.browse(self.cr, self.uid, self.partner_category_id, context=None) |
1970 | + for field in self.vals: |
1971 | + val = partner_category_obj[field] |
1972 | + if type(val) == browse_record: |
1973 | + self.assertEquals(self.vals[field], val.id, |
1974 | + "IDs for %s don't match: (%i != %i)" % |
1975 | + (field, self.vals[field], val.id)) |
1976 | + else: |
1977 | + self.assertEquals(str(self.vals[field]), str(val), |
1978 | + "Values for %s don't match: (%s != %s)" % |
1979 | + (field, str(self.vals[field]), str(val))) |
1980 | + |
1981 | + |
1982 | +class Test_partner_category_bad(Base_Test_partner_category): |
1983 | + """ |
1984 | + Simple test creating a partner_category, test against bad values |
1985 | + """ |
1986 | + def setUp(self): |
1987 | + """ |
1988 | + Setting up partner_category, then changing the values to test against. |
1989 | + """ |
1990 | + super(Test_partner_category_bad, self).setUp() |
1991 | + # Change vals to something wrong |
1992 | + self.vals = {'name': 'This is the wrong partner_category name', |
1993 | + 'active': False, |
1994 | + } |
1995 | + |
1996 | + def test_partner_category(self): |
1997 | + """ |
1998 | + Checking the partner_category creation, assertions should all be false. |
1999 | + """ |
2000 | + partner_category_partner_category = self.registry('res.partner.category') |
2001 | + partner_category_obj = partner_category_partner_category.browse(self.cr, self.uid, |
2002 | + self.partner_category_id, |
2003 | + context=None) |
2004 | + for field in self.vals: |
2005 | + val = partner_category_obj[field] |
2006 | + if type(val) == browse_record: |
2007 | + self.assertNotEqual(self.vals[field], val.id, |
2008 | + "IDs for %s don't match: (%i != %i)" % |
2009 | + (field, self.vals[field], val.id)) |
2010 | + else: |
2011 | + self.assertNotEqual(str(self.vals[field]), str(val), |
2012 | + "Values for %s don't match: (%s != %s)" % |
2013 | + (field, str(self.vals[field]), str(val))) |
2014 | + |
2015 | + |
2016 | +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: |
2017 | |
2018 | === added directory 'base_contact_by_functions_partner_firstname' |
2019 | === added file 'base_contact_by_functions_partner_firstname/__init__.py' |
2020 | --- base_contact_by_functions_partner_firstname/__init__.py 1970-01-01 00:00:00 +0000 |
2021 | +++ base_contact_by_functions_partner_firstname/__init__.py 2014-04-23 14:22:35 +0000 |
2022 | @@ -0,0 +1,25 @@ |
2023 | +# -*- encoding: utf-8 -*- |
2024 | +############################################################################## |
2025 | +# |
2026 | +# OpenERP, Open Source Management Solution |
2027 | +# This module copyright (C) 2013 Savoir-faire Linux |
2028 | +# (<http://www.savoirfairelinux.com>). |
2029 | +# |
2030 | +# This program is free software: you can redistribute it and/or modify |
2031 | +# it under the terms of the GNU Affero General Public License as |
2032 | +# published by the Free Software Foundation, either version 3 of the |
2033 | +# License, or (at your option) any later version. |
2034 | +# |
2035 | +# This program is distributed in the hope that it will be useful, |
2036 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2037 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2038 | +# GNU Affero General Public License for more details. |
2039 | +# |
2040 | +# You should have received a copy of the GNU Affero General Public License |
2041 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
2042 | +# |
2043 | +############################################################################## |
2044 | + |
2045 | +import res_partner |
2046 | + |
2047 | +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: |
2048 | |
2049 | === added file 'base_contact_by_functions_partner_firstname/__openerp__.py' |
2050 | --- base_contact_by_functions_partner_firstname/__openerp__.py 1970-01-01 00:00:00 +0000 |
2051 | +++ base_contact_by_functions_partner_firstname/__openerp__.py 2014-04-23 14:22:35 +0000 |
2052 | @@ -0,0 +1,53 @@ |
2053 | +# -*- encoding: utf-8 -*- |
2054 | +############################################################################## |
2055 | +# |
2056 | +# OpenERP, Open Source Management Solution |
2057 | +# This module copyright (C) 2013 Savoir-faire Linux |
2058 | +# (<http://www.savoirfairelinux.com>). |
2059 | +# |
2060 | +# This program is free software: you can redistribute it and/or modify |
2061 | +# it under the terms of the GNU Affero General Public License as |
2062 | +# published by the Free Software Foundation, either version 3 of the |
2063 | +# License, or (at your option) any later version. |
2064 | +# |
2065 | +# This program is distributed in the hope that it will be useful, |
2066 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2067 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2068 | +# GNU Affero General Public License for more details. |
2069 | +# |
2070 | +# You should have received a copy of the GNU Affero General Public License |
2071 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
2072 | +# |
2073 | +############################################################################## |
2074 | + |
2075 | +{ |
2076 | + 'name': 'Contacts by Functions - Partner Firstname Bindings', |
2077 | + 'version': '0.1', |
2078 | + 'category': 'Customer Relationship Management', |
2079 | + 'summary': 'Contacts by Functions - Partner Firstname Bindings', |
2080 | + 'description': """ |
2081 | +Contacts by Functions - Partner Firstname Bindings |
2082 | +================================================== |
2083 | + |
2084 | +Contributors |
2085 | +------------ |
2086 | +* El Hadji Dem (elhadji.dem@savoirfairelinux.com) |
2087 | +""", |
2088 | + 'author': 'Savoir-faire Linux', |
2089 | + 'website': 'www.savoirfairelinux.com', |
2090 | + 'license': 'AGPL-3', |
2091 | + 'depends': [ |
2092 | + 'base_contact_by_functions', |
2093 | + 'partner_firstname', |
2094 | + ], |
2095 | + 'data': [ |
2096 | + 'res_partner_view.xml', |
2097 | + ], |
2098 | + 'test': [], |
2099 | + 'demo': [ |
2100 | + ], |
2101 | + 'installable': True, |
2102 | + 'auto_install': True, |
2103 | +} |
2104 | + |
2105 | +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: |
2106 | |
2107 | === added directory 'base_contact_by_functions_partner_firstname/i18n' |
2108 | === added file 'base_contact_by_functions_partner_firstname/i18n/base_contact_by_functions_partner_firstname.pot' |
2109 | --- base_contact_by_functions_partner_firstname/i18n/base_contact_by_functions_partner_firstname.pot 1970-01-01 00:00:00 +0000 |
2110 | +++ base_contact_by_functions_partner_firstname/i18n/base_contact_by_functions_partner_firstname.pot 2014-04-23 14:22:35 +0000 |
2111 | @@ -0,0 +1,27 @@ |
2112 | +# Translation of OpenERP Server. |
2113 | +# This file contains the translation of the following modules: |
2114 | +# * base_contact_by_functions_partner_firstname |
2115 | +# |
2116 | +msgid "" |
2117 | +msgstr "" |
2118 | +"Project-Id-Version: OpenERP Server 7.0\n" |
2119 | +"Report-Msgid-Bugs-To: \n" |
2120 | +"POT-Creation-Date: 2014-01-03 07:16+0000\n" |
2121 | +"PO-Revision-Date: 2014-01-03 02:17-0500\n" |
2122 | +"Last-Translator: EL Hadji DEM <elhadji.dem@savoirfairelinux.com>\n" |
2123 | +"Language-Team: \n" |
2124 | +"MIME-Version: 1.0\n" |
2125 | +"Content-Type: text/plain; charset=UTF-8\n" |
2126 | +"Content-Transfer-Encoding: 8bit\n" |
2127 | +"Plural-Forms: \n" |
2128 | +"X-Generator: Poedit 1.5.4\n" |
2129 | + |
2130 | +#. module: base_contact_by_functions_partner_firstname |
2131 | +#: view:res.partner:0 |
2132 | +msgid "lastname" |
2133 | +msgstr "" |
2134 | + |
2135 | +#. module: base_contact_by_functions_partner_firstname |
2136 | +#: view:res.partner:0 |
2137 | +msgid "Firstname" |
2138 | +msgstr "" |
2139 | |
2140 | === added file 'base_contact_by_functions_partner_firstname/i18n/fr.po' |
2141 | --- base_contact_by_functions_partner_firstname/i18n/fr.po 1970-01-01 00:00:00 +0000 |
2142 | +++ base_contact_by_functions_partner_firstname/i18n/fr.po 2014-04-23 14:22:35 +0000 |
2143 | @@ -0,0 +1,27 @@ |
2144 | +# Translation of OpenERP Server. |
2145 | +# This file contains the translation of the following modules: |
2146 | +# * base_contact_by_functions_partner_firstname |
2147 | +# |
2148 | +msgid "" |
2149 | +msgstr "" |
2150 | +"Project-Id-Version: OpenERP Server 7.0\n" |
2151 | +"Report-Msgid-Bugs-To: \n" |
2152 | +"POT-Creation-Date: 2014-01-03 07:17+0000\n" |
2153 | +"PO-Revision-Date: 2014-01-03 02:18-0500\n" |
2154 | +"Last-Translator: EL Hadji DEM <elhadji.dem@savoirfairelinux.com>\n" |
2155 | +"Language-Team: \n" |
2156 | +"MIME-Version: 1.0\n" |
2157 | +"Content-Type: text/plain; charset=UTF-8\n" |
2158 | +"Content-Transfer-Encoding: 8bit\n" |
2159 | +"Plural-Forms: \n" |
2160 | +"X-Generator: Poedit 1.5.4\n" |
2161 | + |
2162 | +#. module: base_contact_by_functions_partner_firstname |
2163 | +#: view:res.partner:0 |
2164 | +msgid "lastname" |
2165 | +msgstr "Nom" |
2166 | + |
2167 | +#. module: base_contact_by_functions_partner_firstname |
2168 | +#: view:res.partner:0 |
2169 | +msgid "Firstname" |
2170 | +msgstr "Prénom" |
2171 | |
2172 | === added file 'base_contact_by_functions_partner_firstname/res_partner.py' |
2173 | --- base_contact_by_functions_partner_firstname/res_partner.py 1970-01-01 00:00:00 +0000 |
2174 | +++ base_contact_by_functions_partner_firstname/res_partner.py 2014-04-23 14:22:35 +0000 |
2175 | @@ -0,0 +1,76 @@ |
2176 | +# -*- encoding: utf-8 -*- |
2177 | +############################################################################## |
2178 | +# |
2179 | +# OpenERP, Open Source Management Solution |
2180 | +# This module copyright (C) 2013 Savoir-faire Linux |
2181 | +# (<http://www.savoirfairelinux.com>). |
2182 | +# |
2183 | +# This program is free software: you can redistribute it and/or modify |
2184 | +# it under the terms of the GNU Affero General Public License as |
2185 | +# published by the Free Software Foundation, either version 3 of the |
2186 | +# License, or (at your option) any later version. |
2187 | +# |
2188 | +# This program is distributed in the hope that it will be useful, |
2189 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2190 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2191 | +# GNU Affero General Public License for more details. |
2192 | +# |
2193 | +# You should have received a copy of the GNU Affero General Public License |
2194 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
2195 | +# |
2196 | +############################################################################## |
2197 | + |
2198 | +import time |
2199 | +from openerp.osv import orm, fields |
2200 | + |
2201 | + |
2202 | +class res_partner(orm.Model): |
2203 | + """ |
2204 | + Inherits partner and adds functions_ids : List of functions |
2205 | + """ |
2206 | + _inherit = 'res.partner' |
2207 | + |
2208 | + def create(self, cr, user, vals, context=None): |
2209 | + context = self._basecontact_check_context(cr, user, 'create', context) |
2210 | + if not vals.get('name') and vals.get('contact_id'): |
2211 | + vals['name'] = self.browse(cr, user, vals['contact_id'], context=context).name |
2212 | + if vals.get('end_date'): |
2213 | + if vals['end_date'] and vals['end_date'] <= time.strftime('%Y-%m-%d'): |
2214 | + vals['active'] = False |
2215 | + if vals.get('contact_type') and vals.get('contact_type') == 'standalone': |
2216 | + contact_vals = {key: vals[key] for key in vals.keys() if key != 'parent_id'} |
2217 | + contact_vals['active'] = True |
2218 | + contact_vals['function_id'] = None |
2219 | + vals['contact_id'] = super(res_partner, self).create(cr, user, contact_vals, |
2220 | + context=context) |
2221 | + self.write(cr, user, vals['contact_id'], { |
2222 | + 'firstname': vals.get('firstname', ''), |
2223 | + 'lastname': vals.get('lastname', ''), |
2224 | + }, context=context) |
2225 | + # Check if we create existing contact from company(ie: company is true) |
2226 | + # Check if we create another function from contact view |
2227 | + if vals.get('contact_type') == 'attached' or (not vals.get('contact_type') and vals.get('contact_id')): |
2228 | + contact_info = self.browse(cr, user, vals.get('contact_id'), context=context) |
2229 | + vals['firstname'] = contact_info.firstname |
2230 | + vals['title'] = contact_info.title.id or '' |
2231 | + |
2232 | + if ('contact_id'in vals and ('reset_password' in context or |
2233 | + 'install_mode' in context)): |
2234 | + return vals['contact_id'] |
2235 | + res = super(res_partner, self).create(cr, user, vals, context=context) |
2236 | + return res |
2237 | + |
2238 | + def write(self, cr, user, ids, vals, context=None): |
2239 | + context = self._basecontact_check_context(cr, user, 'write', context) |
2240 | + if vals.get('end_date'): |
2241 | + if vals['end_date'] and vals['end_date'] <= time.strftime('%Y-%m-%d'): |
2242 | + vals['active'] = False |
2243 | + if vals.get('contact_type') and vals.get('contact_type') == 'standalone': |
2244 | + contact_vals = {key: vals[key] for key in vals.keys() if key != 'parent_id'} |
2245 | + contact_vals['active'] = True |
2246 | + contact_vals['function_id'] = None |
2247 | + vals['contact_id'] = super(res_partner, self).write(cr, user, contact_vals, |
2248 | + context=context) |
2249 | + return super(res_partner, self).write(cr, user, ids, vals, context=context) |
2250 | + |
2251 | +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: |
2252 | |
2253 | === added file 'base_contact_by_functions_partner_firstname/res_partner_view.xml' |
2254 | --- base_contact_by_functions_partner_firstname/res_partner_view.xml 1970-01-01 00:00:00 +0000 |
2255 | +++ base_contact_by_functions_partner_firstname/res_partner_view.xml 2014-04-23 14:22:35 +0000 |
2256 | @@ -0,0 +1,71 @@ |
2257 | +<?xml version = "1.0" encoding="utf-8"?> |
2258 | +<openerp> |
2259 | + <data> |
2260 | + |
2261 | + <!--Redefine this part of view from firstname_partner module --> |
2262 | + <record id="view_partner_form_firstname_inherit11" model="ir.ui.view"> |
2263 | + <field name="name">res.partner.form.firstname.inherit11</field> |
2264 | + <field name="model">res.partner</field> |
2265 | + <field name="inherit_id" ref="partner_firstname.view_partner_form_firstname"/> |
2266 | + <field name="arch" type="xml"> |
2267 | + <!--Redefine firstname field in view partner--> |
2268 | + <field name="firstname" position="replace"> |
2269 | + <group attrs="{'invisible': [('is_company', '=', True)]}"> |
2270 | + <field name="firstname"/> |
2271 | + </group> |
2272 | + </field> |
2273 | + <!--Redefine firstname field in contact view--> |
2274 | + <xpath expr="//form[@string='Contact']/sheet/div//field[@name='firstname']" position="replace"> |
2275 | + <field name="firstname" attrs="{'invisible': [('contact_type', '=', 'attached')]}"/> |
2276 | + </xpath> |
2277 | + </field> |
2278 | + </record> |
2279 | + |
2280 | + <!--Replace name by full name in kanban view--> |
2281 | + <record id="view_partner_form_firstname_inherit11" model="ir.ui.view"> |
2282 | + <field name="model">res.partner</field> |
2283 | + <field name="inherit_id" ref="base_contact_by_functions.view_contact_by_function_form"/> |
2284 | + <field name="arch" type="xml"> |
2285 | + <xpath expr="//field[@name='other_contact_history_ids']/kanban//field[@name='name']" position="replace"> |
2286 | + <field name="lastname"/> |
2287 | + </xpath> |
2288 | + <xpath expr="//field[@name='other_contact_history_ids']/kanban/templates//t[@t-name='kanban-box']//div[@class='oe_kanban_details']//field[@name='name']" |
2289 | + position="before"> |
2290 | + <field name="firstname"/> |
2291 | + </xpath> |
2292 | + <!--Display firstname and name after Image--> |
2293 | + <xpath expr="//field[@name='other_contact_history_ids']/form[@string='Contact']/sheet//field[@name='image']" |
2294 | + position="after"> |
2295 | + <h1> |
2296 | + <field name="contact_id" style="width: 70%%" readonly="1"/> |
2297 | + </h1> |
2298 | + </xpath> |
2299 | + </field> |
2300 | + </record> |
2301 | + |
2302 | + <!--Display firstname and name in kanban view for other position --> |
2303 | + <record id="view_partner_form_firstname_name" model="ir.ui.view"> |
2304 | + <field name="name">res.partner.form.firstname.name</field> |
2305 | + <field name="model">res.partner</field> |
2306 | + <field name="inherit_id" ref="base_contact_by_functions.view_position_info_form"/> |
2307 | + <field name="arch" type="xml"> |
2308 | + <xpath expr="//field[@name='other_contact_ids']/form[@string='Contact']/sheet/div//field[@name='name']" |
2309 | + position="replace"/> |
2310 | + <xpath expr="//field[@name='other_contact_ids']/form[@string='Contact']/sheet//field[@name='image']" |
2311 | + position="after"> |
2312 | + <h1> |
2313 | + <field name="contact_id" style="width: 70%%" readonly="1"/> |
2314 | + </h1> |
2315 | + </xpath> |
2316 | + <!--I don't want to display the label field, so I hide it--> |
2317 | + <xpath expr="//field[@name='other_contact_ids']/form[@string='Contact']/sheet/div//label[@for='name']" |
2318 | + position="replace"/> |
2319 | + <!--Add firstname before name in templates view--> |
2320 | + <xpath expr="//t[@t-name='kanban-box']//div[@class='oe_kanban_details']/h4[@class='oe_partner_heading']//field[@name='name']" |
2321 | + position="before"> |
2322 | + <field name="firstname"/> |
2323 | + </xpath> |
2324 | + </field> |
2325 | + </record> |
2326 | + </data> |
2327 | +</openerp> |
2328 | |
2329 | === added directory 'base_contact_by_functions_partner_firstname/tests' |
2330 | === added file 'base_contact_by_functions_partner_firstname/tests/__init__.py' |
2331 | --- base_contact_by_functions_partner_firstname/tests/__init__.py 1970-01-01 00:00:00 +0000 |
2332 | +++ base_contact_by_functions_partner_firstname/tests/__init__.py 2014-04-23 14:22:35 +0000 |
2333 | @@ -0,0 +1,27 @@ |
2334 | +# -*- encoding: utf-8 -*- |
2335 | +############################################################################## |
2336 | +# |
2337 | +# OpenERP, Open Source Management Solution |
2338 | +# This module copyright (C) 2010 - 2014 Savoir-faire Linux |
2339 | +# (<http://www.savoirfairelinux.com>). |
2340 | +# |
2341 | +# This program is free software: you can redistribute it and/or modify |
2342 | +# it under the terms of the GNU Affero General Public License as |
2343 | +# published by the Free Software Foundation, either version 3 of the |
2344 | +# License, or (at your option) any later version. |
2345 | +# |
2346 | +# This program is distributed in the hope that it will be useful, |
2347 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2348 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2349 | +# GNU Affero General Public License for more details. |
2350 | +# |
2351 | +# You should have received a copy of the GNU Affero General Public License |
2352 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
2353 | +# |
2354 | +############################################################################## |
2355 | + |
2356 | +from . import test_partner |
2357 | + |
2358 | +checks = [ |
2359 | + test_partner, |
2360 | +] |
2361 | |
2362 | === added file 'base_contact_by_functions_partner_firstname/tests/test_partner.py' |
2363 | --- base_contact_by_functions_partner_firstname/tests/test_partner.py 1970-01-01 00:00:00 +0000 |
2364 | +++ base_contact_by_functions_partner_firstname/tests/test_partner.py 2014-04-23 14:22:35 +0000 |
2365 | @@ -0,0 +1,51 @@ |
2366 | +# -*- encoding: utf-8 -*- |
2367 | +############################################################################## |
2368 | +# |
2369 | +# OpenERP, Open Source Management Solution |
2370 | +# This module copyright (C) 2010 - 2014 Savoir-faire Linux |
2371 | +# (<http://www.savoirfairelinux.com>). |
2372 | +# |
2373 | +# This program is free software: you can redistribute it and/or modify |
2374 | +# it under the terms of the GNU Affero General Public License as |
2375 | +# published by the Free Software Foundation, either version 3 of the |
2376 | +# License, or (at your option) any later version. |
2377 | +# |
2378 | +# This program is distributed in the hope that it will be useful, |
2379 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2380 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2381 | +# GNU Affero General Public License for more details. |
2382 | +# |
2383 | +# You should have received a copy of the GNU Affero General Public License |
2384 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
2385 | +# |
2386 | +############################################################################## |
2387 | + |
2388 | +from openerp.tests.common import TransactionCase |
2389 | + |
2390 | + |
2391 | +class test_partner_contact_id(TransactionCase): |
2392 | + |
2393 | + def setUp(self): |
2394 | + super(test_partner_contact_id, self).setUp() |
2395 | + # Clean up registries |
2396 | + self.registry('ir.model').clear_caches() |
2397 | + self.registry('ir.model.data').clear_caches() |
2398 | + # Get registries |
2399 | + self.user_model = self.registry("res.users") |
2400 | + self.partner_model = self.registry("res.partner") |
2401 | + # Get context |
2402 | + self.context = self.user_model.context_get(self.cr, self.uid) |
2403 | + # Create values for test, contact also created |
2404 | + contact_id = self.partner_model.create(self.cr, self.uid, { |
2405 | + 'name': 'test_contact', |
2406 | + 'title': 1, |
2407 | + }, context=self.context) |
2408 | + self.vals = { |
2409 | + 'name': 'test_partner', |
2410 | + 'type': 'contact', |
2411 | + 'contact_id': contact_id, |
2412 | + } |
2413 | + |
2414 | + def test_create_partner(self): |
2415 | + cr, uid, vals, context = self.cr, self.uid, self.vals, self.context |
2416 | + self.partner_model.create(cr, uid, vals, context=context) |