~julie-w/unifield-wm/UTP-758

« back to all changes in this revision

Viewing changes to account_period_closing_level/account_period.py

  • Committer: jf
  • Date: 2016-01-25 14:14:07 UTC
  • mfrom: (2703.20.59 unifield-wm)
  • Revision ID: jfb@tempo-consulting.fr-20160125141407-vgfz8lrdvvgq0zip
US-822 [IMP] Year End Closure functionnality
lp:~unifield-team/unifield-wm/us-822

Show diffs side-by-side

added added

removed removed

Lines of Context:
264
264
            res[period_id] = payroll
265
265
        return res
266
266
 
 
267
    def _get_is_system_from_number(self, number):
 
268
        return isinstance(number, int) and number in (0, 16, ) or False
 
269
 
 
270
    def _get_is_system(self, cr, uid, ids, field_name=None, arg=None, context=None):
 
271
        res = {}
 
272
        if not ids:
 
273
            return res
 
274
        if isinstance(ids, (int, long, )):
 
275
            ids = [ids]
 
276
 
 
277
        for rec in self.browse(cr, uid, ids, context=context):
 
278
            res[rec.id] = self._get_is_system_from_number(rec.number)
 
279
        return res
 
280
 
 
281
    def _get_search_is_system(self, cr, uid, obj, name, args, context=None):
 
282
        res = []
 
283
        if not len(args):
 
284
            return res
 
285
        if len(args) != 1:
 
286
            msg = _("Domain %s not suported") % (str(args), )
 
287
            raise osv.except_osv(_('Error'), msg)
 
288
        if args[0][1] != '=':
 
289
            msg = _("Operator '%s' not suported") % (args[0][1], )
 
290
            raise osv.except_osv(_('Error'), msg)
 
291
        operator = 'in' if args[0][2] else 'not in'
 
292
 
 
293
        return [('number', operator, (0, 16, ))]
 
294
 
267
295
    _columns = {
268
296
        'name': fields.char('Period Name', size=64, required=True, translate=True),
269
297
        'special': fields.boolean('Opening/Closing Period', size=12,
270
298
            help="These periods can overlap.", readonly=True),
271
299
        'state': fields.selection(ACCOUNT_PERIOD_STATE_SELECTION, 'State', readonly=True,
272
300
            help='HQ opens a monthly period. After validation, it will be closed by the different levels.'),
273
 
        'number': fields.integer(string="Number for register creation", help="This number informs period's order. Should be between 1 and 15. If 16: have not been defined yet."),
 
301
        'number': fields.integer(string="Number for register creation", help="This number informs period's order. Should be between 1 and 15."),
274
302
        'field_process': fields.boolean('Is this period in Field close processing?', readonly=True),
275
303
        'state_sync_flag': fields.char('Sync Flag', required=True, size=64, help='Flag for controlling sync actions on the period state.'),
276
304
        'payroll_ok': fields.function(_get_payroll_ok, method=True, type='boolean', store=False, string="Permit to know if payrolls are active", readonly=True),
 
305
        'is_system': fields.function(_get_is_system, fnct_search=_get_search_is_system, method=True, type='boolean', string="System period ?", readonly=True),
277
306
    }
278
307
 
279
308
    _order = 'date_start, number'
283
312
            context = {}
284
313
 
285
314
        if context.get('sync_update_execution') and 'state' not in vals:
286
 
            logging.getLogger('init').info('Loading default draft - created - state for account.period')
287
 
            vals['state'] = 'created'
 
315
            if not self._get_is_system_from_number(vals.get('number', False)):
 
316
                logging.getLogger('init').info('Loading default draft - created - state for account.period')
 
317
                vals['state'] = 'created'
 
318
            else:
 
319
                vals['state'] = 'draft'  # passtrough for system periods: 'Open'
288
320
 
289
321
        res = super(account_period, self).create(cr, uid, vals, context=context)
290
322
        self.pool.get('account.period.state').update_state(cr, uid, res,
307
339
                                                           context=context)
308
340
        return res
309
341
 
 
342
    def unlink(self, cr, uid, ids, context=None):
 
343
        if not ids:
 
344
            return False
 
345
        if isinstance(ids, (int, long, )):
 
346
            ids = [ids]
 
347
 
 
348
        is_system = [ rec.is_system \
 
349
            for rec in self.browse(cr, uid, ids, context=context) ]
 
350
        if any(is_system):
 
351
            raise osv.except_osv(_('Warning'), _('System period not deletable'))
 
352
        return super(account_period, self).unlink(cr, uid, ids, context=context)
 
353
 
310
354
    _defaults = {
311
355
        'state': lambda *a: 'created',
312
 
        'number': lambda *a: 16, # Because of 15 period in MSF, no period would use 16 number.
 
356
        'number': lambda *a: 17, # Because of 16 period in MSF, no period would use 16 number.
313
357
        'special': lambda *a: False,
314
358
        'field_process': lambda *a: False,
315
359
        'state_sync_flag': lambda *a: 'none',
 
360
        'is_system': False,
316
361
    }
317
362
 
318
363
    def action_reopen_field(self, cr, uid, ids, context=None):