From 94aa83a3f2b9813da95426a8a2611ba6e0ac3fb7 Mon Sep 17 00:00:00 2001 From: Lapin-Blanc Date: Thu, 12 Nov 2020 13:39:01 +0100 Subject: [PATCH] Initial code --- .gitignore | 2 + maintenance/__init__.py | 0 maintenance/admin.py | 58 +++++++++ maintenance/apps.py | 5 + maintenance/migrations/__init__.py | 0 maintenance/models.py | 113 ++++++++++++++++++ maintenance/serializers.py | 8 ++ .../maintenance/fournisseur_detail.html | 11 ++ .../maintenance/technicien_detail.html | 11 ++ maintenance/tests.py | 3 + maintenance/urls.py | 18 +++ maintenance/views.py | 20 ++++ manage.py | 22 ++++ 13 files changed, 271 insertions(+) create mode 100644 maintenance/__init__.py create mode 100644 maintenance/admin.py create mode 100644 maintenance/apps.py create mode 100644 maintenance/migrations/__init__.py create mode 100644 maintenance/models.py create mode 100644 maintenance/serializers.py create mode 100644 maintenance/templates/maintenance/fournisseur_detail.html create mode 100644 maintenance/templates/maintenance/technicien_detail.html create mode 100644 maintenance/tests.py create mode 100644 maintenance/urls.py create mode 100644 maintenance/views.py create mode 100755 manage.py diff --git a/.gitignore b/.gitignore index 13d1490..0675c18 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +*/migrations/* +!*/migrations/__init__.py # ---> Python # Byte-compiled / optimized / DLL files __pycache__/ diff --git a/maintenance/__init__.py b/maintenance/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/maintenance/admin.py b/maintenance/admin.py new file mode 100644 index 0000000..5099f94 --- /dev/null +++ b/maintenance/admin.py @@ -0,0 +1,58 @@ +from django.contrib import admin +from django import forms +from .models import Fournisseur, Technicien, Machine, Intervention, Panne + + +@admin.register(Fournisseur) +class FournisseurAdmin(admin.ModelAdmin): + list_display = ['nom_fournisseur'] + + +@admin.register(Technicien) +class TechnicienAdmin(admin.ModelAdmin): + list_display = ['nom_technicien', 'ref_fournisseur'] + + +class PanneInline(admin.TabularInline): + model = Panne + extra = 1 + + +@admin.register(Machine) +class MachineAdmin(admin.ModelAdmin): + list_display = ['numero_serie', 'nom_machine', 'ref_fournisseur'] + inlines = [PanneInline] + + +class InterventionAdminForm(forms.ModelForm): + class Meta: + model = Intervention + fields = '__all__' + + def __init__(self, *args, **kwargs): + super(InterventionAdminForm, self).__init__(*args, **kwargs) + if self.instance: + try: + technicians = Technicien.objects.filter( + ref_fournisseur=self. + instance. + ref_panne. + ref_machine. + ref_fournisseur) + self.fields['ref_technicien'].queryset = technicians + except Panne.DoesNotExist: + self.fields['ref_technicien'].queryset = Technicien. \ + objects. \ + none() + + +@admin.register(Intervention) +class InterventionAdmin(admin.ModelAdmin): + form = InterventionAdminForm + list_display = ['moment_intervention', 'description_intervention', + 'ref_panne', 'ref_technicien'] + + +@admin.register(Panne) +class PanneAdmin(admin.ModelAdmin): + list_display = ['moment_panne', 'description_panne', 'ref_machine'] diff --git a/maintenance/apps.py b/maintenance/apps.py new file mode 100644 index 0000000..36cf680 --- /dev/null +++ b/maintenance/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class MaintenanceConfig(AppConfig): + name = 'maintenance' diff --git a/maintenance/migrations/__init__.py b/maintenance/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/maintenance/models.py b/maintenance/models.py new file mode 100644 index 0000000..7c0ae3b --- /dev/null +++ b/maintenance/models.py @@ -0,0 +1,113 @@ +from django.db import models +from django.utils.translation import gettext_lazy as _ +from django.template.defaultfilters import date as _date +from django.urls import reverse + + +class Fournisseur(models.Model): + + nom_fournisseur = models.CharField('nom', max_length=50) + + class Meta: + verbose_name = _("fournisseur") + verbose_name_plural = _("fournisseurs") + + def __str__(self): + return self.nom_fournisseur + + def get_absolute_url(self): + return reverse("fournisseur_detail", kwargs={"pk": self.pk}) + + +class Technicien(models.Model): + + nom_technicien = models.CharField('nom', max_length=50) + ref_fournisseur = models.ForeignKey("maintenance.Fournisseur", + verbose_name=_("fournisseur"), + on_delete=models.PROTECT) + + class Meta: + verbose_name = _("technicien") + verbose_name_plural = _("techniciens") + + def __str__(self): + return self.nom_technicien + + def get_absolute_url(self): + return reverse("technicien_detail", kwargs={"pk": self.pk}) + + +class Machine(models.Model): + + numero_serie = models.CharField('numéro de série', max_length=20) + nom_machine = models.CharField('nom', max_length=50) + ref_fournisseur = models.ForeignKey("maintenance.Fournisseur", + verbose_name=_("fournisseur"), + on_delete=models.PROTECT) + + class Meta: + verbose_name = _("machine") + verbose_name_plural = _("machines") + + def __str__(self): + return self.nom_machine + + def get_absolute_url(self): + return reverse("machine_detail", kwargs={"pk": self.pk}) + + +class Panne(models.Model): + + moment_panne = models.DateTimeField('moment de la panne', + auto_now_add=True) + description_panne = models.TextField('description', default='-') + ref_machine = models.ForeignKey("maintenance.Machine", + verbose_name=_("machine"), + on_delete=models.PROTECT) + + class Meta: + verbose_name = _("Panne") + verbose_name_plural = _("Pannes") + + def __str__(self): + if len(self.description_panne) <= 20: + short_description = self.description_panne + else: + short_description = self.description_panne[:20] + return _date(self.moment_panne, + 'SHORT_DATETIME_FORMAT') + " | " + short_description + + def get_absolute_url(self): + return reverse("panne_detail", kwargs={"pk": self.pk}) + + +class Intervention(models.Model): + + moment_intervention = models.DateTimeField('moment de l\'intervention', + auto_now_add=True) + ref_panne = models.ForeignKey("maintenance.Panne", + verbose_name=_("panne"), + on_delete=models.PROTECT) + ref_technicien = models.ForeignKey("maintenance.Technicien", + verbose_name=_("technicien"), + on_delete=models.PROTECT, + null=True, + blank=True) + description_intervention = models.TextField('description', + blank=True, + null=True) + + class Meta: + verbose_name = _("intervention") + verbose_name_plural = _("interventions") + + def __str__(self): + if len(self.description_intervention) <= 20: + short_description = self.description_intervention + else: + short_description = self.description_intervention[:20] + return _date(self.moment_intervention, + 'SHORT_DATETIME_FORMAT') + " | " + short_description + + def get_absolute_url(self): + return reverse("intervention_detail", kwargs={"pk": self.pk}) diff --git a/maintenance/serializers.py b/maintenance/serializers.py new file mode 100644 index 0000000..bd9ef89 --- /dev/null +++ b/maintenance/serializers.py @@ -0,0 +1,8 @@ +from rest_framework import serializers +from maintenance.models import Fournisseur + + +class FournisseurSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = Fournisseur + fields = ['nom_fournisseur'] diff --git a/maintenance/templates/maintenance/fournisseur_detail.html b/maintenance/templates/maintenance/fournisseur_detail.html new file mode 100644 index 0000000..a3dfa71 --- /dev/null +++ b/maintenance/templates/maintenance/fournisseur_detail.html @@ -0,0 +1,11 @@ + + + + + + {{ object.nom_fournisseur }} + + +

