示例#1
0
    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'