med/media/models.py

384 lines
8.4 KiB
Python
Raw Normal View History

2019-08-02 12:57:53 +00:00
# -*- mode: python; coding: utf-8 -*-
# Copyright (C) 2017-2019 by BDE ENS Paris-Saclay
# SPDX-License-Identifier: GPL-3.0-or-later
2017-07-03 23:47:22 +00:00
from django.core.validators import MinValueValidator
2019-08-02 12:57:53 +00:00
from django.db import models
from django.utils.translation import gettext_lazy as _
2019-08-11 07:22:22 +00:00
from .fields import ISBNField
2017-06-30 01:25:07 +00:00
class Auteur(models.Model):
2019-08-16 12:01:13 +00:00
name = models.CharField(
max_length=255,
unique=True,
verbose_name=_('name'),
)
2017-06-30 01:25:07 +00:00
2020-02-10 16:27:30 +00:00
note = models.IntegerField(
default=0,
verbose_name=_("note"),
)
2017-06-30 01:25:07 +00:00
def __str__(self):
2019-08-16 12:01:13 +00:00
return self.name
2017-06-30 01:25:07 +00:00
2019-08-02 12:57:53 +00:00
class Meta:
verbose_name = _("author")
verbose_name_plural = _("authors")
2019-08-16 12:01:13 +00:00
ordering = ['name']
2019-08-02 12:57:53 +00:00
2020-05-22 16:04:41 +00:00
class BD(models.Model):
2019-08-11 07:22:22 +00:00
isbn = ISBNField(
_('ISBN'),
help_text=_('You may be able to scan it from a bar code.'),
2020-02-10 16:41:05 +00:00
unique=True,
2019-08-11 07:22:22 +00:00
blank=True,
null=True,
)
2020-05-21 14:56:41 +00:00
2019-08-11 07:22:22 +00:00
title = models.CharField(
verbose_name=_('title'),
max_length=255,
)
2020-05-21 14:56:41 +00:00
2019-08-11 07:22:22 +00:00
subtitle = models.CharField(
verbose_name=_('subtitle'),
max_length=255,
blank=True,
null=True,
)
2020-05-21 14:56:41 +00:00
2019-08-11 07:22:22 +00:00
external_url = models.URLField(
verbose_name=_('external URL'),
blank=True,
null=True,
)
2020-05-21 14:56:41 +00:00
2019-08-11 08:49:04 +00:00
side_identifier = models.CharField(
verbose_name=_('side identifier'),
2019-08-11 07:22:22 +00:00
max_length=255,
)
2020-05-21 14:56:41 +00:00
2019-08-11 07:22:22 +00:00
authors = models.ManyToManyField(
'Auteur',
verbose_name=_('authors'),
)
2020-05-21 14:56:41 +00:00
2019-08-11 07:22:22 +00:00
number_of_pages = models.PositiveIntegerField(
verbose_name=_('number of pages'),
blank=True,
null=True,
)
2020-05-21 14:56:41 +00:00
2019-08-11 07:22:22 +00:00
publish_date = models.DateField(
verbose_name=_('publish date'),
blank=True,
null=True,
)
2017-06-30 01:25:07 +00:00
def __str__(self):
2019-08-15 09:37:10 +00:00
if self.subtitle:
return "{} : {}".format(self.title, self.subtitle)
else:
return self.title
2017-06-30 01:25:07 +00:00
2019-08-02 12:57:53 +00:00
class Meta:
2020-05-22 16:04:41 +00:00
verbose_name = _("BD")
verbose_name_plural = _("BDs")
2019-08-11 16:37:04 +00:00
ordering = ['title', 'subtitle']
2019-08-02 12:57:53 +00:00
2020-05-21 14:56:41 +00:00
class Manga(models.Model):
isbn = ISBNField(
_('ISBN'),
help_text=_('You may be able to scan it from a bar code.'),
unique=True,
blank=True,
null=True,
)
title = models.CharField(
verbose_name=_('title'),
max_length=255,
)
subtitle = models.CharField(
verbose_name=_('subtitle'),
max_length=255,
blank=True,
null=True,
)
external_url = models.URLField(
verbose_name=_('external URL'),
blank=True,
null=True,
)
side_identifier = models.CharField(
verbose_name=_('side identifier'),
max_length=255,
)
authors = models.ManyToManyField(
'Auteur',
verbose_name=_('authors'),
)
number_of_pages = models.PositiveIntegerField(
verbose_name=_('number of pages'),
blank=True,
null=True,
)
publish_date = models.DateField(
verbose_name=_('publish date'),
blank=True,
null=True,
)
2020-05-22 19:08:44 +00:00
def __str__(self):
return self.title
class Meta:
verbose_name = _("manga")
verbose_name_plural = _("mangas")
ordering = ['title']
class Roman(models.Model):
isbn = ISBNField(
_('ISBN'),
help_text=_('You may be able to scan it from a bar code.'),
unique=True,
blank=True,
null=True,
)
title = models.CharField(
verbose_name=_('title'),
max_length=255,
)
subtitle = models.CharField(
verbose_name=_('subtitle'),
max_length=255,
blank=True,
null=True,
)
external_url = models.URLField(
verbose_name=_('external URL'),
blank=True,
null=True,
)
side_identifier = models.CharField(
verbose_name=_('side identifier'),
max_length=255,
)
authors = models.ManyToManyField(
'Auteur',
verbose_name=_('authors'),
)
number_of_pages = models.PositiveIntegerField(
verbose_name=_('number of pages'),
blank=True,
null=True,
)
publish_date = models.DateField(
verbose_name=_('publish date'),
blank=True,
null=True,
)
def __str__(self):
return self.title
class Meta:
verbose_name = _("roman")
verbose_name_plural = _("romans")
ordering = ['title', 'subtitle']
2020-05-22 16:04:41 +00:00
class Vinyle(models.Model):
title = models.CharField(
verbose_name=_('title'),
max_length=255,
)
side_identifier = models.CharField(
verbose_name=_('side identifier'),
max_length=255,
)
2020-05-23 12:23:39 +00:00
rpm = models.PositiveIntegerField(
verbose_name=_('rounds per minute'),
choices=[
(33, _('33 RPM')),
(45, _('45 RPM')),
],
)
2020-05-22 16:04:41 +00:00
authors = models.ManyToManyField(
'Auteur',
verbose_name=_('authors'),
)
2020-05-21 14:56:41 +00:00
def __str__(self):
2020-05-22 16:04:41 +00:00
return self.title
2020-05-21 14:56:41 +00:00
class Meta:
2020-05-22 16:04:41 +00:00
verbose_name = _("vinyle")
verbose_name_plural = _("vinyles")
ordering = ['title']
class CD(models.Model):
title = models.CharField(
verbose_name=_('title'),
max_length=255,
)
side_identifier = models.CharField(
verbose_name=_('side identifier'),
max_length=255,
)
authors = models.ManyToManyField(
'Auteur',
verbose_name=_('authors'),
)
def __str__(self):
return self.title
class Meta:
verbose_name = _("CD")
verbose_name_plural = _("CDs")
ordering = ['title']
2020-05-21 14:56:41 +00:00
class FutureMedia(models.Model):
isbn = ISBNField(
_('ISBN'),
help_text=_('You may be able to scan it from a bar code.'),
unique=True,
blank=True,
null=True,
)
2020-05-22 19:37:02 +00:00
type = models.CharField(
_('type'),
choices=[
('bd', _('BD')),
('manga', _('Manga')),
('roman', _('Roman')),
],
max_length=8,
)
class Meta:
verbose_name = _("future medium")
verbose_name_plural = _("future media")
def __str__(self):
return "Future medium (ISBN: {isbn})".format(isbn=self.isbn, )
2017-06-30 01:25:07 +00:00
class Emprunt(models.Model):
2019-08-16 12:01:13 +00:00
media = models.ForeignKey(
2020-05-22 16:04:41 +00:00
'BD',
2019-08-16 12:01:13 +00:00
on_delete=models.PROTECT,
)
user = models.ForeignKey(
'users.User',
on_delete=models.PROTECT,
verbose_name=_("borrower"),
)
date_emprunt = models.DateTimeField(
verbose_name=_('borrowed on'),
)
2019-08-08 14:33:05 +00:00
date_rendu = models.DateTimeField(
blank=True,
null=True,
2019-08-16 12:01:13 +00:00
verbose_name=_('given back on'),
2019-08-08 14:33:05 +00:00
)
permanencier_emprunt = models.ForeignKey(
'users.User',
on_delete=models.PROTECT,
related_name='user_permanencier_emprunt',
2019-08-16 12:01:13 +00:00
verbose_name=_('borrowed with'),
help_text=_('The keyholder that registered this borrowed item.')
2019-08-08 14:33:05 +00:00
)
permanencier_rendu = models.ForeignKey(
'users.User',
on_delete=models.PROTECT,
related_name='user_permanencier_rendu',
blank=True,
null=True,
2019-08-16 12:01:13 +00:00
verbose_name=_('given back to'),
help_text=_('The keyholder to whom this item was given back.')
2019-08-08 14:33:05 +00:00
)
2017-07-06 15:30:23 +00:00
def __str__(self):
return str(self.media) + str(self.user)
2019-08-02 12:57:53 +00:00
class Meta:
verbose_name = _("borrowed item")
verbose_name_plural = _("borrowed items")
2019-08-11 16:37:04 +00:00
ordering = ['-date_emprunt']
2019-08-02 12:57:53 +00:00
2017-06-30 01:25:07 +00:00
2017-07-03 15:48:56 +00:00
class Jeu(models.Model):
DUREE = (
2019-08-02 12:57:53 +00:00
('-1h', '-1h'),
('1-2h', '1-2h'),
('2-3h', '2-3h'),
('3-4h', '3-4h'),
('4h+', '4h+'),
)
2017-06-30 01:25:07 +00:00
2019-08-16 12:01:13 +00:00
name = models.CharField(
max_length=255,
verbose_name=_("name"),
)
proprietaire = models.ForeignKey(
'users.User',
on_delete=models.PROTECT,
verbose_name=_("owner"),
)
duree = models.CharField(
choices=DUREE,
max_length=255,
verbose_name=_("duration"),
)
nombre_joueurs_min = models.IntegerField(
validators=[MinValueValidator(1)],
verbose_name=_("minimum number of players"),
)
nombre_joueurs_max = models.IntegerField(
validators=[MinValueValidator(1)],
verbose_name=_('maximum number of players'),
)
comment = models.CharField(
max_length=255,
blank=True,
null=True,
verbose_name=_('comment'),
)
2017-07-03 15:48:56 +00:00
2017-07-06 15:30:23 +00:00
def __str__(self):
2019-08-16 12:01:13 +00:00
return str(self.name)
2019-08-02 12:57:53 +00:00
class Meta:
verbose_name = _("game")
verbose_name_plural = _("games")
2019-08-16 12:01:13 +00:00
ordering = ['name']