{{ object.nom_fournisseur }}

+ + \ No newline at end of file diff --git a/maintenance/templates/maintenance/technicien_detail.html b/maintenance/templates/maintenance/technicien_detail.html new file mode 100644 index 0000000..831da06 --- /dev/null +++ b/maintenance/templates/maintenance/technicien_detail.html @@ -0,0 +1,11 @@ + + + + + + {{ object.nom_technicien }} + + +

{{ object.nom_technicien }}

+ + \ No newline at end of file diff --git a/maintenance/tests.py b/maintenance/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/maintenance/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/maintenance/urls.py b/maintenance/urls.py new file mode 100644 index 0000000..32c6868 --- /dev/null +++ b/maintenance/urls.py @@ -0,0 +1,18 @@ +from django.urls import path, include +from rest_framework import routers +from maintenance.views import ( + FournisseurDetailView, + TechnicienDetailView, + FournisseurViewSet +) + +router = routers.DefaultRouter() +router.register(r'fournisseurs', FournisseurViewSet) + +urlpatterns = [ + path('fournisseur/', FournisseurDetailView.as_view(), + name='fournisseur_detail'), + path('technicien/', TechnicienDetailView.as_view(), + name='technicien_detail'), + path('api/', include(router.urls)) +] diff --git a/maintenance/views.py b/maintenance/views.py new file mode 100644 index 0000000..d5d72fa --- /dev/null +++ b/maintenance/views.py @@ -0,0 +1,20 @@ +# from django.shortcuts import render +from django.views.generic import DetailView +from maintenance.models import Fournisseur, Technicien +from rest_framework import viewsets +from maintenance.serializers import FournisseurSerializer + + +class FournisseurDetailView(DetailView): + model = Fournisseur + template_name = "maintenance/fournisseur_detail.html" + + +class TechnicienDetailView(DetailView): + model = Technicien + template_name = "maintenance/technicien_detail.html" + + +class FournisseurViewSet(viewsets.ModelViewSet): + queryset = Fournisseur.objects.all() + serializer_class = FournisseurSerializer diff --git a/manage.py b/manage.py new file mode 100755 index 0000000..f05a13e --- /dev/null +++ b/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'boulangerie.settings') + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == '__main__': + main()