class VerificationTest(models.Model): objects = VerificationTestManager() skill = models.ForeignKey(Skills, on_delete=models.CASCADE) skilltest = models.ForeignKey('expertratings.SkillTest', on_delete=models.CASCADE) relevance = models.FloatField() class Meta: ordering = ('-relevance', )
class UserProfile(models.Model): user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) # Personal Info bio = models.TextField(blank=True, null=True) # Contact Info country = CountryField(blank=True, null=True) city = tagulous.models.SingleTagField(to=City, blank=True, null=True) street = models.CharField(max_length=100, blank=True, null=True) plot_number = models.CharField(max_length=100, blank=True, null=True) postal_code = models.CharField(max_length=20, blank=True, null=True) postal_address = models.CharField(max_length=100, blank=True, null=True) phone_number = models.CharField(max_length=15, blank=True, null=True) # Professional Info skills = tagulous.models.TagField(to=Skill, blank=True) # KYC id_document = models.ImageField(upload_to='ids/%Y/%m/%d', blank=True, null=True) company = models.CharField(max_length=200, blank=True, null=True) website = models.URLField(blank=True, null=True) company_profile = models.TextField(blank=True, null=True) company_bio = models.TextField(blank=True, null=True) vat_number = models.CharField(max_length=50, blank=True, null=True) company_reg_no = models.CharField(max_length=50, blank=True, null=True) reference_number = models.CharField(max_length=50, blank=True, null=True) company_details = models.CharField(max_length=50, blank=True, null=True) # Payment Information payment_method = models.CharField( max_length=30, choices=PAYMENT_METHOD_CHOICES, help_text=','.join(['%s - %s' % (item[0], item[1]) for item in PAYMENT_METHOD_CHOICES]), blank=True, null=True ) btc_wallet = models.ForeignKey(BTCWallet, blank=True, null=True, on_delete=models.SET_NULL) btc_address = models.CharField(max_length=40, blank=True, null=True, validators=[validate_btc_address]) mobile_money_cc = models.CharField( max_length=5, choices=MOBILE_MONEY_CC_CHOICES, help_text=','.join(['%s - %s' % (item[0], item[1]) for item in MOBILE_MONEY_CC_CHOICES]), blank=True, null=True) mobile_money_number = models.CharField(max_length=15, blank=True, null=True) # Tax Information tax_name = models.CharField(max_length=200, blank=True, null=True) tax_percentage = models.FloatField(blank=True, null=True) def __str__(self): return self.user.get_short_name() @property def city_name(self): return self.city and str(self.city) or "" @property def country_name(self): return str(self.country.name) @property def location(self): location = self.city if self.country_name: location = '{}{}{}'.format(location, location and ', ' or '', self.country.name) return location or '' @allow_staff_or_superuser def has_object_read_permission(self, request): return True @allow_staff_or_superuser def has_object_write_permission(self, request): return request.user == self.user def get_category_skills(self, skill_type): return self.skills.filter(type=skill_type) @property def skills_details(self): return dict( language=self.get_category_skills(SKILL_TYPE_LANGUAGE), framework=self.get_category_skills(SKILL_TYPE_FRAMEWORK), platform=self.get_category_skills(SKILL_TYPE_PLATFORM), library=self.get_category_skills(SKILL_TYPE_LIBRARY), storage=self.get_category_skills(SKILL_TYPE_STORAGE), api=self.get_category_skills(SKILL_TYPE_API), other=self.get_category_skills(SKILL_TYPE_OTHER), ) @property def tunga_badge(self): badge = TUNGA_DEVELOPER_BADGE user_projects = self.user.projects total_projects = len(user_projects) user_dedicated_months = self.get_months_of_participation() if total_projects in range(1, 4) or user_dedicated_months in range(1, 7): badge = TUNGA_TALENT_BADGE if total_projects in range(4, 9) or user_dedicated_months in range(7, 19): badge = TUNGA_VETERAN_BADGE if total_projects > 8 or user_dedicated_months > 18: badge = TUNGA_GURU_BADGE return badge def get_months_of_participation(self): total_months = 0 user_participations = self.user.project_participation.filter(status=STATUS_ACCEPTED) for participation in user_participations: start_date = participation.created_at end_or_current_date = participation.project.closed_at or datetime.datetime.now() period = relativedelta.relativedelta(end_or_current_date, start_date) total_months += period.months return total_months
class UserProfile(models.Model): user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) # Personal Info bio = models.TextField(blank=True, null=True) # Contact Info country = CountryField(blank=True, null=True) city = tagulous.models.SingleTagField(to=City, blank=True, null=True) street = models.CharField(max_length=100, blank=True, null=True) plot_number = models.CharField(max_length=100, blank=True, null=True) postal_code = models.CharField(max_length=20, blank=True, null=True) postal_address = models.CharField(max_length=100, blank=True, null=True) phone_number = models.CharField(max_length=15, blank=True, null=True) # Professional Info skills = tagulous.models.TagField(to=Skill, blank=True) # KYC id_document = models.ImageField(upload_to='ids/%Y/%m/%d', blank=True, null=True) company = models.CharField(max_length=200, blank=True, null=True) website = models.URLField(blank=True, null=True) company_profile = models.TextField(blank=True, null=True) company_bio = models.TextField(blank=True, null=True) vat_number = models.CharField(max_length=50, blank=True, null=True) company_reg_no = models.CharField(max_length=50, blank=True, null=True) reference_number = models.CharField(max_length=50, blank=True, null=True) company_details = models.CharField(max_length=50, blank=True, null=True) # Payment Information payment_method = models.CharField( max_length=30, choices=PAYMENT_METHOD_CHOICES, help_text=','.join(['%s - %s' % (item[0], item[1]) for item in PAYMENT_METHOD_CHOICES]), blank=True, null=True ) btc_wallet = models.ForeignKey(BTCWallet, blank=True, null=True, on_delete=models.SET_NULL) btc_address = models.CharField(max_length=40, blank=True, null=True, validators=[validate_btc_address]) mobile_money_cc = models.CharField( max_length=5, choices=MOBILE_MONEY_CC_CHOICES, help_text=','.join(['%s - %s' % (item[0], item[1]) for item in MOBILE_MONEY_CC_CHOICES]), blank=True, null=True) mobile_money_number = models.CharField(max_length=15, blank=True, null=True) # Tax Information tax_name = models.CharField(max_length=200, blank=True, null=True) tax_percentage = models.FloatField(blank=True, null=True) def __str__(self): return self.user.get_short_name() @property def city_name(self): return self.city and str(self.city) or "" @property def country_name(self): return str(self.country.name) @property def location(self): location = self.city if self.country_name: location = '{}{}{}'.format(location, location and ', ' or '', self.country.name) return location or '' @allow_staff_or_superuser def has_object_read_permission(self, request): return True @allow_staff_or_superuser def has_object_write_permission(self, request): return request.user == self.user def get_category_skills(self, skill_type): return self.skills.filter(type=skill_type) @property def skills_details(self): return dict( language=self.get_category_skills(SKILL_TYPE_LANGUAGE), framework=self.get_category_skills(SKILL_TYPE_FRAMEWORK), platform=self.get_category_skills(SKILL_TYPE_PLATFORM), library=self.get_category_skills(SKILL_TYPE_LIBRARY), storage=self.get_category_skills(SKILL_TYPE_STORAGE), api=self.get_category_skills(SKILL_TYPE_API), other=self.get_category_skills(SKILL_TYPE_OTHER), )