GDMN-Salary (Руководство разработчика)

Материал из GedeminWiki
(Различия между версиями)
Перейти к: навигация, поиск
(Web-server API)
(Полностью удалено содержимое страницы)
Строка 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:Документация]]
 

Версия 18:35, 21 августа 2017

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты