diff --git a/.gitignore b/.gitignore index 1b0670a..eab1ff3 100644 --- a/.gitignore +++ b/.gitignore @@ -177,3 +177,4 @@ venv.bak/ # End of https://www.gitignore.io/api/python,pycharm,osx +db.sqlite3 diff --git a/gym/__init__.py b/gym/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/gym/admin.py b/gym/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/gym/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/gym/apps.py b/gym/apps.py new file mode 100644 index 0000000..b178296 --- /dev/null +++ b/gym/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class GymConfig(AppConfig): + name = 'gym' diff --git a/gym/migrations/0001_initial.py b/gym/migrations/0001_initial.py new file mode 100644 index 0000000..1238cb4 --- /dev/null +++ b/gym/migrations/0001_initial.py @@ -0,0 +1,104 @@ +# Generated by Django 2.0.2 on 2018-03-02 11:00 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Equipment', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=300, verbose_name='nom')), + ], + options={ + 'verbose_name': 'machine', + 'verbose_name_plural': 'machines', + }, + ), + migrations.CreateModel( + name='Room', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=300, verbose_name='nom')), + ('latitude', models.DecimalField(decimal_places=8, max_digits=11, verbose_name='latitude')), + ('longitude', models.DecimalField(decimal_places=8, max_digits=11, verbose_name='longitude')), + ('notes', models.TextField(verbose_name='notes')), + ], + options={ + 'verbose_name': 'salle', + 'verbose_name_plural': 'salles', + }, + ), + migrations.CreateModel( + name='Round', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('repetition_number', models.PositiveIntegerField(verbose_name='nombre de répétitions')), + ('theoretical_max_percentage', models.PositiveIntegerField(verbose_name='pourcentage')), + ('chosen_weight', models.FloatField(verbose_name='charge choisie')), + ('notes', models.TextField(verbose_name='notes')), + ('equipment', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='rounds', to='gym.Equipment', verbose_name='machine')), + ], + options={ + 'verbose_name': 'série', + 'verbose_name_plural': 'séries', + }, + ), + migrations.CreateModel( + name='Session', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('date', models.DateField(verbose_name='date')), + ('notes', models.TextField(verbose_name='notes')), + ('room', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='sessions', to='gym.Room', verbose_name='salle')), + ], + options={ + 'verbose_name': 'séance', + 'verbose_name_plural': 'séances', + }, + ), + migrations.CreateModel( + name='Setting', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=200, verbose_name='nom')), + ('value', models.CharField(max_length=200, verbose_name='valeur')), + ('equipment', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='settings', to='gym.Equipment', verbose_name='machine')), + ], + options={ + 'verbose_name': 'réglage', + 'verbose_name_plural': 'réglages', + }, + ), + migrations.CreateModel( + name='TheoreticalMax', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('date', models.DateField(verbose_name='date')), + ('value', models.FloatField(verbose_name='valeur')), + ('equipment', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='theoretical_maxs', to='gym.Equipment', verbose_name='machine')), + ], + options={ + 'verbose_name': 'maximum théorique', + 'verbose_name_plural': 'maximums théoriques', + }, + ), + migrations.AddField( + model_name='round', + name='session', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='rounds', to='gym.Session', verbose_name='séance'), + ), + migrations.AddField( + model_name='equipment', + name='room', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='equipments', to='gym.Room', verbose_name='salle'), + ), + ] diff --git a/gym/migrations/__init__.py b/gym/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/gym/models.py b/gym/models.py new file mode 100644 index 0000000..d501231 --- /dev/null +++ b/gym/models.py @@ -0,0 +1,96 @@ +from django.db import models + + +class Room(models.Model): + class Meta: + verbose_name = 'salle' + verbose_name_plural = 'salles' + + name = models.CharField('nom', max_length=300) + latitude = models.DecimalField('latitude', max_digits=11, decimal_places=8) + longitude = models.DecimalField('longitude', max_digits=11, decimal_places=8) + notes = models.TextField('notes') + + +class Equipment(models.Model): + class Meta: + verbose_name = 'machine' + verbose_name_plural = 'machines' + + name = models.CharField('nom', max_length=300) + room = models.ForeignKey( + verbose_name='salle', + to=Room, + on_delete=models.SET_NULL, + related_name='equipments', + null=True + ) + + +class Setting(models.Model): + class Meta: + verbose_name = 'réglage' + verbose_name_plural = 'réglages' + + equipment = models.ForeignKey( + verbose_name='machine', + to=Equipment, + on_delete=models.CASCADE, + related_name='settings' + ) + name = models.CharField('nom', max_length=200) + value = models.CharField('valeur', max_length=200) + + +class TheoreticalMax(models.Model): + class Meta: + verbose_name = 'maximum théorique' + verbose_name_plural = 'maximums théoriques' + + equipment = models.ForeignKey( + verbose_name='machine', + to=Equipment, + on_delete=models.CASCADE, + related_name='theoretical_maxs' + ) + date = models.DateField('date') + value = models.FloatField('valeur') + + +class Session(models.Model): + class Meta: + verbose_name = 'séance' + verbose_name_plural = 'séances' + + date = models.DateField('date') + room = models.ForeignKey( + verbose_name='salle', + to=Room, + on_delete=models.SET_NULL, + related_name='sessions', + null=True + ) + notes = models.TextField('notes') + + +class Round(models.Model): + class Meta: + verbose_name = 'série' + verbose_name_plural = 'séries' + + repetition_number = models.PositiveIntegerField('nombre de répétitions') + equipment = models.ForeignKey( + verbose_name='machine', + to=Equipment, + on_delete=models.CASCADE, + related_name='rounds' + ) + theoretical_max_percentage = models.PositiveIntegerField('pourcentage') + chosen_weight = models.FloatField('charge choisie') + session = models.ForeignKey( + verbose_name='séance', + to=Session, + on_delete=models.CASCADE, + related_name='rounds' + ) + notes = models.TextField('notes') diff --git a/gym/tests.py b/gym/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/gym/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/gym/views.py b/gym/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/gym/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/muscu/settings.py b/muscu/settings.py index 58d0a24..7ef77ea 100644 --- a/muscu/settings.py +++ b/muscu/settings.py @@ -37,6 +37,7 @@ INSTALLED_APPS = [ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + 'gym', ] MIDDLEWARE = [