From f7361c1551e12ba5d48cdc24139a451a80272c42 Mon Sep 17 00:00:00 2001 From: Guillaume Pellerin Date: Wed, 21 Dec 2016 17:04:09 +0100 Subject: [PATCH] Add first timesheets models --- app/organization/network/models.py | 34 ++++++++++++++++++++++++ app/organization/projects/admin.py | 6 +++++ app/organization/projects/models.py | 12 +++++++++ app/organization/projects/translation.py | 8 +++++- docker-compose.yml | 2 +- 5 files changed, 60 insertions(+), 2 deletions(-) diff --git a/app/organization/network/models.py b/app/organization/network/models.py index 5e391257..fbb20607 100644 --- a/app/organization/network/models.py +++ b/app/organization/network/models.py @@ -517,3 +517,37 @@ class PersonActivity(Period): return ' - '.join((self.status.name, str(self.date_from), str(self.date_to))) else: return ' - '.join((str(self.date_from), str(self.date_to))) + + +class PersonActivityHebdoHourVolume(models.Model): + + activity = models.ForeignKey('PersonActivity', verbose_name=_('activity')) + 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 PersonActivityTimeSheet(models.Model): + + activity = models.ForeignKey('PersonActivity', verbose_name=_('activity'), related_name='timesheets') + project = models.ForeignKey('organization-projects.Project', verbose_name=_('project'), related_name='timesheets') + work_packages = models.ManyToManyField('organization-projects.ProjectWorkPackage', verbose_name=_('work package'), related_name='timesheets', blank=True) + percentage = models.IntegerField(_('% of work time on the project')) + month = models.IntegerField(_('month')) + year = models.IntegerField(_('year')) + + @property + def date(self): + pass + + class Meta: + verbose_name = _('activity timesheet') + verbose_name_plural = _('activity timesheets') + ordering = ['month',] + + +class PersonActivityVacation(Period): + + activity = models.ForeignKey('PersonActivity', verbose_name=_('activity')) diff --git a/app/organization/projects/admin.py b/app/organization/projects/admin.py index 8a7462e9..21b0ba7f 100644 --- a/app/organization/projects/admin.py +++ b/app/organization/projects/admin.py @@ -64,6 +64,11 @@ class ProjectDemoInline(TabularDynamicInlineAdmin): model = ProjectDemo +class ProjectWorkPackageInline(TabularDynamicInlineAdmin): + + model = ProjectWorkPackage + + class ProjectDemoAdmin(BaseTranslationModelAdmin): model = ProjectDemo @@ -96,6 +101,7 @@ class ProjectAdminDisplayable(DisplayableAdmin): fieldsets = deepcopy(ProjectAdmin.fieldsets) inlines = [ ProjectBlockInline, ProjectImageInline, + ProjectWorkPackageInline, ProjectPlaylistInline, ProjectLinkInline, ProjectFileInline, diff --git a/app/organization/projects/models.py b/app/organization/projects/models.py index df69a4a3..0011e735 100644 --- a/app/organization/projects/models.py +++ b/app/organization/projects/models.py @@ -114,6 +114,18 @@ class ProjectProgramType(Named): ordering = ['name',] +class ProjectWorkPackage(Titled, Period): + + project = models.ForeignKey(Project, verbose_name=_('project'), related_name='work_packages') + number = models.IntegerField(_('number')) + lead_organization = models.ForeignKey('organization-network.Organization', verbose_name=_('lead organization'), related_name='leader_work_packages', blank=True, null=True) + + class Meta: + verbose_name = _('work package') + verbose_name_plural = _("work packages") + ordering = ['number',] + + class ProjectPlaylist(PlaylistRelated): project = models.ForeignKey(Project, verbose_name=_('project'), related_name='playlists', blank=True, null=True, on_delete=models.SET_NULL) diff --git a/app/organization/projects/translation.py b/app/organization/projects/translation.py index 1e47bbf1..2b3a87a0 100644 --- a/app/organization/projects/translation.py +++ b/app/organization/projects/translation.py @@ -90,8 +90,14 @@ class ProjectDemoTranslationOptions(TranslationOptions): fields = ('title', 'description',) +@register(ProjectWorkPackage) +class ProjectWorkPackageTranslationOptions(TranslationOptions): + + pass + + @register(ProjectRelatedTitle) -class ProjectRelatedTitleranslationOptions(TranslationOptions): +class ProjectRelatedTitleTranslationOptions(TranslationOptions): fields = ('title',) diff --git a/docker-compose.yml b/docker-compose.yml index e081a594..ff6dd52a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -64,7 +64,7 @@ app: nginx: image: nginx ports: - - "8020:80" + - "80:80" volumes: - ./etc/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf volumes_from: -- 2.39.5