Инструменты пользователя

Инструменты сайта


sharixopen:knowledge:scenarios:order_create

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
sharixopen:knowledge:scenarios:order_create [2026/10/29 08:30] – [sharixknowledge] approved package sx_knowledge_api_opensharixopen:knowledge:scenarios:order_create [2026/10/31 11:24] (текущий) – [sharixknowledge] approved package sx_knowledge_api_open
Строка 13: Строка 13:
             "ShariXKnowledgeOpenKnowledgeArchitectureApicontracts",             "ShariXKnowledgeOpenKnowledgeArchitectureApicontracts",
             "ShariXKnowledgeOpenKnowledgeDomainOrderticket"             "ShariXKnowledgeOpenKnowledgeDomainOrderticket"
 +        ],
 +        "depends_on": [
 +            "ShariXKnowledgeOpenKnowledgeArchitectureApicontracts",
 +            "ShariXKnowledgeOpenKnowledgeDomainOrderticket"
 +        ],
 +        "verified_by": [
 +            "ShariXKnowledgeOpenKnowledgeDevelopmentAcceptance"
         ]         ]
     },     },
     "extensions": {     "extensions": {
         "taxonomy": {         "taxonomy": {
-            "domain": "business_processes", +            "domain": "use_cases", 
-            "lifecycle": "documented",+            "lifecycle": "implemented",
             "parents": [             "parents": [
                 "ShariXKnowledgeScenarios"                 "ShariXKnowledgeScenarios"
             ],             ],
-            "terms": []+            "terms": [ 
 +                "audience_developer", 
 +                "audience_integrator", 
 +                "audience_reviewer", 
 +                "audience_ai", 
 +                "product_sharix_open", 
 +                "material_scenario", 
 +                "topic_orders_creation", 
 +                "topic_orders_lifecycle", 
 +                "topic_api_contracts", 
 +                "order", 
 +                "ticket" 
 +            ], 
 +            "component": "dbsynce, tickets, webapp-base"
         },         },
         "source_evidence": [         "source_evidence": [
Строка 210: Строка 230:
             "format": "bpmn",             "format": "bpmn",
             "executable": false             "executable": false
 +        },
 +        "editorial_review": {
 +            "date": "2026-10-31",
 +            "scope": "rewrite",
 +            "batch": 3,
 +            "public_boundary": "Открытый код ShariX Open; детали закрытых компонентов и внутренние операции Platform — intrawiki."
 +        },
 +        "source_review_20261031": {
 +            "kind": "source_analysis_not_runtime_acceptance",
 +            "sources": [
 +                {
 +                    "repository": "sharix-open-backend",
 +                    "commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
 +                    "path": "lib/open_order_api.py",
 +                    "sha256": "8950a4169a352db3d250c9e08f6de7a4fa2a31985a247541411e20bd224ca2b6"
 +                },
 +                {
 +                    "repository": "sharix-open-backend",
 +                    "commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
 +                    "path": "lib/integration_ports.py",
 +                    "sha256": "d079ec56e6709b29d7755e47d2a88d423235fe8eb1bf7a92851ae25d74bf1066"
 +                },
 +                {
 +                    "repository": "sharix-open-backend",
 +                    "commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
 +                    "path": "lib/ticket_gen.py",
 +                    "sha256": "7bdf92007916aec7e968a45f142e5f98fffb5dfe9b61ee7fcae3c65c826dfbde"
 +                },
 +                {
 +                    "repository": "sharix-open-backend",
 +                    "commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
 +                    "path": "lib/mobile_order_events.py",
 +                    "sha256": "818b21d471b629dcae3d96ee089e0f83406a41d03ad36a6c4ddabdf8857f2e68"
 +                },
 +                {
 +                    "repository": "sharix-open-backend",
 +                    "commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
 +                    "path": "apiviews/open_api.py",
 +                    "sha256": "cb8fdda304d29c2cc5c0fc938759a13c60022871b7b93d77883d521820021ad3"
 +                },
 +                {
 +                    "repository": "sharix-open-backend",
 +                    "commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
 +                    "path": "urls.py",
 +                    "sha256": "61ffd2f0563291da2dcc9488a5443cb5e2c0395108740a6700034cfd90548158"
 +                },
 +                {
 +                    "repository": "sharix-open-tickets",
 +                    "commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14",
 +                    "path": "signals.py",
 +                    "sha256": "39aad8690a2e7d35cebfb052127a8130a951cbb4eea316c4f767a0a59fc5fa7e"
 +                },
 +                {
 +                    "repository": "sharix-open-webapp-base",
 +                    "commit": "3e05f96d8fbae165c7b7f91d58048ff81c866be4",
 +                    "path": "core/urls.py",
 +                    "sha256": "5997b9600b4ef8be878201d83923edc961e881cac2c0245c7486f64d4e35e7e1"
 +                },
 +                {
 +                    "repository": "sharix-open-webapp-base",
 +                    "commit": "3e05f96d8fbae165c7b7f91d58048ff81c866be4",
 +                    "path": "sharix_admin/views/order.py",
 +                    "sha256": "fbcea84695251502a6f44e92966d59840db1c43f50a15e33a5adecc5deb420df"
 +                }
 +            ]
 +        },
 +        "list_format_review": {
 +            "date": "2026-10-31",
 +            "scope": "Перечисления полей, результатов и проверок оформлены списками; исходники, команды, таблицы, схемы и лицензионные границы сохранены."
 +        },
 +        "classification": {
 +            "schema": "sharix.knowledge.classification.v1",
 +            "products": [
 +                "sharix_open"
 +            ],
 +            "audiences": [
 +                "developer",
 +                "integrator",
 +                "reviewer",
 +                "ai"
 +            ],
 +            "material": "scenario",
 +            "topics": [
 +                "orders/creation",
 +                "orders/lifecycle",
 +                "api/contracts"
 +            ],
 +            "tag_terms": [
 +                "audience_developer",
 +                "audience_integrator",
 +                "audience_reviewer",
 +                "audience_ai",
 +                "product_sharix_open",
 +                "material_scenario",
 +                "topic_orders_creation",
 +                "topic_orders_lifecycle",
 +                "topic_api_contracts",
 +                "order",
 +                "ticket"
 +            ],
 +            "registry_document": "ShariXKnowledgeClassification",
 +            "state_meaning": "lifecycle относится к описываемому коду, а status к редакции документа; implemented не означает успешный runtime тест"
 +        },
 +        "classification_review": {
 +            "date": "2026-10-31",
 +            "source": "Содержание текущей страницы и проверенный словарь классификации",
 +            "body_scope": "classification_and_navigation_only"
         }         }
     },     },
