Разработка:storages/orders
Плагин | |
Название | orders |
Тип | storages |
Содержание
Принцип работы
Приказы - единоличные, законченные, единовременные распоряжения пользователей системы, на выполнение значимых действий с данными в системе. Реализуют протоколирование и исполнение как обычных приказов (приказ о зачислении, приказ о переводе), так и подразумеваемые приказы (выставление оценки, изменение статуса объекты). Не обязательно все действия в системе должны выполняться через приказы, однако нужно стремится реализовать как приказы все действия, которые необходимо протоколировать и для работы с которыми в будущем предполагается использовать цифровую подпись. При последующей реализации цифровой подписи, ею можно будет заверять только действия, оформленные в качестве приказов.
С программной точки зрения работа с приказами построена следующим образом:
- Плагин, "желающий" реализовать собственный приказ наследует родительский класс приказа (dof_storage_orders_baseorder), объявленный в справочнике "приказ". Базовый класс содержит методы для наполнения приказа данными, исполнения приказа, получение из БД данных о ранее исполненном приказе. В дочернем классе эти методы переопределяются, в соответствии с логикой работы данного приказа.
- Плагин, использующий приказы, должен реализовать метод order($code,$id=null), который возвращает объект нового или существующего приказа.
- В момент исполнения приказа, объект приказа должен запротоколировать все данные приказа любым способом (стандартный, но не обязательный, способ - запись сериализованного объекта вместе с остальной информацией о приказе) и выполнить действия, предполагаемые приказом.
- Справочник "приказы" содержит метод, для получения записанного в БД приказа, при этом на основании информации из БД инициализируется соотествующий объект, который загружает собственные данные любым способом.
Данные приказа представляют собой сложно-структурированный объект, элементами которого могут быть другие объекты и массивы. После исполнения приказа эти данные могут протоколироваться как в сериализованном виде, так и в реляционном, в виде составных частей записей в БД. Следует стремится к тому, чтобы формат этого объекта соответствовал формату входных данных для шаблона, отображающего приказ в виде документа ODF.
Данные приказа представляют собой объект (тип object) поля которого содержат либо скалярные значения, либо массивы объектов (списки). Формат объекта планируется совместимым с шаблонизатором Разработка:modlibs/templater, с тем, чтобы приказы можно было распечатывать без дополнительной обработки.
Таблица в базе данных
orders - список зарегистрированных и исполненных приказов, с информацией о плагине, реализующем объект приказа, исполнителе, дате исполнения, специальном поле для сериализованного объекта приказа.
Подробный формат полей в таблице:
- plugintype - тип плагина, в котором реализован приказ
- plugincode - код плагина, в котором реализован приказ
- code - код типа приказа (уникален внутри одного плагина)
- departmentid - id отдела, внутри которого издан приказ
- ownerid - id персоны, подготовившей приказ
- signerid - id персоны, подписавшей приказ
- date - дата приказа (которой он пройдет по документам)
- exdate - дата исполнения приказа в системе
- changedate - дата последнего изменения приказа
- status - статус приказа
- sdata - сериализованные данные приказа (если нужны)
- signature - сигнатура приказа (sha от ключевого слова из конфига, слитого с сериализованной data, signerid и date)
- notice - заметки
Дополнительные методы:
- Получить объект ранее запротоколированного приказа по id
API
dof_storage_orders_baseorder
Класс является базовым классом для типов приказов, объявляемых в плагинах. Дочерние классы должны именоваться по шаблону dof_типплагина_кодплагина_order_кодприказа.
- plugintype(),plugincode(),code() - получить идентификационную информацию о типе документа (должны быть объявлены в дочерних классах и возвращать строки).
- baseptype(), basepcode() - идентификация плагина storages/orders, если объекту понадобиться обратиться к справочнику orders.
- get_id() - получить id текущего объекта
- set_id() - установить id. Не может вызываться напрямую, только через методы save() и load()
- load($id,$withoutdata=true) - проверить наличие объекта совместимого типа в БД и сопоставиться с ним. Если требуется - вернуть содержимое объекта
- save(object $data) - сохранить данные приказа в БД
- execute() - исполнить текущий приказ и пометить его как исполненный
- change_status() - изменить поле статус объекта в БД (для внутреннего пользования)