From 62689d57acea0eeb81d71510fe2a87c072a87225 Mon Sep 17 00:00:00 2001 From: Emilie Date: Thu, 22 Dec 2016 20:00:49 +0100 Subject: [PATCH] [TimeSheet] delete model, change field type and add validator --- app/organization/network/admin.py | 6 -- .../migrations/0071_auto_20161222_1828.py | 47 ++++++++++++++ .../migrations/0072_auto_20161222_1906.py | 65 +++++++++++++++++++ app/organization/network/models.py | 54 +++++++-------- app/organization/network/translation.py | 6 -- app/organization/network/validators.py | 9 +++ 6 files changed, 148 insertions(+), 39 deletions(-) create mode 100644 app/organization/network/migrations/0071_auto_20161222_1828.py create mode 100644 app/organization/network/migrations/0072_auto_20161222_1906.py create mode 100644 app/organization/network/validators.py diff --git a/app/organization/network/admin.py b/app/organization/network/admin.py index f2fc4c77..988f9bd1 100644 --- a/app/organization/network/admin.py +++ b/app/organization/network/admin.py @@ -144,11 +144,6 @@ class ActivityWeeklyHourVolumeAdmin(BaseTranslationModelAdmin): model = ActivityWeeklyHourVolume -class PersonActivityWeeklyHourVolumeAdminInline(TabularDynamicInlineAdmin): - - model = PersonActivityWeeklyHourVolume - - class PersonActivityInline(StackedDynamicInlineAdmin): model = PersonActivity @@ -209,7 +204,6 @@ class PersonActivityAdmin(BaseTranslationModelAdmin): list_filter = [ 'date_from', 'date_to', 'is_permanent', 'framework', 'grade', 'status', 'teams', 'projects',] - inlines = [PersonActivityWeeklyHourVolumeAdminInline,] def get_teams(self, instance): values = [] diff --git a/app/organization/network/migrations/0071_auto_20161222_1828.py b/app/organization/network/migrations/0071_auto_20161222_1828.py new file mode 100644 index 00000000..6b546248 --- /dev/null +++ b/app/organization/network/migrations/0071_auto_20161222_1828.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.11 on 2016-12-22 17:28 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('organization-network', '0070_auto_20161222_1656'), + ] + + operations = [ + migrations.RemoveField( + model_name='personactivityweeklyhourvolume', + name='activity', + ), + migrations.AddField( + model_name='personactivity', + name='friday_hours', + field=models.IntegerField(blank=True, null=True, verbose_name='friday hours'), + ), + migrations.AddField( + model_name='personactivity', + name='monday_hours', + field=models.IntegerField(blank=True, null=True, verbose_name='monday hours'), + ), + migrations.AddField( + model_name='personactivity', + name='thursday_hours', + field=models.IntegerField(blank=True, null=True, verbose_name='thursday hours'), + ), + migrations.AddField( + model_name='personactivity', + name='tuesday_hours', + field=models.IntegerField(blank=True, null=True, verbose_name='tuesday hours'), + ), + migrations.AddField( + model_name='personactivity', + name='wednesday_hours', + field=models.IntegerField(blank=True, null=True, verbose_name='wednesday hours'), + ), + migrations.DeleteModel( + name='PersonActivityWeeklyHourVolume', + ), + ] diff --git a/app/organization/network/migrations/0072_auto_20161222_1906.py b/app/organization/network/migrations/0072_auto_20161222_1906.py new file mode 100644 index 00000000..2cec4856 --- /dev/null +++ b/app/organization/network/migrations/0072_auto_20161222_1906.py @@ -0,0 +1,65 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.11 on 2016-12-22 18:06 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('organization-network', '0071_auto_20161222_1828'), + ] + + operations = [ + migrations.AlterField( + model_name='activityweeklyhourvolume', + name='friday_hours', + field=models.FloatField(verbose_name='friday hours'), + ), + migrations.AlterField( + model_name='activityweeklyhourvolume', + name='monday_hours', + field=models.FloatField(verbose_name='monday hours'), + ), + migrations.AlterField( + model_name='activityweeklyhourvolume', + name='thursday_hours', + field=models.FloatField(verbose_name='thursday hours'), + ), + migrations.AlterField( + model_name='activityweeklyhourvolume', + name='tuesday_hours', + field=models.FloatField(verbose_name='tuesday hours'), + ), + migrations.AlterField( + model_name='activityweeklyhourvolume', + name='wednesday_hours', + field=models.FloatField(verbose_name='wednesday hours'), + ), + migrations.AlterField( + model_name='personactivity', + name='friday_hours', + field=models.FloatField(blank=True, null=True, verbose_name='friday hours'), + ), + migrations.AlterField( + model_name='personactivity', + name='monday_hours', + field=models.FloatField(blank=True, null=True, verbose_name='monday hours'), + ), + migrations.AlterField( + model_name='personactivity', + name='thursday_hours', + field=models.FloatField(blank=True, null=True, verbose_name='thursday hours'), + ), + migrations.AlterField( + model_name='personactivity', + name='tuesday_hours', + field=models.FloatField(blank=True, null=True, verbose_name='tuesday hours'), + ), + migrations.AlterField( + model_name='personactivity', + name='wednesday_hours', + field=models.FloatField(blank=True, null=True, verbose_name='wednesday hours'), + ), + ] diff --git a/app/organization/network/models.py b/app/organization/network/models.py index 6d2f2c2b..05c845e0 100644 --- a/app/organization/network/models.py +++ b/app/organization/network/models.py @@ -49,6 +49,8 @@ from organization.core.models import * from organization.media.models import * from organization.pages.models import CustomPage +from organization.network.validators import * + # from .nationalities.fields import NationalityField # Hack to have these strings translated @@ -462,30 +464,17 @@ class UMR(Named): class ActivityWeeklyHourVolume(Titled): - monday_hours = models.IntegerField(_('monday hours')) - tuesday_hours = models.IntegerField(_('tuesday hours')) - wednesday_hours = models.IntegerField(_('wednesday hours')) - thursday_hours = models.IntegerField(_('thursday hours')) - friday_hours = models.IntegerField(_('friday hours')) + monday_hours = models.FloatField(_('monday hours'), validators=[validate_positive]) + tuesday_hours = models.FloatField(_('tuesday hours'), validators=[validate_positive]) + wednesday_hours = models.FloatField(_('wednesday hours'), validators=[validate_positive]) + thursday_hours = models.FloatField(_('thursday hours'), validators=[validate_positive]) + friday_hours = models.FloatField(_('friday hours'), validators=[validate_positive]) class Meta: verbose_name = _('Activity Weekly Hour Volume') verbose_name_plural = _('Activity Weekly Hour Volumes') -class PersonActivityWeeklyHourVolume(models.Model): - - activity = models.OneToOneField('PersonActivity', verbose_name=_('activity'), related_name="person_activity_weekly_hour_volume", blank=True, null=True, on_delete=models.CASCADE) - monday_hours = models.IntegerField(_('monday hours'), blank=True, null=True) - tuesday_hours = models.IntegerField(_('tuesday hours'), blank=True, null=True) - wednesday_hours = models.IntegerField(_('wednesday hours'), blank=True, null=True) - thursday_hours = models.IntegerField(_('thursday hours'), blank=True, null=True) - friday_hours = models.IntegerField(_('friday hours'), blank=True, null=True) - - class Meta: - verbose_name = _('Person Activity Weekly Hour Volume') - - class PersonActivity(Period): """(Activity description)""" @@ -532,11 +521,16 @@ class PersonActivity(Period): date_modified_manual = models.DateTimeField(_('manual modification date'), blank=True, null=True) comments = models.TextField(_('comments'), blank=True) - external_id = models.CharField(_('external ID'), blank=True, null=True, max_length=128) weekly_hour_volume = models.ForeignKey('ActivityWeeklyHourVolume', blank=True, null=True, on_delete=models.SET_NULL) + monday_hours = models.FloatField(_('monday hours'), validators=[validate_positive], blank=True, null=True) + tuesday_hours = models.FloatField(_('tuesday hours'), validators=[validate_positive], blank=True, null=True) + wednesday_hours = models.FloatField(_('wednesday hours'), validators=[validate_positive], blank=True, null=True) + thursday_hours = models.FloatField(_('thursday hours'), validators=[validate_positive], blank=True, null=True) + friday_hours = models.FloatField(_('friday hours'), validators=[validate_positive], blank=True, null=True) + class Meta: verbose_name = _('activity') verbose_name_plural = _('activities') @@ -550,11 +544,17 @@ class PersonActivity(Period): def save(self, *args, **kwargs): super(PersonActivity, self).save(args, kwargs) - if self.weekly_hour_volume and not hasattr(self, 'person_activity_weekly_hour_volume'): - self.person_activity_weekly_hour_volume = PersonActivityWeeklyHourVolume(activity=self) - self.person_activity_weekly_hour_volume.monday_hours = self.weekly_hour_volume.monday_hours - self.person_activity_weekly_hour_volume.tuesday_hours = self.weekly_hour_volume.tuesday_hours - self.person_activity_weekly_hour_volume.wednesday_hours = self.weekly_hour_volume.wednesday_hours - self.person_activity_weekly_hour_volume.thursday_hours = self.weekly_hour_volume.thursday_hours - self.person_activity_weekly_hour_volume.friday_hours = self.weekly_hour_volume.friday_hours - self.person_activity_weekly_hour_volume.save() + if self.weekly_hour_volume : + # caution : if 0 return False + # caution : 'None' is not empty + if not self.monday_hours.__str__() != 'None' and \ + not self.tuesday_hours.__str__() != 'None' and \ + not self.wednesday_hours.__str__() != 'None' and \ + not self.thursday_hours.__str__() != 'None' and \ + not self.friday_hours.__str__() != 'None' : + self.monday_hours = self.weekly_hour_volume.monday_hours + self.tuesday_hours = self.weekly_hour_volume.tuesday_hours + self.wednesday_hours = self.weekly_hour_volume.wednesday_hours + self.thursday_hours = self.weekly_hour_volume.thursday_hours + self.friday_hours = self.weekly_hour_volume.friday_hours + self.save() diff --git a/app/organization/network/translation.py b/app/organization/network/translation.py index 1f722475..9d09d432 100644 --- a/app/organization/network/translation.py +++ b/app/organization/network/translation.py @@ -220,9 +220,3 @@ class OrganizationLinkedBlockInlineTranslationOptions(TranslationOptions): class ActivityWeeklyHourVolumeTranslationOptions(TranslationOptions): fields = [] - - -@register(PersonActivityWeeklyHourVolume) -class PersonActivityWeeklyHourVolumeTranslationOptions(TranslationOptions): - - fields = [] diff --git a/app/organization/network/validators.py b/app/organization/network/validators.py new file mode 100644 index 00000000..45ae9118 --- /dev/null +++ b/app/organization/network/validators.py @@ -0,0 +1,9 @@ +from django.core.exceptions import ValidationError +from django.utils.translation import ugettext_lazy as _ + +def validate_positive(value): + if value < 0: + raise ValidationError( + _('%(value)s must be positive'), + params={'value': value}, + ) -- 2.39.5