-    "content_sha256": "31bc5b1d953afd6c5e934d5d69748cda34b92214aafa788f88f76122d4de20e2",+    "content_sha256": "d2e3d6cdb8c4b1d761756ae13e67c51bbb8c0556241ca1fd91293abb7df6deb4",
     "schema": 1     "schema": 1
 } }
Строка 219: Строка 346:
 ~~NOCACHE~~ ~~NOCACHE~~
  
-**Область:** ShariX Open, проверенный API-путь. **Основание:** опубликованные backend/tickets/webapp исходники от 29.10.2026. Фактический серверный сценарий этим source-анализом не выполнен.+**Назначение:** [[sharixopen:knowledge:classification:materials#scenarij_processa|Сценарий процесса]]. **Продукт:** [[sharixopen:knowledge:classification:products#sharix_open|ShariX Open]]. 
 + 
 +**Для кого:** [[sharixopen:knowledge:classification:audiences#razrabotchik|Разработчик]] · [[sharixopen:knowledge:classification:audiences#integrator|Интегратор]] · [[sharixopen:knowledge:classification:audiences#recenzent_i_prijomschik|Рецензент и приёмщик]] · [[sharixopen:knowledge:classification:audiences#nejroset|Нейросеть]]. 
 + 
 +**Темы:** [[sharixopen:knowledge:classification:topics#sozdanie_i_chernovik|Заказы → Создание и черновик]] · [[sharixopen:knowledge:classification:topics#zhiznennyj_cikl|Заказы → Жизненный цикл]] · [[sharixopen:knowledge:classification:topics#kontrakty|API → Контракты]]. 
 + 
 + 
 + 
 +Сценарий описывает POST /dbsynce/api/v1/orders/ в ShariX Open: от получения запроса до сохранённого заказа, HTTP-ответа и событий после commit. Это описание проверенного исходного кода, а не отчёт о выполнении запроса на рабочем сервере. 
 + 
 +===== Где находится операция ===== 
 +Корневой core/urls.py подключает dbsynce.urls по префиксу dbsynce/. При включённом DBSYNCE_OPEN_API_ENABLED регистрируются маршруты apiviews/open_api.py. POST принимает OpenOrderListCreateAPIView, создание выполняет lib/open_order_api.py:create_order_from_payload. 
 + 
 +OpenAPIBaseView использует IsAuthenticated | HasAPIKey. Но предметная операция получает request.user и проверяет участников и доступные объекты. Пропуск по API key не означает, что вместо actor можно передать произвольного пользователя или создать заказ от любой организации. Для интеграции сначала определяют поддержанный контекст пользователя и предметные права. 
 + 
 +Для проверки нужен предназначенный тестовый контекст: доступный тариф, компания/предложение, пользователь с подходящим основанием и допустимые данные получателя. Не подбирать чужие ID ради прохождения валидации. 
 + 
 +===== Что выбрать до отправки ===== 
 +^ Условие ^ Поведение текущей операции ^ 
 +| creation_mode=draft | Создать черновик с начальным Ticket TEMPLATE. | 
 +| creation_mode=place | Разместить заказ с начальным Ticket BOOKED; затем возможно действие назначения. | 
 +| Режим отсутствует | normalize_order_creation_mode выбирает place. Не считать отсутствующее поле командой сохранения черновика. | 
 +| Категория subscription | Операция принудительно выбирает place. | 
 +| self_order=true | Проверяются доступность self-order и предложение исполнителя текущего пользователя. Одновременный корпоративный заказ отклоняется. |
  
-===== Участники и предусловия ===== +Получатель услуги может отличаться от создателя. Операция отдельно получает receiver и его снимок receiver_name/receiver_phone. Состав обязательных полей зависит от выбранного предложения и его правил; произвольный универсальный payload не заменяет доступные клиенту options.
-Интегратор или клиент вызывает POST ''/dbsynce/api/v1/orders/'' установленной сборки ShariX Open. Маршрут создаётся в root ''core/urls.py'' → ''dbsynce.urls'' → ''apiviews/open_api.py'' при включённом ''DBSYNCE_OPEN_API_ENABLED''. Не переносить этот endpoint автоматически на Platform.+
  
-''OpenAPIBaseView'' допускает authenticated user либо ''HasAPIKey''. Но создание использует ''request.user'' и предметные проверки заказчика/объектов: API key не является универсальной заменой actor. Инициатор должен иметь разрешённые основание заказа, тариф и связанные сущности. Self-order и корпоративный заказ имеют разные проверки; self-order нельзя одновременно оформить от организации.+===== Сохранение в одной транзакции ===== 
 +  - Нормализуются режим и self-order, выбираются доступные связанные объекты. Проверяются корпоративный контекст, получатель, время, длительность, количество и маршрут. 
 +  - Создаётся Orders. pk назначает БД; приложение не вычисляет его как максимальный ID плюс один. 
 +  - create_ticket_order создаёт SERVICE_REQUEST Ticket. Заказ сохраняет ссылку ticket_status и связанные вычисленные значения. 
 +  - Вызывается initialize_order_execution через backend-порт. Если runtime или политика не настроены, этапов может не быть; вызов сам по себе не доказывает создания плана. 
 +  - Если режим place и указан provider, выполняется ACTION_ASSIGN_CREATED. Неуспешный результат добавляется в warnings. Созданный заказ при этом может остаться сохранённым. 
 +  - Планируется мобильное событие order.created или order.placed. Сетевые callbacks, запланированные через on_commit, относятся к следующей границе.
  
-===== Последовательность операции ===== +create_order_from_payload помечена transaction.atomic. Исключение внутри неё до commit отменяет её записи. Неуспешный результат назначения, обработанный как warning, не равен такому исключению.
-  - ''create_order_from_payload'' внутри ''transaction.atomic'' нормализует режим ''draft/place'', self-order и доступные сущности. Проверяет заказчика, получателя/его снимок, время, количество, длительность и маршрут. Отсутствующий тариф или недоступное сочетание не обходят подбором произвольного ID. +
-  - Создаётся Orders. Сохранённый ''order.pk'' назначает БД; чтение последней строки для вычисления нового ID не используется. +
-  - Создаётся SERVICE_REQUEST Ticket: ''draft → TEMPLATE'', ''place → BOOKED''. Subscription-category принудительно создаётся как ''place''; её entitlement нельзя отложить до произвольного будущего размещения. +
-  - Ticket связывается с заказом; вызывается ''initialize_order_execution'' через зарегистрированный integration port. Наличие этого вызова не доказывает одинаковый набор Stage у всех сервисов. +
-  - При ''place'' и заданном исполнителе вызывается ''ACTION_ASSIGN_CREATED''. Отказ назначения добавляет предупреждение, а не обязательно отменяет созданный заказ. В частности, конфликт занятого исполнителя или незавершённые требования отличают запись заказа от успешного назначения. +
-  - Внутри операции планируются события; после commit выполняются callbacks. Ticket wakeup — ''ticket.changed'', а при каноническом переходе прежний owner получает ''ticket.moved''. ''schedule_order_mobile_event'' перечитывает сохранённый заказ и предпринимает доставку мобильного события; транспортный отказ не равен откату уже committed заказа. +
-  - HTTP view получает snapshot по ''order.pk'' и возвращает ''201'', ''success'', ''message'', ''warnings'' и ''order''. Проверяется содержимое warnings и фактическое состояние, а не один код ответа.+
  
 ===== BPMN: границы транзакции и ответа ===== ===== BPMN: границы транзакции и ответа =====
-Описательная схема ''isExecutable=false''. Свёрнутый task создания раскрыт шагами выше; схема не является runtime-кодом и не заменяет Blockly алгоритмы последующих обработчиков.+Описательная схема isExecutable=false. Она показывает проверенный API-путь и отдельно события после commit. Схема не исполняет заказ и не заменяет Blockly последующих обработчиков.
 <sharix-bpmn> <sharix-bpmn>
 <?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
Строка 369: Строка 517:
 </sharix-bpmn> </sharix-bpmn>
  
-===== Отказы и повтор ===== +===== Что означает ответ ===== 
-Django ''ValidationError'' преобразуется view в ''400'', ''PermissionDenied'' — в ''403''. Исключение внутри atomic до commit отменяет её записи. Но callback после commit — другая граница: данные уже сохранены. Не объявлять атомарность БД гарантией exactly-once доставки сети или rollback внешних систем.+После возврата из операции view получает snapshot по созданному order.pk и формирует ответ: 
 + 
 +  * HTTP-код ''201''; 
 +  * поле ''success''; 
 +  * поле ''message''; 
 +  * поле ''warnings''; 
 +  * поле ''order''. 
 + 
 +Нужно сохранить ID возвращённого заказа и прочитать warnings: success=true означает успех создания, а не безусловный успех назначения и всех внешних доставок. 
 + 
 +**Пример трактовки:** если заказ создан, но предложение исполнителя не удалось назначить, клиент показывает созданный заказ и причину из warnings. Он не должен отправлять ещё один POST только ради повторной попытки назначения: это уже другое действие над существующим заказом. 
 + 
 +Получение snapshot и сериализация ответа выполняются после возврата из функции создания. Поэтому ошибка подготовки HTTP-ответа также не доказывает, что заказ не был сохранён. Эту границу учитывают при восстановлении после таймаута/ошибки. 
 + 
 +===== События после commit ===== 
 +Ticket-сигналы планируют ticket.changed; при каноническом переходе предыдущему обработчику также передаётся ticket.moved. Обработчик получает сигнал и сверяет сохранённое состояние. schedule_order_mobile_event предпринимает доставку мобильного события после commit. 
 + 
 +Атомарность БД не гарантирует однократную доставку сети. Если данные уже committed, транспортная ошибка не откатывает их автоматически. Отдельно подтверждают: 
 + 
 +  * создание заказа; 
 +  * доставку XMPP; 
 +  * получение уведомления мобильным клиентом. 
 + 
 +Это три отдельных свидетельства. 
 + 
 +===== Отказы и неизвестный результат ===== 
 +^ Ситуация ^ Что зафиксировано в коде / что делать ^ 
 +| PermissionDenied из создания | View возвращает 403 с success=false и message. | 
 +| Django ValidationError из создания | View возвращает 400 с success=false и errors. | 
 +| Неизвестный creation_mode | Нормализация бросает ValueError; эта view явно его не перехватывает. Нельзя обещать готовый ответ 400 — это известное ограничение. | 
 +| Таймаут, обрыв или ошибка после сохранения | Сначала установить, создан ли заказ. Повтор POST может создать ещё один. | 
 + 
 +В изученном клиентском POST не найден отдельный контракт idempotency key. Сначала проверить доступный пользователю список/историю и контекст операции; если исход нельзя установить однозначно — передать его на разбор. Последний ID в общей таблице не является доказательством результата именно этого запроса.
  
-Неизвестный ''creation_mode'' вызывает ''ValueError'', который эта view явно не ловит. Это зафиксированное ограничение, а не готовый исправленный ответ 400. Серверные ошибки также не следует описывать как обязательный отказ валидации.+===== HTML-форма проверяется отдельно ===== 
 +sharix_admin.views.order.OrderCreateView.form_valid собирает заказ через OrderForm и собственный atomic-блок. Она использует общие ticket/action/execution primitives, но не вызывает целиком create_order_from_payload; у неё есть дополнительные шаги подписки и расширений.
  
-Если клиент не получил ответ на POST, повторная отправка может создать второй заказ: в изученной операции не найден отдельный контракт client idempotency key. Сначала установить результат по доступным записям/истории и контексту запроса. Нельзя вычислить успех по максимальному ID или отправить создание ещё раз только из-за таймаута.+Форма отдельно перехватывает неизвестный способ сохранения и возвращает ошибку формы. Это не исправляет API-ветку ValueError. При изменении общего правила нужно проверить оба входа, а не считать успешный API доказательством правильности формы.
  
-===== HTML-форма — отдельный путь ===== +===== Как принять изменение этой операции ===== 
-''sharix_admin.views.order.OrderCreateView.form_valid'' не вызывает целиком ''create_order_from_payload'': она собирает модель через OrderForm и выполняет собственный atomic блок, используя общие ticket/action/execution primitives. У неё есть дополнительные subscription/extension шаги. Поэтому изменение только API не доказывает исправление формы, и наоборот. Согласованность этих путей проверяют отдельными сценариями; не переписывают документацию так, будто общей orchestration уже достаточно.+На предназначенной установке проверить:
  
-===== Проверка при изменении ===== +  * режимы draft и place; 
-На предназначенной тестовой установке проверить допустимое создание и доступность snapshot; ''draft'' и ''place''; запрет чужих объектов/корпоративного контекста; self-order; отказ назначения с сохранением заказа и предупреждением; rollback при ошибке execution; событие только после commit. HTTP-ошибки проверить отдельно, включая неизвестный mode. Для HTML повторить затронутый form-сценарий. Чтение чужого заказа и запись зеркальных полей через local endpoint не должны становиться обходным путём; известное расхождение ''OrdersLocal/order_synced'' описано отдельно.+  * сохранённые Orders и Ticket; 
 +  * доступность заказа создавшему пользователю; 
 +  * отказ для недоступных объектов или организации; 
 +  * self-order; 
 +  * предупреждение при отказе назначения; 
 +  * отсутствие частичных записей при исключении до commit; 
 +  * доставку события после commit; 
 +  * неизвестный mode; 
 +  * затронутый HTML-путь.
  
-Эта матрица — порядок приёмки изменения, не отчёт о якобы выполненных здесь runtime-тестах.+Не повторять создание на рабочих данных для проверки потери ответа. Такой случай воспроизводят в изолированном тестовом контексте. Общие критерии — [[sharixopen:knowledge:development:acceptance|приёмка изменений]], структура данных — [[sharixopen:knowledge:domain:order_ticket|заказ и Ticket]], локальное API-расхождение — [[sharixopen:knowledge:modules:webservice_running|Webservice Running]].
  
-===== Связанные контракты ===== +Сценарий касается открытого API ShariX Open. Внутренние операции Platform и закрытых компонентов описываются в intrawiki; проверку shared-изменения другим продуктом передают его ответственному.
-  * [[sharixopen:knowledge:architecture:api_contracts|API и межмодульные контракты]]. +
-  * [[sharixopen:knowledge:domain:order_ticket|Order и Ticket: владельцы и идентификаторы]]. +
-  * [[sharixopen:knowledge:modules:webservice_running|Локальные расширения и известное расхождение API]]. +
-  * [[sharixopen:knowledge:development:human_ai_handoff|Передача изменения человеку]].+
  
-===== Проверенная исходная база: 29.10.2026 ===== +===== Исходники, сверенные 31.10.2026 ===== 
-Проверены опубликованные исходники указанных ревизий. Это source-анализ; он не подтверждает применённую версию, конфигурацию или успешный сценарий конкретного сервера. +Проверены опубликованные исходники указанных commits. Это анализ кода, а не подтверждение версии, данных или выполненного запроса на сервере. 
-  * [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/models/orders.py|sharix-open-backend: models/orders.py]] — 778a3280cee1. +  * [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/open_order_api.py|sharix-open-backend: lib/open_order_api.py]]. 
-  * [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/open_order_api.py|sharix-open-backend: lib/open_order_api.py]] — 778a3280cee1. +  * [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/integration_ports.py|sharix-open-backend: lib/integration_ports.py]]. 
-  * [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/ticket_gen.py|sharix-open-backend: lib/ticket_gen.py]] — 778a3280cee1. +  * [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/ticket_gen.py|sharix-open-backend: lib/ticket_gen.py]]. 
-  * [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/order_actions.py|sharix-open-backend: lib/order_actions.py]] — 778a3280cee1. +  * [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/mobile_order_events.py|sharix-open-backend: lib/mobile_order_events.py]]. 
-  * [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/order_permissions.py|sharix-open-backend: lib/order_permissions.py]] — 778a3280cee1. +  * [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/apiviews/open_api.py|sharix-open-backend: apiviews/open_api.py]]. 
-  * [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/mobile_order_events.py|sharix-open-backend: lib/mobile_order_events.py]] — 778a3280cee1. +  * [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/urls.py|sharix-open-backend: urls.py]]. 
-  * [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/integration_ports.py|sharix-open-backend: lib/integration_ports.py]] — 778a3280cee1. +  * [[https://git.sharix-app.org/ShariX_Open/sharix-open-tickets/src/commit/fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14/signals.py|sharix-open-tickets: signals.py]]. 
-  * [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/apiviews/open_api.py|sharix-open-backend: apiviews/open_api.py]] — 778a3280cee1. +  * [[https://git.sharix-app.org/ShariX_Open/sharix-open-webapp-base/src/commit/3e05f96d8fbae165c7b7f91d58048ff81c866be4/core/urls.py|sharix-open-webapp-base: core/urls.py]]. 
-  * [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/urls.py|sharix-open-backend: urls.py]] — 778a3280cee1. +  * [[https://git.sharix-app.org/ShariX_Open/sharix-open-webapp-base/src/commit/3e05f96d8fbae165c7b7f91d58048ff81c866be4/sharix_admin/views/order.py|sharix-open-webapp-base: sharix_admin/views/order.py]].
-  * [[https://git.sharix-app.org/ShariX_Open/sharix-open-webapp-base/src/commit/f65376cdb5a3ac68a55d04f4c19493137e5a290b/sharix_admin/views/order.py|sharix-open-webapp-base: sharix_admin/views/order.py]] — f65376cdb5a3. +
-  * [[https://git.sharix-app.org/ShariX_Open/sharix-open-webapp-base/src/commit/f65376cdb5a3ac68a55d04f4c19493137e5a290b/core/urls.py|sharix-open-webapp-base: core/urls.py]] — f65376cdb5a3. +
-  * [[https://git.sharix-app.org/ShariX_Open/sharix-open-tickets/src/commit/fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14/signals.py|sharix-open-tickets: signals.py]] — fd64704d7d9f.+
  
 ~~SHARIX_KNOWLEDGE_RELATED~~ ~~SHARIX_KNOWLEDGE_RELATED~~
  
sharixopen/knowledge/scenarios/order_create.1793262621.txt.gz · Последнее изменение: — sx_knowledge_api_open

© 2022 ShariX