Legimi sales.
[redakcja.git] / src / depot / legimi.py
index 01f4ee2..8d2939e 100644 (file)
@@ -4,7 +4,7 @@ from django.conf import settings
 from librarian.functions import lang_code_3to2
 from librarian.html import transform_abstrakt
 from librarian.builders import EpubBuilder, MobiBuilder
-from librarian.cover import LegimiCornerCover, LegimiCover
+from librarian.covers.marquise import MarquiseCover, LabelMarquiseCover
 import requests
 from slugify import slugify
 
@@ -29,6 +29,7 @@ class Legimi:
     CREATE_URL = BASE_URL + '/publishers/publications/create'
     EDIT_URL = BASE_URL + '/publishers/publications/edit/%s'
     EDIT_FILES_URL = BASE_URL + '/publishers/publications/editfiles/%s'
+    EDIT_SALE_URL = BASE_URL + '/publishers/publications/editsale/%s'
     
     def __init__(self, username, password, publisher_id):
         self.username = username
@@ -77,20 +78,20 @@ class Legimi:
         wlbook = book.wldocument(librarian2=True)
         meta = wlbook.meta
 
-        cover = LegimiCornerCover(meta, width=1200).output_file()
-        epub_file = EpubBuilder(cover=LegimiCover, fundraising=fundraising).build(wlbook).get_file()
-        mobi_file = MobiBuilder(cover=LegimiCover, fundraising=fundraising).build(wlbook).get_file()
+        cover = LabelMarquiseCover(meta, width=1200).output_file()
+        epub_file = EpubBuilder(cover=MarquiseCover, fundraising=fundraising).build(wlbook).get_file()
+        mobi_file = MobiBuilder(cover=MarquiseCover, fundraising=fundraising).build(wlbook).get_file()
 
         book_data = {
             "Title": meta.title,
             "Author": ", ".join(p.readable() for p in meta.authors),
             "Year": meta.created_at[:4],
 
-            'GenreId': '11', # TODO
+            'GenreId': str(self.get_genre(wlbook)),
             'Isbn': '',
             'LanguageLocale': lang_code_3to2(meta.language),
 
-            'Description': description_add,
+            'Description': self.get_description(wlbook),
         }
         if meta.isbn_html:
             isbn = meta.isbn_html
@@ -101,11 +102,6 @@ class Legimi:
 
         files_data = {}
 
-        abstract = wlbook.tree.find('.//abstrakt')
-        if abstract is not None:
-            book_data['Description'] = transform_abstrakt(abstract)
-        
-
         cover_data = self.upload(
             (meta.url.slug + '.jpg', cover.get_file(), 'image/jpeg')
         )
@@ -190,7 +186,7 @@ class Legimi:
 
         if wlbook.meta.audience:
             description += '<p><em>{}</em> to lektura szkolna.'.format(wlbook.meta.title)
-            if wlbook.tree.find('//pe'):
+            if wlbook.tree.find('//pe') is not None:
                 description += '<br>Ebook <em>{title}</em> zawiera przypisy opracowane specjalnie dla uczennic i uczniów {school}.'.format(
                     title=wlbook.meta.title,
                     school='szkoły podstawowej' if wlbook.meta.audience == 'SP' else 'liceum i technikum'
@@ -198,6 +194,25 @@ class Legimi:
             description += '</p>'
         return description
 
+    def get_genre(self, wlbook):
+        epoch_map = {
+            'Starożytność': 80,
+            'Średniowiecze': 81,
+            'Renesans': 82,
+            'Barok': 83,
+            'Oświecenie': 84,
+            'Romantyzm': 85,
+            'Pozytywizm': 86,
+            'Modernizm': 87,
+            'Dwudziestolecie międzywojenne': 88,
+            'Współczesność': 90,
+        }
+
+        for epoch in wlbook.meta.epochs:
+            if epoch in epoch_map:
+                return epoch_map[epoch]
+        return 11
+    
     def create_book(self, book_data, files_data):
         data = {
             'createValidationTrue': 'true',
@@ -283,6 +298,42 @@ class Legimi:
             data=current
         )
 
+    def edit_sale(self, book):
+        assert book.legimi_id
+
+        words = book.wldocument().get_statistics()['total']['words_with_fn']
+
+        price = settings.LEGIMI_SMALL_PRICE
+        if words > settings.LEGIMI_SMALL_WORDS:
+            price = settings.LEGIMI_BIG_PRICE
+
+        abo = 'true' if words > settings.LEGIMI_BIG_WORDS else 'false'
+
+        data = {
+            'ValidationTrue': 'true',
+            'Id': book.legimi_id,
+            'SalesPromotionId': "0",
+            'IsLibraryPass': "False",
+            'OriginalEnterToTheMarketType': "No",
+            'OriginalHidingDate': "",
+            'OriginalEnterToTheMarketDate': "",
+            'EnterToTheMarketType': "No",
+            'EnterToTheMarketDate': "",
+            'HidingDate': "",
+            'SalesNoLimitOption': abo,
+            'SalesNoLimitKindle': abo,
+            'SalesInStoreEbookGrossValue': f'{price},00',
+            'SalesPromotion': "False",
+            'SalesPromotionGrossValue': "0,00",
+            'SalesPromotionDatesRange.DateStart': "",
+            'SalesPromotionDatesRange.DateEnd': "",
+        }
+
+        self.session.post(
+            self.EDIT_SALE_URL % book.legimi_id,
+            data=data
+        )
+        
 
 legimi = Legimi(
     settings.LEGIMI_USERNAME,