~inddiana/sisb/yenni_sisb_nomina_secuencia_cod_trabajador

« back to all changes in this revision

Viewing changes to sisb_nomina/sisb_nomina.py


[FIX] Modificacion para permitir la creacion de registros
hr_employee_holidays sin necesidad que sea a partir de un proceso
de vacaciones, esto para registrar los historiales y los dias
disfrutados y por disfrutar de vacaciones

Show diffs side-by-side

added added

removed removed

Lines of Context:
1871
1871
        'state':'draft',
1872
1872
        'prest_calc':False,
1873
1873
    }
 
1874
    
 
1875
    def _check_dates(self, cr, uid, ids, context=None):
 
1876
        for hol in self.browse(cr, uid, ids, context=context):
 
1877
            if hol.corresp_to_start > hol.corresp_to_end:
 
1878
                return False
 
1879
        return True
1874
1880
 
 
1881
    _constraints = [(_check_dates, "Periodo inicio debe ser menor a periodo fin.", ['corresp_to_start', 'corresp_to_end'])]
 
1882
    
1875
1883
    _sql_constraints = [('unique_name','unique(name)', _('Name must be unique'))]
1876
1884
    
1877
1885
    def create(self, cr, uid, vals, context=None):
1878
1886
        if not 'menu' in context: #Se premite la creacion solo desde los procesos
1879
1887
            return super(hr_employee_holidays, self).create(cr, uid, vals, context)
1880
1888
        else:
1881
 
            raise osv.except_osv(_('Warning!'),_('No se permite crear registros de vacaciones'))
1882
 
 
 
1889
            holidays_employee_ids = self.search(cr, uid, [('employee_id','=',vals['employee_id'])], order='corresp_to_start desc')
 
1890
            if holidays_employee_ids and vals['corresp_to_start'] >= self.browse(cr, uid, holidays_employee_ids[0]).corresp_to_start:
 
1891
                raise osv.except_osv(_('Warning!'),_('No se permite crear registros de vacaciones a futuro, solo historicos'))
 
1892
            holidays_employee_ids = self.search(cr, uid, [('employee_id','=',vals['employee_id']), 
 
1893
                '|','&',('corresp_to_start','<=',vals['corresp_to_start']),('corresp_to_end','>=',vals['corresp_to_start']),
 
1894
                '&',('corresp_to_start','<=',vals['corresp_to_end']),('corresp_to_end','>=',vals['corresp_to_end'])])
 
1895
            if holidays_employee_ids:
 
1896
                raise osv.except_osv(_('Warning!'),_('Ya existe un registro de asignacion de vacaciones solapado con estas fechas'))
 
1897
        
 
1898
            return super(hr_employee_holidays, self).create(cr, uid, vals, context)
 
1899
        
 
1900
        
 
1901
        
1883
1902
    def unlink(self, cr, uid, ids, context=None):
1884
1903
        if not 'menu' in context: #Se premite la eliminacion solo desde los procesos
1885
1904
            return super(hr_employee_holidays, self).unlink(cr, uid, ids, context)
1890
1909
        if not 'menu' in context: #Se premite la modificacion solo desde los procesos
1891
1910
            return super(hr_employee_holidays, self).write(cr, uid, ids, vals, context)
1892
1911
        else:
1893
 
            raise osv.except_osv(_('Warning!'),_('No se permite modificar registros de vacaciones'))
 
1912
            if not isinstance(ids, list):
 
1913
                ids = [ids]
 
1914
            hol_emp = self.browse(cr, uid, ids)
 
1915
            for h in hol_emp:
 
1916
                employee = vals['employee_id'] if 'employee_id' in vals else h.employee_id.id
 
1917
                corresp_to_start = vals['corresp_to_start'] if 'corresp_to_start' in vals else h.corresp_to_start
 
1918
                corresp_to_end = vals['corresp_to_end'] if 'corresp_to_end' in vals else h.corresp_to_end
 
1919
                holidays_employee_ids = self.search(cr, uid, [('id', '<>',h.id),('employee_id','=',employee)], order='corresp_to_start desc')
 
1920
                if holidays_employee_ids and corresp_to_start >= self.browse(cr, uid, holidays_employee_ids[0]).corresp_to_start:
 
1921
                    raise osv.except_osv(_('Warning!'),_('No se permite crear registros de vacaciones a futuro, solo historicos'))
 
1922
                holidays_employee_ids = self.search(cr, uid, [('employee_id','=',employee), 
 
1923
                    '|','&',('corresp_to_start','<=',corresp_to_start),('corresp_to_end','>=',corresp_to_start),
 
1924
                    '&',('corresp_to_start','<=',corresp_to_end),('corresp_to_end','>=',corresp_to_end)])
 
1925
                if holidays_employee_ids:
 
1926
                    raise osv.except_osv(_('Warning!'),_('Ya existe un registro de asignacion de vacaciones solapado con estas fechas'))
