GDMN-Salary (Руководство разработчика)
Материал из GedeminWiki
(Различия между версиями)
(→Классы, хранящиеся в клиентской БД) |
SYSDBA (обсуждение | вклад) (Отмена правки 7281, сделанной участником Marina K.S. (обс.)) |
||
| (не показаны 9 промежуточных версий 1 участника) | |||
| Строка 1: | Строка 1: | ||
=== Web-server API === | === Web-server API === | ||
| − | + | ==== Протокол ==== | |
| − | + | ||
| − | + | =====HTTP-запрос к серверу===== | |
| − | + | ||
| − | + | Метод запроса: | |
| + | GET <URI запроса> HTTP/1.1 | ||
| − | + | Header: | |
| − | + | ||
Content-Type: application/json; charset=utf-8 | 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: | Пример данных для EmployeeModel, PayslipModel и PayslipItemModel: | ||
| Строка 56: | Строка 76: | ||
Пример удаления записи: | Пример удаления записи: | ||
{cl:"EmployeeModel", delete:"true", obj:{uid:"123"}} | {cl:"EmployeeModel", delete:"true", obj:{uid:"123"}} | ||
| − | |||
=== Классы, хранящиеся в клиентской БД === | === Классы, хранящиеся в клиентской БД === | ||
Указаны лишь те поля, которые связаны с БД | Указаны лишь те поля, которые связаны с БД | ||
| − | ''' | + | ===='''DayEventModel''' - событие дня в расписании или табеле==== |
{|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;" | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;" | ||
!style="background:#ffdead;"| Наименование | !style="background:#ffdead;"| Наименование | ||
| Строка 68: | Строка 87: | ||
|- align="center" | |- align="center" | ||
| uid | | uid | ||
| − | | | + | | int |
| − | | PK | + | | PK |
|- align="center" | |- align="center" | ||
| eventTypeIndex | | eventTypeIndex | ||
| − | | | + | | int |
| − | | Тип события дня | + | | Тип события дня [DayEventModel.EventType] |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
|- align="center" | |- align="center" | ||
| timeBegin | | timeBegin | ||
| Date | | Date | ||
| − | | | + | | Время начала |
|- align="center" | |- align="center" | ||
| timeEnd | | timeEnd | ||
| − | | Date | + | | Date |
| − | | | + | | Время окончания |
|- align="center" | |- align="center" | ||
| hours | | hours | ||
| − | | double | + | | double |
| − | | | + | | Продолжительность, часов |
|- align="center" | |- align="center" | ||
| description | | description | ||
| String | | String | ||
| − | | | + | | Описание |
|- align="center" | |- align="center" | ||
| isAllDay | | isAllDay | ||
| boolean | | boolean | ||
| − | | | + | | Продолжительность: весь день |
|} | |} | ||
| − | ''' | + | |
| + | ===='''DeviceInfoModel''' - информация об устройстве==== | ||
{|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;" | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;" | ||
!style="background:#ffdead;"| Наименование | !style="background:#ffdead;"| Наименование | ||
| Строка 111: | Строка 123: | ||
| uid | | uid | ||
| int | | int | ||
| − | | PK | + | | PK |
|- align="center" | |- align="center" | ||
| phoneNumber | | phoneNumber | ||
| String | | String | ||
| − | | | + | | MSISDN |
|- align="center" | |- align="center" | ||
| deviceId | | deviceId | ||
| String | | String | ||
| − | | | + | | Уникальный идентификатор устройства [IMEI for GSM, MEI for GSM, MEID/ESN for CDMA phones, else: android_id] |
|- align="center" | |- align="center" | ||
| deviceModel | | deviceModel | ||
| String | | String | ||
| − | | | + | | Модель устройства |
|} | |} | ||
| − | ''' | + | |
| + | ===='''EmployeeModel''' - сотрудник==== | ||
{|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;" | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;" | ||
!style="background:#ffdead;"| Наименование | !style="background:#ffdead;"| Наименование | ||
| Строка 132: | Строка 145: | ||
|- align="center" | |- align="center" | ||
| uid | | uid | ||
| − | | | + | | int |
| − | | PK | + | | PK |
|- align="center" | |- align="center" | ||
| firstname | | firstname | ||
| String | | String | ||
| − | | | + | | Имя |
|- align="center" | |- align="center" | ||
| surname | | surname | ||
| String | | String | ||
| − | | | + | | Фамилия |
|- align="center" | |- align="center" | ||
| middlename | | middlename | ||
| String | | String | ||
| − | | | + | | Отчество |
|- align="center" | |- align="center" | ||
| passportId | | passportId | ||
| String | | String | ||
| − | | | + | | ID паспорта |
|- align="center" | |- align="center" | ||
| − | |||
| listNumber | | listNumber | ||
| − | | | + | | String |
| + | | Табельный номер | ||
|} | |} | ||
| − | ''' | + | |
| + | ===='''ExRatesMonthlyModel''' - курс валют==== | ||
{|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;" | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;" | ||
!style="background:#ffdead;"| Наименование | !style="background:#ffdead;"| Наименование | ||
| Строка 162: | Строка 176: | ||
|- align="center" | |- align="center" | ||
| uid | | uid | ||
| − | | | + | | int |
| − | | PK | + | | PK |
|- align="center" | |- align="center" | ||
| onDate | | onDate | ||
| Date | | Date | ||
| − | | | + | | Дата |
|- align="center" | |- align="center" | ||
| usdRate | | usdRate | ||
| double | | double | ||
| − | | | + | | Курс доллара |
|- align="center" | |- align="center" | ||
| eurRate | | eurRate | ||
| double | | double | ||
| − | | | + | | Курс евро |
|} | |} | ||
| − | ''' | + | |
| + | ===='''GdMsgAbsenceModel''' - заявка о неявке на работу==== | ||
{|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;" | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;" | ||
!style="background:#ffdead;"| Наименование | !style="background:#ffdead;"| Наименование | ||
| Строка 185: | Строка 200: | ||
| uid | | uid | ||
| int | | int | ||
| − | | PK | + | | PK |
|- align="center" | |- align="center" | ||
| typeIndex | | typeIndex | ||
| int | | int | ||
| − | | GdMsgAbsenceModel.Type | + | | Тип неявки [GdMsgAbsenceModel.Type] |
|- align="center" | |- align="center" | ||
| dateBegin | | dateBegin | ||
| Date | | Date | ||
| − | | | + | | Дата начала |
|- align="center" | |- align="center" | ||
| dateEnd | | dateEnd | ||
| Date | | Date | ||
| − | | | + | | Дата окончания |
|- align="center" | |- align="center" | ||
| requestGdMsgModel | | requestGdMsgModel | ||
| GdMsgModel | | GdMsgModel | ||
| − | | | + | | Cообщение, на которое ответ (для серверных сообщений) |
|} | |} | ||
| − | ''' | + | |
| + | ===='''GdMsgIncomeModel''' - заявка о справке о доходах==== | ||
{|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;" | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;" | ||
!style="background:#ffdead;"| Наименование | !style="background:#ffdead;"| Наименование | ||
| Строка 211: | Строка 227: | ||
| uid | | uid | ||
| int | | int | ||
| − | | PK | + | | PK |
|- align="center" | |- align="center" | ||
| dateBegin | | dateBegin | ||
| Date | | Date | ||
| − | | | + | | Дата начала |
|- align="center" | |- align="center" | ||
| dateEnd | | dateEnd | ||
| Date | | Date | ||
| − | | | + | | Дата окончания |
|- align="center" | |- align="center" | ||
| requestGdMsgModel | | requestGdMsgModel | ||
| GdMsgModel | | GdMsgModel | ||
| − | | | + | | Cообщение, на которое ответ (для серверных сообщений) |
|} | |} | ||
| − | ''' | + | |
| + | ===='''GdMsgInfoModel''' - информационное сообщение==== | ||
{|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;" | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;" | ||
!style="background:#ffdead;"| Наименование | !style="background:#ffdead;"| Наименование | ||
| Строка 233: | Строка 250: | ||
| uid | | uid | ||
| int | | int | ||
| − | | PK | + | | PK |
|- align="center" | |- align="center" | ||
| requestGdMsgModel | | requestGdMsgModel | ||
| GdMsgModel | | GdMsgModel | ||
| − | | | + | | Cообщение, на которое ответ (для серверных сообщений) |
|} | |} | ||
| − | ''' | + | |
| + | ===='''GdMsgModel''' - сообщение==== | ||
{|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;" | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;" | ||
!style="background:#ffdead;"| Наименование | !style="background:#ffdead;"| Наименование | ||
| Строка 247: | Строка 265: | ||
| uid | | uid | ||
| int | | int | ||
| − | | PK | + | | PK |
|- align="center" | |- align="center" | ||
| requestStatusIndex | | requestStatusIndex | ||
| int | | int | ||
| − | | GdMsgModel.RequestStatus | + | | Статус запроса [GdMsgModel.RequestStatus] |
|- align="center" | |- align="center" | ||
| subjectIndex | | subjectIndex | ||
| int | | int | ||
| − | | GdMsgModel.Subject | + | | Тема запроса [GdMsgModel.Subject] |
|- align="center" | |- align="center" | ||
| senderIndex | | senderIndex | ||
| int | | int | ||
| − | | GdMsgModel.Sender | + | | Тип отправителя [GdMsgModel.Sender] |
|- align="center" | |- align="center" | ||
| isUnread | | isUnread | ||
| boolean | | boolean | ||
| − | | | + | | Прочитано |
|- align="center" | |- align="center" | ||
| timestamp | | timestamp | ||
| Date | | Date | ||
| − | | | + | | Дата создания |
|- align="center" | |- align="center" | ||
| msg | | msg | ||
| Строка 275: | Строка 293: | ||
| comment | | comment | ||
| String | | String | ||
| − | | | + | | Комментарий |
|- align="center" | |- align="center" | ||
| gdMsgString | | gdMsgString | ||
| String | | String | ||
| − | | | + | | Строковое представление данных сообщения (для поиска по ним) |
|- align="center" | |- align="center" | ||
| gdMsgAbsenceModel | | gdMsgAbsenceModel | ||
| GdMsgAbsenceModel | | GdMsgAbsenceModel | ||
| − | | | + | | Заявка: неявка на работу |
|- align="center" | |- align="center" | ||
| gdMsgIncomeModel | | gdMsgIncomeModel | ||
| GdMsgIncomeModel | | GdMsgIncomeModel | ||
| − | | | + | | Заявка: справка о доходах |
|- align="center" | |- align="center" | ||
| gdMsgVacationModel | | gdMsgVacationModel | ||
| GdMsgVacationModel | | GdMsgVacationModel | ||
| − | | | + | | Заявка: отпуск |
|- align="center" | |- align="center" | ||
| gdMsgInfoModel | | gdMsgInfoModel | ||
| GdMsgInfoModel | | GdMsgInfoModel | ||
| − | | | + | | Информационное сообщение |
|- align="center" | |- align="center" | ||
| gdMsgVacationInfoModel | | gdMsgVacationInfoModel | ||
| GdMsgVacationInfoModel | | GdMsgVacationInfoModel | ||
| − | | | + | | Заявка: информация о ближайшем отпуске |
|} | |} | ||
| − | ''' | + | |
| + | ===='''GdMsgVacationInfoModel''' - заявка о информации на ближайший отпуск==== | ||
{|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;" | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;" | ||
!style="background:#ffdead;"| Наименование | !style="background:#ffdead;"| Наименование | ||
| Строка 309: | Строка 328: | ||
| uid | | uid | ||
| int | | int | ||
| − | | PK | + | | PK |
|- align="center" | |- align="center" | ||
| dateBegin | | dateBegin | ||
| Date | | Date | ||
| − | | | + | | Дата начала |
|- align="center" | |- align="center" | ||
| dateEnd | | dateEnd | ||
| Date | | Date | ||
| − | | | + | | Дата окончания |
|- align="center" | |- align="center" | ||
| requestGdMsgModel | | requestGdMsgModel | ||
| GdMsgModel | | GdMsgModel | ||
| − | | | + | | Cообщение, на которое ответ (для серверных сообщений) |
|} | |} | ||
| − | ''' | + | |
| + | ===='''GdMsgVacationModel''' - заявка об отпуске==== | ||
{|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;" | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;" | ||
!style="background:#ffdead;"| Наименование | !style="background:#ffdead;"| Наименование | ||
| Строка 331: | Строка 351: | ||
| uid | | uid | ||
| int | | int | ||
| − | | PK | + | | PK |
|- align="center" | |- align="center" | ||
| typeIndex | | typeIndex | ||
| int | | int | ||
| − | | GdMsgVacationModel.Type | + | | Тип отпуска [GdMsgVacationModel.Type] |
|- align="center" | |- align="center" | ||
| dateBegin | | dateBegin | ||
| Date | | Date | ||
| − | | | + | | Дата начала |
|- align="center" | |- align="center" | ||
| dateEnd | | dateEnd | ||
| Date | | Date | ||
| − | | | + | | Дата окончания |
|- align="center" | |- align="center" | ||
| requestGdMsgModel | | requestGdMsgModel | ||
| GdMsgModel | | GdMsgModel | ||
| − | | | + | | Cообщение, на которое ответ (для серверных сообщений) |
|} | |} | ||
| − | ''' | + | |
| + | ===='''PayslipBenefitModel''' - льгота расчетного литка==== | ||
{|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;" | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;" | ||
!style="background:#ffdead;"| Наименование | !style="background:#ffdead;"| Наименование | ||
| Строка 356: | Строка 377: | ||
|- align="center" | |- align="center" | ||
| uid | | uid | ||
| − | | | + | | int |
| − | | PK | + | | PK |
|- align="center" | |- align="center" | ||
| − | | | + | | date |
| + | | Date | ||
| + | | Дата | ||
| + | |- align="center" | ||
| + | | name | ||
| String | | 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" | |- align="center" | ||
| date | | date | ||
| Date | | Date | ||
| − | | | + | | Дата |
|- align="center" | |- align="center" | ||
| name | | name | ||
| String | | String | ||
| − | | | + | | Наименование |
| + | |- align="center" | ||
| + | | deductionKind | ||
| + | | String | ||
| + | | Вид вычета | ||
|- align="center" | |- align="center" | ||
| sum | | sum | ||
| double | | double | ||
| − | | | + | | Сумма |
|- align="center" | |- align="center" | ||
| code | | code | ||
| int | | int | ||
| − | | | + | | Код вычета |
|} | |} | ||
| − | + | ===='''PayslipItemModel''' - позиция расчетного листка (начисление/удержание/налог/аванс)==== | |
| − | + | ||
| − | ''' | + | |
{|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;" | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;" | ||
!style="background:#ffdead;"| Наименование | !style="background:#ffdead;"| Наименование | ||
| Строка 389: | Строка 435: | ||
|- align="center" | |- align="center" | ||
| uid | | uid | ||
| − | | | + | | int |
| − | | PK | + | | PK |
|- align="center" | |- align="center" | ||
| categoryIndex | | categoryIndex | ||
| int | | int | ||
| − | | PayslipItemModel.Category | + | | Тип категории [PayslipItemModel.Category] |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
|- align="center" | |- align="center" | ||
| date | | date | ||
| Date | | Date | ||
| − | | | + | | Дата |
|- align="center" | |- align="center" | ||
| name | | name | ||
| String | | String | ||
| − | | | + | | Наименование |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
|- align="center" | |- align="center" | ||
| code | | code | ||
| int | | int | ||
| − | | | + | | Код |
|- align="center" | |- align="center" | ||
| debit | | debit | ||
| double | | double | ||
| − | | | + | | Сумма дебета |
|- align="center" | |- align="center" | ||
| credit | | credit | ||
| double | | double | ||
| − | | | + | | Сумма кредита |
|} | |} | ||
| − | ''' | + | |
| + | ===='''PayslipModel''' - расчетный листок за месяц==== | ||
{|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;" | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;" | ||
!style="background:#ffdead;"| Наименование | !style="background:#ffdead;"| Наименование | ||
| Строка 431: | Строка 470: | ||
|- align="center" | |- align="center" | ||
| uid | | uid | ||
| − | | | + | | int |
| − | | PK | + | | PK |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
|- align="center" | |- align="center" | ||
| payDate | | payDate | ||
| Date | | Date | ||
| − | | | + | | Дата окончания периода |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
|- align="center" | |- align="center" | ||
| employee | | employee | ||
| EmployeeModel | | EmployeeModel | ||
| − | | | + | | Сотрудник |
|- align="center" | |- align="center" | ||
| department | | department | ||
| String | | String | ||
| − | | | + | | Участок |
| + | |- align="center" | ||
| + | | isFinal | ||
| + | | boolean | ||
| + | | Окончательный | ||
|- align="center" | |- align="center" | ||
| position | | position | ||
| String | | String | ||
| − | | | + | | Должность |
|- align="center" | |- align="center" | ||
| salary | | salary | ||
| double | | double | ||
| − | | | + | | Сумма оклада |
|- align="center" | |- align="center" | ||
| hourRate | | hourRate | ||
| double | | double | ||
| − | | | + | | Сумма почасовой тарифной ставки |
|- align="center" | |- align="center" | ||
| dependents | | dependents | ||
| int | | int | ||
| − | | | + | | Количество иждивенцев |
|- align="center" | |- align="center" | ||
| items | | items | ||
| RealmList<PayslipItemModel> | | RealmList<PayslipItemModel> | ||
| − | | | + | | Список позиций листка (начисления, удержания, налоги, авансы) |
|- align="center" | |- align="center" | ||
| benefits | | benefits | ||
| RealmList<PayslipBenefitModel> | | RealmList<PayslipBenefitModel> | ||
| − | | | + | | Список льгот |
|- align="center" | |- align="center" | ||
| deductions | | deductions | ||
| RealmList<PayslipDeductionModel> | | RealmList<PayslipDeductionModel> | ||
| − | | | + | | Список Вычетов |
|} | |} | ||
| − | ''' | + | |
| + | ===='''SyncGdMsgStateModel''' - состояние сообщения==== | ||
{|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;" | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;" | ||
!style="background:#ffdead;"| Наименование | !style="background:#ffdead;"| Наименование | ||
| Строка 490: | Строка 526: | ||
| uid | | uid | ||
| String | | String | ||
| − | | PK | + | | PK |
|- align="center" | |- align="center" | ||
| statusIndex | | statusIndex | ||
| int | | int | ||
| − | | UpdatedStatus | + | | Тип состояния [SyncGdMsgStateModel.UpdatedStatus] |
|- align="center" | |- align="center" | ||
| gdMsgKey | | gdMsgKey | ||
| int | | int | ||
| − | | | + | | GdMsg.uid сообщения |
|} | |} | ||
| − | ''' | + | |
| + | ===='''SyncMetaDataModel''' - мета-данные для синхронизации==== | ||
{|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;" | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;" | ||
!style="background:#ffdead;"| Наименование | !style="background:#ffdead;"| Наименование | ||
| Строка 508: | Строка 545: | ||
| uid | | uid | ||
| int | | int | ||
| − | | PK | + | | PK |
| + | |- align="center" | ||
| + | | scheme | ||
| + | | String | ||
| + | | Схема веб-протокола | ||
|- align="center" | |- align="center" | ||
| addressServer | | addressServer | ||
| String | | String | ||
| − | | | + | | Адрес |
|- align="center" | |- align="center" | ||
| authKey | | authKey | ||
| String | | String | ||
| − | | | + | | Авторизационный ID |
|- align="center" | |- align="center" | ||
| lastSyncDate | | lastSyncDate | ||
| String | | String | ||
| − | | | + | | Дата последней синхронизации |
|- align="center" | |- align="center" | ||
| lastSyncMsgDate | | lastSyncMsgDate | ||
| String | | String | ||
| − | | | + | | Дата последней синхронизации сообщений |
|- align="center" | |- align="center" | ||
| gcmRegistrationId | | gcmRegistrationId | ||
| String | | String | ||
| − | | | + | | ID девайса в Google Cloud Messaging |
|- align="center" | |- align="center" | ||
| inviteCode | | inviteCode | ||
| String | | String | ||
| − | | | + | | Инвайт-код |
|- align="center" | |- align="center" | ||
| permits | | permits | ||
| boolean | | boolean | ||
| − | | | + | | Наличие права доступа к данным |
| + | |- align="center" | ||
| + | | lostMode | ||
| + | | boolean | ||
| + | | Режим потерянного девайса | ||
|} | |} | ||
| − | ''' | + | |
| + | ===='''TimesheetModel''' - табель рабочего времени за день==== | ||
{|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;" | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;" | ||
!style="background:#ffdead;"| Наименование | !style="background:#ffdead;"| Наименование | ||
| Строка 545: | Строка 591: | ||
|- align="center" | |- align="center" | ||
| uid | | uid | ||
| − | | | + | | int |
| − | | PK | + | | PK |
|- align="center" | |- align="center" | ||
| dayTypeIndex | | dayTypeIndex | ||
| int | | int | ||
| − | | | + | | Тип дня [DayType] |
|- align="center" | |- align="center" | ||
| employee | | employee | ||
| EmployeeModel | | EmployeeModel | ||
| − | | | + | | Сотрудник |
|- align="center" | |- align="center" | ||
| description | | description | ||
| String | | String | ||
| − | | | + | | Описание |
|- align="center" | |- align="center" | ||
| hours | | hours | ||
| double | | double | ||
| − | | | + | | Продолжительность, часов |
|- align="center" | |- align="center" | ||
| date | | date | ||
| Date | | Date | ||
| − | | | + | | Дата |
|- align="center" | |- align="center" | ||
| events | | events | ||
| RealmList<DayEventModel> | | RealmList<DayEventModel> | ||
| − | | | + | | Список событий |
|} | |} | ||
| − | ''' | + | |
| + | ===='''WorkScheduleModel''' - рабочий график на день==== | ||
{|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;" | {|border="1" cellpadding="2" cellspacing="0" style="border-collapse:collapse;" | ||
!style="background:#ffdead;"| Наименование | !style="background:#ffdead;"| Наименование | ||
| Строка 579: | Строка 626: | ||
|- align="center" | |- align="center" | ||
| uid | | uid | ||
| − | | | + | | int |
| − | | PK | + | | PK |
|- align="center" | |- align="center" | ||
| dayTypeIndex | | dayTypeIndex | ||
| int | | int | ||
| − | | | + | | Тип дня [DayType] |
|- align="center" | |- align="center" | ||
| employee | | employee | ||
| EmployeeModel | | EmployeeModel | ||
| − | | | + | | Сотрудник |
|- align="center" | |- align="center" | ||
| description | | description | ||
| String | | String | ||
| − | | | + | | Описание |
|- align="center" | |- align="center" | ||
| hours | | hours | ||
| double | | double | ||
| − | | | + | | Продолжительность, часов |
|- align="center" | |- align="center" | ||
| date | | date | ||
| Date | | Date | ||
| − | | | + | | Дата |
|- align="center" | |- align="center" | ||
| events | | events | ||
| RealmList<DayEventModel> | | RealmList<DayEventModel> | ||
| − | | | + | | Список событий |
|} | |} | ||
| − | |||
=== Таблицы данных для приложения на сервере === | === Таблицы данных для приложения на сервере === | ||
Текущая версия на 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> | Список событий |