Разработка:storages/orders

Материал из DOF
Перейти к: навигация, поиск
Плагин
Название 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 - сигнатура приказа (md5 от сериализованной 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() - изменить поле статус объекта в БД (для внутреннего пользования)

Пример использования