|
|
| Строка 1: |
Строка 1: |
| − | === Web-server API ===
| |
| | | | |
| − | ==== Протокол ====
| |
| − |
| |
| − | =====HTTP-запрос к серверу=====
| |
| − |
| |
| − | Метод запроса:
| |
| − | GET <URI запроса> HTTP/1.1
| |
| − |
| |
| − | Header:
| |
| − | Content-Type: application/json; charset=utf-8
| |
| − |
| |
| − | Обязательный параметр GET-запроса:
| |
| − | token - ключ, ассоциированный с необходимым скриптом
| |
| − |
| |
| − | Передача объектов осуществляется в формате JSON.
| |
| − | формат даты
| |
| − |
| |
| − | =====HTTP-ответ сервера=====
| |
| − |
| |
| − | {"cl":"SyncHeader", "params":{"ключ":"значение", ...}}
| |
| − |
| |
| − |
| |
| − | RealmSyncObject {
| |
| − | String cl - required
| |
| − | <T extends RealmObject> obj - required
| |
| − | List<Link> master
| |
| − | List<Link> link
| |
| − | boolean deleted
| |
| − | }
| |
| − |
| |
| − | Link {
| |
| − | String cl - required
| |
| − | String uid - required
| |
| − | String field - required
| |
| − | }
| |
| − |
| |
| − |
| |
| − | Тайм-ауты на клиенте:
| |
| − | ConnectTimeout - 60с
| |
| − | ReadTimeout - 60с
| |
| − |
| |
| − | ==== Реализация протокола для данных GDMN-Salary ====
| |
| − |
| |
| − | =====Токены=====
| |
| − |
| |
| − | [AndroidSalary_RegisterHandler]
| |
| − |
| |
| − | gdmnSalarySetGCMRegId
| |
| − | gdmnSalarySignIn
| |
| − | gdmnSalarySync
| |
| − | gdmnSalarySyncMsg
| |
| − | gdmnSalarySendMsg
| |
| − | gdmnSalarySendMsgStates
| |
| − | gdmnSalaryGetNewInvite
| |
| − |
| |
| − | =====Параметры=====
| |
| − | Обязательные параметры:
| |
| − | ip_address
| |
| − | app_version_code
| |
| − | auth_key (для всех, кроме gdmnSalarySignIn)
| |
| − |
| |
| − | =====Синхронизация объектов=====
| |
| − |
| |
| − | Пример данных для EmployeeModel, PayslipModel и PayslipItemModel:
| |
| − | {cl:"EmployeeModel", obj:{uid:"123", ...}}
| |
| − | {cl:"PayslipModel", link:[{cl:"EmployeeModel", uid:"123", field:"employee"}], obj:{uid:"456", ...}}
| |
| − | {cl:"PayslipItemModel", master:[{cl:"PayslipModel", uid:"456", field:"items"}], obj:{...}}
| |
| − |
| |
| − | Пример данных для EmployeeModel, TimesheetModel, WorkscheduleModel и DayEventModel:
| |
| − | {cl:"EmployeeModel", obj:{uid:"123", ...}}
| |
| − | {cl:"TimesheetModel", link:[{cl:"EmployeeModel", uid:"123", field:"employee"}], obj:{uid:"456", ...}}
| |
| − | {cl:"WorkscheduleModel", link:[{cl:"EmployeeModel", uid:"123", field:"employee"}], obj:{uid:"789", ...}}
| |
| − | {cl:"DayEventModel", master:[{cl:"TimesheetModel", uid:"456", field:"events"}, {cl:"WorkscheduleModel", uid:"789", field:"events"}], obj:{...}}
| |
| − |
| |
| − | Пример удаления записи:
| |
| − | {cl:"EmployeeModel", delete:"true", obj:{uid:"123"}}
| |
| − |
| |
| − | === Классы, хранящиеся в клиентской БД ===
| |
| − | Указаны лишь те поля, которые связаны с БД
| |
| − |
| |
| − | ===='''DayEventModel''' - событие дня в расписании или табеле====
| |
| − | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;"
| |
| − | !style="background:#ffdead;"| Наименование
| |
| − | !style="background:#ffdead;"| Тип данных
| |
| − | !style="background:#ffdead;"| Описание
| |
| − | |- align="center"
| |
| − | | uid
| |
| − | | int
| |
| − | | PK
| |
| − | |- align="center"
| |
| − | | eventTypeIndex
| |
| − | | int
| |
| − | | Тип события дня [DayEventModel.EventType]
| |
| − | |- align="center"
| |
| − | | timeBegin
| |
| − | | Date
| |
| − | | Время начала
| |
| − | |- align="center"
| |
| − | | timeEnd
| |
| − | | Date
| |
| − | | Время окончания
| |
| − | |- align="center"
| |
| − | | hours
| |
| − | | double
| |
| − | | Продолжительность, часов
| |
| − | |- align="center"
| |
| − | | description
| |
| − | | String
| |
| − | | Описание
| |
| − | |- align="center"
| |
| − | | isAllDay
| |
| − | | boolean
| |
| − | | Продолжительность: весь день
| |
| − | |}
| |
| − |
| |
| − | ===='''DeviceInfoModel''' - информация об устройстве====
| |
| − | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;"
| |
| − | !style="background:#ffdead;"| Наименование
| |
| − | !style="background:#ffdead;"| Тип данных
| |
| − | !style="background:#ffdead;"| Описание
| |
| − | |- align="center"
| |
| − | | uid
| |
| − | | int
| |
| − | | PK
| |
| − | |- align="center"
| |
| − | | phoneNumber
| |
| − | | String
| |
| − | | MSISDN
| |
| − | |- align="center"
| |
| − | | deviceId
| |
| − | | String
| |
| − | | Уникальный идентификатор устройства [IMEI for GSM, MEI for GSM, MEID/ESN for CDMA phones, else: android_id]
| |
| − | |- align="center"
| |
| − | | deviceModel
| |
| − | | String
| |
| − | | Модель устройства
| |
| − | |}
| |
| − |
| |
| − | ===='''EmployeeModel''' - сотрудник====
| |
| − | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;"
| |
| − | !style="background:#ffdead;"| Наименование
| |
| − | !style="background:#ffdead;"| Тип данных
| |
| − | !style="background:#ffdead;"| Описание
| |
| − | |- align="center"
| |
| − | | uid
| |
| − | | int
| |
| − | | PK
| |
| − | |- align="center"
| |
| − | | firstname
| |
| − | | String
| |
| − | | Имя
| |
| − | |- align="center"
| |
| − | | surname
| |
| − | | String
| |
| − | | Фамилия
| |
| − | |- align="center"
| |
| − | | middlename
| |
| − | | String
| |
| − | | Отчество
| |
| − | |- align="center"
| |
| − | | passportId
| |
| − | | String
| |
| − | | ID паспорта
| |
| − | |- align="center"
| |
| − | | listNumber
| |
| − | | String
| |
| − | | Табельный номер
| |
| − | |}
| |
| − |
| |
| − | ===='''ExRatesMonthlyModel''' - курс валют====
| |
| − | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;"
| |
| − | !style="background:#ffdead;"| Наименование
| |
| − | !style="background:#ffdead;"| Тип данных
| |
| − | !style="background:#ffdead;"| Описание
| |
| − | |- align="center"
| |
| − | | uid
| |
| − | | int
| |
| − | | PK
| |
| − | |- align="center"
| |
| − | | onDate
| |
| − | | Date
| |
| − | | Дата
| |
| − | |- align="center"
| |
| − | | usdRate
| |
| − | | double
| |
| − | | Курс доллара
| |
| − | |- align="center"
| |
| − | | eurRate
| |
| − | | double
| |
| − | | Курс евро
| |
| − | |}
| |
| − |
| |
| − | ===='''GdMsgAbsenceModel''' - заявка о неявке на работу====
| |
| − | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;"
| |
| − | !style="background:#ffdead;"| Наименование
| |
| − | !style="background:#ffdead;"| Тип данных
| |
| − | !style="background:#ffdead;"| Описание
| |
| − | |- align="center"
| |
| − | | uid
| |
| − | | int
| |
| − | | PK
| |
| − | |- align="center"
| |
| − | | typeIndex
| |
| − | | int
| |
| − | | Тип неявки [GdMsgAbsenceModel.Type]
| |
| − | |- align="center"
| |
| − | | dateBegin
| |
| − | | Date
| |
| − | | Дата начала
| |
| − | |- align="center"
| |
| − | | dateEnd
| |
| − | | Date
| |
| − | | Дата окончания
| |
| − | |- align="center"
| |
| − | | requestGdMsgModel
| |
| − | | GdMsgModel
| |
| − | | Cообщение, на которое ответ (для серверных сообщений)
| |
| − | |}
| |
| − |
| |
| − | ===='''GdMsgIncomeModel''' - заявка о справке о доходах====
| |
| − | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;"
| |
| − | !style="background:#ffdead;"| Наименование
| |
| − | !style="background:#ffdead;"| Тип данных
| |
| − | !style="background:#ffdead;"| Описание
| |
| − | |- align="center"
| |
| − | | uid
| |
| − | | int
| |
| − | | PK
| |
| − | |- align="center"
| |
| − | | dateBegin
| |
| − | | Date
| |
| − | | Дата начала
| |
| − | |- align="center"
| |
| − | | dateEnd
| |
| − | | Date
| |
| − | | Дата окончания
| |
| − | |- align="center"
| |
| − | | requestGdMsgModel
| |
| − | | GdMsgModel
| |
| − | | Cообщение, на которое ответ (для серверных сообщений)
| |
| − | |}
| |
| − |
| |
| − | ===='''GdMsgInfoModel''' - информационное сообщение====
| |
| − | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;"
| |
| − | !style="background:#ffdead;"| Наименование
| |
| − | !style="background:#ffdead;"| Тип данных
| |
| − | !style="background:#ffdead;"| Описание
| |
| − | |- align="center"
| |
| − | | uid
| |
| − | | int
| |
| − | | PK
| |
| − | |- align="center"
| |
| − | | requestGdMsgModel
| |
| − | | GdMsgModel
| |
| − | | Cообщение, на которое ответ (для серверных сообщений)
| |
| − | |}
| |
| − |
| |
| − | ===='''GdMsgModel''' - сообщение====
| |
| − | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;"
| |
| − | !style="background:#ffdead;"| Наименование
| |
| − | !style="background:#ffdead;"| Тип данных
| |
| − | !style="background:#ffdead;"| Описание
| |
| − | |- align="center"
| |
| − | | uid
| |
| − | | int
| |
| − | | PK
| |
| − | |- align="center"
| |
| − | | requestStatusIndex
| |
| − | | int
| |
| − | | Статус запроса [GdMsgModel.RequestStatus]
| |
| − | |- align="center"
| |
| − | | subjectIndex
| |
| − | | int
| |
| − | | Тема запроса [GdMsgModel.Subject]
| |
| − | |- align="center"
| |
| − | | senderIndex
| |
| − | | int
| |
| − | | Тип отправителя [GdMsgModel.Sender]
| |
| − | |- align="center"
| |
| − | | isUnread
| |
| − | | boolean
| |
| − | | Прочитано
| |
| − | |- align="center"
| |
| − | | timestamp
| |
| − | | Date
| |
| − | | Дата создания
| |
| − | |- align="center"
| |
| − | | msg
| |
| − | | String
| |
| − | |
| |
| − | |- align="center"
| |
| − | | comment
| |
| − | | String
| |
| − | | Комментарий
| |
| − | |- align="center"
| |
| − | | gdMsgString
| |
| − | | String
| |
| − | | Строковое представление данных сообщения (для поиска по ним)
| |
| − | |- align="center"
| |
| − | | gdMsgAbsenceModel
| |
| − | | GdMsgAbsenceModel
| |
| − | | Заявка: неявка на работу
| |
| − | |- align="center"
| |
| − | | gdMsgIncomeModel
| |
| − | | GdMsgIncomeModel
| |
| − | | Заявка: справка о доходах
| |
| − | |- align="center"
| |
| − | | gdMsgVacationModel
| |
| − | | GdMsgVacationModel
| |
| − | | Заявка: отпуск
| |
| − | |- align="center"
| |
| − | | gdMsgInfoModel
| |
| − | | GdMsgInfoModel
| |
| − | | Информационное сообщение
| |
| − | |- align="center"
| |
| − | | gdMsgVacationInfoModel
| |
| − | | GdMsgVacationInfoModel
| |
| − | | Заявка: информация о ближайшем отпуске
| |
| − | |}
| |
| − |
| |
| − | ===='''GdMsgVacationInfoModel''' - заявка о информации на ближайший отпуск====
| |
| − | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;"
| |
| − | !style="background:#ffdead;"| Наименование
| |
| − | !style="background:#ffdead;"| Тип данных
| |
| − | !style="background:#ffdead;"| Описание
| |
| − | |- align="center"
| |
| − | | uid
| |
| − | | int
| |
| − | | PK
| |
| − | |- align="center"
| |
| − | | dateBegin
| |
| − | | Date
| |
| − | | Дата начала
| |
| − | |- align="center"
| |
| − | | dateEnd
| |
| − | | Date
| |
| − | | Дата окончания
| |
| − | |- align="center"
| |
| − | | requestGdMsgModel
| |
| − | | GdMsgModel
| |
| − | | Cообщение, на которое ответ (для серверных сообщений)
| |
| − | |}
| |
| − |
| |
| − | ===='''GdMsgVacationModel''' - заявка об отпуске====
| |
| − | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;"
| |
| − | !style="background:#ffdead;"| Наименование
| |
| − | !style="background:#ffdead;"| Тип данных
| |
| − | !style="background:#ffdead;"| Описание
| |
| − | |- align="center"
| |
| − | | uid
| |
| − | | int
| |
| − | | PK
| |
| − | |- align="center"
| |
| − | | typeIndex
| |
| − | | int
| |
| − | | Тип отпуска [GdMsgVacationModel.Type]
| |
| − | |- align="center"
| |
| − | | dateBegin
| |
| − | | Date
| |
| − | | Дата начала
| |
| − | |- align="center"
| |
| − | | dateEnd
| |
| − | | Date
| |
| − | | Дата окончания
| |
| − | |- align="center"
| |
| − | | requestGdMsgModel
| |
| − | | GdMsgModel
| |
| − | | Cообщение, на которое ответ (для серверных сообщений)
| |
| − | |}
| |
| − |
| |
| − | ===='''PayslipBenefitModel''' - льгота расчетного литка====
| |
| − | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;"
| |
| − | !style="background:#ffdead;"| Наименование
| |
| − | !style="background:#ffdead;"| Тип данных
| |
| − | !style="background:#ffdead;"| Описание
| |
| − | |- align="center"
| |
| − | | uid
| |
| − | | int
| |
| − | | PK
| |
| − | |- align="center"
| |
| − | | date
| |
| − | | Date
| |
| − | | Дата
| |
| − | |- align="center"
| |
| − | | name
| |
| − | | String
| |
| − | | Наименование
| |
| − | |- align="center"
| |
| − | | sum
| |
| − | | double
| |
| − | | Сумма
| |
| − | |- align="center"
| |
| − | | code
| |
| − | | int
| |
| − | | Код льготы
| |
| − | |}
| |
| − |
| |
| − | ===='''PayslipDeductionModel''' - вычет расчетного листка====
| |
| − | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;"
| |
| − | !style="background:#ffdead;"| Наименование
| |
| − | !style="background:#ffdead;"| Тип данных
| |
| − | !style="background:#ffdead;"| Описание
| |
| − | |- align="center"
| |
| − | | uid
| |
| − | | int
| |
| − | | PK
| |
| − | |- align="center"
| |
| − | | date
| |
| − | | Date
| |
| − | | Дата
| |
| − | |- align="center"
| |
| − | | name
| |
| − | | String
| |
| − | | Наименование
| |
| − | |- align="center"
| |
| − | | deductionKind
| |
| − | | String
| |
| − | | Вид вычета
| |
| − | |- align="center"
| |
| − | | sum
| |
| − | | double
| |
| − | | Сумма
| |
| − | |- align="center"
| |
| − | | code
| |
| − | | int
| |
| − | | Код вычета
| |
| − | |}
| |
| − |
| |
| − | ===='''PayslipItemModel''' - позиция расчетного листка (начисление/удержание/налог/аванс)====
| |
| − | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;"
| |
| − | !style="background:#ffdead;"| Наименование
| |
| − | !style="background:#ffdead;"| Тип данных
| |
| − | !style="background:#ffdead;"| Описание
| |
| − | |- align="center"
| |
| − | | uid
| |
| − | | int
| |
| − | | PK
| |
| − | |- align="center"
| |
| − | | categoryIndex
| |
| − | | int
| |
| − | | Тип категории [PayslipItemModel.Category]
| |
| − | |- align="center"
| |
| − | | date
| |
| − | | Date
| |
| − | | Дата
| |
| − | |- align="center"
| |
| − | | name
| |
| − | | String
| |
| − | | Наименование
| |
| − | |- align="center"
| |
| − | | code
| |
| − | | int
| |
| − | | Код
| |
| − | |- align="center"
| |
| − | | debit
| |
| − | | double
| |
| − | | Сумма дебета
| |
| − | |- align="center"
| |
| − | | credit
| |
| − | | double
| |
| − | | Сумма кредита
| |
| − | |}
| |
| − |
| |
| − | ===='''PayslipModel''' - расчетный листок за месяц====
| |
| − | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;"
| |
| − | !style="background:#ffdead;"| Наименование
| |
| − | !style="background:#ffdead;"| Тип данных
| |
| − | !style="background:#ffdead;"| Описание
| |
| − | |- align="center"
| |
| − | | uid
| |
| − | | int
| |
| − | | PK
| |
| − | |- align="center"
| |
| − | | payDate
| |
| − | | Date
| |
| − | | Дата окончания периода
| |
| − | |- align="center"
| |
| − | | employee
| |
| − | | EmployeeModel
| |
| − | | Сотрудник
| |
| − | |- align="center"
| |
| − | | department
| |
| − | | String
| |
| − | | Участок
| |
| − | |- align="center"
| |
| − | | isFinal
| |
| − | | boolean
| |
| − | | Окончательный
| |
| − | |- align="center"
| |
| − | | position
| |
| − | | String
| |
| − | | Должность
| |
| − | |- align="center"
| |
| − | | salary
| |
| − | | double
| |
| − | | Сумма оклада
| |
| − | |- align="center"
| |
| − | | hourRate
| |
| − | | double
| |
| − | | Сумма почасовой тарифной ставки
| |
| − | |- align="center"
| |
| − | | dependents
| |
| − | | int
| |
| − | | Количество иждивенцев
| |
| − | |- align="center"
| |
| − | | items
| |
| − | | RealmList<PayslipItemModel>
| |
| − | | Список позиций листка (начисления, удержания, налоги, авансы)
| |
| − | |- align="center"
| |
| − | | benefits
| |
| − | | RealmList<PayslipBenefitModel>
| |
| − | | Список льгот
| |
| − | |- align="center"
| |
| − | | deductions
| |
| − | | RealmList<PayslipDeductionModel>
| |
| − | | Список Вычетов
| |
| − | |}
| |
| − |
| |
| − | ===='''SyncGdMsgStateModel''' - состояние сообщения====
| |
| − | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;"
| |
| − | !style="background:#ffdead;"| Наименование
| |
| − | !style="background:#ffdead;"| Тип данных
| |
| − | !style="background:#ffdead;"| Описание
| |
| − | |- align="center"
| |
| − | | uid
| |
| − | | String
| |
| − | | PK
| |
| − | |- align="center"
| |
| − | | statusIndex
| |
| − | | int
| |
| − | | Тип состояния [SyncGdMsgStateModel.UpdatedStatus]
| |
| − | |- align="center"
| |
| − | | gdMsgKey
| |
| − | | int
| |
| − | | GdMsg.uid сообщения
| |
| − | |}
| |
| − |
| |
| − | ===='''SyncMetaDataModel''' - мета-данные для синхронизации====
| |
| − | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;"
| |
| − | !style="background:#ffdead;"| Наименование
| |
| − | !style="background:#ffdead;"| Тип данных
| |
| − | !style="background:#ffdead;"| Описание
| |
| − | |- align="center"
| |
| − | | uid
| |
| − | | int
| |
| − | | PK
| |
| − | |- align="center"
| |
| − | | scheme
| |
| − | | String
| |
| − | | Схема веб-протокола
| |
| − | |- align="center"
| |
| − | | addressServer
| |
| − | | String
| |
| − | | Адрес
| |
| − | |- align="center"
| |
| − | | authKey
| |
| − | | String
| |
| − | | Авторизационный ID
| |
| − | |- align="center"
| |
| − | | lastSyncDate
| |
| − | | String
| |
| − | | Дата последней синхронизации
| |
| − | |- align="center"
| |
| − | | lastSyncMsgDate
| |
| − | | String
| |
| − | | Дата последней синхронизации сообщений
| |
| − | |- align="center"
| |
| − | | gcmRegistrationId
| |
| − | | String
| |
| − | | ID девайса в Google Cloud Messaging
| |
| − | |- align="center"
| |
| − | | inviteCode
| |
| − | | String
| |
| − | | Инвайт-код
| |
| − | |- align="center"
| |
| − | | permits
| |
| − | | boolean
| |
| − | | Наличие права доступа к данным
| |
| − | |- align="center"
| |
| − | | lostMode
| |
| − | | boolean
| |
| − | | Режим потерянного девайса
| |
| − | |}
| |
| − |
| |
| − | ===='''TimesheetModel''' - табель рабочего времени за день====
| |
| − | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;"
| |
| − | !style="background:#ffdead;"| Наименование
| |
| − | !style="background:#ffdead;"| Тип данных
| |
| − | !style="background:#ffdead;"| Описание
| |
| − | |- align="center"
| |
| − | | uid
| |
| − | | int
| |
| − | | PK
| |
| − | |- align="center"
| |
| − | | dayTypeIndex
| |
| − | | int
| |
| − | | Тип дня [DayType]
| |
| − | |- align="center"
| |
| − | | employee
| |
| − | | EmployeeModel
| |
| − | | Сотрудник
| |
| − | |- align="center"
| |
| − | | description
| |
| − | | String
| |
| − | | Описание
| |
| − | |- align="center"
| |
| − | | hours
| |
| − | | double
| |
| − | | Продолжительность, часов
| |
| − | |- align="center"
| |
| − | | date
| |
| − | | Date
| |
| − | | Дата
| |
| − | |- align="center"
| |
| − | | events
| |
| − | | RealmList<DayEventModel>
| |
| − | | Список событий
| |
| − | |}
| |
| − |
| |
| − | ===='''WorkScheduleModel''' - рабочий график на день====
| |
| − | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;"
| |
| − | !style="background:#ffdead;"| Наименование
| |
| − | !style="background:#ffdead;"| Тип данных
| |
| − | !style="background:#ffdead;"| Описание
| |
| − | |- align="center"
| |
| − | | uid
| |
| − | | int
| |
| − | | PK
| |
| − | |- align="center"
| |
| − | | dayTypeIndex
| |
| − | | int
| |
| − | | Тип дня [DayType]
| |
| − | |- align="center"
| |
| − | | employee
| |
| − | | EmployeeModel
| |
| − | | Сотрудник
| |
| − | |- align="center"
| |
| − | | description
| |
| − | | String
| |
| − | | Описание
| |
| − | |- align="center"
| |
| − | | hours
| |
| − | | double
| |
| − | | Продолжительность, часов
| |
| − | |- align="center"
| |
| − | | date
| |
| − | | Date
| |
| − | | Дата
| |
| − | |- align="center"
| |
| − | | events
| |
| − | | RealmList<DayEventModel>
| |
| − | | Список событий
| |
| − | |}
| |
| − |
| |
| − | === Таблицы данных для приложения на сервере ===
| |
| − |
| |
| − |
| |
| − | [[Category:Документация]]
| |