see changes
This commit is contained in:
parent
f42f571053
commit
151c017561
|
|
@ -965,3 +965,8 @@ class GuideElement(ProjectBaseMixin, MPTTModel):
|
|||
def __str__(self):
|
||||
"""Overridden dunder method."""
|
||||
return self.guide_element_type.name if self.guide_element_type else self.id
|
||||
|
||||
@property
|
||||
def advertorial_page(self):
|
||||
if self.advertorial:
|
||||
return self.advertorial.right_pages
|
||||
|
|
|
|||
|
|
@ -220,7 +220,7 @@ class GuideElementExportSerializer(GuideElementBaseSerializer):
|
|||
# establishment = EstablishmentGuideElementSerializer(read_only=True,)
|
||||
name = serializers.CharField(source='establishment.name', default=None)
|
||||
public_mark = serializers.CharField(source='establishment.public_mark_display', default=None)
|
||||
toque_number = serializers.CharField(source='establishment.toque_number', default=None)
|
||||
toque_number = serializers.IntegerField(source='establishment.toque_number', default=None)
|
||||
schedule = serializers.DictField(source='establishment.schedule_display',
|
||||
default=None)
|
||||
address = serializers.CharField(source='establishment.address.full_address',
|
||||
|
|
@ -235,13 +235,15 @@ class GuideElementExportSerializer(GuideElementBaseSerializer):
|
|||
default=None)
|
||||
price_level = serializers.CharField(source='establishment.price_level_display',
|
||||
default=None)
|
||||
# metadata = serializers.ListField(source='establishment.metadata',
|
||||
# default=None)
|
||||
metadata = serializers.ListField(source='establishment.metadata',
|
||||
default=None)
|
||||
advertorial_page = serializers.IntegerField(default=None)
|
||||
|
||||
class Meta:
|
||||
model = models.GuideElement
|
||||
fields = [
|
||||
'id',
|
||||
'guide',
|
||||
'node_name',
|
||||
# 'establishment',
|
||||
# 'review',
|
||||
|
|
@ -263,5 +265,6 @@ class GuideElementExportSerializer(GuideElementBaseSerializer):
|
|||
'establishment_subtypes',
|
||||
'review',
|
||||
'price_level',
|
||||
# 'metadata',
|
||||
'metadata',
|
||||
'advertorial_page',
|
||||
]
|
||||
|
|
|
|||
|
|
@ -197,6 +197,7 @@ class GuideElementExportDOCView(generics.ListAPIView):
|
|||
"""Overridden get_queryset method."""
|
||||
guide = get_object_or_404(
|
||||
models.Guide.objects.all(), pk=self.kwargs.get('pk'))
|
||||
# todo: put in GuideElement model
|
||||
tasks.export_guide(guide_id=guide.id, user_id=request.user.id, file_type='doc')
|
||||
return Response({"success": _('The file will be sent to your email.')},
|
||||
status=status.HTTP_200_OK)
|
||||
|
|
|
|||
|
|
@ -14,11 +14,13 @@ from review import models as review_models
|
|||
@admin.register(models.EstablishmentType)
|
||||
class EstablishmentTypeAdmin(BaseModelAdminMixin, admin.ModelAdmin):
|
||||
"""EstablishmentType admin."""
|
||||
raw_id_fields = ('tag_categories', 'default_image', )
|
||||
|
||||
|
||||
@admin.register(models.EstablishmentSubType)
|
||||
class EstablishmentSubTypeAdmin(BaseModelAdminMixin, admin.ModelAdmin):
|
||||
"""EstablishmentSubType admin."""
|
||||
raw_id_fields = ('tag_categories', 'default_image', )
|
||||
|
||||
|
||||
class AwardInline(GenericTabularInline):
|
||||
|
|
|
|||
23
apps/establishment/migrations/0070_auto_20191227_1443.py
Normal file
23
apps/establishment/migrations/0070_auto_20191227_1443.py
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
# Generated by Django 2.2.7 on 2019-12-27 14:43
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('establishment', '0069_auto_20191220_1007'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='establishmentsubtype',
|
||||
name='tag_categories',
|
||||
field=models.ManyToManyField(blank=True, related_name='establishment_subtypes', to='tag.TagCategory', verbose_name='Tag categories'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='establishmenttype',
|
||||
name='tag_categories',
|
||||
field=models.ManyToManyField(blank=True, related_name='establishment_types', to='tag.TagCategory', verbose_name='Tag categories'),
|
||||
),
|
||||
]
|
||||
|
|
@ -50,8 +50,9 @@ class EstablishmentType(TypeDefaultImageMixin, TranslatedFieldsMixin, ProjectBas
|
|||
verbose_name=_('Index name'))
|
||||
use_subtypes = models.BooleanField(_('Use subtypes'), default=True)
|
||||
tag_categories = models.ManyToManyField('tag.TagCategory',
|
||||
blank=True,
|
||||
related_name='establishment_types',
|
||||
verbose_name=_('Tag'))
|
||||
verbose_name=_('Tag categories'))
|
||||
default_image = models.ForeignKey('gallery.Image', on_delete=models.SET_NULL,
|
||||
related_name='establishment_types',
|
||||
blank=True, null=True, default=None,
|
||||
|
|
@ -92,8 +93,9 @@ class EstablishmentSubType(TypeDefaultImageMixin, TranslatedFieldsMixin, Project
|
|||
on_delete=models.CASCADE,
|
||||
verbose_name=_('Type'))
|
||||
tag_categories = models.ManyToManyField('tag.TagCategory',
|
||||
blank=True,
|
||||
related_name='establishment_subtypes',
|
||||
verbose_name=_('Tag'))
|
||||
verbose_name=_('Tag categories'))
|
||||
default_image = models.ForeignKey('gallery.Image', on_delete=models.SET_NULL,
|
||||
related_name='establishment_sub_types',
|
||||
blank=True, null=True, default=None,
|
||||
|
|
@ -746,7 +748,7 @@ class Establishment(GalleryMixin, ProjectBaseMixin, URLImageMixin,
|
|||
@property
|
||||
def contact_phones(self):
|
||||
if self.phones:
|
||||
return [phone.as_e164 for phone in self.phones.all()]
|
||||
return [phone.phone.as_e164 for phone in self.phones.all()]
|
||||
|
||||
@property
|
||||
def establishment_subtype_labels(self):
|
||||
|
|
@ -780,7 +782,8 @@ class Establishment(GalleryMixin, ProjectBaseMixin, URLImageMixin,
|
|||
|
||||
@property
|
||||
def public_mark_display(self):
|
||||
return f'{self.public_mark}/20'
|
||||
if self.public_mark and self.public_mark > 1:
|
||||
return f'{self.public_mark}/20'
|
||||
|
||||
@property
|
||||
def metadata(self):
|
||||
|
|
@ -790,7 +793,8 @@ class Establishment(GalleryMixin, ProjectBaseMixin, URLImageMixin,
|
|||
self.establishment_type.tag_categories.exclude(index_name__in=[
|
||||
'business_tag', 'purchased_item', 'accepted_payments_de',
|
||||
'accepted_payments_hr', 'drinks', 'bottles_per_year',
|
||||
'serial_number', 'surface', 'cooperative', 'tag']).values_list('index_name', flat=True)
|
||||
'serial_number', 'surface', 'cooperative', 'tag',
|
||||
'outside_sits', 'private_room']).values_list('index_name', flat=True)
|
||||
)
|
||||
for category in tag_categories:
|
||||
tags = self.tags.filter(category__index_name=category).values_list('value', flat=True)
|
||||
|
|
|
|||
18
apps/product/migrations/0025_auto_20191227_1443.py
Normal file
18
apps/product/migrations/0025_auto_20191227_1443.py
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
# Generated by Django 2.2.7 on 2019-12-27 14:43
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('product', '0024_merge_20191223_1405'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='producttype',
|
||||
name='tag_categories',
|
||||
field=models.ManyToManyField(blank=True, related_name='product_types', to='tag.TagCategory', verbose_name='Tag categories'),
|
||||
),
|
||||
]
|
||||
|
|
@ -43,6 +43,7 @@ class ProductType(TypeDefaultImageMixin, TranslatedFieldsMixin, ProjectBaseMixin
|
|||
verbose_name=_('Index name'), choices=INDEX_CHOICES)
|
||||
use_subtypes = models.BooleanField(_('Use subtypes'), default=True)
|
||||
tag_categories = models.ManyToManyField('tag.TagCategory',
|
||||
blank=True,
|
||||
related_name='product_types',
|
||||
verbose_name=_('Tag categories'))
|
||||
default_image = models.ForeignKey('gallery.Image', on_delete=models.SET_NULL,
|
||||
|
|
|
|||
|
|
@ -9,9 +9,8 @@ import docx
|
|||
import xlsxwriter
|
||||
from django.conf import settings
|
||||
from django.core.mail import EmailMultiAlternatives
|
||||
from docx.blkcntnr import BlockItemContainer
|
||||
from timetable.models import Timetable
|
||||
from docx.shared import RGBColor, Pt
|
||||
|
||||
from utils.methods import section_name_into_index_name
|
||||
|
||||
logging.basicConfig(format='[%(levelname)s] %(message)s', level=logging.INFO)
|
||||
|
|
@ -27,7 +26,6 @@ class DocTemplate:
|
|||
def __init__(self):
|
||||
self.document = docx.Document()
|
||||
style = self.document.styles['Normal']
|
||||
style.paragraph_format.space_before = Pt(12)
|
||||
style.font.size = self.DOCUMENT_FONT_SIZE
|
||||
style.font.name = self.DOCUMENT_FONT_NAME
|
||||
style.font.color.rgb = self.DOCUMENT_FONT_COLOR
|
||||
|
|
@ -37,7 +35,6 @@ class DocTemplate:
|
|||
|
||||
def add_empty_line(self):
|
||||
self.document.add_paragraph()
|
||||
self.document.add_paragraph()
|
||||
|
||||
def add_horizontal_line(self):
|
||||
return self.document.add_paragraph(f'{"_" * 50}')
|
||||
|
|
@ -48,7 +45,9 @@ class DocTemplate:
|
|||
'size': Pt(10)
|
||||
}
|
||||
for element in elements:
|
||||
bullet = self.document.add_paragraph(style='List Bullet').add_run(element)
|
||||
bullet = self.document.add_paragraph(style='List Bullet')
|
||||
bullet.paragraph_format.space_before = Pt(10)
|
||||
bullet = bullet.add_run(element)
|
||||
self.apply_font_style(bullet, params=styles)
|
||||
|
||||
def add_heading(self, name: str, level: int = 2, font_style: dict = None,
|
||||
|
|
@ -59,7 +58,9 @@ class DocTemplate:
|
|||
self.apply_font_color(heading, color_rgb)
|
||||
|
||||
def add_paragraph(self, name: str, font_style: dict = None, color_rgb: tuple = (0, 0, 0)):
|
||||
paragraph = self.document.add_paragraph().add_run(name)
|
||||
paragraph = self.document.add_paragraph()
|
||||
paragraph.paragraph_format.space_before = Pt(10)
|
||||
paragraph.add_run(name)
|
||||
self.apply_font_style(paragraph, font_style)
|
||||
if color_rgb:
|
||||
self.apply_font_color(paragraph, color_rgb)
|
||||
|
|
@ -81,6 +82,7 @@ class DocTemplate:
|
|||
|
||||
for instance in data:
|
||||
instance = dict(instance)
|
||||
element_id = instance.get('id')
|
||||
index_name = section_name_into_index_name(instance.get('section_name'))
|
||||
|
||||
# ESTABLISHMENT HEADING (LEVEL 1)
|
||||
|
|
@ -117,6 +119,7 @@ class DocTemplate:
|
|||
# REVIEW TEXT PARAGRAPH
|
||||
self.add_paragraph(name=text,
|
||||
font_style={'size': Pt(10), 'name': 'Arial'})
|
||||
self.add_empty_line()
|
||||
|
||||
# PHONE HEADING (LEVEL 2)
|
||||
phones = instance.get('phones')
|
||||
|
|
@ -147,7 +150,9 @@ class DocTemplate:
|
|||
level=2)
|
||||
# TIMETABLE ITEMS PARAGRAPH
|
||||
for weekday, working_hours in schedule.items():
|
||||
bullet = self.document.add_paragraph(style='List Bullet').add_run(f'{weekday}: {working_hours}')
|
||||
bullet = self.document.add_paragraph(style='List Bullet')
|
||||
bullet.paragraph_format.space_before = Pt(10)
|
||||
bullet = bullet.add_run(f'{weekday}: {working_hours}')
|
||||
self.apply_font_style(bullet, {'name': 'Arial', 'size': Pt(10)})
|
||||
self.add_empty_line()
|
||||
|
||||
|
|
@ -160,6 +165,7 @@ class DocTemplate:
|
|||
self.add_heading(name=public_mark,
|
||||
font_style={'size': Pt(10), 'name': 'Arial'},
|
||||
level=2)
|
||||
self.add_empty_line()
|
||||
|
||||
# TOQUE HEADING (LEVEL 2)
|
||||
toque = instance.get('toque_number')
|
||||
|
|
@ -170,6 +176,7 @@ class DocTemplate:
|
|||
self.add_heading(name=toque,
|
||||
font_style={'size': Pt(10), 'name': 'Arial'},
|
||||
level=2)
|
||||
self.add_empty_line()
|
||||
|
||||
# TOQUE HEADING (LEVEL 2)
|
||||
price_level = instance.get('price_level')
|
||||
|
|
@ -180,6 +187,7 @@ class DocTemplate:
|
|||
self.add_heading(name=price_level,
|
||||
font_style={'size': Pt(10), 'name': 'Arial'},
|
||||
level=2)
|
||||
self.add_empty_line()
|
||||
|
||||
# SERVICES HEADING (LEVEL 2)
|
||||
services = instance.get('services')
|
||||
|
|
@ -196,6 +204,7 @@ class DocTemplate:
|
|||
if metadata:
|
||||
for obj in metadata:
|
||||
for section, tags in obj.items():
|
||||
section = section.capitalize()
|
||||
self.add_heading(name=section,
|
||||
font_style={'size': Pt(13), 'name': 'Arial', 'bold': True},
|
||||
level=2)
|
||||
|
|
@ -390,8 +399,15 @@ class SendGuideExport(SendExportBase):
|
|||
objects = []
|
||||
city_name = None
|
||||
section_name = None
|
||||
advertorial_page = None
|
||||
|
||||
for instance in init_data:
|
||||
row_advertorial_page = instance.get('advertorial_page')
|
||||
if row_advertorial_page:
|
||||
advertorial_page = row_advertorial_page
|
||||
else:
|
||||
instance['advertorial_page'] = advertorial_page
|
||||
|
||||
row_city = instance.get('city_name')
|
||||
if row_city:
|
||||
city_name = row_city
|
||||
|
|
|
|||
|
|
@ -154,7 +154,7 @@ def transform_into_readable_str(raw_string: str, postfix: str = 'SectionNode'):
|
|||
re_exp = r'[\w]+'
|
||||
result = re.findall(re_exp, raw_string)
|
||||
if result:
|
||||
return f"{''.join([i.capitalize() for i in result])}{postfix}"
|
||||
return f"{''.join([i.capitalize() for i in result])}"
|
||||
|
||||
|
||||
def section_name_into_index_name(section_name: str):
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ ALLOWED_HOSTS = ['*', ]
|
|||
|
||||
SEND_SMS = False
|
||||
SMS_CODE_SHOW = True
|
||||
USE_CELERY = True
|
||||
USE_CELERY = False
|
||||
|
||||
SCHEMA_URI = 'http'
|
||||
DEFAULT_SUBDOMAIN = 'www'
|
||||
|
|
@ -85,11 +85,11 @@ LOGGING = {
|
|||
'py.warnings': {
|
||||
'handlers': ['console'],
|
||||
},
|
||||
# 'django.db.backends': {
|
||||
# 'handlers': ['console', ],
|
||||
# 'level': 'DEBUG',
|
||||
# 'propagate': False,
|
||||
# },
|
||||
'django.db.backends': {
|
||||
'handlers': ['console', ],
|
||||
'level': 'DEBUG',
|
||||
'propagate': False,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -114,15 +114,8 @@ if TESTING:
|
|||
ELASTICSEARCH_DSL_AUTOSYNC = False
|
||||
|
||||
# Email settings
|
||||
SERVER_EMAIL = 'honyl@yandex.ru'
|
||||
EMAIL_HOST = 'smtp.yandex.ru'
|
||||
EMAIL_HOST_USER = 'honyl@yandex.ru'
|
||||
EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_HOST_PASSWORD')
|
||||
EMAIL_PORT = '587'
|
||||
EMAIL_USE_TLS = True
|
||||
EMAIL_SUBJECT = 'Technical email from LunchBox'
|
||||
EMAIL_FROM = 'honyl@yandex.ru'
|
||||
EMAIL_TO = [
|
||||
'd.kuzmenko@spider.ru',
|
||||
# 'g.baranova@spider.ru'
|
||||
]
|
||||
EMAIL_HOST = 'smtp.gmail.com'
|
||||
EMAIL_HOST_USER = 'anatolyfeteleu@gmail.com'
|
||||
EMAIL_HOST_PASSWORD = 'nggrlnbehzksgmbt'
|
||||
EMAIL_PORT = 587
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user