В кассовом ПО 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 = "" |
Если имя ( Если данные о пользователе не удалось получить из БД, то смена не будет закрыта. |
Если во время автоматического закрытия смены по времени на экране выведен диалог, то смена не будет закрыта. |
Если включена проверка счетчиков в смене и в ФР при закрытии смены, то при расхождении сумм смену можно будет закрыть только вручную. |
Плагин "Операционный день" поддерживает следующие команды (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' |
Ответы на запросы приходят в формате Наименования полей совпадают с наименованием аналогичных полей, выгружаемых через |
При выполнении запроса на получение состояния могут быть получены следующие ответы:
{ "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 при переходе в режим кассира не передается информация о режиме, поэтому будет отображаться |
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": "Мастер" } } |
Поля |
{ "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": "Мастер" } } |
При выполнении запроса на закрытие смены могут быть получены следующие ответы:
{ "errorCode": 1, "errorMessage": "Обнаружен незавершенный чек" } |
{ "errorCode": 0, "errorMessage": "OK" } |
, где:
errorCode
– результат выполнения операции. Возможные значения: 0 – успешно, 1 – ошибка.
errorMessage
– текст результата выполнения операции. Возможные значения: OK – в случае успеха, текст ошибки – в случае ошибки.
Предполагается, что при выполнении длительных операций в ответ отправляется "OK" при начале выполнения операции, а далее КС должен запрашивать состояние до окончания выполнения длительной операции. |
При закрытии смены данные кассира, переданные в запросе, записываются в БД Documents
таблицу Workshift
(поле scode
– код кассира), users
(поля usercode
– код кассира, username
– имя кассира), crights
(cashiercard
– код кассира, cashiername
– имя кассира).
При закрытии смены по команде происходит переход в главное меню и блокировка кассы.
Если смена была закрыта, а в новой смене ещё не было операций, то при запросе состояния возвращаются данные о закрытой смене. |
При перезапуске кассового ПО 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
– список соответствий "<действие>: <сообщение_об_ошибке>"
.