def update(self, instance: employee_models.Employee, validated_data: dict) -> employee_models.Employee: """ Update an employee and encode updated password if present Args: instance: existing employee instance validated_data: validated serializer data Returns: the updated employee instance """ password = validated_data.pop('password', None) if password is not None: instance.set_password(password) for field, value in validated_data.items(): setattr(instance, field, value) instance.save() return instance
def save(self): company = Company.objects.get( display_name=self.cleaned_data['company']) first_name = self.cleaned_data['first_name'] last_name = self.cleaned_data['last_name'] if self.cleaned_data['email']: username = f'{first_name.lower()}.{last_name.lower()}' else: username = self.cleaned_data['employee_id'] new_employee = Employee( first_name=first_name, last_name=last_name, employee_id=self.cleaned_data['employee_id'], primary_phone=self.cleaned_data['primary_phone'], secondary_phone=self.cleaned_data['secondary_phone'], hire_date=self.cleaned_data['hire_date'], application_date=self.cleaned_data['application_date'], classroom_date=self.cleaned_data['classroom_date'], company=company, is_part_time=self.cleaned_data['is_part_time'], is_neighbor_link=self.cleaned_data['is_neighbor_link'], username=username, position=self.cleaned_data['position'], email=self.cleaned_data['email']) password = "******".format( self.cleaned_data['company'].upper(), self.cleaned_data['first_name'][0].upper(), self.cleaned_data['last_name'][0].upper(), str(self.cleaned_data['last4_ss'])) new_employee.set_password(password) new_employee.save() return new_employee
def import_drivers(path): with ZipFile(path) as zipfile: try: driver_info = zipfile.read('drivers/drivers.xlsx') wb = load_workbook(filename=BytesIO(driver_info)) try: sheet = wb['data'] counter = 0 for row in sheet.iter_rows(min_row=2): try: last_name = f'{row[0].value.lower()[0].upper()}{row[0].value.lower()[1:]}' first_name = f'{row[1].value.lower()[0].upper()}{row[1].value.lower()[1:]}' employee_id = row[2].value position = row[3].value.lower() hire_date = datetime.datetime.strptime( str(row[4].value), '%Y%m%d') application_date = datetime.datetime.strptime( str(row[5].value), '%Y%m%d') classroom_date = datetime.datetime.strptime( str(row[6].value), '%Y%m%d') company_name = row[7].value is_part_time = True if row[8].value == 'TRUE' else False primary_phone = row[9].value secondary_phone = row[10].value ss_number = row[11].value company = Company.objects.get( display_name=company_name) new_employee = Employee( first_name=first_name, last_name=last_name, employee_id=employee_id, primary_phone=primary_phone, secondary_phone=secondary_phone, hire_date=hire_date, application_date=application_date, classroom_date=classroom_date, company=company, is_part_time=is_part_time, username=employee_id, position=position, is_active=True, ) password = f'{company}{first_name[0].upper()}{last_name[0].upper()}{ss_number}' new_employee.set_password(password) try: profile_picture = BytesIO( zipfile.read( f'drivers/pictures/{employee_id}.jpg')) new_employee.profile_picture.save( f'{employee_id}.jpg', profile_picture) except KeyError: pass new_employee.save() counter += 1 except: pass except KeyError: pass except KeyError: pass try: os.remove(path) except FileNotFoundError: pass return f'Imported a total of {counter} employees'