diff --git a/api/api_methods.py b/api/api_methods.py index ad98d46..4369935 100755 --- a/api/api_methods.py +++ b/api/api_methods.py @@ -300,8 +300,7 @@ class ApiAccount: user.password = new_password try: await sync_to_async(user.full_clean)() - except: - traceback.print_exc() + except Exception: raise Exception(API_ERROR_INVALID_PASSWORD) if ApiAccount.__check_phone_code(phone, code): @@ -502,51 +501,70 @@ class ApiOrder: params=[ ApiParamAccessToken(), ApiParamStr(name='name', max_length=200, description="Название заказа"), - ApiParamStr(name='description', max_length=1000, description="Описание заказа", - required=False, default=""), - ApiParamFloat(name='square', value_max=99999.99, value_min=1.0, - description='Площадь в м²'), - ApiParamStr(name='work_time', max_length=100, description="Рабочее время", + ApiParamEnum(name="address_city", description="Город: {choices}", choices=CITIES_CHOICES), + ApiParamStr(name='address_text', max_length=70, description="Улица, дом", required=False, default=""), - ApiParamEnum(name='type_of_renovation', choices=Order.TYPE_OF_RENOVATION_CHOICES, required=False, + ApiParamEnum(name='type_of_apartment', choices=Order.TYPE_OF_APARTMENT_CHOICES, required=False, default=Order.CHOICE_UNDEFINED, - description="Тип ремонта: {choices}"), + description="Вид объекта: {choices}"), ApiParamEnum(name='type_of_house', choices=Order.TYPE_OF_HOUSE_CHOICES, required=False, default=Order.CHOICE_UNDEFINED, description="Тип дома: {choices}"), ApiParamEnum(name='type_of_room', choices=Order.TYPE_OF_ROOM_CHOICES, required=False, default=Order.CHOICE_UNDEFINED, description="Тип квартиры: {choices}"), + ApiParamInt(name='number_of_rooms', required=True, value_min=-1, value_max=100, + description="Количество комнат, -1 = студия"), + ApiParamBoolean(name="is_balcony", default=True, description="Балкон"), + ApiParamBoolean(name="is_loggia", default=True, description="Лоджия"), + ApiParamStr(name='state_of_room', max_length=40, description="Состояние помещения", + required=False, default=""), + ApiParamFloat(name='square', value_max=99999.99, value_min=1.0, + description='Площадь в м²'), + ApiParamFloat(name='ceiling_height', value_max=99.99, value_min=1.0, + description='Высота потолков в м'), + ApiParamEnum(name='type_of_renovation', choices=Order.TYPE_OF_RENOVATION_CHOICES, required=False, + default=Order.CHOICE_UNDEFINED, + description="Тип ремонта: {choices}"), + ApiParamBoolean(name="is_redevelopment", required=False, default=True, + description="Требуется перепланировка"), + ApiParamBoolean(name="is_leveling_floors", required=False, default=False, + description="Требуется выравнивание полов"), + ApiParamBoolean(name="is_heated_floor", required=False, default=False, + description="Теплый пол"), + ApiParamBoolean(name="is_leveling_walls", required=False, default=False, + description="Требуется выравнивание стен"), + ApiParamStr(name='type_of_ceiling', max_length=40, description="Тип потолка", + required=False, default=""), + ApiParamBoolean(name="is_wiring_replace", required=False, default=False, + description="Требуется замена проводки"), + ApiParamBoolean(name="is_require_design", required=False, default=False, + description="Требуется дизайн проект"), + ApiParamEnum(name='purchase_of_material', choices=Order.PURCHASE_OF_MATERIAL_CHOICES, required=False, default=Order.CHOICE_UNDEFINED, description="Закуп материала: {choices}"), - # дальше отдельные флаги - ApiParamBoolean(name="is_with_warranty", required=False, default=True, - description="С гарантией"), ApiParamBoolean(name="is_with_contract", required=False, default=False, description="Работа по договору"), + ApiParamBoolean(name="is_with_warranty", required=False, default=True, + description="С гарантией"), ApiParamBoolean(name="is_with_trade", required=False, default=False, description="Возможен торг"), ApiParamBoolean(name="is_with_cleaning", required=False, default=False, description="С уборкой"), - ApiParamBoolean(name="is_with_garbage_removal", required=False, default=False, - description="С вывозом мусора"), - ApiParamBoolean(name="is_require_design", required=False, default=False, - description="Требуется дизайн проект"), - - # примерная цена - ApiParamFloat(name='approximate_price', value_max=9999999999.99, value_min=1.0, - description='Примерная цена'), # date_start = models.DateField(null=True, blank=True, default=None, verbose_name="Дата начала") # date_end = models.DateField(null=True, blank=True, default=None, verbose_name="Дата окончания") - ApiParamEnum(name="address_city", description="Город: {choices}", choices=CITIES_CHOICES), + ApiParamFloat(name='approximate_price', value_max=9999999999.99, value_min=1.0, + description='Примерная цена'), + ApiParamStr(name='description', max_length=1000, description="Описание заказа", + required=False, default=""), + ApiParamStr(name='video_link', max_length=160, description="Ссылка на видео", + required=False, default=""), - ApiParamStr(name='address_text', max_length=70, description="Улица, дом", - required=False, default="") # email = models.EmailField(null=True, blank=True, verbose_name="Email") # phone = models.CharField(null=True, blank=True, max_length=16, verbose_name="Телефон") ], diff --git a/api/models.py b/api/models.py index a375f17..55d1af5 100755 --- a/api/models.py +++ b/api/models.py @@ -253,7 +253,7 @@ class Order(models.Model): (TYPE_OF_APARTMENT_SECONDARY, 'Вторичка') ] type_of_apartment = models.CharField(max_length=10, choices=TYPE_OF_APARTMENT_CHOICES, blank=True, - default=CHOICE_UNDEFINED, verbose_name="Тип квартиры") + default=CHOICE_UNDEFINED, verbose_name="Вид объекта") # тип дома TYPE_OF_HOUSE_BLOCK = 'block' @@ -261,6 +261,7 @@ class Order(models.Model): TYPE_OF_HOUSE_MONOLITH = 'monolith' TYPE_OF_HOUSE_PANEL = 'panel' + # TODO добавить чойсов, их на самом деле больше TYPE_OF_HOUSE_CHOICES = [ (TYPE_OF_HOUSE_BLOCK, 'Блочный'), (TYPE_OF_HOUSE_BRICK, 'Кирпичный'), @@ -307,7 +308,7 @@ class Order(models.Model): square = models.DecimalField(max_digits=7, decimal_places=2, blank=False, verbose_name="Площадь в м²") # высота потолков - ceiling_height = models.DecimalField(max_digits=2, decimal_places=2, blank=False, + ceiling_height = models.DecimalField(max_digits=4, decimal_places=2, blank=False, verbose_name="Высота потолков в м") # Раздел "Ремонт" @@ -332,9 +333,9 @@ class Order(models.Model): is_leveling_walls = models.BooleanField(default=False, verbose_name="Выравнивать стены") type_of_ceiling = models.CharField(max_length=40, blank=True, default=CHOICE_UNDEFINED, - verbose_name="Потолок") + verbose_name="Тип потолка") - is_wiring_replace = models.BooleanField(default=False, verbose_name="Замена проводки") + is_wiring_replace = models.BooleanField(default=False, verbose_name="Требуется замена проводки") is_require_design = models.BooleanField(default=False, verbose_name="Требуется дизайн проект") # закуп материала @@ -362,10 +363,11 @@ class Order(models.Model): description = models.TextField(blank=True, verbose_name="Описание") - # TODO сделать ссылку на видео + video_link = models.CharField(max_length=160, blank=True, default=CHOICE_UNDEFINED, + verbose_name="Ссылка на видео") - email = models.EmailField(null=True, blank=True, verbose_name="Email") - phone = models.CharField(null=True, blank=True, max_length=16, verbose_name="Телефон", validators=[ + email = models.EmailField(blank=True, verbose_name="Email") + phone = models.CharField(blank=True, max_length=16, verbose_name="Телефон", validators=[ RegexValidator(regex="^\\+7[0-9]{10}$") ])