GDMN-Salary (Руководство разработчика)
Материал из GedeminWiki
(Различия между версиями)
(Полностью удалено содержимое страницы) |
SYSDBA (обсуждение | вклад) (Отмена правки 7281, сделанной участником Marina K.S. (обс.)) |
||
| Строка 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:Документация]] | ||
Текущая версия на 20:27, 21 августа 2017
[править] 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 - событие дня в расписании или табеле
| Наименование | Тип данных | Описание |
|---|---|---|
| uid | int | PK |
| eventTypeIndex | int | Тип события дня [DayEventModel.EventType] |
| timeBegin | Date | Время начала |
| timeEnd | Date | Время окончания |
| hours | double | Продолжительность, часов |
| description | String | Описание |
| isAllDay | boolean | Продолжительность: весь день |
[править] DeviceInfoModel - информация об устройстве
| Наименование | Тип данных | Описание |
|---|---|---|
| uid | int | PK |
| phoneNumber | String | MSISDN |
| deviceId | String | Уникальный идентификатор устройства [IMEI for GSM, MEI for GSM, MEID/ESN for CDMA phones, else: android_id] |
| deviceModel | String | Модель устройства |
[править] EmployeeModel - сотрудник
| Наименование | Тип данных | Описание |
|---|---|---|
| uid | int | PK |
| firstname | String | Имя |
| surname | String | Фамилия |
| middlename | String | Отчество |
| passportId | String | ID паспорта |
| listNumber | String | Табельный номер |
[править] ExRatesMonthlyModel - курс валют
| Наименование | Тип данных | Описание |
|---|---|---|
| uid | int | PK |
| onDate | Date | Дата |
| usdRate | double | Курс доллара |
| eurRate | double | Курс евро |
[править] GdMsgAbsenceModel - заявка о неявке на работу
| Наименование | Тип данных | Описание |
|---|---|---|
| uid | int | PK |
| typeIndex | int | Тип неявки [GdMsgAbsenceModel.Type] |
| dateBegin | Date | Дата начала |
| dateEnd | Date | Дата окончания |
| requestGdMsgModel | GdMsgModel | Cообщение, на которое ответ (для серверных сообщений) |
[править] GdMsgIncomeModel - заявка о справке о доходах
| Наименование | Тип данных | Описание |
|---|---|---|
| uid | int | PK |
| dateBegin | Date | Дата начала |
| dateEnd | Date | Дата окончания |
| requestGdMsgModel | GdMsgModel | Cообщение, на которое ответ (для серверных сообщений) |
[править] GdMsgInfoModel - информационное сообщение
| Наименование | Тип данных | Описание |
|---|---|---|
| uid | int | PK |
| requestGdMsgModel | GdMsgModel | Cообщение, на которое ответ (для серверных сообщений) |
[править] GdMsgModel - сообщение
| Наименование | Тип данных | Описание |
|---|---|---|
| uid | int | PK |
| requestStatusIndex | int | Статус запроса [GdMsgModel.RequestStatus] |
| subjectIndex | int | Тема запроса [GdMsgModel.Subject] |
| senderIndex | int | Тип отправителя [GdMsgModel.Sender] |
| isUnread | boolean | Прочитано |
| timestamp | Date | Дата создания |
| msg | String | |
| comment | String | Комментарий |
| gdMsgString | String | Строковое представление данных сообщения (для поиска по ним) |
| gdMsgAbsenceModel | GdMsgAbsenceModel | Заявка: неявка на работу |
| gdMsgIncomeModel | GdMsgIncomeModel | Заявка: справка о доходах |
| gdMsgVacationModel | GdMsgVacationModel | Заявка: отпуск |
| gdMsgInfoModel | GdMsgInfoModel | Информационное сообщение |
| gdMsgVacationInfoModel | GdMsgVacationInfoModel | Заявка: информация о ближайшем отпуске |
[править] GdMsgVacationInfoModel - заявка о информации на ближайший отпуск
| Наименование | Тип данных | Описание |
|---|---|---|
| uid | int | PK |
| dateBegin | Date | Дата начала |
| dateEnd | Date | Дата окончания |
| requestGdMsgModel | GdMsgModel | Cообщение, на которое ответ (для серверных сообщений) |
[править] GdMsgVacationModel - заявка об отпуске
| Наименование | Тип данных | Описание |
|---|---|---|
| uid | int | PK |
| typeIndex | int | Тип отпуска [GdMsgVacationModel.Type] |
| dateBegin | Date | Дата начала |
| dateEnd | Date | Дата окончания |
| requestGdMsgModel | GdMsgModel | Cообщение, на которое ответ (для серверных сообщений) |
[править] PayslipBenefitModel - льгота расчетного литка
| Наименование | Тип данных | Описание |
|---|---|---|
| uid | int | PK |
| date | Date | Дата |
| name | String | Наименование |
| sum | double | Сумма |
| code | int | Код льготы |
[править] PayslipDeductionModel - вычет расчетного листка
| Наименование | Тип данных | Описание |
|---|---|---|
| uid | int | PK |
| date | Date | Дата |
| name | String | Наименование |
| deductionKind | String | Вид вычета |
| sum | double | Сумма |
| code | int | Код вычета |
[править] PayslipItemModel - позиция расчетного листка (начисление/удержание/налог/аванс)
| Наименование | Тип данных | Описание |
|---|---|---|
| uid | int | PK |
| categoryIndex | int | Тип категории [PayslipItemModel.Category] |
| date | Date | Дата |
| name | String | Наименование |
| code | int | Код |
| debit | double | Сумма дебета |
| credit | double | Сумма кредита |
[править] PayslipModel - расчетный листок за месяц
| Наименование | Тип данных | Описание |
|---|---|---|
| uid | int | PK |
| payDate | Date | Дата окончания периода |
| employee | EmployeeModel | Сотрудник |
| department | String | Участок |
| isFinal | boolean | Окончательный |
| position | String | Должность |
| salary | double | Сумма оклада |
| hourRate | double | Сумма почасовой тарифной ставки |
| dependents | int | Количество иждивенцев |
| items | RealmList<PayslipItemModel> | Список позиций листка (начисления, удержания, налоги, авансы) |
| benefits | RealmList<PayslipBenefitModel> | Список льгот |
| deductions | RealmList<PayslipDeductionModel> | Список Вычетов |
[править] SyncGdMsgStateModel - состояние сообщения
| Наименование | Тип данных | Описание |
|---|---|---|
| uid | String | PK |
| statusIndex | int | Тип состояния [SyncGdMsgStateModel.UpdatedStatus] |
| gdMsgKey | int | GdMsg.uid сообщения |
[править] SyncMetaDataModel - мета-данные для синхронизации
| Наименование | Тип данных | Описание |
|---|---|---|
| uid | int | PK |
| scheme | String | Схема веб-протокола |
| addressServer | String | Адрес |
| authKey | String | Авторизационный ID |
| lastSyncDate | String | Дата последней синхронизации |
| lastSyncMsgDate | String | Дата последней синхронизации сообщений |
| gcmRegistrationId | String | ID девайса в Google Cloud Messaging |
| inviteCode | String | Инвайт-код |
| permits | boolean | Наличие права доступа к данным |
| lostMode | boolean | Режим потерянного девайса |
[править] TimesheetModel - табель рабочего времени за день
| Наименование | Тип данных | Описание |
|---|---|---|
| uid | int | PK |
| dayTypeIndex | int | Тип дня [DayType] |
| employee | EmployeeModel | Сотрудник |
| description | String | Описание |
| hours | double | Продолжительность, часов |
| date | Date | Дата |
| events | RealmList<DayEventModel> | Список событий |
[править] WorkScheduleModel - рабочий график на день
| Наименование | Тип данных | Описание |
|---|---|---|
| uid | int | PK |
| dayTypeIndex | int | Тип дня [DayType] |
| employee | EmployeeModel | Сотрудник |
| description | String | Описание |
| hours | double | Продолжительность, часов |
| date | Date | Дата |
| events | RealmList<DayEventModel> | Список событий |