В кассовом ПО Artix реализована возможность автоматически закрывать смену в заданное время, при выключении кассы и послав запрос удаленно по REST-интерфейсу.
Конфигурирование плагина
Активация плагина "Операционный день" определяется параметром operationday
, который задается в конфигурационном файле /linuxcash/cash/conf/ncash.ini.d/operationday.ini
в секции [plugins]
.
Наименование | Тип данных | Возможные значения | Описание | Примечания |
---|---|---|---|---|
operationday | строковый |
| Активация плагина "Операционный день" | По умолчанию off |
[plugins] ; Плагин Операционный день ; для контроля состояния кассы и смены ;operationday = off
Настройка плагина "Операционный день" производится в конфигурационном файле /linuxcash/cash/conf/ncash.ini.d/operationday.ini
в секции [OperationDay]
.
Наименование | Тип данных | Возможные значения | Описание | Примечания |
---|---|---|---|---|
executeCSCommands | логический |
| Выполнять команды, полученные с кассового сервера | Запросы принимаются на порт По умолчанию |
shiftCloseTime | строковый | Автоматически закрывать смену в указанное время | Время задается в формате Закрытие смены может быть произведено позднее указанного времени, так как смена закрывается после окончания выполнения всех операций. | |
closeShiftOnShutdown | логический |
| Закрывать смену при выключении кассы | По умолчанию false |
userName | строковый | Имя пользователя, от имени которого смена будет закрываться по времени и при выключении кассы | ||
userId | строковый | Идентификатор пользователя, от имени которого смена будет закрываться по времени и при выключении кассы |
[OperationDay] ; Выполнять команды, полученные с кассового сервера ; запросы принимаются на порт 38082 ; по умолчанию выключено ;executeCSCommands = false ; Автоматически закрывать смену в указанное время ; время в формате чч:мм ; по умолчанию выключено ;shiftCloseTime = "" ; Закрывать смену при выключении кассы ; по умолчанию false ;closeShiftOnShutdown = false ; Имя пользователя, от имени которого смена будет закрываться по времени и при выключении кассы ;userName = "" ; Идентификатор пользователя, от имени которого смена будет закрываться по времени и при выключении кассы ;userId = ""
Если имя (userName
) и идентификатор пользователя (userId
) не заданы, то для автоматического закрытия смены будут использоваться данные последнего пользователя из БД Documents
таблицы Users
.
Если данные о пользователе не удалось получить из БД, то смена не будет закрыта.
Если во время автоматического закрытия смены по времени на экране выведен диалог, то смена не будет закрыта.
Если включена проверка счетчиков в смене и в ФР при закрытии смены, то при расхождении сумм смену можно будет закрыть только вручную.
API для удаленного закрытия смены
Плагин "Операционный день" поддерживает следующие команды (GET-запросы):
getState
– получение состояния, команда без параметров,closeShift
– закрытие смены. Обязательные параметрыcashierName
– ФИО кассира, инициирующего закрытие смены,cashierCode
– код кассира,closeShiftResult
– результат закрытия смены.
Команды можно выполнять через любую программу, отправляя GET-запросы, например:
curl --location --request GET 'http://192.169.10.8:38082/getState' curl --location --request GET 'http://192.169.10.8:38082/closeShift?cashierName=Test&cashierCode=999' curl --location --request GET 'http://192.169.10.8:38082/closeShiftResult'
Ответы на запросы
Ответы на запросы приходят в формате json
.
Наименования полей совпадают с наименованием аналогичных полей, выгружаемых через aif
. Поэтому в некоторых полях используются заглавные буквы, а в некоторых нет.
Запрос на получение состояния (getState)
При выполнении запроса на получение состояния могут быть получены следующие ответы:
{ "canCloseShift": false, "cashInfo": { "kkms": [], "mode": "normal" }, "context": "receiptforming", "error": "Смена не открыта", "shift": { "cashCode": "177", "countBack": 0, "countMoneyIn": 0, "countMoneyOut": 0, "countSale": 0, "firstchecktime": "", "shift": 280, "shopCode": "1234567890", "status": "new", "statusDescription": "Новая смена", "sumBack": "0.00", "sumMoneyIn": "0.00", "sumMoneyOut": "0.00", "sumSale": "0.00", "timeBeg": "", "timeEnd": "" }, "user": { "userCode": "4", "userName": "Мастер" } }
, где:
canCloseShift
– флаг возможности закрытия смены. Еслиtrue
, то смену можно закрыть,false
– смену закрыть нельзя,cashInfo
– информация о кассе:kkms
– информация о ККМ (в виде списка),mode
– режим работы. Возможные значения:normal
– обычный режим,demo
– демо-режим,training
– тренировочный. Так как возможно сочетание демо и тренировочного режима, то в этом случае возвращается значениеdemo|training
.На SCO при переходе в режим кассира не передается информация о режиме, поэтому будет отображаться
"mode": "normal"
.
context
– поле с именем текущего контекста,error
– текст ошибки,shift
– информация о смене:cashCode
– код кассы,countBack
– количество возвратов,countMoneyIn
– количество внесений,countMoneyOut
– количество выемов,countSale
– количество продаж,firstchecktime
– дата и время первого чека в смене,shift
– номер смены,shopCode
– код магазина,status
– статус смены. Возможные значения:new
– новая смена,open
– открытая смена,closed
– закрытая смена,inCloseProcess
– смена в процессе закрытия,errorOnClose
– ошибка в процессе закрытия смены,statusDescription
– описание статуса смены. Возможные значения соответствуют вышеприведенным статусам: Новая смена, Смена открыта, Смена закрыта, Смена в процессе закрытия. В случае ошибки в качестве описания возвращается текст ошибки,sumBack
– сумма возвратов,sumMoneyIn
– сумма внесений,sumMoneyOut
– сумма выемов,sumSale
– сумма продаж,timeBeg
– дата и время открытия смены,timeEnd
– дата и время закрытия смены,
user
– текущий пользователь:userCode
– код пользователя,userName
– имя пользователя.
{ "canCloseShift": true, "cashInfo": { "kkms": [ { "countBack": "", "countMoneyIn": "", "countMoneyOut": "", "countSale": "", "fnnumber": "9999078902008655", "kkmNum": 1, "serialNum": "0381080012020518", "shiftnumkkm": 102, "sumBack": "0.00", "sumMoneyIn": "0.00", "sumMoneyOut": "0.00", "sumSale": "0.00", "unsenddoccount": -1, "unsenddocdate": "" } ], "mode": "normal" }, "context": "receiptview", "shift": { "cashCode": "177", "countBack": 0, "countMoneyIn": 0, "countMoneyOut": 0, "countSale": 1, "firstchecktime": "2022-02-25T11:20:26", "shift": 280, "shopCode": "1234567890", "status": "open", "statusDescription": "Смена открыта", "sumBack": "0.00", "sumMoneyIn": "0.00", "sumMoneyOut": "0.00", "sumSale": "20.90", "timeBeg": "2022-02-25T11:22:14", "timeEnd": "" }, "user": { "userCode": "4", "userName": "Мастер" } }
, где для kkms
:
fnnumber
– номер ФН,kkmNum
– порядковый номер ККМ,serialNum
– серийный номер ККМ (на чеках ЗН ККТ),shiftnumkkm
– номер смены в ККМ,unsenddoccount
– количество документов, неотправленных в ОФД,unsenddocdate
– дата и время первого неотправленного документа в ОФД,Поля
countBack
,sumBack
и т.д. аналогичны одноименным полям в смене.
{ "canCloseShift": false, "cashInfo": { "kkms": [ { "countBack": "0", "countMoneyIn": "0", "countMoneyOut": "0", "countSale": "1", "fnnumber": "9999078902008655", "kkmNum": 1, "serialNum": "0381080012020518", "shiftnumkkm": 102, "sumBack": "0.00", "sumMoneyIn": "0.00", "sumMoneyOut": "0.00", "sumSale": "20.90", "unsenddoccount": 0, "unsenddocdate": "" } ], "mode": "normal" }, "context": "mainmenu", "error": "Смена не открыта", "shift": { "cashCode": "177", "countBack": 0, "countMoneyIn": 0, "countMoneyOut": 0, "countSale": 1, "firstchecktime": "2022-02-25T11:20:27", "shift": 280, "shopCode": "1234567890", "status": "closed", "statusDescription": "Смена закрыта", "sumBack": "0.00", "sumMoneyIn": "0.00", "sumMoneyOut": "0.00", "sumSale": "20.90", "timeBeg": "2022-02-25T11:22:15", "timeEnd": "2022-02-25T11:23:07" }, "user": { "userCode": "4", "userName": "Мастер" } }
Поля countBack
, sumBack
, countSale
, sumSale
, countMoneyIn
, sumMoneyIn
, countMoneyOut
, sumMoneyOut
, unsenddoccount
, unsenddocdate
для kkms
заполняются только при закрытии смены, так как эти данные запрашиваются у ФР при закрытии смены.
{ "canCloseShift": false, "cashInfo": { "kkms": [], "mode": "normal" }, "context": "shiftclose", "error": "Процесс закрытия смены уже начался", "shift": { "cashCode": "777", "countBack": 0, "countMoneyIn": 0, "countMoneyOut": 0, "countSale": 1, "firstchecktime": "2024-01-30T02:49:49", "shift": 132, "shopCode": "123", "status": "errorOnClose", "statusDescription": "Ошибка при закрытии смены", "sumBack": "0.00", "sumMoneyIn": "0.00", "sumMoneyOut": "0.00", "sumSale": "67.00", "timeBeg": "2024-01-30T02:50:04", "timeEnd": "2024-01-30T03:05:57" }, "user": { "userCode": "4", "userName": "Мастер" } }
{ "canCloseShift": true, "cashInfo": { "kkms": [], "mode": "normal" }, "context": "registration", "shift": { "cashCode": "777", "countBack": 0, "countMoneyIn": 0, "countMoneyOut": 0, "countSale": 0, "firstchecktime": "", "shift": 133, "shopCode": "123", "status": "new", "statusDescription": "Новая смена", "sumBack": "0.00", "sumMoneyIn": "0.00", "sumMoneyOut": "0.00", "sumSale": "0.00", "timeBeg": "", "timeEnd": "" }, "user": { "userCode": "4", "userName": "Мастер" } }
Запрос на закрытие смены (closeShift)
При выполнении запроса на закрытие смены могут быть получены следующие ответы:
{ "errorCode": 1, "errorMessage": "Обнаружен незавершенный чек" }
{ "errorCode": 0, "errorMessage": "OK" }
, где:
errorCode
– результат выполнения операции. Возможные значения: 0 – успешно, 1 – ошибка.errorMessage
– текст результата выполнения операции. Возможные значения: OK – в случае успеха, текст ошибки – в случае ошибки.
Предполагается, что при выполнении длительных операций в ответ отправляется "OK" при начале выполнения операции, а далее КС должен запрашивать состояние до окончания выполнения длительной операции.
При закрытии смены данные кассира, переданные в запросе, записываются в БД Documents
таблицу Workshift
(поле scode
– код кассира), users
(поля usercode
– код кассира, username
– имя кассира), crights
(cashiercard
– код кассира, cashiername
– имя кассира).
При закрытии смены по команде происходит переход в главное меню и блокировка кассы.
Запрос о результате закрытия смены (closeShiftResult)
При перезапуске кассового ПО json-объект с результатом закрытия смены перезаписывается, значения полей объекта сбрасываются.
При выполнении запроса о результате закрытия смены могут быть получены следующие ответы:
{ "closedatetime": "2022-02-21T15:40:18.640+07", "context": "registration", "errors": [] }
{ "closedatetime": "+07", "context": "shiftclose", "errors": [] }
{ "closedatetime": "2024-01-30T03:06:34.852+00", "context": "registration", "errors": [ { "COMMAND_VERIFYTOTAL": "Ошибка при выполнении операции" } ] }
, где:
closedatetime
– время последнего закрытия смены,context
– поле с именем текущего контекста,errors
– список соответствий"<действие>: <сообщение_об_ошибке>"
.