1894
1927
            
 
1928
                super(hr_employee_holidays, self).write(cr, uid, ids, vals, context)
 
1929
        
 
1930
        return True
 
1931
        
1895
1932
hr_employee_holidays()
1896
1933
 
1897
1934
class hr_holidays_status(osv.osv):
1922
1959
            res[record.id]['remaining_leaves'] = max_leaves - leaves_taken
1923
1960
        return res
1924
1961
 
1925
 
    def create(self, cr, uid, vals, context):
1926
 
        if 'res_log_read' in context: #Se premite la creacion solo desde los archivos xml
1927
 
            return super(hr_holidays_status, self).create(cr, uid, vals, context)
1928
 
        else:
1929
 
            raise osv.except_osv(_('Warning!'),_('No se permite crear nuevos tipos de ausencias. El sistemas cuenta con los tipos predefinidos.'))
1930
 
 
1931
 
    def unlink(self, cr, uid, ids, context):
1932
 
        if 'res_log_read' in context:#Se premite la eliminacion solo desde los archivos xml
1933
 
            return super(hr_holidays_status, self).unlink(cr, uid, ids, context)
1934
 
        else:
1935
 
            raise osv.except_osv(_('Warning!'),_('No se permite eliminar tipos de ausencias.'))
1936
 
 
1937
 
    def write(self, cr, uid, ids, vals, context):
1938
 
        if 'res_log_read' in context:#Se premite la modificacion solo desde los archivos xml
1939
 
            return super(hr_holidays_status, self).write(cr, uid, ids, vals, context)
1940
 
        else:
1941
 
            raise osv.except_osv(_('Warning!'),_('No se permite modificar los tipos de ausencias.'))
1942
 
 
1943
1962
hr_holidays_status()
1944
1963
 
1945
1964
class hr_holidays(osv.osv):
1949
1968
    def _type_holidays_status(self, cr, uid, ids, name, args, context=None):
1950
1969
        result = {}
1951
1970
        for hol in self.browse(cr, uid, ids, context=context):
1952
 
                result[hol.id] = hol.holiday_status_id.name
 
1971
            result[hol.id] = hol.holiday_status_id.name
1953
1972
        return result
1954
1973
 
1955
1974
    _columns = {
1964
1983
        result['value'] = {
1965
1984
            'type_holidays_status': type_holidays_status,
1966
1985
            'employee_holidays_remove_id': False,
 
1986
            'employee_holidays_add_id': False,
1967
1987
        }
1968
1988
        return result
1969
1989
 
1971
1991
        result = {}
1972
1992
        result['value'] = {
1973
1993
            'employee_holidays_remove_id': False,
 
1994
            'employee_holidays_add_id': False,
1974
1995
        }
1975
1996
        return result
1976
1997
    
2038
2059
    def create(self, cr, uid, vals, context=None):
2039
2060
        if not context:
2040
2061
            context = {}
2041
 
            
2042
 
        if not 'employee_holidays_add_id' in vals:
 
2062
        if 'employee_holidays_add_id' in vals:
 
2063
            holiday_old = self.search(cr, uid, [('name','=',vals['name']),('employee_id','=',vals['employee_id']), 
 
2064
                                        ('employee_holidays_add_id','=',vals['employee_holidays_add_id'])])
 
2065
            if holiday_old:
 
2066
                raise osv.except_osv(_('Acción Denegada!'), _('Ya existe un registro de asignacion \
 
2067
                                        de vacaciones para el periodo de vacaciones seleccionado'))
 
2068
                
 
2069
        if 'type' in vals and vals['type'] <> 'add':
2043
2070
            holiday_old = self.search(cr, uid, [('employee_id','=',vals['employee_id']), 
2044
2071
                                        '|','&',('date_from','<=',vals['date_from']),('date_to','>=',vals['date_from']),
2045
2072
                                        '&',('date_from','<=',vals['date_to']),('date_to','>=',vals['date_to'])])
2046
2073
            if holiday_old:
2047
 
                raise osv.except_osv(_('Acción Denegada!'), _('Ya existe un registro de asignacion de vacaciones solapado con estas fechas'))
 
2074
                raise osv.except_osv(_('Acción Denegada!'), _('Ya existe un registro de asignacion de \
 
2075
                                        vacaciones solapado con estas fechas'))
2048
2076
            
2049
2077
            if (not 'number_of_days_temp' in vals or not vals['number_of_days_temp']) \
2050
2078
                and (not 'date_to' in vals or not vals['date_to'] == None):
2051
2079
                raise osv.except_osv(_('Warning!'),_('Debe ingresar Fecha final o Numero de dias'))
2052
 
            
 
2080
                
2053
2081
        return super(hr_holidays, self).create(cr, uid, vals, context)
2054
2082
 
2055
2083
hr_holidays()