~unifield-team/unifield-wm/us-826

« back to all changes in this revision

Viewing changes to msf_homere_interface/wizard/hr_payroll_employee_import.py

  • Committer: duy.vo at msf
  • Date: 2012-09-18 21:05:00 UTC
  • mfrom: (1175 unifield-wm)
  • mto: This revision was merged to the branch mainline in revision 1188.
  • Revision ID: duy.vo@geneva.msf.org-20120918210500-qw8i815ns8xtk3bv
UF-1055: Merged with trunk 1175

Show diffs side-by-side

added added

removed removed

Lines of Context:
296
296
                vals.update({'active': False})
297
297
            current_contract = False
298
298
            for contract in self.pool.get('hr.contract.msf').browse(cr, uid, contract_ids):
 
299
                # Check current contract
299
300
                if contract.current:
300
301
                    current_contract = True
301
302
                    if contract.date_end and contract.date_end < strftime('%Y-%m-%d'):
302
303
                        vals.update({'active': False})
 
304
                # Check job
 
305
                if contract.job_id:
 
306
                    vals.update({'job_id': contract.job_id.id})
303
307
            # Desactivate employee if no current contract
304
308
            if not current_contract:
305
309
                vals.update({'active': False})
351
355
                        vals.update({field[1]: False})
352
356
                    else:
353
357
                        vals.update({field[1]: line.get(field[0])})
 
358
            # Update values for job
 
359
            if line.get('fonction'):
 
360
                job_ids = self.pool.get('hr.job').search(cr, uid, [('code', '=', line.get('fonction'))])
 
361
                if job_ids:
 
362
                    vals.update({'job_id': job_ids[0]})
354
363
            # Add entry to database
355
364
            new_line = self.pool.get('hr.contract.msf').create(cr, uid, vals)
356
365
            if new_line:
357
366
                res.append(new_line)
358
367
        return res
359
368
 
 
369
    def update_job(self, cr, uid, ids, reader, context=None):
 
370
        """
 
371
        Read lines from reader and update database
 
372
        """
 
373
        res = []
 
374
        if not reader:
 
375
            return res
 
376
        for line in reader:
 
377
            # Check that no line with same code exist
 
378
            if line.get('code', False):
 
379
                search_ids = self.pool.get('hr.job').search(cr, uid, [('code', '=', line.get('code'))])
 
380
                if search_ids:
 
381
                    continue
 
382
                vals = {
 
383
                    'homere_codeterrain': line.get('codeterrain') or False,
 
384
                    'homere_id_unique': line.get('id_unique') or False,
 
385
                    'code': line.get('code') or '',
 
386
                    'name': line.get('libelle') or '',
 
387
                }
 
388
                # Add entry to database
 
389
                new_line = self.pool.get('hr.job').create(cr, uid, vals)
 
390
                if new_line:
 
391
                    res.append(new_line)
 
392
        return res
 
393
 
360
394
    def button_validate(self, cr, uid, ids, context=None):
361
395
        """
362
396
        Open ZIP file and search staff.csv
366
400
        # Prepare some values
367
401
        staff_file = 'staff.csv'
368
402
        contract_file = 'contrat.csv'
 
403
        job_file = 'fonction.csv'
369
404
        res = False
370
405
        message = _("Employee import FAILED.")
371
406
        created = 0
387
422
                filename = wiz.filename or ""
388
423
            except:
389
424
                raise osv.except_osv(_('Error'), _('Given file is not a zip file!'))
 
425
            # read the staff's job file
 
426
            job_ids = False
 
427
            if zipobj.namelist() and job_file in zipobj.namelist():
 
428
                job_reader = csv.DictReader(zipobj.open(job_file), quotechar='"', delimiter=',', doublequote=False, escapechar='\\')
 
429
                job_ids = self.update_job(cr, uid, ids, job_reader, context=context)
 
430
            # Do not raise error for job file because it's just a useful piece of data, but not more.
390
431
            # read the contract file
391
432
            contract_ids = False
392
433
            if zipobj.namelist() and contract_file in zipobj.namelist():
394
435
                contract_ids = self.update_contract(cr, uid, ids, contract_reader, context=context)
395
436
            else:
396
437
                raise osv.except_osv(_('Error'), _('%s not found in given zip file!') % (contract_file,))
 
438
            # read the staff file
397
439
            if zipobj.namelist() and staff_file in zipobj.namelist():
398
440
                # Doublequote and escapechar avoid some problems
399
441
                reader = csv.reader(zipobj.open(staff_file), quotechar='"', delimiter=',', doublequote=False, escapechar='\\')