From b2a270cb2e60727aeadde0321f74f9c9dc1013ce Mon Sep 17 00:00:00 2001 From: Sergey Korotonozhko <_serezhka_@mail.ru> Date: Tue, 2 Jun 2026 20:57:46 +0300 Subject: [PATCH] =?UTF-8?q?v1.8.5:=20fix=20onupdate=20NOW()=20=E2=86=92=20?= =?UTF-8?q?func.now(),=20=D1=83=D0=B4=D0=B0=D0=BB=D1=91=D0=BD=20main-heade?= =?UTF-8?q?r,=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0=20=D0=BF=D0=BE?= =?UTF-8?q?=20=D0=98=D0=B4=D0=B5=D1=8F=D0=BC,=20=D1=81=D0=B8=D0=BD=D1=85?= =?UTF-8?q?=D1=80=D0=BE=D0=BD=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D1=81=D0=B8=D0=B8=20=D0=B2=20=D0=BA=D0=BE=D0=BD?= =?UTF-8?q?=D1=82=D0=B5=D0=B9=D0=BD=D0=B5=D1=80=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AGENTS.md | 11 +++++++ max_bot/version.txt | 2 +- py_service/CHANGELOG.md | 11 +++++++ py_service/app/models/models.py | 30 +++++++++---------- py_service/app/templates/dashboard.html | 10 ------- py_service/app/templates/page.html | 12 -------- .../app/templates/pages/bot_dialogues.html | 1 - py_service/version.txt | 2 +- 8 files changed, 39 insertions(+), 40 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 77b13ff..ec01650 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -235,3 +235,14 @@ docker logs aegisone-app --tail 10 - **Модалки:** `.modal-overlay` + `.modal`, открытие через `classList.add('open')` - **Структура страницы:** `card` > `card-header` > `filter-bar` > `table-wrap` > `table` - **CSS классы кнопок:** `.btn-primary` (создать), `.btn-secondary` (редактировать), `.btn-danger` (удалить), `.btn-success` (выполнено) + +--- + +## 12. Идеи + +- **Страница:** `/service/ideas` +- **Агент может:** видеть список идей, добавлять новые, менять статус, предлагать к реализации, реализовывать +- **Статусы:** `normal` → `in_progress` → `completed` → `normal` +- **API:** POST `/service/ideas/create` (title, description), POST `/service/ideas/status` (id), POST `/service/ideas/delete` (id) +- Агент может добавить идею по просьбе пользователя через API +- Агент может реализовать идею, создав/изменив код, и предложить к реализации diff --git a/max_bot/version.txt b/max_bot/version.txt index 7b378be..ff2fd4f 100644 --- a/max_bot/version.txt +++ b/max_bot/version.txt @@ -1 +1 @@ -1.8.4 \ No newline at end of file +1.8.5 \ No newline at end of file diff --git a/py_service/CHANGELOG.md b/py_service/CHANGELOG.md index d100e60..8a17d9c 100644 --- a/py_service/CHANGELOG.md +++ b/py_service/CHANGELOG.md @@ -1,5 +1,16 @@ # Changelog — AegisOne Service Portal +## 1.8.5 (02.06.2026) +### Новые функции +- **AGENTS.md (раздел 12):** правила по Идеям — агент может видеть, добавлять, менять статус, предлагать к реализации, реализовывать + +### Исправления +- **models.py:** `onupdate="NOW()"` → `onupdate=func.now()` — fix Internal Server Error при смене статуса Идеи (14 моделей) +- **page.html:** удалён `main-header` (заголовок + дата) — больше не дублируется на всех страницах +- **dashboard.html:** удалён `main-header` +- **bot_dialogues.html:** удалён CSS `.main-header { display: none !important; }` (больше не нужен) +- **version.txt / CHANGELOG.md:** синхронизация версии в контейнере aegisone-app + ## 1.8.4 (02.06.2026) ### Новые функции - **SERVICE_STYLE_GUIDE.md:** единый гайд стилей сервисного портала diff --git a/py_service/app/models/models.py b/py_service/app/models/models.py index 12bbdc9..7227f7d 100644 --- a/py_service/app/models/models.py +++ b/py_service/app/models/models.py @@ -10,7 +10,7 @@ ORM-модели для service portal (SQLAlchemy 2.0). """ from datetime import datetime from sqlalchemy import ( - Column, Integer, String, Boolean, Text, DateTime, Numeric, Date, BigInteger, SmallInteger, JSON, ForeignKey, CheckConstraint + Column, Integer, String, Boolean, Text, DateTime, Numeric, Date, BigInteger, SmallInteger, JSON, ForeignKey, CheckConstraint, func ) from sqlalchemy.orm import relationship, declarative_base @@ -30,7 +30,7 @@ class User(Base): max_user_id = Column(BigInteger, nullable=True) is_active = Column(Boolean, nullable=False, default=True) created_at = Column(DateTime, nullable=False, server_default="NOW()") - updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate="NOW()") + updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate=func.now()) __table_args__ = ( CheckConstraint("role IN ('owner','engineer','technician')", name="ck_users_role"), @@ -76,7 +76,7 @@ class Customer(Base): notes = Column(Text) created_by = Column(Integer, ForeignKey("users.id", ondelete="SET NULL")) created_at = Column(DateTime, nullable=False, server_default="NOW()") - updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate="NOW()") + updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate=func.now()) __table_args__ = ( CheckConstraint("status IN ('active','inactive','prospect')", name="ck_customers_status"), @@ -109,7 +109,7 @@ class Object(Base): region_factor = Column(Numeric(3, 2), default=1.00) created_by = Column(Integer, ForeignKey("users.id", ondelete="SET NULL")) created_at = Column(DateTime, nullable=False, server_default="NOW()") - updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate="NOW()") + updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate=func.now()) __table_args__ = ( CheckConstraint("status IN ('active','inactive','audit','prospective')", name="ck_objects_status"), @@ -163,7 +163,7 @@ class Task(Base): result_notes = Column(Text) closed_at = Column(DateTime) created_at = Column(DateTime, nullable=False, server_default="NOW()") - updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate="NOW()") + updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate=func.now()) __table_args__ = ( CheckConstraint("priority IN ('P1','P2','P3','P4')", name="ck_tasks_priority"), @@ -227,7 +227,7 @@ class Report(Base): status = Column(String(20), nullable=False, default="draft") client_confirmed = Column(Boolean, default=False) created_at = Column(DateTime, nullable=False, server_default="NOW()") - updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate="NOW()") + updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate=func.now()) __table_args__ = ( CheckConstraint("report_type IN ('inspection','service','emergency','audit','monthly')", name="ck_reports_type"), @@ -255,7 +255,7 @@ class QuestionnaireSession(Base): object_index = Column(Numeric(5, 2), default=0) sla_price_monthly = Column(Numeric(12, 2), default=0) created_at = Column(DateTime, nullable=False, server_default="NOW()") - updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate="NOW()") + updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate=func.now()) __table_args__ = ( CheckConstraint("status IN ('draft','completed','cancelled')", name="ck_qsessions_status"), @@ -293,7 +293,7 @@ class QuestionnaireItem(Base): is_active = Column(Boolean, nullable=False, default=True) help_text = Column(String(500), default="") created_at = Column(DateTime, nullable=False, server_default="NOW()") - updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate="NOW()") + updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate=func.now()) __table_args__ = ( CheckConstraint("type IN ('text','number','select','radio','checkbox','textarea')", name="ck_qitems_type"), @@ -340,7 +340,7 @@ class SLAContract(Base): status = Column(String(20), nullable=False, default="negotiation") created_by = Column(Integer, ForeignKey("users.id", ondelete="SET NULL")) created_at = Column(DateTime, nullable=False, server_default="NOW()") - updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate="NOW()") + updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate=func.now()) __table_args__ = ( CheckConstraint("service_level IN ('start','business','enterprise')", name="ck_sla_level"), @@ -369,7 +369,7 @@ class Incident(Base): sla_breached = Column(Boolean, default=False) resolved_at = Column(DateTime) created_at = Column(DateTime, nullable=False, server_default="NOW()") - updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate="NOW()") + updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate=func.now()) __table_args__ = ( CheckConstraint("severity IN ('P1','P2','P3')", name="ck_incidents_severity"), @@ -438,7 +438,7 @@ class BlogPost(Base): status = Column(String(20), nullable=False, default="draft") published_at = Column(DateTime) created_at = Column(DateTime, nullable=False, server_default="NOW()") - updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate="NOW()") + updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate=func.now()) __table_args__ = ( CheckConstraint("category IN ('audit','sla','incident','supervision','documentation','risk','cases')", name="ck_blog_category"), @@ -458,7 +458,7 @@ class FormulaCoefficient(Base): formula_ref = Column(String(255), default="") is_active = Column(Boolean, nullable=False, default=True) updated_by = Column(Integer, ForeignKey("users.id", ondelete="SET NULL")) - updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate="NOW()") + updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate=func.now()) updater = relationship("User") @@ -473,7 +473,7 @@ class Case(Base): sort_order = Column(Integer, nullable=False, default=0) is_active = Column(Boolean, nullable=False, default=True) created_at = Column(DateTime, nullable=False, server_default="NOW()") - updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate="NOW()") + updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate=func.now()) class Idea(Base): @@ -485,7 +485,7 @@ class Idea(Base): status = Column(String(20), nullable=False, default="normal") created_by = Column(Integer, ForeignKey("users.id", ondelete="SET NULL")) created_at = Column(DateTime, nullable=False, server_default="NOW()") - updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate="NOW()") + updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate=func.now()) __table_args__ = ( CheckConstraint("status IN ('normal','in_progress','completed')", name="ck_ideas_status"), @@ -503,7 +503,7 @@ class QuickMenuItem(Base): url = Column(String(500), nullable=False) sort_order = Column(Integer, nullable=False, default=0) created_by = Column(Integer, ForeignKey("users.id", ondelete="SET NULL")) - updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate="NOW()") + updated_at = Column(DateTime, nullable=False, server_default="NOW()", onupdate=func.now()) creator = relationship("User") diff --git a/py_service/app/templates/dashboard.html b/py_service/app/templates/dashboard.html index 356dcb6..12d165e 100644 --- a/py_service/app/templates/dashboard.html +++ b/py_service/app/templates/dashboard.html @@ -5,16 +5,6 @@