diff --git a/kontor-api/pyproject.toml b/kontor-api/pyproject.toml index 5714289..9ab9798 100644 --- a/kontor-api/pyproject.toml +++ b/kontor-api/pyproject.toml @@ -21,4 +21,5 @@ dependencies = [ "python-dotenv>=1.1.0", "python-jose>=3.4.0", "python-multipart>=0.0.20", + "natsort>=8.4.0", ] diff --git a/kontor-api/src/db/models/comic.py b/kontor-api/src/db/models/comic.py index e83d28b..423ad7c 100644 --- a/kontor-api/src/db/models/comic.py +++ b/kontor-api/src/db/models/comic.py @@ -1,3 +1,5 @@ +from typing import Dict, List +from natsort import natsorted from sqlalchemy import Column, ForeignKey, Integer, String from sqlalchemy.dialects.mysql import BIT from sqlalchemy.orm import relationship @@ -24,7 +26,7 @@ class Comic(Base, BaseMixin): publisher = relationship("Publisher", back_populates="comics") current_order = Column(BIT(1)) completed = Column(BIT(1)) - issues = relationship("Issue") + issues = relationship("Issue", order_by="Issue.issue_number") story_arcs = relationship("StoryArc") trade_paperbacks = relationship("TradePaperback") volumes = relationship("Volume") @@ -36,6 +38,21 @@ class Comic(Base, BaseMixin): def __str__(self): return f'{self.title}({self.id})' + def get_artists(self) -> Dict[str, List[str]]: + works: Dict[str, List[str]] = {} + for work in self.comic_works: + work_type = work.work_type.name + artist = work.artist + if work_type in works: + works[work_type].append(artist) + else: + works[work_type] = [artist] + return works + + def sorted_issues(self): + sorted_issues = natsorted(self.issues, key=lambda x: getattr(x, 'issue_number')) + return sorted_issues + class Volume(Base, BaseMixin): __tablename__ = "volume" @@ -77,6 +94,17 @@ class Artist(Base, BaseMixin): name = Column(String(length=255), nullable=False) comic_works = relationship("ComicWork") + def get_comics(self) -> Dict[str, List[str]]: + works: Dict[str, List[str]] = {} + for work in self.comic_works: + work_type = work.work_type.name + comic = work.comic + if work_type in works: + works[work_type].append(comic) + else: + works[work_type] = [comic] + return works + class WorkType(Base, BaseMixin): __tablename__ = "worktype" diff --git a/kontor-api/src/static/images/cross.png b/kontor-api/src/static/images/cross.png new file mode 100644 index 0000000..6b9fa6d Binary files /dev/null and b/kontor-api/src/static/images/cross.png differ diff --git a/kontor-api/src/static/images/tick.png b/kontor-api/src/static/images/tick.png new file mode 100644 index 0000000..2414885 Binary files /dev/null and b/kontor-api/src/static/images/tick.png differ diff --git a/kontor-api/src/templates/comic/artist_detail.html b/kontor-api/src/templates/comic/artist_detail.html index 2c69b0d..58ee61b 100644 --- a/kontor-api/src/templates/comic/artist_detail.html +++ b/kontor-api/src/templates/comic/artist_detail.html @@ -2,14 +2,14 @@ {% block title %} -
- {{work.work_type.name}}: {{work.comic.title}} + {{work}}: +
| Completed | -{{comic.completed}} | ++ {% with check=comic.completed %} + {% include "components/check.html" %} + {% endwith %} + | ||
|---|---|---|---|---|
| Works |
- {% for work in comic.comic_works %}
+ {% for work in comic.get_artists() %}
- {{work.work_type.name}}: {{work.artist.name}} + {{work}}: +
|
+
|||
| Data Created | @@ -46,6 +50,20 @@Data Modified | {{comic.last_modified_date}} | ||
| Data Version | +{{comic.version}} | +|||
| Issues | +
+
|
+ |||
| Publisher Name | +{{publisher.name}} | +|
|---|---|---|
| Comics | +
+
|
+ |
| Data Created | +{{publisher.created_date}} | +|
| Data Modified | +{{publisher.last_modified_date}} | +|
Publisher : {{obj.publisher.name}}
-Completed : {{obj.completed}}
+Completed : {% with check=obj.completed %}{% include "components/check.html" %}{% endwith %}
Read more| Actor Name | +{{actor.name}} | +|
|---|---|---|
| Works | +
+
|
+ |
| Data Created | +{{actor.created_date}} | +|
| Data Modified | +{{actor.last_modified_date}} | +|
| MediaFile Title | +{{mediafile.title}} | +|
|---|---|---|
| MediaFile URL | +{{mediafile.url}} | +|
| MediaFile Cloudlink | +{{mediafile.cloud_link}} | +|
| MediaFile Download? | +{{mediafile.should_download}} | +|
| MediaFile Review? | +{{mediafile.review}} | +|
| Actors | +
+
|
+ |
| Data Created | +{{mediafile.created_date}} | +|
| Data Modified | +{{mediafile.last_modified_date}} | +|
| Data Version | +{{mediafile.version}} | +|