@@ -1,3 +1,5 @@ | |||||
*/migrations/* | |||||
!*/migrations/__init__.py | |||||
# ---> Python | # ---> Python | ||||
# Byte-compiled / optimized / DLL files | # Byte-compiled / optimized / DLL files | ||||
__pycache__/ | __pycache__/ | ||||
@@ -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'] |
@@ -0,0 +1,5 @@ | |||||
from django.apps import AppConfig | |||||
class MaintenanceConfig(AppConfig): | |||||
name = 'maintenance' |
@@ -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}) |
@@ -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'] |
@@ -0,0 +1,11 @@ | |||||
<!DOCTYPE html> | |||||
<html lang="en"> | |||||
<head> | |||||
<meta charset="UTF-8"> | |||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |||||
<title>{{ object.nom_fournisseur }}</title> | |||||
</head> | |||||
<body> | |||||
<h4>{{ object.nom_fournisseur }}</h4> | |||||
</body> | |||||
</html> |
@@ -0,0 +1,11 @@ | |||||
<!DOCTYPE html> | |||||
<html lang="en"> | |||||
<head> | |||||
<meta charset="UTF-8"> | |||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |||||
<title>{{ object.nom_technicien }}</title> | |||||
</head> | |||||
<body> | |||||
<h4>{{ object.nom_technicien }}<h4> | |||||
</body> | |||||
</html> |
@@ -0,0 +1,3 @@ | |||||
from django.test import TestCase | |||||
# Create your tests here. |
@@ -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/<int:pk>', FournisseurDetailView.as_view(), | |||||
name='fournisseur_detail'), | |||||
path('technicien/<int:pk>', TechnicienDetailView.as_view(), | |||||
name='technicien_detail'), | |||||
path('api/', include(router.urls)) | |||||
] |
@@ -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 |
@@ -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() |