Files
2022_oknardia/oknardia/oknardia/migrations/0001_initial.py
T
2022-12-26 18:30:26 +03:00

429 lines
53 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Generated by Django 4.1.3 on 2022-11-05 23:11
import datetime
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='Apartment_Type',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('sNameApartment', models.CharField(help_text='Название, наименование (отображается на кнопке в интерфейсе)', max_length=128, verbose_name='Обозначение')),
('sURL2IMG_Apartment', models.ImageField(default='null.gif', help_text='URL на картинку с планировкой ', max_length=128, upload_to='img_apart/', verbose_name='Изображение')),
('iSort', models.IntegerField(db_index=True, default=0, help_text='Число для сортировки и порядка вывода в списке', null=True, verbose_name='Сортировка')),
('sAreaXY', models.CharField(blank=True, default='', help_text='строка AREA для описания MAP (для будущего использования)', max_length=256, null=True, verbose_name='MAP AREA')),
('bApartmentCheck', models.BooleanField(default=False, help_text='Данные добавлены админом, или проверены и подтверждены из нескольких источников', verbose_name='Проверено')),
('dApartmentCreate', models.DateTimeField(auto_now_add=True, verbose_name='Создано')),
('dApartmentModify', models.DateTimeField(auto_now=True, verbose_name='Отредактировано')),
],
options={
'verbose_name': 'Здание: тип квартиры',
'verbose_name_plural': 'Здания: типы квартир',
'ordering': ['-iSort', '-kSeria_id', 'id', 'sNameApartment'],
},
),
migrations.CreateModel(
name='BlogPosts',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('sPostHeader', models.CharField(help_text='Заголовок поста или карточки каталога', max_length=256, verbose_name='Заголовок')),
('sPostContent', models.TextField(help_text='Содержание (допустим HTML)', verbose_name='Содержание')),
('sImgForBlogSocial', models.ImageField(blank=True, default='', help_text='Способ загрузить картинку через админку Картинка-тизер для публикаций в соц.сетях. URL к картинке будет «<b>/media/img_for_blog/…</b>» и этот URL можно использовать в HTML-тексте блога. Если нужно загрузить несколько картинок, то после сохранения промежуточной записи, откройте ее на редактирование еще раз и добавте новую картинку. Предыдущая картинка (и её URL) продолжат быть доступны.<br><b>ВАЖНО: ПРИ ПУБЛИКАЦИИ В СОЦ.СЕТЯХ БУДЕТ ОТОБРАЖАТЬЯ КАРТИНКА ЗАГРУЖЕННАЯ ПОСЛЕДНЕЙ.<br>ВАЖНО: ЕСЛИ ЗАГРУЖАЕМАЯ КАРТИНКА УЖЕ ИМЕЕТ ДУБЛИКАТ В СИСТЕМЕ, ЕЕ ИМЯ (И URL) БУДУТ ИЗМЕНЕНЫ. БУДЬТЕ ВНИМТЕЛЬНЫ!', max_length=128, upload_to='img_for_blog/', verbose_name='IMG')),
('bPublished', models.BooleanField(db_index=True, default=True, help_text='Если отмечено, то пост доступен на сайте. Иначе ведет себя как удаленный и не «отзывается».', verbose_name='Паблик')),
('bArchive', models.BooleanField(db_index=True, default=False, help_text='Если отмечено, в архиве. Он не будет повляться в списке, но доступен через URL, поиск и пр.', verbose_name='Архив')),
('dPostDataBegin', models.DateTimeField(db_index=True, default=datetime.datetime(2022, 11, 6, 2, 11, 22, 171941), help_text='Если установить будущую дату, то в назначеное время пост появится автоматически.', verbose_name='Опубликован от')),
('bCatalog', models.BooleanField(db_index=True, default=False, help_text='Это публикация для каталога (в блогах все равно будет доступно через URL, поиск и пр.)', verbose_name='Каталог')),
('iCatalogSort', models.PositiveIntegerField(db_index=True, default=1, help_text='Число для сортировки и порядка вывода в каталогах (чем меьше, тем выше в списке)<br>Магические значения:<br /> ■&nbsp;5 — запись используется как рекламный тизер;<br /> ■&nbsp;1 — запись используется как обычный тизер.</ul>', null=True, verbose_name='Сортер')),
('dPostDataModify', models.DateTimeField(auto_now=True, verbose_name='Отредактированно')),
('dPostDataCreate', models.DateTimeField(auto_now_add=True, verbose_name='Создано')),
],
options={
'verbose_name': 'Запись в блоге каталоге',
'verbose_name_plural': 'Записи в блогах или каталогах',
'ordering': ['-dPostDataCreate', 'iCatalogSort'],
},
),
migrations.CreateModel(
name='Building_Info',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('sAddress', models.CharField(db_index=True, help_text='Адрес дома', max_length=128, unique=True, verbose_name='Адрес')),
('fGeoCode_Latitude', models.DecimalField(decimal_places=8, default=0.0, help_text='Географическая щирота', max_digits=12, null=True, verbose_name='Широта')),
('fGeoCode_Longitude', models.DecimalField(decimal_places=8, default=0.0, help_text='Географическая долгота', max_digits=12, null=True, verbose_name='Долготоа')),
('sSerias_Project', models.CharField(default='N/A', help_text='Серия, типовой проект здания (то как это записано в базе reformagkh.ru).', max_length=128, null=True, verbose_name='Серия1')),
('sType', models.CharField(default='N/A', help_text='Тип жилого дома.', max_length=32, null=True, verbose_name='Тип дома')),
('iCommissioning_year', models.CharField(default='N/A', help_text='Год ввода в эксплуатацию.', max_length=10, null=True, verbose_name='Год')),
('sWall', models.CharField(default='N/A', help_text='Материал стен.', max_length=32, null=True, verbose_name='Стены')),
('sOverlap', models.CharField(default='N/A', help_text='Тип перекрытий.', max_length=32, null=True, verbose_name='Перекрытия')),
('iStoreys', models.SmallIntegerField(default=-1, help_text='Число этажей.', null=True, verbose_name='Этажей')),
('iEntrances_Porchs', models.SmallIntegerField(default=-1, help_text='Число подъездов.', null=True, verbose_name='Подъездов')),
('iElevators', models.SmallIntegerField(default=-1, help_text='Число лифтов.', null=True, verbose_name='Лифтов')),
('sEnergy_Efficiency', models.CharField(default='N/A', help_text='Класс энергоэффективности.', max_length=4, null=True, verbose_name='Энергоэффективность')),
('dEnergy_Audit', models.DateField(default=datetime.date(2038, 1, 19), help_text='Дата проведения энергелического аудита.', null=True, verbose_name='Дата аудита')),
('fTotal_Area', models.DecimalField(decimal_places=2, default=-1.0, help_text='Общаяя площадь помещений, м².', max_digits=8, null=True, verbose_name='Площадь м²')),
('fResidential_Area', models.DecimalField(decimal_places=2, default=-1.0, help_text='Площадь жилых помещений, м².', max_digits=8, null=True, verbose_name='Жилых м²')),
('fUninhabited_Area', models.DecimalField(decimal_places=2, default=-1.0, help_text='Площадь нежилых помещений, м².', max_digits=8, null=True, verbose_name='Нежилых м²')),
('fCommon_Area', models.DecimalField(decimal_places=2, default=-1.0, help_text='Площадь помещений общего пользования (лестничные пролеты, подсобки и пр.), м².', max_digits=8, null=True, verbose_name='Обществ. м²')),
('fPrivate_Area', models.DecimalField(decimal_places=2, default=-1.0, help_text='Площадь частных помещений (приватизированных), м².', max_digits=8, null=True, verbose_name='Частные м²')),
('fMunicipal_Area', models.DecimalField(decimal_places=2, default=-1.0, help_text='Площадь мунициальных помещений (магазины, офисы и пр.), м².', max_digits=8, null=True, verbose_name='Муницип. м²')),
('fGovernment_Area', models.DecimalField(decimal_places=2, default=-1.0, help_text='Площадь государственных помещений(не приватизированных), м².', max_digits=8, null=True, verbose_name='Гос., м²')),
('fLand_Area', models.DecimalField(decimal_places=2, default=-1.0, help_text='Площадь участка, м².', max_digits=8, null=True, verbose_name='Участок м²')),
('fLocal_Area', models.DecimalField(decimal_places=2, default=-1.0, help_text='Площадь придомовой территории, м².', max_digits=8, null=True, verbose_name='Придомовые м²')),
('iNum_Apartments', models.SmallIntegerField(default=-1, help_text='Число квартир.', null=True, verbose_name='Квартир')),
('iNum_Residents', models.SmallIntegerField(default=-1, help_text='Число жителей.', null=True, verbose_name='Жителей')),
('iNum_Accounts', models.SmallIntegerField(default=-1, help_text='Число счетов.', null=True, verbose_name='Счетов')),
('fCondition_House', models.DecimalField(decimal_places=2, default=-1.0, help_text='Общая степень износа, %', max_digits=5, null=True, verbose_name='Износ')),
('fCondition_Foundation', models.DecimalField(decimal_places=2, default=-1.0, help_text='Степень износа фундамента, %', max_digits=5, null=True, verbose_name='Износ_Ф')),
('fCondition_Walls', models.DecimalField(decimal_places=2, default=-1.0, help_text='Степень износа несущих стен, %', max_digits=5, null=True, verbose_name='Износ_С')),
('fCondition_Overlap', models.DecimalField(decimal_places=2, default=-1.0, help_text='Степень износа перекрытий, %', max_digits=5, null=True, verbose_name='Износ_П')),
('sCadastre_Num', models.CharField(default='N/A', help_text='Кадастровый номер', max_length=16, null=True, verbose_name='№ кадастр')),
('sCadastre_Num_Area', models.CharField(default='N/A', help_text='Кадастровый номер участка', max_length=16, null=True, verbose_name='№ участка')),
('sInventory_Num', models.CharField(default='N/A', help_text='Инвентарный номер', max_length=16, null=True, verbose_name='№ инвентар')),
('sManagement_Co', models.CharField(default='N/A', help_text='Управляющая компани(ЖКХ)', max_length=256, null=True, verbose_name='УК ЖКХ')),
('dStart_Privatization', models.DateField(default=datetime.date(2038, 1, 19), editable=False, help_text='Дата начала приватизации.', null=True, verbose_name='Дата приватизации')),
('sURL', models.CharField(editable=False, help_text='URL для проверки и парсинга информации на http://www.reformagkh.ru/', max_length=128, null=True, verbose_name='URL проверки')),
('sAddressPostIndex', models.CharField(blank=True, default='XXXXXX', help_text='Почтовый индекс', max_length=8, null=True, verbose_name='Индекс')),
('dBuildingInfoCreate', models.DateTimeField(auto_now_add=True, verbose_name='Создано')),
('dBuildingInfoModify', models.DateTimeField(auto_now=True, verbose_name='Отредактировано')),
],
options={
'verbose_name': 'Здание: адрес и описание дома',
'verbose_name_plural': 'Здания: адреса и описания домов',
'ordering': ['sAddress'],
},
),
migrations.CreateModel(
name='Glazing',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('sGlazingName', models.CharField(help_text='Краткое название или фирменное обозначение стеклопакета.', max_length=128, unique=True, verbose_name='Название')),
('iGlazingCamerasN', models.PositiveSmallIntegerField(default=1, help_text='Число камер', verbose_name='Камер')),
('iGlazingThickness', models.PositiveSmallIntegerField(default=0, help_text='Толщина стеклопакета (мм).', verbose_name='Толщина')),
('sGlazingBriefDescription', models.CharField(help_text='Краткая характеристика стеклопакета.', max_length=256, verbose_name='Краткая характеристика')),
('sGlazingMark', models.CharField(blank=True, default='—', help_text='Схема, марка, маркировка, модель стеклопакета', max_length=128, null=True, verbose_name='Марка')),
('sGlazingManufacturer', models.CharField(blank=True, default='—', help_text='Завод (компания) производитель', max_length=128, null=True, verbose_name='Производитель')),
('fGlazingHeatTransfer', models.DecimalField(db_index=True, decimal_places=2, default=0, help_text='Сопротивление теплопередаче Ro (м²×°C/Вт)', max_digits=5, verbose_name='Тепл.Сопр.')),
('fGlazingSoundproofing', models.DecimalField(db_index=True, decimal_places=2, default=0, help_text='Коэффициент звукоизоляции (дБ)', max_digits=5, verbose_name='Звукоизоляция')),
('fGlazingLightTransmission', models.DecimalField(db_index=True, decimal_places=2, default=0, help_text='Коэффициент светопропускания (%)', max_digits=5, verbose_name='Светопропускание')),
('sGlazingLightReflectance', models.CharField(db_index=True, default='—/—', help_text='Коэффициент светоотражения, внешний/внутренний (%)', max_length=7, verbose_name='Светоотражение')),
('fGlazingPassingSun', models.DecimalField(db_index=True, decimal_places=2, default=0, help_text='Коэффициент солнцепропускания (%)', max_digits=5, verbose_name='Солнцепропускание')),
('sGlazingReflectionAndAbsorptionOfHeat', models.CharField(db_index=True, default='—/—', help_text='Коэффициент теплоотражения/теплопоглощения (%)', max_length=7, verbose_name='Теплоотражение и теплопоглощение')),
('fGlazingRating', models.FloatField(db_index=True, default=0.0, help_text='Рейтинг (-1 … +1).', verbose_name='Рейтинг')),
('sGlazingDescription', models.TextField(default='', help_text='Детальное описание стеклопакета (JSON)', null=True, verbose_name='Описание')),
('sGlazingToning', models.CharField(blank=True, default='Нет', help_text='Тонирование стеклопакета (цвет)', max_length=32, null=True, verbose_name='Тонирование')),
('dGlazingCreate', models.DateTimeField(auto_now_add=True, verbose_name='Создано')),
('dGlazingModify', models.DateTimeField(auto_now=True, verbose_name='Отредактировано')),
],
options={
'verbose_name': 'Окно: стеклопакет',
'verbose_name_plural': 'Окна: стеклопакеты',
'ordering': ['sGlazingName'],
},
),
migrations.CreateModel(
name='LogVisitPriceReport',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('dLogVisitTime', models.DateTimeField(auto_now=True, db_index=True, help_text='Дата и время визита', verbose_name='Дата/время')),
('sLogAddress', models.CharField(help_text='Адрес дома (на русском)', max_length=128, verbose_name='Адрес')),
('sLogNameApartment', models.CharField(help_text='Название, наименование (отображается на кнопке в интерфейсе)', max_length=128, verbose_name='Обозначение')),
('sLogURL', models.CharField(db_index=True, help_text='URL', max_length=250, verbose_name='URL')),
],
options={
'verbose_name': 'ЛОГ: Просмотры ценовой выдачи',
'verbose_name_plural': 'ЛОГ: Просмотры ценовой выдачи',
'ordering': ['dLogVisitTime'],
},
),
migrations.CreateModel(
name='MerchantBrand',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('sMerchantName', models.CharField(help_text='Название головной компании (бренд). Например: «МОЁ ОКНО»', max_length=128, unique=True, verbose_name='Название:')),
('sMerchantDescription', models.TextField(blank=True, help_text='Введите описание компании. Допускается HTML-разметка.', null=True, verbose_name='Описание')),
('pMerchantLogo', models.ImageField(blank=True, default='', help_text='Путь до картинки с логотипом', max_length=255, null=True, upload_to='logos_img/', verbose_name='Логотип')),
('sMerchantMainURL', models.URLField(help_text='URL сайта компании', verbose_name='URL')),
],
options={
'verbose_name': 'Поставщик: бренд',
'verbose_name_plural': 'Поставщики: бренды',
'ordering': ['sMerchantName'],
},
),
migrations.CreateModel(
name='MerchantOffice',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('sOfficeName', models.CharField(db_index=True, help_text='Название компании и/или офиса. Например: «МОЁ ОКНО (головной оффис)»', max_length=128, unique=True, verbose_name='Название офиса')),
('sOfficeStatus', models.SmallIntegerField(blank=True, choices=[(1, 'Головной офис'), (2, 'Региональный офис'), (3, 'Офис продаж'), (4, 'Представительство'), (5, 'Диллер'), (6, 'Франшиза'), (7, 'Агент')], default=None, help_text='Укажите статус офиса', null=True, verbose_name='Статаус офиса')),
('sOfficePhones', models.CharField(blank=True, default='', help_text='Телефона офиса. Без пробелов, начинаются с +7. Например: «+7(495)123-12-34». Несколько телефонов записываются через запятую.', max_length=128, null=True, verbose_name='Тел.')),
('sOfficeEmails', models.CharField(blank=True, default='', help_text='e-mail офиса. Несколько e-mail записываются через запятую.', max_length=128, null=True, verbose_name='e-mail')),
('sOfficeAddress', models.CharField(default='', help_text='Адрес офиса', max_length=255, verbose_name='Адрес офиса')),
('fOfficeGeoCode_Latitude', models.DecimalField(decimal_places=8, default=0.0, help_text='Географическая щирота', max_digits=12, null=True, verbose_name='Широта')),
('fOfficeGeoCode_Longitude', models.DecimalField(decimal_places=8, default=0.0, help_text='Географическая долгота', max_digits=12, null=True, verbose_name='Долгота')),
('sOfficeDescription', models.TextField(blank=True, default=None, help_text='Краткое описание компании (офиса, подразделения). Максимум 4096 символов включая пробелы. HTML запрещен.', max_length=4096, null=True, verbose_name='Описание')),
('sOfficeDiscountMetaFormula', models.CharField(blank=True, default=None, help_text='Формула предоставления скидок на мета-языке формул.', max_length=255, null=True, verbose_name='Формула скидки')),
('dOfficeDataCreate', models.DateTimeField(auto_now_add=True, verbose_name='Создано')),
('dOfficeDataModify', models.DateTimeField(auto_now=True, verbose_name='Отредактировано')),
('kMerchantName', models.ForeignKey(blank=True, default=None, help_text='Маркой, бенд или франшиза под которой рабоатет офис.', null=True, on_delete=django.db.models.deletion.SET_NULL, to='oknardia.merchantbrand', verbose_name='Бренд')),
('kMerchantOfficeParent', models.ForeignKey(blank=True, default=None, help_text='Укажите офис у которого настоящий офис находится в подчинении.', null=True, on_delete=django.db.models.deletion.SET_NULL, to='oknardia.merchantoffice', verbose_name='Подчинен')),
],
options={
'verbose_name': 'Поставщик: офис',
'verbose_name_plural': 'Поставщики: офисы',
'ordering': ['sOfficeName'],
},
),
migrations.CreateModel(
name='MountDim2Apartment',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('iQuantity', models.PositiveSmallIntegerField(default=1, help_text='Количество окон/дверей данных габаритов в квартире', verbose_name='Количество')),
('kApartment', models.ForeignKey(help_text='Квартира', on_delete=django.db.models.deletion.DO_NOTHING, to='oknardia.apartment_type', verbose_name='Квартира')),
],
options={
'verbose_name': 'Связка «проемы↔квартиры»',
'verbose_name_plural': 'Связки «проемы↔квартиры»',
'ordering': ['-kApartment_id', '-kMountDim_id'],
},
),
migrations.CreateModel(
name='OurUser',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('sUserPhone', models.CharField(blank=True, default='', help_text='Номер телефона пользователя', max_length=32, null=True, verbose_name='Телефон')),
('sUserStatus', models.SmallIntegerField(blank=True, choices=[(1, 'Клиент, заказчик'), (10, 'Представитель компании (офиса)'), (50, 'Администратор бренда'), (100, 'Администратор Окнардии')], default=9, help_text='Статус пользователя.', null=True, verbose_name='Статаус')),
('sUserJobTitle', models.CharField(blank=True, default=None, help_text='Должность, в случае если данный логин является представителем компании.', max_length=64, null=True, verbose_name='Должность')),
('sUserAvatarImg', models.ImageField(default='null.gif', help_text='URL на картинку с аватаркой ', max_length=128, upload_to='img_avatar/', verbose_name='Avatar')),
('bUserSubscribe', models.BooleanField(default=True, help_text='Паользователь подписан на регулярную.', verbose_name='Подписка')),
('bUserWaitOffers', models.BooleanField(default=True, help_text='Пользователь ждет коммерческих предложений.', verbose_name='Ждет предложений')),
('sSocial', models.TextField(blank=True, default=None, help_text='Как это будет работать пока не ясно.', max_length=1024, null=True, verbose_name='Социальные ссылки')),
('dUserDataModify', models.DateTimeField(auto_now=True, verbose_name='Отредактировано')),
('kDjangoUser', models.ForeignKey(help_text='Базовый пользователь', on_delete=django.db.models.deletion.DO_NOTHING, to=settings.AUTH_USER_MODEL, verbose_name='User')),
('kMerchantOffice', models.ForeignKey(blank=True, default=None, help_text='Сотрудника какого офиса предтавляет этот логин.', null=True, on_delete=django.db.models.deletion.SET_NULL, to='oknardia.merchantoffice', verbose_name='Представитель')),
],
options={
'verbose_name': 'Наш Пользователь',
'verbose_name_plural': 'Наши Пользователи',
'ordering': ['kDjangoUser'],
},
),
migrations.CreateModel(
name='PVCprofiles',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('sProfileName', models.CharField(db_index=True, help_text='Название профиля.', max_length=64, unique=True, verbose_name='Профиль')),
('sProfileBriefDescription', models.CharField(db_index=True, help_text='Краткая характеристика профиля.', max_length=255, unique=True, verbose_name='Краткое описание')),
('sProfileManufacturer', models.CharField(db_index=True, default='—//—', help_text='Завод (компания) производитель', max_length=128, verbose_name='Производитель')),
('iProfileCameras', models.CharField(blank=True, default='—/—', help_text='Число камер рамка/створка.', max_length=5, null=True, verbose_name='Камер')),
('iProfileThickness', models.PositiveSmallIntegerField(default=0, help_text='Монтажная ширина профиля (мм).', verbose_name='W')),
('fProfileHeatTransf', models.DecimalField(decimal_places=2, default=0, help_text='Сопротивление теплопередаче Ro (м²×°C/Вт)', max_digits=5, verbose_name='Ro')),
('fProfileSoundproofing', models.DecimalField(decimal_places=2, default=0, help_text='Коэффициент звукоизоляции (дБ). 1-й класс — 25-29дБ; 2-й класс — 30-24дБ; 3-й класс — 35-39дБ; 4-й класс — 40-44дБ; 5-й класс — 45-49дБ; 6-й класс — свыше 50 дБ; ', max_digits=5, verbose_name='дБ')),
('iProfileGlazingThickness', models.PositiveSmallIntegerField(default=0, help_text='Максимальная толщина стеклопакета (мм).', verbose_name='W-cтеклопак')),
('sProfileReinforcement', models.CharField(blank=True, help_text='Армирование профиля. Описание кратко.', max_length=255, verbose_name='Армирование')),
('fProfileSeals', models.PositiveSmallIntegerField(blank=True, default=0, help_text='Число контуров уплотнения.', null=True, verbose_name='Контуров уплотнения')),
('sProfileSealDescription', models.CharField(blank=True, default='', help_text='Характеристики или цвет уплотнителя.', max_length=128, null=True, verbose_name='Уплотнитель')),
('sProfileFillet', models.CharField(blank=True, default='', help_text='Штапик. Описание кратко.', max_length=255, verbose_name='Штапик')),
('iProfileHeight', models.PositiveSmallIntegerField(default=0, help_text='Высота в световом проеме (рама+створка), мм.', verbose_name='Высота')),
('iProfileRabbet', models.PositiveSmallIntegerField(default=0, help_text='Размер зазора между рамой и створкой (высота фальца), мм.', verbose_name='Фальц')),
('sProfileColor', models.CharField(blank=True, default='белый', help_text='Цвет профиля', max_length=128, verbose_name='Цвет')),
('sProfileOther', models.CharField(blank=True, default='', help_text='Прочие характеристики в формате: Характеристика: Значение; Характеристика: Значение;', max_length=255, verbose_name='Прочее')),
('fProfileRating', models.FloatField(db_index=True, default=0.0, help_text='Рейтинг (0… +5).', verbose_name='Рейтинг')),
('sProfileDescription', models.TextField(default='', help_text='Описание профиля (JSON)', null=True, verbose_name='Описание')),
('dProfileCreate', models.DateTimeField(auto_now_add=True, verbose_name='Создано')),
('dProfileModify', models.DateTimeField(auto_now=True, verbose_name='Когда отредактировано')),
('kProfile2User', models.ForeignKey(help_text='Данный профиль добавил пользователь.', on_delete=django.db.models.deletion.DO_NOTHING, to='oknardia.ouruser', verbose_name='User')),
],
options={
'verbose_name': 'Окно: профиль',
'verbose_name_plural': 'Окна: профили',
'ordering': ['sProfileName'],
},
),
migrations.CreateModel(
name='Win_MountDim',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('iWinWidth', models.DecimalField(decimal_places=1, help_text='Ширина, см.', max_digits=5, verbose_name='Ширина')),
('iWinHight', models.DecimalField(decimal_places=1, help_text='Высота, см.', max_digits=5, verbose_name='Высота')),
('iWinDepth', models.DecimalField(decimal_places=1, help_text='Глубина, см.', max_digits=3, verbose_name='Глубина')),
('flap_config', models.CharField(help_text='Рекомендуемая гор.архитектурой конфигурации открывания (МЕТАЯЗЫК)', max_length=32, verbose_name='Открывание')),
('sDescripion', models.CharField(blank=True, help_text='Описание для простоты последующего поиска и SEO', max_length=64, null=True, verbose_name='Описание')),
('bIsDoor', models.BooleanField(default=False, help_text='Это Дверь', verbose_name='Дверь')),
('bIsNearDoor', models.BooleanField(default=False, help_text='Это окно рядом с дверью (может быть глухим)', verbose_name='Глухое')),
('iWinLimit', models.DecimalField(decimal_places=1, default=5.0, help_text='Точность, допуск, предельные отклонения ширины и высоты, ±см.', max_digits=2, null=True, verbose_name='Допуск±')),
('dMountXYZDataCreate', models.DateTimeField(auto_now_add=True, verbose_name='Создано')),
('dMountXYZModify', models.DateTimeField(auto_now=True, verbose_name='Отредактировано')),
('kApartment', models.ManyToManyField(help_text='Принадлежность проема к типовой квартире', through='oknardia.MountDim2Apartment', to='oknardia.apartment_type', verbose_name='Квартира')),
],
options={
'verbose_name': 'Окно: проём и его конфигурация',
'verbose_name_plural': 'Окна: проемы и их конфигурация',
'ordering': ['id', 'iWinWidth', 'iWinHight'],
},
),
migrations.CreateModel(
name='SetKit',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('sSetName', models.CharField(help_text='Марка, краткое название или фирменное обозначение набора.', max_length=128, unique=True, verbose_name='Название')),
('sSetDescription', models.TextField(blank=True, help_text='Детальное описание стеклопакета (допустим HTML)', verbose_name='Описание')),
('sSetClimateControl', models.CharField(blank=True, default='', help_text='Система климат-контроля: марка, краткое название или фирменное обозначение.', max_length=128, verbose_name='Климат-контроль')),
('sSetSill', models.CharField(blank=True, help_text='Подоконник: марка, краткое название или фирменное обозначение.', max_length=128, verbose_name='Подоконник')),
('sSetImplementAll', models.CharField(help_text='Фурнитура: марка, краткое название или фирменное обозначение.', max_length=128, verbose_name='Фурнитура')),
('sSetImplementHandles', models.CharField(blank=True, help_text='Фурнитура ручки: марка, краткое название или фирменное обозначение.', max_length=128, verbose_name='Ручки')),
('sSetImplementHinges', models.CharField(blank=True, help_text='Фурнитура петли: марка, краткое название или фирменное обозначение.', max_length=128, verbose_name='Петли')),
('sSetImplementLatch', models.CharField(blank=True, help_text='Фурнитура механизма запирания: марка, краткое название или фирменное обозначение.', max_length=128, verbose_name='Запоры')),
('sSetImplementLimiter', models.CharField(blank=True, help_text='Фурнитура ограничителя: марка, краткое название или фирменное обозначение.', max_length=128, verbose_name='Ограничитель')),
('sSetImplementCatch', models.CharField(blank=True, help_text='Фурнитура фиксаторов открывания: марка, краткое название или фирменное обозначение.', max_length=128, verbose_name='Фиксаторы открывания')),
('sSetPanes', models.CharField(blank=True, help_text='Водоотлив: марка, краткое название или фирменное обозначение.', max_length=128, verbose_name='Водоотлив')),
('sSetSlope', models.CharField(blank=True, help_text='Откос: марка, краткое название или фирменное обозначение.', max_length=128, verbose_name='Откос')),
('sSetDelivery', models.CharField(blank=True, default='Включена в стоимость', help_text='Доставка: опишите условия, регион, способ расчета стоимости и т.п.', max_length=64, verbose_name='Доставка')),
('bSetDelivery', models.BooleanField(default=True, help_text='Отмечено, если доставка включена в стоимость', verbose_name='Доставка(б)')),
('sSetUninstallInstall', models.CharField(blank=True, default='Включен в стоимость', help_text='Доставка: опишите условия, регион, способ расчета стоимости…', max_length=64, verbose_name='Монтаж')),
('bSetUninstallInstall', models.BooleanField(default=True, help_text='Отмечено, если Демонтаж/Монтаж включен в стоимость', verbose_name='Монтаж(б)')),
('sSetOtherConditions', models.CharField(blank=True, default='', help_text='Прочие условия: монтаж, демонтаж, вывоз мусора, предоставление пленки для укрытия мебели и т.п.', max_length=512, verbose_name='Прочие условия')),
('fSetRating', models.FloatField(db_index=True, default=0.0, help_text='Рейтинг (0.0 … 5.0). Если рейтинг 0.1 то выводится полупрозрачным и с меткой что поставщик бяка', verbose_name='Рейтинг')),
('iSetNumEval', models.PositiveIntegerField(default=0, help_text='Количество оценок.', verbose_name='N оценок')),
('iSetImpressions', models.PositiveIntegerField(default=0, help_text='Число показов.', verbose_name='Показы')),
('iSetViews', models.PositiveIntegerField(default=0, help_text='Число просмотров.', verbose_name='Просмотры')),
('sSetActive', models.BooleanField(default=True, help_text='Отображать предложение (если "вкл") или нет (если "выкл").', verbose_name='Активно')),
('dSetCommercialUntil', models.DateTimeField(blank=True, default=datetime.datetime(2018, 3, 25, 12, 0), help_text='Дата до которой набор считается размещенным на коммерческой основе.', verbose_name='Коммерческий до')),
('dSetCreate', models.DateTimeField(auto_now_add=True, verbose_name='Создано')),
('dSetModify', models.DateTimeField(auto_now=True, db_index=True, verbose_name='Отредактировано')),
('kSet2Glazing', models.ForeignKey(help_text='Стеклопакет используемый в данном наборе.', on_delete=django.db.models.deletion.DO_NOTHING, to='oknardia.glazing', verbose_name='Стеклопакет')),
('kSet2PVCprofiles', models.ForeignKey(help_text='Профиль используемый в данном наборе.', on_delete=django.db.models.deletion.DO_NOTHING, to='oknardia.pvcprofiles', verbose_name='Профиль')),
('kSet2User', models.ForeignKey(help_text='Пользователь, который определил данный набор.', on_delete=django.db.models.deletion.DO_NOTHING, to='oknardia.ouruser', verbose_name='User')),
],
options={
'verbose_name': 'Окно: набор',
'verbose_name_plural': 'Окна: наборы',
'ordering': ['id', 'sSetName'],
},
),
migrations.CreateModel(
name='Seria_Info',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('sName', models.CharField(help_text='Наименование серии дома.', max_length=128, unique=True, verbose_name='Серия дома')),
('sURL2IMG', models.ImageField(default='null.gif', help_text='Способ загрузить картинку через адмрн6ку Картинка-тизер для публикаций в соц.сетях. URL к картинке будет «<b>/media/img_seria/…</b>» и этот URL можно использовать в HTML-тексте блога. Если нужно загрузить несколько картинок, то после сохранения промежуточной записи, откройте ее на редактирование еще раз и добавте новую картинку. Предыдущая картинка (и её URL) продолжат быть доступны.<br><b>ВАЖНО: ПРИ ПУБЛИКАЦИИ В СОЦ.СЕТЯХ БУДЕТ ОТОБРАЖАТЬЯ КАРТИНКА ЗАГРУЖЕННАЯ ПОСЛЕДНЕЙ.<br>ВАЖНО: ЕСЛИ ЗАГРУЖАЕМАЯ КАРТИНКА УЖЕ ИМЕЕТ ДУБЛИКАТ В СИСТЕМЕ, ЕЕ ИМЯ (И URL) БУДУТ ИЗМЕНЕНЫ. БУДЬТЕ ВНИМТЕЛЬНЫ!', max_length=128, upload_to='img_seria/', verbose_name='Изображение')),
('sSeriaDescription', models.TextField(blank=True, default='', help_text='Тематическая статья, о настоящей серии дома', null=True, verbose_name='Текст')),
('dSeriaInfoCreate', models.DateTimeField(auto_now_add=True, verbose_name='Создано')),
('dSeriaInfoModify', models.DateTimeField(auto_now=True, verbose_name='Отредактировано')),
('kParent', models.ForeignKey(blank=True, default=None, help_text='Серия дома, которая является родительской для текущей.', null=True, on_delete=django.db.models.deletion.SET_NULL, to='oknardia.seria_info', verbose_name='Родительская серия')),
('kRoot', models.ForeignKey(blank=True, default=None, help_text='Серия дома, которая является корневой для текущей.', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='kRootID', to='oknardia.seria_info', verbose_name='Корневая серия')),
],
options={
'verbose_name': 'Здание: серия дома',
'verbose_name_plural': 'Здания: серии домов',
'ordering': ['id', 'kParent_id', 'sName'],
},
),
migrations.CreateModel(
name='PriceOffer',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('sOfferFlapConfig', models.CharField(help_text='Предлагаемая схема открывания (МЕТАЯЗЫК)', max_length=32, verbose_name='Открывание')),
('fOfferPrice', models.DecimalField(decimal_places=2, default=0.0, help_text='Цена установки окна, руб.', max_digits=10, verbose_name='Цена, ₽')),
('fOfferRating', models.FloatField(db_index=True, default=0.0, help_text='Поправка рейтинга (-0.5 … 0.5). Вычисляется исходя из соответствия предлагаемой схемы открывания', verbose_name='Рейтинг')),
('iOfferImpressions', models.PositiveIntegerField(default=0, help_text='Число показов.', verbose_name='Показы')),
('iOfferViews', models.PositiveIntegerField(default=0, help_text='Число просмотров.', verbose_name='Просмотры')),
('sOfferActive', models.BooleanField(default=True, help_text='Отображать предложение (если "вкл") или нет (если "выкл").', verbose_name='Активно')),
('dOfferCreate', models.DateTimeField(auto_now_add=True, verbose_name='Создано')),
('dOfferModify', models.DateTimeField(auto_now=True, db_index=True, verbose_name='Отредактировано')),
('kOffer2MountDim', models.ForeignKey(help_text='Проём для которого установлена цена.', on_delete=django.db.models.deletion.DO_NOTHING, to='oknardia.win_mountdim', verbose_name='Проём')),
('kOffer2SetKit', models.ForeignKey(default=1, help_text='Набор', on_delete=django.db.models.deletion.DO_NOTHING, to='oknardia.setkit', verbose_name='Набор')),
('kOfferFromUser', models.ForeignKey(help_text='Пользователь, который установил эту цену.', on_delete=django.db.models.deletion.DO_NOTHING, to='oknardia.ouruser', verbose_name='User')),
],
options={
'verbose_name': 'Окно: цена',
'verbose_name_plural': 'Окна: цены',
'ordering': ['-id'],
},
),
migrations.AddField(
model_name='mountdim2apartment',
name='kMountDim',
field=models.ForeignKey(help_text='Параметры оконного/верного проема', on_delete=django.db.models.deletion.DO_NOTHING, to='oknardia.win_mountdim', verbose_name='Оконный проём'),
),
migrations.CreateModel(
name='LogMeasure',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('dMeasureCreate', models.DateTimeField(auto_now_add=True, db_index=True, verbose_name='Обращение')),
('kMeasureApartment', models.ForeignKey(default=0, help_text='Для какой типовой квартиры сделали замер.', on_delete=django.db.models.deletion.DO_NOTHING, to='oknardia.apartment_type', verbose_name='Квартира')),
('kMeasureBuilding', models.ForeignKey(db_index=False, default=0, help_text='По какому адресу был произведен замер.', on_delete=django.db.models.deletion.DO_NOTHING, to='oknardia.building_info', verbose_name='Адрес')),
('kMeasureByUser', models.ForeignKey(default=0, help_text='Кто произвел замер и прислал данные', on_delete=django.db.models.deletion.DO_NOTHING, to='oknardia.ouruser', verbose_name='От кого')),
],
options={
'verbose_name': 'Лог: замеры пользователей',
'verbose_name_plural': 'Лог: замеры пользователей',
'ordering': ['dMeasureCreate'],
},
),
migrations.CreateModel(
name='LogDemand',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('dDemandCreate', models.DateTimeField(auto_now_add=True, db_index=True, verbose_name='Обращение')),
('kDemandApartment', models.ForeignKey(default=0, help_text='Цены на окна в какую типовую квартиру запросили.', on_delete=django.db.models.deletion.DO_NOTHING, to='oknardia.apartment_type', verbose_name='Квартира')),
('kDemandBuilding', models.ForeignKey(db_index=False, default=0, help_text='Какой адрес был запрошен.', on_delete=django.db.models.deletion.DO_NOTHING, to='oknardia.building_info', verbose_name='Адрес')),
('kDemandByUser', models.ForeignKey(default=0, help_text='Кто сделал запрос в систему', on_delete=django.db.models.deletion.DO_NOTHING, to='oknardia.ouruser', verbose_name='Кто спросил')),
],
options={
'verbose_name': 'Лог: запрос в систему с главной',
'verbose_name_plural': 'Лог: запросы в систему с главной',
'ordering': ['dDemandCreate'],
},
),
migrations.AddField(
model_name='glazing',
name='kGlazing2User',
field=models.ForeignKey(help_text='Описание стекопакета добавлено пользователем.', on_delete=django.db.models.deletion.DO_NOTHING, to='oknardia.ouruser', verbose_name='User'),
),
migrations.CreateModel(
name='Catalog2Profile',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('sCatalogCardType', models.SmallIntegerField(choices=[(1, 'Профиль (карточка каталога)'), (100, 'Бренд (описание производителя профиля)')], db_index=True, default=1, help_text='Тип карточки каталога: описание для <b>профиля</b> или для <b>бренда</b>.', verbose_name='Тип')),
('kBlogCatalog', models.ForeignKey(blank=True, db_constraint=False, default=None, help_text='Запись в каталог-блоге относящаяся к данному профилю.', null=True, on_delete=django.db.models.deletion.SET_NULL, to='oknardia.blogposts', verbose_name='Каталог-блог')),
('kProfile', models.ForeignKey(blank=True, db_constraint=False, default=None, help_text='Профиль, к которому относится карточка каталога.', null=True, on_delete=django.db.models.deletion.SET_NULL, to='oknardia.pvcprofiles', verbose_name='Профиль')),
],
options={
'verbose_name': 'Связка-каталог «профили↔блог»',
'verbose_name_plural': 'Связки-каталог «профили↔блог»',
},
),
migrations.AddField(
model_name='building_info',
name='kSeria_Link',
field=models.ForeignKey(blank=True, default=None, help_text='Серия, типовой проект здания в нашей базе', null=True, on_delete=django.db.models.deletion.SET_NULL, to='oknardia.seria_info', verbose_name='Серия2'),
),
migrations.AddField(
model_name='blogposts',
name='kBlogAuthorUser',
field=models.ForeignKey(default=1, help_text='Автора поста в блог или записи в каталог.', on_delete=django.db.models.deletion.DO_NOTHING, to='oknardia.ouruser', verbose_name='Автор'),
),
migrations.AddField(
model_name='apartment_type',
name='kBuild',
field=models.ForeignKey(blank=True, default=None, editable=False, help_text='Данный тип квартириы находится непоследственно к адресу (для индивидуальных проектов)', null=True, on_delete=django.db.models.deletion.SET_NULL, to='oknardia.building_info', verbose_name='Адрес'),
),
migrations.AddField(
model_name='apartment_type',
name='kSeria',
field=models.ForeignKey(blank=True, default=None, help_text='Данный тип квартиры принадлежит к серии дома', null=True, on_delete=django.db.models.deletion.SET_NULL, to='oknardia.seria_info', verbose_name='В доме серии'),
),
]