Merge lp:~camptocamp/carriers-deliveries/7.0-delivery_carrier_label_postlogistics-imp-licenses-yvr into lp:~stock-logistic-core-editors/carriers-deliveries/7.0
- 7.0-delivery_carrier_label_postlogistics-imp-licenses-yvr
- Merge into 7.0
Proposed by
Yannick Vaucher @ Camptocamp
Status: | Merged |
---|---|
Approved by: | Guewen Baconnier @ Camptocamp |
Approved revision: | 12 |
Merged at revision: | 12 |
Proposed branch: | lp:~camptocamp/carriers-deliveries/7.0-delivery_carrier_label_postlogistics-imp-licenses-yvr |
Merge into: | lp:~stock-logistic-core-editors/carriers-deliveries/7.0 |
Diff against target: |
311 lines (+138/-33) 8 files modified
delivery_carrier_label_postlogistics/__openerp__.py (+8/-8) delivery_carrier_label_postlogistics/company.py (+4/-4) delivery_carrier_label_postlogistics/delivery.py (+25/-0) delivery_carrier_label_postlogistics/delivery_view.xml (+1/-0) delivery_carrier_label_postlogistics/postlogistics/web_service.py (+21/-8) delivery_carrier_label_postlogistics/res_config.py (+69/-3) delivery_carrier_label_postlogistics/res_config_view.xml (+8/-10) delivery_carrier_label_postlogistics/security/ir.model.access.csv (+2/-0) |
To merge this branch: | bzr merge lp:~camptocamp/carriers-deliveries/7.0-delivery_carrier_label_postlogistics-imp-licenses-yvr |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Guewen Baconnier @ Camptocamp | Approve | ||
Leonardo Pistone | code review | Approve | |
Romain Deheele - Camptocamp (community) | code review, no tests | Approve | |
Review via email: mp+202334@code.launchpad.net |
Commit message
Description of the change
Implements license management for postlogistics label web service
To post a comment you must log in.
lp:~camptocamp/carriers-deliveries/7.0-delivery_carrier_label_postlogistics-imp-licenses-yvr
updated
- 12. By Yannick Vaucher @ Camptocamp
-
[ADD] security groups for postlogistics licenses
Revision history for this message
Romain Deheele - Camptocamp (romaindeheele) wrote : | # |
review:
Approve
(code review, no tests)
Revision history for this message
Yannick Vaucher @ Camptocamp (yvaucher-c2c) wrote : | # |
Jenkins PEP8 errors addressed in
Revision history for this message
Leonardo Pistone (lepistone) wrote : | # |
Yannick,
is the field picking.carrier_id required?
review:
Needs Information
Revision history for this message
Yannick Vaucher @ Camptocamp (yvaucher-c2c) wrote : | # |
carrier_id isn't required.
If you are asking for that line:
151 + license = picking.
orm.browse_null
Implements __getattr__ that way.
def __getattr__(self, name):
return None # XXX: return self ?
So even if carrier_id returns orm.browse_null asking for one of its attributes is None
Revision history for this message
Leonardo Pistone (lepistone) wrote : | # |
Yes Yannick, I was asking about that!
So if you reckon we handle the empty field properly, I approve.
Thanks!
review:
Approve
(code review)
Revision history for this message
Guewen Baconnier @ Camptocamp (gbaconnier-c2c) : | # |
review:
Approve
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'delivery_carrier_label_postlogistics/__openerp__.py' | |||
2 | --- delivery_carrier_label_postlogistics/__openerp__.py 2013-12-23 10:54:36 +0000 | |||
3 | +++ delivery_carrier_label_postlogistics/__openerp__.py 2014-01-23 10:39:04 +0000 | |||
4 | @@ -73,6 +73,13 @@ | |||
5 | 73 | .. _PostLogistics BarCodes WebService: http://www.poste.ch/post-startseite/post-geschaeftskunden/post-logistik/post-e-log/post-e-log-webservices.htm | 73 | .. _PostLogistics BarCodes WebService: http://www.poste.ch/post-startseite/post-geschaeftskunden/post-logistik/post-e-log/post-e-log-webservices.htm |
6 | 74 | .. _Swiss Post E-logistics: http://www.poste.ch/en/post-startseite/post-geschaeftskunden/post-logistik/post-e-log.htm | 74 | .. _Swiss Post E-logistics: http://www.poste.ch/en/post-startseite/post-geschaeftskunden/post-logistik/post-e-log.htm |
7 | 75 | 75 | ||
8 | 76 | |||
9 | 77 | Recommended modules | ||
10 | 78 | ------------------- | ||
11 | 79 | |||
12 | 80 | * PostLogistics labels - logo per Shop | ||
13 | 81 | If you have multiple shops configure one logo per shop | ||
14 | 82 | |||
15 | 76 | Technical references | 83 | Technical references |
16 | 77 | -------------------- | 84 | -------------------- |
17 | 78 | 85 | ||
18 | @@ -80,18 +87,11 @@ | |||
19 | 80 | 87 | ||
20 | 81 | .. _"Barcode" web service documentation: http://www.poste.ch/post-barcode-cug.htm | 88 | .. _"Barcode" web service documentation: http://www.poste.ch/post-barcode-cug.htm |
21 | 82 | 89 | ||
22 | 90 | |||
23 | 83 | Contributors | 91 | Contributors |
24 | 84 | ------------ | 92 | ------------ |
25 | 85 | 93 | ||
26 | 86 | * Yannick Vaucher <yannick.vaucher@camptocamp.com> | 94 | * Yannick Vaucher <yannick.vaucher@camptocamp.com> |
27 | 87 | |||
28 | 88 | ---- | ||
29 | 89 | |||
30 | 90 | *TODO*: | ||
31 | 91 | |||
32 | 92 | * *Add onchange to improve carrier method creation* | ||
33 | 93 | * *Identify attachement as label* | ||
34 | 94 | * *Better License management* | ||
35 | 95 | """, | 95 | """, |
36 | 96 | 'website': 'http://www.camptocamp.com/', | 96 | 'website': 'http://www.camptocamp.com/', |
37 | 97 | 'data': ['res_partner_data.xml', | 97 | 'data': ['res_partner_data.xml', |
38 | 98 | 98 | ||
39 | === modified file 'delivery_carrier_label_postlogistics/company.py' | |||
40 | --- delivery_carrier_label_postlogistics/company.py 2013-12-03 17:18:48 +0000 | |||
41 | +++ delivery_carrier_label_postlogistics/company.py 2014-01-23 10:39:04 +0000 | |||
42 | @@ -38,10 +38,10 @@ | |||
43 | 38 | type='char'), | 38 | type='char'), |
44 | 39 | 'postlogistics_username': fields.char('Username'), | 39 | 'postlogistics_username': fields.char('Username'), |
45 | 40 | 'postlogistics_password': fields.char('Password'), | 40 | 'postlogistics_password': fields.char('Password'), |
50 | 41 | # XXX improve license management | 41 | 'postlogistics_license_ids': fields.one2many( |
51 | 42 | 'postlogistics_license_less_1kg': fields.char('License less than 1kg'), | 42 | 'postlogistics.license', |
52 | 43 | 'postlogistics_license_more_1kg': fields.char('License more than 1kg'), | 43 | 'company_id', |
53 | 44 | 'postlogistics_license_vinolog': fields.char('License VinoLog'), | 44 | 'PostLogistics Frankling License'), |
54 | 45 | 'postlogistics_logo': fields.binary('Company logo for PostLogistics'), | 45 | 'postlogistics_logo': fields.binary('Company logo for PostLogistics'), |
55 | 46 | 'postlogistics_office': fields.char('Post office'), | 46 | 'postlogistics_office': fields.char('Post office'), |
56 | 47 | 47 | ||
57 | 48 | 48 | ||
58 | === modified file 'delivery_carrier_label_postlogistics/delivery.py' | |||
59 | --- delivery_carrier_label_postlogistics/delivery.py 2014-01-13 11:23:21 +0000 | |||
60 | +++ delivery_carrier_label_postlogistics/delivery.py 2014-01-23 10:39:04 +0000 | |||
61 | @@ -20,6 +20,22 @@ | |||
62 | 20 | ############################################################################## | 20 | ############################################################################## |
63 | 21 | from openerp.osv import orm, fields | 21 | from openerp.osv import orm, fields |
64 | 22 | 22 | ||
65 | 23 | class PostlogisticsLicense(orm.Model): | ||
66 | 24 | _name = 'postlogistics.license' | ||
67 | 25 | _description = 'PostLogistics Franking License' | ||
68 | 26 | |||
69 | 27 | _order = 'sequence' | ||
70 | 28 | |||
71 | 29 | _columns = { | ||
72 | 30 | 'name': fields.char('Description', translate=True, required=True), | ||
73 | 31 | 'number': fields.char('Number', required=True), | ||
74 | 32 | 'company_id': fields.many2one('res.company', 'Company', required=True), | ||
75 | 33 | 'sequence': fields.integer( | ||
76 | 34 | 'Sequence', | ||
77 | 35 | help="Gives the sequence on company to define priority on license" | ||
78 | 36 | " when multiple license are available for the same group of " | ||
79 | 37 | "service."), | ||
80 | 38 | } | ||
81 | 23 | 39 | ||
82 | 24 | class PostlogisticsServiceGroup(orm.Model): | 40 | class PostlogisticsServiceGroup(orm.Model): |
83 | 25 | _name = 'postlogistics.service.group' | 41 | _name = 'postlogistics.service.group' |
84 | @@ -28,6 +44,12 @@ | |||
85 | 28 | _columns = { | 44 | _columns = { |
86 | 29 | 'name': fields.char('Description', translate=True, required=True), | 45 | 'name': fields.char('Description', translate=True, required=True), |
87 | 30 | 'group_extid': fields.integer('Group ID', required=True), | 46 | 'group_extid': fields.integer('Group ID', required=True), |
88 | 47 | 'postlogistics_license_ids': fields.many2many( | ||
89 | 48 | 'postlogistics.license', | ||
90 | 49 | 'postlogistics_license_service_groups_rel', | ||
91 | 50 | 'license_id', | ||
92 | 51 | 'group_id', | ||
93 | 52 | 'PostLogistics Frankling License'), | ||
94 | 31 | } | 53 | } |
95 | 32 | 54 | ||
96 | 33 | _sql_constraints = [ | 55 | _sql_constraints = [ |
97 | @@ -194,6 +216,9 @@ | |||
98 | 194 | 'type': fields.selection( | 216 | 'type': fields.selection( |
99 | 195 | _get_carrier_type_selection, 'Type', | 217 | _get_carrier_type_selection, 'Type', |
100 | 196 | help="Carrier type (combines several delivery methods)"), | 218 | help="Carrier type (combines several delivery methods)"), |
101 | 219 | 'postlogistics_license_id': fields.many2one( | ||
102 | 220 | 'postlogistics.license', | ||
103 | 221 | string='PostLogistics Frankling License'), | ||
104 | 197 | 'postlogistics_service_group_id': fields.many2one( | 222 | 'postlogistics_service_group_id': fields.many2one( |
105 | 198 | 'postlogistics.service.group', | 223 | 'postlogistics.service.group', |
106 | 199 | string='PostLogistics Service Group', | 224 | string='PostLogistics Service Group', |
107 | 200 | 225 | ||
108 | === modified file 'delivery_carrier_label_postlogistics/delivery_view.xml' | |||
109 | --- delivery_carrier_label_postlogistics/delivery_view.xml 2013-11-29 08:19:33 +0000 | |||
110 | +++ delivery_carrier_label_postlogistics/delivery_view.xml 2014-01-23 10:39:04 +0000 | |||
111 | @@ -49,6 +49,7 @@ | |||
112 | 49 | <field name="arch" type="xml"> | 49 | <field name="arch" type="xml"> |
113 | 50 | <field name="type" position="after"> | 50 | <field name="type" position="after"> |
114 | 51 | <field name="postlogistics_service_group_id" attrs="{'invisible': [('type', '!=', 'postlogistics')], 'required': [('type', '=', 'postlogistics')]}"/> | 51 | <field name="postlogistics_service_group_id" attrs="{'invisible': [('type', '!=', 'postlogistics')], 'required': [('type', '=', 'postlogistics')]}"/> |
115 | 52 | <field name="postlogistics_license_id" attrs="{'invisible': [('type', '!=', 'postlogistics')]}"/> | ||
116 | 52 | <field name="allowed_option_ids" invisible="1"/> | 53 | <field name="allowed_option_ids" invisible="1"/> |
117 | 53 | </field> | 54 | </field> |
118 | 54 | <field name="available_option_ids" position="attributes"> | 55 | <field name="available_option_ids" position="attributes"> |
119 | 55 | 56 | ||
120 | === modified file 'delivery_carrier_label_postlogistics/postlogistics/web_service.py' | |||
121 | --- delivery_carrier_label_postlogistics/postlogistics/web_service.py 2013-12-17 07:45:50 +0000 | |||
122 | +++ delivery_carrier_label_postlogistics/postlogistics/web_service.py 2014-01-23 10:39:04 +0000 | |||
123 | @@ -97,7 +97,7 @@ | |||
124 | 97 | lang = company.partner_id.lang | 97 | lang = company.partner_id.lang |
125 | 98 | lang = self._get_language(lang) | 98 | lang = self._get_language(lang) |
126 | 99 | request = self.client.service.ReadAllowedServicesByFrankingLicense | 99 | request = self.client.service.ReadAllowedServicesByFrankingLicense |
128 | 100 | return self._send_request(request, License=license, Language=lang) | 100 | return self._send_request(request, FrankingLicense=license, Language=lang) |
129 | 101 | 101 | ||
130 | 102 | def read_service_groups(self, company, lang): | 102 | def read_service_groups(self, company, lang): |
131 | 103 | """ Get group of services """ | 103 | """ Get group of services """ |
132 | @@ -223,13 +223,26 @@ | |||
133 | 223 | return resolution | 223 | return resolution |
134 | 224 | 224 | ||
135 | 225 | def _get_license(self, picking): | 225 | def _get_license(self, picking): |
143 | 226 | """ Get the right license depending on weight """ | 226 | """ Get the license |
144 | 227 | company = picking.company_id | 227 | |
145 | 228 | #XXX get weight or set it as an option on picking | 228 | Take it from carrier and if not defined get the first license |
146 | 229 | weight = 0 | 229 | depending on service group. This needs to have associated |
147 | 230 | if weight > 1.0: | 230 | licenses to groups. |
148 | 231 | return company.postlogistics_license_more_1kg | 231 | |
149 | 232 | return company.postlogistics_license_less_1kg | 232 | :return: license number |
150 | 233 | """ | ||
151 | 234 | license = picking.carrier_id.postlogistics_license_id | ||
152 | 235 | if not license: | ||
153 | 236 | company_licenses = picking.company_id.postlogistics_license_ids | ||
154 | 237 | group = picking.carrier_id.postlogistics_service_group_id | ||
155 | 238 | if not company_licenses or not group: | ||
156 | 239 | return None | ||
157 | 240 | group_license_ids = [l.id for l in group.postlogistics_license_ids] | ||
158 | 241 | if not group_license_ids: | ||
159 | 242 | return None | ||
160 | 243 | license = [l for l in company_licenses | ||
161 | 244 | if l.id in group_license_ids][0] | ||
162 | 245 | return license.number | ||
163 | 233 | 246 | ||
164 | 234 | def _prepare_attributes(self, picking): | 247 | def _prepare_attributes(self, picking): |
165 | 235 | services = [option.code.split(',') for option in picking.option_ids | 248 | services = [option.code.split(',') for option in picking.option_ids |
166 | 236 | 249 | ||
167 | === modified file 'delivery_carrier_label_postlogistics/res_config.py' | |||
168 | --- delivery_carrier_label_postlogistics/res_config.py 2013-12-13 13:44:03 +0000 | |||
169 | +++ delivery_carrier_label_postlogistics/res_config.py 2014-01-23 10:39:04 +0000 | |||
170 | @@ -43,6 +43,11 @@ | |||
171 | 43 | 'password': fields.related( | 43 | 'password': fields.related( |
172 | 44 | 'company_id', 'postlogistics_password', | 44 | 'company_id', 'postlogistics_password', |
173 | 45 | string='Password', type='char'), | 45 | string='Password', type='char'), |
174 | 46 | 'license_ids': fields.related( | ||
175 | 47 | 'company_id', 'postlogistics_license_ids', | ||
176 | 48 | string='Frankling Licenses', | ||
177 | 49 | type='one2many', | ||
178 | 50 | relation='postlogistics.license'), | ||
179 | 46 | 'license_less_1kg': fields.related( | 51 | 'license_less_1kg': fields.related( |
180 | 47 | 'company_id', 'postlogistics_license_less_1kg', | 52 | 'company_id', 'postlogistics_license_less_1kg', |
181 | 48 | string='License less than 1kg', type='char'), | 53 | string='License less than 1kg', type='char'), |
182 | @@ -117,15 +122,14 @@ | |||
183 | 117 | company = self.pool.get('res.company' | 122 | company = self.pool.get('res.company' |
184 | 118 | ).browse(cr, uid, company_id, context=context) | 123 | ).browse(cr, uid, company_id, context=context) |
185 | 119 | 124 | ||
186 | 125 | license_ids = [l.id for l in company.postlogistics_license_ids] | ||
187 | 120 | label_layout = company.postlogistics_default_label_layout.id or False | 126 | label_layout = company.postlogistics_default_label_layout.id or False |
188 | 121 | output_format = company.postlogistics_default_output_format.id or False | 127 | output_format = company.postlogistics_default_output_format.id or False |
189 | 122 | resolution = company.postlogistics_default_resolution.id or False | 128 | resolution = company.postlogistics_default_resolution.id or False |
190 | 123 | values = { | 129 | values = { |
191 | 124 | 'username': company.postlogistics_username, | 130 | 'username': company.postlogistics_username, |
192 | 125 | 'password': company.postlogistics_password, | 131 | 'password': company.postlogistics_password, |
196 | 126 | 'license_less_1kg': company.postlogistics_license_less_1kg, | 132 | 'license_ids': license_ids, |
194 | 127 | 'license_more_1kg': company.postlogistics_license_more_1kg, | ||
195 | 128 | 'license_vinolog': company.postlogistics_license_vinolog, | ||
197 | 129 | 'logo': company.postlogistics_logo, | 133 | 'logo': company.postlogistics_logo, |
198 | 130 | 'office': company.postlogistics_office, | 134 | 'office': company.postlogistics_office, |
199 | 131 | 'default_label_layout': label_layout, | 135 | 'default_label_layout': label_layout, |
200 | @@ -422,3 +426,65 @@ | |||
201 | 422 | continue | 426 | continue |
202 | 423 | self._update_service_groups(cr, uid, ids, web_service, company, context=ctx) | 427 | self._update_service_groups(cr, uid, ids, web_service, company, context=ctx) |
203 | 424 | return True | 428 | return True |
204 | 429 | |||
205 | 430 | def _get_allowed_service_group_codes(self, web_service, company, | ||
206 | 431 | license, context=None): | ||
207 | 432 | """ Get a list of allowed service group codes""" | ||
208 | 433 | if context is None: | ||
209 | 434 | context = {} | ||
210 | 435 | |||
211 | 436 | lang = context.get('lang', 'en') | ||
212 | 437 | res = web_service.read_allowed_services_by_franking_license( | ||
213 | 438 | license.number, company, lang) | ||
214 | 439 | if 'errors' in res: | ||
215 | 440 | errors = '\n'.join(res['errors']) | ||
216 | 441 | error_message = (_('Could not retrieve allowed Postlogistics ' | ||
217 | 442 | 'service groups for the %s licence:\n%s') | ||
218 | 443 | % (license.name, errors)) | ||
219 | 444 | raise orm.except_orm(_('Error'), error_message) | ||
220 | 445 | |||
221 | 446 | if not res['value']: | ||
222 | 447 | return [] | ||
223 | 448 | |||
224 | 449 | if hasattr(res['value'], 'Errors') and res['value'].Errors: | ||
225 | 450 | for error in res['value'].Errors.Error: | ||
226 | 451 | message = '[%s] %s' % (error.Code, error.Message) | ||
227 | 452 | raise orm.except_orm('Error', message) | ||
228 | 453 | |||
229 | 454 | service_group_codes = [] | ||
230 | 455 | for group in res['value'].ServiceGroups: | ||
231 | 456 | service_group_codes.append(group.ServiceGroup.ServiceGroupID) | ||
232 | 457 | |||
233 | 458 | return service_group_codes | ||
234 | 459 | |||
235 | 460 | def assign_licenses_to_service_groups(self, cr, uid, ids, context=None): | ||
236 | 461 | """ Check all licenses to assign it to PostLogistics service groups """ | ||
237 | 462 | |||
238 | 463 | if context is None: | ||
239 | 464 | context = {} | ||
240 | 465 | |||
241 | 466 | user_obj = self.pool.get('res.users') | ||
242 | 467 | service_group_obj = self.pool.get('postlogistics.service.group') | ||
243 | 468 | for config in self.browse(cr, uid, ids, context=context): | ||
244 | 469 | company = config.company_id | ||
245 | 470 | web_service = PostlogisticsWebService(company) | ||
246 | 471 | |||
247 | 472 | relations = {} | ||
248 | 473 | for license in company.postlogistics_license_ids: | ||
249 | 474 | service_groups = self._get_allowed_service_group_codes( | ||
250 | 475 | web_service, company, license, context=context) | ||
251 | 476 | group_ids = service_group_obj.search( | ||
252 | 477 | cr, uid, [('group_extid', 'in', service_groups)], | ||
253 | 478 | context=context) | ||
254 | 479 | for group_id in group_ids: | ||
255 | 480 | if group_id in relations: | ||
256 | 481 | relations[group_id].append(license.id) | ||
257 | 482 | else: | ||
258 | 483 | relations[group_id] = [license.id] | ||
259 | 484 | for group_id, license_ids in relations.iteritems(): | ||
260 | 485 | vals = {'postlogistics_license_ids': [(6, 0, license_ids)]} | ||
261 | 486 | service_group_obj.write(cr, uid, group_id, vals, | ||
262 | 487 | context=context) | ||
263 | 488 | |||
264 | 489 | |||
265 | 490 | return True | ||
266 | 425 | 491 | ||
267 | === modified file 'delivery_carrier_label_postlogistics/res_config_view.xml' | |||
268 | --- delivery_carrier_label_postlogistics/res_config_view.xml 2013-12-03 17:18:48 +0000 | |||
269 | +++ delivery_carrier_label_postlogistics/res_config_view.xml 2014-01-23 10:39:04 +0000 | |||
270 | @@ -41,16 +41,13 @@ | |||
271 | 41 | <group> | 41 | <group> |
272 | 42 | <div> | 42 | <div> |
273 | 43 | <div> | 43 | <div> |
284 | 44 | <label for="license_less_1kg"/> | 44 | <field name="license_ids" class="oe_inline"> |
285 | 45 | <field name="license_less_1kg" class="oe_inline"/> | 45 | <tree editable="bottom"> |
286 | 46 | </div> | 46 | <field name="name"/> |
287 | 47 | <div> | 47 | <field name="number"/> |
288 | 48 | <label for="license_more_1kg"/> | 48 | <field name="sequence" invisible="True"/> |
289 | 49 | <field name="license_more_1kg" class="oe_inline"/> | 49 | </tree> |
290 | 50 | </div> | 50 | </field> |
281 | 51 | <div> | ||
282 | 52 | <label for="license_vinolog"/> | ||
283 | 53 | <field name="license_vinolog" class="oe_inline"/> | ||
291 | 54 | </div> | 51 | </div> |
292 | 55 | </div> | 52 | </div> |
293 | 56 | </group> | 53 | </group> |
294 | @@ -88,6 +85,7 @@ | |||
295 | 88 | <div> | 85 | <div> |
296 | 89 | <div> | 86 | <div> |
297 | 90 | <button string="Update PostLogistics Services" type="object" name="update_postlogistics_options" class="oe_highlight"/> | 87 | <button string="Update PostLogistics Services" type="object" name="update_postlogistics_options" class="oe_highlight"/> |
298 | 88 | <button string="Assign PostLogistics Licenses to service groups" type="object" name="assign_licenses_to_service_groups" class="oe_highlight"/> | ||
299 | 91 | </div> | 89 | </div> |
300 | 92 | </div> | 90 | </div> |
301 | 93 | </group> | 91 | </group> |
302 | 94 | 92 | ||
303 | === modified file 'delivery_carrier_label_postlogistics/security/ir.model.access.csv' | |||
304 | --- delivery_carrier_label_postlogistics/security/ir.model.access.csv 2013-12-23 10:54:36 +0000 | |||
305 | +++ delivery_carrier_label_postlogistics/security/ir.model.access.csv 2014-01-23 10:39:04 +0000 | |||
306 | @@ -1,3 +1,5 @@ | |||
307 | 1 | id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink | 1 | id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink |
308 | 2 | access_postlogistics_service_group_salesman,postlogistics.service.group.salesman,model_postlogistics_service_group,base.group_sale_salesman,1,0,0,0 | 2 | access_postlogistics_service_group_salesman,postlogistics.service.group.salesman,model_postlogistics_service_group,base.group_sale_salesman,1,0,0,0 |
309 | 3 | access_postlogistics_service_group_manager,postlogistics.service.group.manager,model_postlogistics_service_group,base.group_sale_manager,1,1,1,1 | 3 | access_postlogistics_service_group_manager,postlogistics.service.group.manager,model_postlogistics_service_group,base.group_sale_manager,1,1,1,1 |
310 | 4 | access_postlogistics_license_salesman,postlogistics.license.salesman,model_postlogistics_license,base.group_sale_salesman,1,0,0,0 | ||
311 | 5 | access_postlogistics_license_manager,postlogistics.license.manager,model_postlogistics_license,base.group_sale_manager,1,1,1,1 |
LGTM,
Romain