Browse Source

refs #1 - Удален старый код webclient 1.x

qt5
parent
commit
59ec33fc62
100 changed files with 0 additions and 19360 deletions
  1. +0
    -778
      1.0/src/CHANGELOG.txt
  2. +0
    -267
      1.0/src/CardsInfo/CardsInfo.cpp
  3. +0
    -40
      1.0/src/CardsInfo/CardsInfo.h
  4. +0
    -1193
      1.0/src/CommandReceiver/CommandReceiver.cpp
  5. +0
    -63
      1.0/src/CommandReceiver/CommandReceiver.h
  6. +0
    -29
      1.0/src/Common/TFunctionThread.cpp
  7. +0
    -26
      1.0/src/Common/TFunctionThread.h
  8. +0
    -1044
      1.0/src/Common/common.cpp
  9. +0
    -118
      1.0/src/Common/common.h
  10. +0
    -61
      1.0/src/Devices/BaseDevice/CCardReader/BaseCardReader.cpp
  11. +0
    -36
      1.0/src/Devices/BaseDevice/CCardReader/BaseCardReader.h
  12. +0
    -64
      1.0/src/Devices/BaseDevice/CCardReader/CardReader.cpp
  13. +0
    -36
      1.0/src/Devices/BaseDevice/CCardReader/CardReader.h
  14. +0
    -87
      1.0/src/Devices/BaseDevice/CCardReader/CardReaderParams.cpp
  15. +0
    -70
      1.0/src/Devices/BaseDevice/CCardReader/CardReaderParams.h
  16. +0
    -158
      1.0/src/Devices/BaseDevice/CCoinAcceptor/CCoinAcceptor.cpp
  17. +0
    -47
      1.0/src/Devices/BaseDevice/CCoinAcceptor/CCoinAcceptor.h
  18. +0
    -87
      1.0/src/Devices/BaseDevice/CKeyboard/CKeyboard.cpp
  19. +0
    -31
      1.0/src/Devices/BaseDevice/CKeyboard/CKeyboard.h
  20. +0
    -505
      1.0/src/Devices/BaseDevice/CModem/Modem.cpp
  21. +0
    -51
      1.0/src/Devices/BaseDevice/CModem/Modem.h
  22. +0
    -123
      1.0/src/Devices/BaseDevice/CPrinter/CPrinter.cpp
  23. +0
    -77
      1.0/src/Devices/BaseDevice/CPrinter/CPrinter.h
  24. +0
    -295
      1.0/src/Devices/BaseDevice/CValidator/CValidator.cpp
  25. +0
    -70
      1.0/src/Devices/BaseDevice/CValidator/CValidator.h
  26. +0
    -79
      1.0/src/Devices/BaseDevice/CWatchDog/CWatchDog.cpp
  27. +0
    -39
      1.0/src/Devices/BaseDevice/CWatchDog/CWatchDog.h
  28. +0
    -301
      1.0/src/Devices/BaseDevice/ComPort/ComPortClass.cpp
  29. +0
    -52
      1.0/src/Devices/BaseDevice/ComPort/ComPortClass.h
  30. +0
    -87
      1.0/src/Devices/BaseDevice/ComPort/ComPortParameters.cpp
  31. +0
    -38
      1.0/src/Devices/BaseDevice/ComPort/ComPortParameters.h
  32. +0
    -62
      1.0/src/Devices/BaseDevice/CommandParameters/CommandParameters.cpp
  33. +0
    -35
      1.0/src/Devices/BaseDevice/CommandParameters/CommandParameters.h
  34. +0
    -501
      1.0/src/Devices/BaseDevice/DeviceChecker/DChecker/DeviceChecker.cpp
  35. +0
    -68
      1.0/src/Devices/BaseDevice/DeviceChecker/DChecker/DeviceChecker.h
  36. +0
    -114
      1.0/src/Devices/BaseDevice/DeviceChecker/DDescriptor/DeviceDescriptor.cpp
  37. +0
    -40
      1.0/src/Devices/BaseDevice/DeviceChecker/DDescriptor/DeviceDescriptor.h
  38. +0
    -743
      1.0/src/Devices/BaseDevice/DeviceClass/DeviceClass.cpp
  39. +0
    -170
      1.0/src/Devices/BaseDevice/DeviceClass/DeviceClass.h
  40. +0
    -652
      1.0/src/Devices/BaseDevice/DeviceState/DeviceState.cpp
  41. +0
    -300
      1.0/src/Devices/BaseDevice/DeviceState/DeviceState.h
  42. +0
    -846
      1.0/src/Devices/BaseDevice/DeviceThread/DeviceThread.cpp
  43. +0
    -219
      1.0/src/Devices/BaseDevice/DeviceThread/DeviceThread.h
  44. +0
    -353
      1.0/src/Devices/BaseDevice/LogClass/LogClass.cpp
  45. +0
    -62
      1.0/src/Devices/BaseDevice/LogClass/LogClass.h
  46. +0
    -32
      1.0/src/Devices/BaseDevice/Scanner/NullScanner.cpp
  47. +0
    -19
      1.0/src/Devices/BaseDevice/Scanner/NullScanner.h
  48. +0
    -157
      1.0/src/Devices/BaseDevice/Scanner/Scanner.cpp
  49. +0
    -43
      1.0/src/Devices/BaseDevice/Scanner/Scanner.h
  50. +0
    -157
      1.0/src/Devices/BaseDevice/Scanner/ScannerThread.cpp
  51. +0
    -33
      1.0/src/Devices/BaseDevice/Scanner/ScannerThread.h
  52. +0
    -66
      1.0/src/Devices/BaseDevice/TThreadMod/TThreadMod.cpp
  53. +0
    -26
      1.0/src/Devices/BaseDevice/TThreadMod/TThreadMod.h
  54. +0
    -79
      1.0/src/Devices/CardReaders/MetroCard/MetroCardClass.cpp
  55. +0
    -25
      1.0/src/Devices/CardReaders/MetroCard/MetroCardClass.h
  56. +0
    -201
      1.0/src/Devices/CardReaders/MetroCard/MetroCardDevice.cpp
  57. +0
    -62
      1.0/src/Devices/CardReaders/MetroCard/MetroCardDevice.h
  58. +0
    -245
      1.0/src/Devices/CardReaders/MetroCard/MetroCardThread.cpp
  59. +0
    -69
      1.0/src/Devices/CardReaders/MetroCard/MetroCardThread.h
  60. +0
    -105
      1.0/src/Devices/CardReaders/Sankyo/CSankyoCardReader.cpp
  61. +0
    -21
      1.0/src/Devices/CardReaders/Sankyo/CSankyoCardReader.h
  62. +0
    -381
      1.0/src/Devices/CardReaders/Sankyo/CSankyoCardReaderThread.cpp
  63. +0
    -61
      1.0/src/Devices/CardReaders/Sankyo/CSankyoCardReaderThread.h
  64. +0
    -18
      1.0/src/Devices/CoinAcceptors/NRIDevice/NRIDevice.cpp
  65. +0
    -18
      1.0/src/Devices/CoinAcceptors/NRIDevice/NRIDevice.h
  66. +0
    -81
      1.0/src/Devices/CoinAcceptors/NRIDevice/NRIDeviceClass.cpp
  67. +0
    -17
      1.0/src/Devices/CoinAcceptors/NRIDevice/NRIDeviceClass.h
  68. +0
    -1100
      1.0/src/Devices/CoinAcceptors/NRIDevice/NRIDeviceThread.cpp
  69. +0
    -97
      1.0/src/Devices/CoinAcceptors/NRIDevice/NRIDeviceThread.h
  70. +0
    -450
      1.0/src/Devices/DeviceFinder/DF_ControllerClass/DF_ControllerClass.cpp
  71. +0
    -69
      1.0/src/Devices/DeviceFinder/DF_ControllerClass/DF_ControllerClass.h
  72. +0
    -496
      1.0/src/Devices/DeviceFinder/DF_DescrClass/DF_DescrClass.cpp
  73. +0
    -94
      1.0/src/Devices/DeviceFinder/DF_DescrClass/DF_DescrClass.h
  74. +0
    -1310
      1.0/src/Devices/DeviceFinder/DF_FinderClass/DF_FinderClass.cpp
  75. +0
    -126
      1.0/src/Devices/DeviceFinder/DF_FinderClass/DF_FinderClass.h
  76. +0
    -17
      1.0/src/Devices/Keyboards/IskraKeybDevice/IskraKeybDevice.cpp
  77. +0
    -18
      1.0/src/Devices/Keyboards/IskraKeybDevice/IskraKeybDevice.h
  78. +0
    -91
      1.0/src/Devices/Keyboards/IskraKeybDevice/IskraKeybDeviceClass.cpp
  79. +0
    -20
      1.0/src/Devices/Keyboards/IskraKeybDevice/IskraKeybDeviceClass.h
  80. +0
    -362
      1.0/src/Devices/Keyboards/IskraKeybDevice/IskraKeybDeviceThread.cpp
  81. +0
    -34
      1.0/src/Devices/Keyboards/IskraKeybDevice/IskraKeybDeviceThread.h
  82. +0
    -17
      1.0/src/Devices/Keyboards/KtekKeybDevice/KtekKeybDevice.cpp
  83. +0
    -18
      1.0/src/Devices/Keyboards/KtekKeybDevice/KtekKeybDevice.h
  84. +0
    -82
      1.0/src/Devices/Keyboards/KtekKeybDevice/KtekKeybDeviceClass.cpp
  85. +0
    -20
      1.0/src/Devices/Keyboards/KtekKeybDevice/KtekKeybDeviceClass.h
  86. +0
    -159
      1.0/src/Devices/Keyboards/KtekKeybDevice/KtekKeybDeviceThread.cpp
  87. +0
    -27
      1.0/src/Devices/Keyboards/KtekKeybDevice/KtekKeybDeviceThread.h
  88. +0
    -535
      1.0/src/Devices/Modems/SiemensMC35i/ModemSiemensMC35i.cpp
  89. +0
    -29
      1.0/src/Devices/Modems/SiemensMC35i/ModemSiemensMC35i.h
  90. +0
    -129
      1.0/src/Devices/Modems/SiemensMC39MultiSIM/ModemSiemensMC39MultiSIM.cpp
  91. +0
    -21
      1.0/src/Devices/Modems/SiemensMC39MultiSIM/ModemSiemensMC39MultiSIM.h
  92. +0
    -214
      1.0/src/Devices/MoneyCounter/CMoneyCounter.cpp
  93. +0
    -58
      1.0/src/Devices/MoneyCounter/CMoneyCounter.h
  94. +0
    -39
      1.0/src/Devices/MoneyCounter/TNote.cpp
  95. +0
    -30
      1.0/src/Devices/MoneyCounter/TNote.h
  96. +0
    -80
      1.0/src/Devices/MoneyCounter/ValidatorInfo.cpp
  97. +0
    -28
      1.0/src/Devices/MoneyCounter/ValidatorInfo.h
  98. +0
    -768
      1.0/src/Devices/MoneyCounter/XMLInfo/XMLInfo.cpp
  99. +0
    -51
      1.0/src/Devices/MoneyCounter/XMLInfo/XMLInfo.h
  100. +0
    -738
      1.0/src/Devices/Printers/Atol/AtolPrinter.cpp

+ 0
- 778
1.0/src/CHANGELOG.txt View File

@@ -1,778 +0,0 @@
Версия 1.0.9 build 11
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|BUG|
Исправлены ошибки:
- не проигрывался прогресс при проверке номера;
- отсылались лишние пакеты статуса устройств на мониторинг, что приводило к его неработоспособности;
- WC разрывал связь на 18 минут при попытке отправки СМС;
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|CHANGE|
При создании GPRS соединения, теперь не происходит запрос номера пользователя.
build 7
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|BUG|
Исправлены ошибки:
- в мониторинг не отправлялась информация о платеже;
build 6
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
- реализована печать штрих-кода на чеке инкассации для принтеров Custom VKP-80 и Citizen PPU-700.
Для печати штрих-кода в файле конфигурации в разделе принтера необходимо добавить атрибут incass_barcode="1".
Пример: <printer baudrate="0" port="1" incass_barcode="1" ... min_lines_count="0"/>
Описание данных Число цифр
общая сумма инкассации 8
количество купюр 4
номер чека инкассации 3
- добавлена проверка данных штрих-кода;
- реализован сторожевой таймер "Экспресс-Оплата"(<watchdog type="expresspay" port=".." />);
- реализована поддержка принтера Startup 900 по параллельному порту(<printer type="startup900lpt" port=".." />);
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|BUG|
Исправлены ошибки:
- не покупались пины в оффлайне не покупались;
- поправилена печать на принтере Атол;
- при зажевывании купюры, купюроприемник CashCode переходил в состояние ошибки и не возвращался в корректное состояние,после изъятия купюры.
Также это учтено для купюроприемников JCM;
- в некоторых ошибочных ситуациях терминал не блокировался;
- не прописывалась нулевая комиссия при отсутствии тега <comission> в operators.xml;
- при оплате сдачи на телефон,параметр AMOUNT_ALL для основного пакета был равен всей сумме;
- неправильно вычислялась комиссия в остаточном платеже на мобильного оператора;
- кнопки страниц вылезали за границы экрана, если чисто страниц больше 6.
Теперь если кнопки вылезают, то положение левой границы ряда вычисляется исходя из размеров экрана,
количества кнопок и ширины кнопки;
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|CHANGE|
В тег <process> в теге <debug> добавлен атрибут conn - если он равен "0",
то conn.exe запускаться не будет. Значение тега log не влияет на атрибут full(если он 1, то пишем полные пути в логах УРЛов).
Значение атрибута url тега <log> по умолчанию 1. Запуск conn перенесен в обработчик таймера process.
build 3
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
Доработан драйвер для купюроприемника CashCode - теперь поддерживается сериЯ FL.
build 2
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|CHANGE|
Изменен режим работы купюрника MEI - теперь автоматически определяется в каком режиме ему работать( стандартный или расширенный).
Актуально для Казахстанаской и Украинской валюты.
build 1
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
Добавлена возморжность создавать динамические поля меню.
Под динамическими полями понимают связку из двух полей(они не обязательно должны идти подряд) - parent и child.
Поле parent может быть только типом ENUM.
Тип поля child зависит от текущего значения поля parent.
В зависимости от того, какое значение имеет поле parent (в зависимости от того, на какую кнопку из списка кнопок нажал пользователь), поле child имеет тот или иной тип.
Структура operators.xml
Описание поля parent.
Описание ничем не отличается от описания любого другого поля типа ENUM, кроме добавления 1 дополнительного атрибута.
В атрибуте parentField содержится значение идетификатора поля child.
<field id="101" type="enum" parentField="<id_поля_child>">
<name>Тип</name>
<enum>
<item value="1">ENUM</item>
<item value="2">MASKED</item>
<item value="3">INTEGER</item>
<item value="4">TEXT</item>
</enum>
<comment>Ваберете тип услуги</comment>
</field>
Описание поля child.
Атрибут parentValue соответствует значению поля parent
В теге <type> описан тип поля child. Возможные значения: masked, integer, pwd, enum, text, textpwd
В теге <values> описаны атрибуты типа.
Для enum - список кнопок.
Для masked - маска.
Для integer и pwd - минимальная и максимальная длина.
Для text и textpwd - клавиатура по умолчанию.
<field id="102" type="enum">
<name>Выберите код договора</name>
<enum>
<item parentValue="1">
<type>enum</type>
<values>
<item value="294NK">Договор начинается с "294NK"</item>
</values>
</item>
<item parentValue="2">
<type>masked</type>
<values>
<mask>******!-!**</mask>
</values>
</item>
<item parentValue="3">
<type>integer</type>
<values>
<minlength>4</minlength>
<maxlength>15</maxlength>
</values>
</item>
<item parentValue="4">
<type>text</type>
<values>
<klava>latc</klava>
</values>
</item>
</enum>
</field>
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
В файл операторов добавлена опция отображения подложки логотипа - <backing>.
Для отображения подложки необходимо прописать тег <backing> внутри тега <operator>.
Пример:
<operator id="...">
.
. {Описание оператора}
.
<image>image.png</image>
<backing>1</backing>
</operator>
В данном случае у указанного оператора появиться подложка на странице ввода номера и внесения денег.
Отсутствие в описании оператора тега backing или значение, заключенное внутри тега, отличное от 1 НЕ ОТОБРАЖАЕТ подложку.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|BUG|
Исправлены ошибки:
- при неверно прописанном или отсутствующем WatchDog'е возникал AccessViolation;
- отлажен принтер Штрих-Комбо ФР-К;
- если в файле операторов в теге request-property прописано несколько филдов,
но между ними нет разделителя (или только между некоторыми филдами нет разделителя),
в пакете статистики в соответствующее поле писалась некорректная строка;
- при <processor type="External" offline="1"/> шла проверка введенного номера;
Ошибки Конфигуратора:
- исправлена ошибка выхода на страницу при неработающем купюроприемнике;
- исправлено двойное создание соединения в addressbook;
- добавлена проверка при редактировании меню (чтобы не удалили элементы);
- устранена задержка между нажатием кнопки генерации ключей и сообщением
об ожидании;
- исправлено ошибочная запись флага offline_payment;
- генерацию ключей можно пропускать;
- исправлен баг с ошибкой эцп;
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|CHANGE|
Изменена логика работы с ключами - теперь WebClient работает только с теми ключами, которые были сгенерированы на терминале,
с помощью программы Configurator.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
В дистрибутив включена beta-версия программы наcтройки терминала - Configurator.exe
На данном этапе Конфигуратор возможно будет определять автоматически не все типы устройств.
Просьба сообщать о таких проблемах на terminals@cyberplat.com.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|BUG|
Исправлена обработка атрибута ignored_check_errors_list тега <payments> в фале конфигурации.
В этот тег через запятую либо через пробел пишутся номера ошибок, которые нужно игнорировать при проверке номера.
Список этих ошибок находится в файле db_errors.js.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|BUG|
После разблокирования терминала, при оплате, зависал интерфейс терминала.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|BUG|
В Записной книжке исправлена проблема с Ростелекомом.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
Добавлен отладочный режим работы терминала. Если этот режим включен терминал не обрабатывает ошибочный статус или наличие купюроприемника и принтера.
Для включения отладочного режима в файле конфигурации необходимо прописать теги:
<debug>
<validator>1</validator>
<printer>1</printer>
</debug>
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|BUG|
Не правильно формировался пакет для отправки на сервер мониторинга.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|BUG|
После удаления XMLP-пакета, не удалялся временный файл платежа.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|CHANGE|
Изменена логика формирования пакета остатка, при оплате сдачи на телефон.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|BUG|
Исправлена ошибка обработки таймаута при вносе купюры в купюроприемник.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|CHANGE|
Убрана кнопка генерации ключей в сервисном меню, вместо нее добавлена кнока запуска конфигуратора.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|CHANGE|
Изменена логика обработки ошибочных ситуаций купюроприемника - в интерфейсе, "Записной книжке" и при оплате остатка.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|BUG|
Исправлена проблема в доступе к памяти в драйвере принтера Прим-21К.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|BUG|
Исправлены мелкие ошибки интерфейса.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|BUG|
Не осуществлялась деактивация кнопки "ДА", при пустом поле ввода пароля.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|BUG|
Исправлены ошибки в при продаже ПИНов:
- комиссия при продаже ПИНов считалась два раза.
- не правильно печатались чеки.
- пакет не кидался в папку unprocessed.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|CHANGE|
В случае попадания на страницу ошибки или внесения денег со страницы автоопределения номера (оператор 999),
при нажатии на кнопку "НАЗАД", вовращаемся на страницу оператора 999.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|CHANGE|
изменена логика удаления пробелов в запросе на сервер.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|BUG|
Некорректно печатались чеки при продаже PIN`ов.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|BUG|
Исправлены ошибки в "Записной книжке":
- кнопка "ДОБАВИТЬ" не отображалась после заведения 7 записей.
- при онлайн проверке, если номер определялся как неверный, отображалась кнопка "НЕТ", а не "НАЗАД".
- если запись была создана через web-сайт, то при отображении в WebClient'е вместо точек отображались звёздочки.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|BUG|
В случае оплаты сдачи на телефон, на странице вноса денег не отображалась кнопка "ОТМЕНИТЬ".
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|BUG|
Увеличен таймаут интерфейса и убрано ошибочное выставление таймаута начальной страницы.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|BUG|
Подправлена проблема с фискальным регистратором Штрих-М.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|BUG|
В начале процедуры реализации остатка, в пакете XMLP было столько же купюр, сколько было внесено в основном платеже.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|BUG|
Исправлены ошибки в Записной книжке:
- исчезал символ '%' при переходе на поле комментария.
- комментарий налезал на кнопки.
- проблемы с таймаутами. Выставлены следующие таймауты:
60 сек - на странице без ввода данных, 120 сек с момента последнего нажатия на кнопку на странице ввода данных.
- после вывода сообщения "Невозможно связаться с платёжной системой. Попробуйте позже." осуществлялся произвольный
переход в главное меню.
- кнопка "назад" исчезала только тогда, когда внесенная сумма была больше максимальной.
- при неактивном числовом поле, пропадала надпись "Комиссия".
- некорректно отображалась экранная клавиатура.
- купюроприёмник оставался в активном состоянии, при возврате со страницы оплаты.
- на странице оплаты, надпись "Вы внесли недостаточную сумму!" исчезала одновременно с появлением кнопки оплатить,
когда сумма становилась больше или равной минимальной.
- не работал атрибут printer_ok_only в файле конфигурации операторов.
- не работал атрибут showAddInfo.
- если, при внесённой сумме меньше минимальной, нажать "Оплатить", то осуществлялся переход не в главное меню
Записной книжки, а в главное меню WebClient'а.
- связанные с использользованием специальных символов.
- проблемы перечисления сдачи на телефон.
Исправлены ошибки в WebClient:
- задвоение звука при возврате на предыдущую страницу.
- исправлена ошибка в логике купюроприемника.
- скорректирована работа таймаута платежа.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
Доработан движок проигрования звуковых файлов.
Если невозможно проиграть файл с помощью ICM, то он будет проигрываться стандартным winapi.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
Реализован сервис "Записная книжка".
Теперь пользователи терминала могут регистрироваться на терминале или на сайте по адресу: https://note.cyberplat.com,
заводить записи с наиболее часто оплачиваемыми операторами, и оплачивать их через терминал.
Идентификаторы операторвов(id) в файле operators.xml должны быть уникальны и постоянны, для локальных операторов предлагается
использовать значения начиная с 10000.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
Реализована функция фиксированной оплаты и зачисления излишка на мобильный телефон.
Для возможности принимать фиксированную оплату необходимо в файле operators.xml
в теге <fields> сделать соответствующее поле, у которого должен быть тип integer.
В теге <limit> атрибут fix должен быть равен номеру этого поля.
Пример:
<operator id="110" cyber_id="16">
<name>Ростелеком</name>
...
<limit min="1" max="30000" fix="103"/>
<fields>
<field id="100" type="masked">
<name>Номер телефона</name>
<mask>#8#8 (***) ***-**-**</mask>
</field>
<field id="101" type="masked">
<name>Дата выставления счета (ДД.ММ.ГГ)</name>
<mask>**!.!**!.!**</mask>
</field>
<field id="102" type="masked">
<name>Номер счета</name>
<mask>******! !***! !**</mask>
</field>
<field id="103" type="integer" maxlength="8">
<name>Сумма к оплате (пример: 154.30)</name>
<comment>Введите точную сумму с копейками, указанную в квитанции.</comment>
</field>
</fields>
...
</operator>
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
Добавлена возможность отображения оператором 999 логотипов разных операторов.
Пример из файла operators.xml:
<group id="100">
<operator_id id="999" image="mob_mts_espp.png"/>
<operator_id id="999" image="mob_beeline.png"/>
<operator_id id="999" image="mob_megafon.png"/>
<operator_id id="999" image="mob_skylink.png"/>
<operator_id id="999" image="mob_tele2.png"/>
</group>
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|CHANGE|
Для каждого устройства установлена проверка на синтаксическую корректность номера порта.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|CHANGE|
Построение меню вынесено из файла operators.xml в файл menu.xml.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|CHANGE|
Изменена логика отправки пакетов статистики: теперь устаревшие пакеты удаляются, если не отправились в течении часа.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|CHANGE|
Изменена логика работы модема.
Настройка параметров соединения (логин/пароль/параметры связи/etc) берутся из настроенного соединения в Windows.
Первая проверка баланса происходит через 1 час после запуска программы, при этом происходит обрыв существующего
соединения (также как и при отправке смс), получение баланса и восстановление соединения.
Если хосты для проверки связи не пингуются, то соединение сбрасывается и происходит повторный дозвон.
Если превышается лимит попыток установления соединения - сбрасывается питание модема (при установленном сторожевике).
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|BUG|
Исправлены ошибки:
- при ошибочной строке валидатора в файле конфигурации купюроприемник не инициализировался, однако надпись "Терминал временно не работает" не отображалась.
- при возврате со страницы оплаты, когда купюра еще не была внесена, купюроприемник оставался в режиме ожидания купюры.
- виртуальная клавиатура: при вводе нескольких символов,после нажатия кнопки "стереть", последний символ затирался,
однако при вводе n+1 символа он вводился вместо последнего имеющегося.
- некоректная работа купюроприемника JCM и MEI.
- некоректное отображение ступенчатой комиисии.
- некоректная работа сторожевика ОСМП1.
- при возврате на главную страницу со страницы оплаты происходило двойное промигивание экрана.
- виртуальная клавиатура: при нажатии кнопки ввод исчезала клавиатура.
- ошибки выделения памяти и обработки разрушительных сбоев.
- задвоение пакетов статистики в некоторых случаях.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
Если оператор в группе представлен в единственном числе - при клике на картинку группы, осуществляеться переход сразу на страницу оплаты существующего в единственном числе оператора.
Реализовано для кнопок главного меню.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|CHANGE|
Изменена логика подгрузки изображений - теперь они кешируются до отображения.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|CHANGE|
Изменена логика проведения платежей:если возникает ошибка, то осуществляется сразу переход к следующему пакету.
Если ошибка содержится в самом пакете, то пакет перемещается в папку unprocessed.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|CHANGE|
На странице ввода номера, таймер возврата на главную страницу обнуляется после каждого нажатия на кнопку.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
Дополнительные возможности по маскированию.
В файле operators.xml для тега <mask><mask> добавлено маскирование с помощью символа '#'.
Запись в маске <mask>#8# 8 (***) ***-**-**</mask> означает запрет ввода восмерки первым символом.
Т.е. если пользователь нажмет 8, то символ просто не отобразиться на экране.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|CHANGE|
Введен оператор 100, который позволяет выводить отдельных операторов на кнопки быстрого доступа в шапке главного меню.
Пример использования:
<group id="100" image="" title="" columns="1">
<operator_id id="0"/>
<operator_id id="2"/>
<group id="1200" image="mob_megafon.png" titleimage="" title="МЕГАФОН" columns="4" type="">
<operator_id id="1" image="mob_megafon_moscow.png"/>
<operator_id id="4" image="mob_megafon_sz.png"/>
<operator_id id="5" image="mob_megafon_ural.png"/>
<operator_id id="6" image="mob_megafon_sib.png"/>
<operator_id id="7" image="mob_megafon_pvl.png"/>
<operator_id id="8" image="mob_megafon_centr.png"/>
<operator_id id="9" image="mob_megafon_dv.png"/>
<operator_id id="10" image="mob_megafon_kavkaz.png"/>
<operator_id id="11" image="mob_megafon_yug.png"/>
<operator_id id="12" image="mob_megafon_tver.png"/>
</group>
<group id="1212" image="mob_skylink.png" titleimage="" title="СкайЛинк" columns="2" type="">
<operator_id id="19" image="mob_skylink_moscow.png"/>
<operator_id id="45" image="mob_skylink_sz.png"/>
<operator_id id="46" image="mob_skylink_nnovgorod.png"/>
<operator_id id="47" image="mob_skylink_ekaterinburg.png"/>
<operator_id id="48" image="mob_skylink_vladimir.png"/>
<operator_id id="49" image="mob_skylink_udmurtiya.png"/>
</group>
<operator_id id="21"/>
</group>
Для того чтобы на кнопке отображался логотип, который лежит в папке logo, он должен быть указан в теге оператора <rootmenuimage></rootmenuimage>.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
Добавлена ЭЦП для пакетов статистики. При соединении с сервером мониторинга, происходит обмен подписанными сообщениями, если подписи совпали,
то в том же соединении начинается обмен данными, иначе происходит разрыв соединения стороной, которая обнаружила ошибку подписи.
Для того, чтобы терминал начал посылать на мониторинг подписанные сообщения, в файле конфигурации config.xml введен
новый параметр <sign_statistics>1</sign_statistics> установка, которого в 1 принуждает терминал подписывать сообщения статистики и
проверять, что от сервера, тоже приходит подписанный ответ.
В сервере мониторинга данная возможность включена с версии 1.4.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
Добавлен онлайн-параметр для шаблона чека - AUTHCODE.
В ответе от сервера поле AUTHCODE,теперь можно распечатать на чеке.
Пример ответа (номер тарнзакции Киевстар - в поле AUTHCODE):
BEGIN DATE=11.02.2008 14:39:02 SESSION=43248 ERROR=0 RESULT=0 TRANSID=1299754 AUTHCODE=2791967
Этот параметр будет выводиться на печать, если он есть в запросе и в шаблоне чека указан этот тэг.
Для этого в файле operators.xml для нужного оператора в раздел <check> и <payment> необходимо добавить строку:
<receive-property name="AUTHCODE" description="Код авторизации" />
В шаблон чека добавить еще одну строку:
<String>%RAW_PARAMETER_NAME%: %RAW_PARAMETER_DATA%</String>
Таких строк в шаблоне чека может быть несколько.
По-умолчанию, в первую записывается номер телефона (поле NUMBER), таким образом, во вторую будет записан AUTHCODE.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
Добавлена валидация полей в интерфейсе с помощью регулярных выражений.
Для валидации в файле операторов в тэге field надо добавить тэг <regexp></regexp>.
Пример: <field id="100" type="text" klava="latc" minlength="6" maxlength="12">
<name>Код брони</name>
<comment>[b]Внимание[/b] Введите код брони. [b]6/b букв или [b]12/b цифр.</comment>
<regexp>([a-zA-Z]{6})$|(.{12})$</regexp>
</field>
В данном примере кнопка "Далее" появляется только если пользователь ввел с клавиатуры 6 букв(регистр не важен) или 12 цифр.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|BUG|
Исправлены ошибки:
- если в файле config.xml не прописан принтер,то после проверки номера, и внесения суммы платежа происходило зависание интерфейса.
- задвоение поля COMMENT в запросах CHECK и PAY
- печать чека баланса: при печати чека баланса из сервисного меню, чек не печатался, в логе сообщается об ошибке: PerformBalance Exception: is not a valid integer value
Исправлено, если не введен номер валидатора, то испольуется 0 в качестве значения по умолчанию.
- в сервисном меню при нажатии кнопки "Генерация ключей", ключи не генерировались.
- не определялись устройства, если они были не прописаны в нижнем регистре.
Теперь printer type, validator type protocol, watchdog type, keyboard type,cardreader type, coin_acceptor type, scanner type не чувствительны к регистру.
- не отображалась информация о балансе SIM карты.
Для правильного отображения баланса нужно после сервисного номера добавлять ";".
- при вводе данных через виртуальную клавиатуру,если информация вводилась с пробелами, то в запросе на сервер отправлялись невалидные данные.
- при автоопределении номера, последняя цифра не вводилась.
- отправлялось пустое письмо при инкассации.
- не корректно работал <processor type="External">
- не корректно логировался код ошибки, возвращаемой с сервера при запросе номиналов карт
- не архивировались логи при запросе их с сервера мониторинга
- если во время разбора шаблона чека встречается строка, содержащая одни пробелы или пустую строку, т.е. <String> </String> или <String></String>,
то чек не печатался.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
Реализована возможность работы терминала без купюроприемника, с одним монетоприемником.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|CHANGE|
Для корректной печати чека инкассации в файл шаблона чека Incass.xml добавить строки, соответствующие номиналу монет.
Если есть монеты и купюры равного номинала, то нужно указать:
<String>Купюры%10BILLNOMINAL%:%10BILLAMOUNT%. Сумма: %10BILLSUMM%</String>
<String>Монеты%10BILLNOMINAL%:%10BILLAMOUNT%. Сумма: %10BILLSUMM%</String>
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|CHANGE|
Изменена логика восстановления связи модемом.
Теперь при указании в файле config.xml параметра модема auto_dial="0",
ничего не делается(в данный момент подключение поднимается),
при auto_dial="1", если соединение установлено, то при запуске оно сбрасывается и поднимается заново.
Если нет соединения, то автоматически оно устанавливается.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
Реализована полупиновая схема оплаты
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
Выбор режима отображения надписи "онлайн" при оплате определенных операторов.
Если указать в теге <processor showOnLineComment="0"/>, то коментарий "Ваш платеж будет проведен в режиме OnLine" отображаться не будет.
По умолчанию данный комментарий выводится.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
Дополнительные возможности по маскированию.
В файле operators.xml в теге <mask><mask> можно задавать параметры маскирования с помощью символов '!' и '~'.
Вид маски | Введенный номер | Отправится на сервер | Отобразиться на экране | Примечание
8 (***) ***-**-** 9031234567 9031234567 8 (903) 123-45-67 Показываем, НЕ отправляем
!8! (***) ***-**-** 9031234567 89031234567 8 (903) 123-45-67 Показываем, отправляем
~8~ (***) ***-**-** 9031234567 89031234567 (903) 123-45-67 НЕ показываем, отправляем
8!33!~505~***-**-** 1234567 335051234567 833123-45-67 Более комплексный пример
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
Добавлен параметр для шаблона чека %INT_DEALER_POINT_CODE% (номер точки дилера) <parameters><key_info><keys>AP</keys></key_info></parameters>
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
Реализовано автоматическое проведение инкассации при снятии стекера купюроприемника.
Для этого необходимо в файле config.xml в тег validator добавить атрибут incass_open_stacker="1"
Пример: <validator type="CCNet" protocol="wba003" port="1" currency="RUR" exchange_rate="1" currency_name="руб" incass_open_stacker="1"/>
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|CHANGE|
Изменена система печати чеков - теперь можно создавать шаблоны не только обычных чеков, но и чеков инкассации.
В инсталляционный пакет включён конвертер старого формата в новый (файл ReceiptConverter.exe).
Запуск - ReceiptConverter.exe <Путь к каталогу WebClient>. Если конвертер лежит в каталоге WebClient,
то параметры можно не указывать.
Печатает чеки, шаблоны которых хранятся в XML файле, заменяя псевдопараметры
реальными значениями. Пример шаблона:
<?xml version="1.0" encoding="windows-1251" standalone="no"?>
<body>
<String>-----------------------------------</String>
<String> Дата Время Терминал</String>
<String> %DATETIME% %TERMNUMBER%</String>
<String>Номер сессии : %SESSNUM%</String>
<String>Сумма : %AMOUNTALL% %INT_CURRENCY%.</String>
<String>Комиссия : %COMISSION% %INT_CURRENCY%.</String>
<String>К зачислению : %AMOUNT% %INT_CURRENCY%.</String>
<String> СПАСИБО, СОХРАНЯЙТЕ ЧЕК</String>
<String> ПЛАТЕЖНАЯ СИСТЕМА КИБЕРПЛАТ</String>
</body>
В разное время и для разных чеков действителен разный набор параметров:
Действительны всегда:
%INT_DEALER_NAME% - Имя дилера
%INT_DEALER_ADDRESS% - Адрес дилера
%INT_DEALER_INN% - ИНН дилера
%INT_DEALER_PHONE% - Телефон дилера
%INT_POINT_ADDRESS% - Адрес точки приёма платежей
%TERMNUMBER% - Номер терминала
%INT_CURRENCY% - Валюта платежа
%INT_CONTRACT_NUMBER% - Номер контракта
%INT_BANK_NAME% - Наименование банка
%INT_BANK_BIK% - БИК банка
%INT_BANK_PHONE% - Телефон банка
Действительны при выдаче чека оплаты:
%TRANSID% - Номер транзакции
%SESSNUM% - Номер сессии
%DATETIME% - Текущие дата и время
%AMOUNTALL% - Внесённая сумма
%COMISSION% - Комиссия
%AMOUNT% - Сумма на счёт плательщика
%OPNAME% - Наименование операции
%INT_RECIPIENT_NAME% - Наименование организации, принявшей платёж
%INT_RECIPIENT_INN% - ИНН организации, принявшей платёж
Есть возможность задавать параметры в виде пар имя - значение.
Пока только для наименования и суммы платежа.
%RAW_PARAMETER_NAME%: %RAW_PARAMETER_DATA%
Имя файла - шаблона для чека задаётся в файле operators.xml в тэге cheque
operator\cheque\filename без указания пути к файлу
Действительны при выдаче чека инкассации и печати баланса:
%INCASSRECEIPTCOUNTER% - Порядковый номер чека текущей сессии инкассации (только во время инкассации)
%INCASSPERIODFROM% - Начало диапазона дат, за который производится инкассация
%CURRENTDATETIME% - Конец диапазона дат, за который производится инкассация
%KASETTENUMBER% - Номер кассеты, по которой производится инкассация
%BILLAMOUNT% - Количество купюр
%TOTALSUMM% - Общая сумма
%INCASSRECEIPTNUMBER% - Номер чека
%ACCOUNTBALANCE% - Баланс на счёте (не для всех чеков)
%<номинал>BILLNOMINAL% - Имя номинала для купюры, где <номинал> - числовое значение номинала купюры
%<номинал>BILLAMOUNT% - Количество купюры, где <номинал> - числовое значение номинала купюры
%<номинал>BILLSUMM% - Сумма по значению купюры, где <номинал> - числовое значение номинала купюры
Имя файлов - incass.xml и balance.xml
При печати чека об ошибке, если внесено достаточно денег
%DATETIME% - Текущие дата и время
%AMOUNTALL% - Внесённая сумма
%SESSNUM% - Номер сессии
%OPNAME% - Наименование операции
%COMISSION% - Комиссия
%AMOUNT% - Сумма на счёт плательщика
Имя файла - шаблона для чека задаётся в файле operators.xml в тэге cheque
operator\cheque\payment_notenoughmoney_filename без указания пути к файлу
При печати чека об ошибке, если внесено недостаточно денег
%DATETIME% - Текущие дата и время
%AMOUNTALL% - Внесённая сумма
%SESSNUM% - Номер сессии
%OPNAME% - Наименование операции
%COMISSION% - Комиссия
%AMOUNT% - Сумма на счёт плательщика
Имя файла - шаблона для чека задаётся в файле operators.xml в тэге cheque
operator\cheque\payment_error_filename без указания пути к файлу
Добавлены тэги для шаблонов чеков
%INT_BUSINESS_DEALER_ADDRESS% - Деловой(Физический) адрес дилера - config.xml\dealer_info\business_dealer_address
%RENT_COMISSION% - остаток пользователя
------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
Реализовано маскирование полей при выводе данных на печать, используются регулярные выражения, введен новый тэг cheque_mask с параметрами:
regexp - регулярное выражение по которому будет обрабатываться поле
format - формат выходного выражения
обработка данных производится без маски
если задано
<field id="100" type="masked">
<mask>8 (***) ***-**-**</mask>
то на чеке печатается только номер без пробелов, ковычек и тд, при составлении регулярного выражения надо опиратся на это, например если
мы хотим вывести только первые 3 цифры куда платит пользователь то надо сделать так:
<cheque_mask regexp="^(.{3}).{7}$" format="8 ($1) ***-**-**" />
------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
Добавлена валидация полей в интерфейсе с помощью регулярных выражений, для валидации в тэге field надо добавить тэг <regexp></regexp>
пример:
<field id="100" type="text" klava="latc" minlength="6" maxlength="12">
<name>Код брони</name>
<comment>[b]Внимание![/b] Введите код брони. [b]6[/b] букв или [b]12[/b] цифр.</comment>
<regexp>^([a-zA-Z]{6})$|^(.{12})$</regexp>
</field>
в данном примере кнопка "Далее" появляется только если пользователь ввел с клавиатуры 6 букв(регистр не важен) или 12 цифр
------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
При теге <processor showOnLineComment="0"/> коментарий "Ваш платеж будет проведен в режиме OnLine" не появляется, по умолчанию данный комментарий
выводится, реализовано для интерфейсов 2.0 и platina, в других интерфейсах данный комментарий не выводится.
------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
Реализована полупиновая схема, введен новый processor type="half_pin" - используется для некоторых транснациональных шлюзов(например, T-Mobile).
------------------------------------------------------------------------------------------------------------------------------------------------
|BUG|
Подправлены баги:
- Не иницилизировались RASDIALPARAMS.szUserName и RASDIALPARAMS.szPassword при пустых <modem login password> из конфига
- Исправлен баг с невозможностью генерирования ключей через сервисное меню
- Исправлен баг, теперь printer type, validator type protocol, watchdog type, keyboard type, cardreader type, coin_acceptor type, scanner type не
чувствительны к регистру, в коде нужно испльзовать lower case строки для работы с данными типами.
- Убрано задвоение поля COMMENT при запросах CHECK, PAY (Не соответсвует протоколу обмена). Возникало при использовании правил формирования запроса из
operators.xml, второй COMMENT всегда был равен InitialSession
- кидание exception 11004 в GetCardsInfoThread, опечатка в boost::format
------------------------------------------------------------------------------------------------------------------------------------------------
|INFO|
- Для получения баланса SIM карты, в peripherals\modem\service_number после номера для баланса должен стоять символ точки с запятой - ";"
------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
Добавлена поддержка принтера bd2-0286 (printer type="bd2-286")
------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
Добавлена поддержка принтера "Меркурий MSK (Гепард)" в обычном и фискальных режимах
в обычном режиме <printer type="mercmsk" port=".." />
в фискальном режиме с возможностью записи в буффер <printer type="mercmsk-frk-buffer" port=".." />
------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
Добавлена поддержка сканера шрих-кодов Metrologic Quantum/3480 (scanner type="quantum3480")
в config.xml добавлены строки конфигурации сканера шрих-кодов
<scanner type="" port="" />
Изменения файла operators.xml
Для услуг, которым необходима информация считываемая со сканера штрих-кода, добавляется поле с гуидом услуги
<serviceGuid></serviceGuid>
Для услуги "Коммунальные платежи Москва" добавлен гуид
<serviceGuid>{2F4B68AB-3875-494d-BB9B-2C194F3A1D9D}</serviceGuid>
со штрих кода считывается код абонента и период платежа
------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
добавлена поддержка принтера wp-k833 (printer type="wp-k833")
------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
Добавлена поддержка принтера StarTSP600, в обычном и фискальном режимах
Star TSP600 в обычном режиме <printer type="startsp600" port=".." />
Star TSP600 в фискальном режиме с возможностью записи в буффер <printer type="startsp600-frk-buffer" port=".." />
------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
Добавлена возможность выводить информацию на терминале, которая передается с сервера в поле запроса ADDINFO.
Для этого у оператора в файле operators.xml необходимо прописать параметр showAddInfo=1
<processor type="Cyberplat" id="1" keys_id="0" offline="0" showAddInfo="1">
------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
Добавлена поддержка монетоприёмника NRI G-13 mft (validator type="nri_g13" protocol="")
------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
Добавлена возможность инкассации по разным валидаторам отдельно.
------------------------------------------------------------------------------------------------------------------------------------------------
|BUG|
Исправлены утечки памяти
------------------------------------------------------------------------------------------------------------------------------------------------
|INFO|
Изменён версионинг софта. В дальнейшем применяется стандартное версионное обозначение.
Релиз кандидат – для выкладывания на сервер, как бета-кандидата на выпуск продукта. По релиз кандидату проводится регрессивное тестирование версии.
Релиз – для выкладывания на сервер в качестве последней стабильной версии.
Каждой сборке присваивается версия. Формат версии: версия.подверсия.релиз.билд. С каждым билдом связывается лог изменений со времени последнего билда такого же типа.
Для тестовой сборки ведётся четырёхциферный версионинг. Последнее значение увеличивается на единицу для каждой следующей сборки.
1.0.8.1, далее 1.0.8.2, и.т.д. Для релиз-кандидата то же самое, но перед инкрементируемой величиной ставится RC. 1.0.8.RC1, далее 1.0.8.RC2.
Релиз собирается после проверки очередного релиз-кандидата, при отсутствии ошибок выше критичности “Minor”. В версии релиза отсутствует последнее значение.
Например, если версия релиз-кандидата 1.0.8.RC2, то версия релиза, собранного из него будет 1.0.8
------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
Добавлен новый оператор ООО "Авиацентр". Теперь клиенты мировых авиаперевозчиков – компаний "Аэрофлот",
"British Airways", "Alitalia", "KLM Royal Dutch Airlines", "Austrian Airlines", "Air Canada",
"LOT", "Swiss International Airlines" и многих других смогут осуществлять покупку полноценного электронного
билета или оплачивать бронь.
------------------------------------------------------------------------------------------------------------------------------------------------
|INFO|
Если payment_notenoughmoney_filename не указан, но указан payment_error_filename, то будет искользоваться он, если оба тэга не указаны то будет
использоваться payment-error.xml
------------------------------------------------------------------------------------------------------------------------------------------------
|CHANGE|
Убрана возможность снятия комиссии при отрицательных значениях в файле operators.xml. Теперь, если отрицательная комиссия все же будет случайно
поставлена, то она обнуляется.
------------------------------------------------------------------------------------------------------------------------------------------------
|CHANGE|
Временно отключена возможность настройки config.xml из сервисного меню.
------------------------------------------------------------------------------------------------------------------------------------------------
|NEW|
В чеках можно использовать новый параметр $INT_DEALER_POINT_CODE$ (номер точки дилера).

+ 0
- 267
1.0/src/CardsInfo/CardsInfo.cpp View File

@@ -1,267 +0,0 @@
//---------------------------------------------------------------------------
#pragma hdrstop
#include "CardsInfo.h"
//#include "TPayment.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
TCardsInfo::TCardsInfo(TLogClass *_Log)
{
try
{
InnerLog=false;
Log=_Log;
if (_Log==NULL) {
Log = new TLogClass("TCardsInfo");
InnerLog=true;
}
Cards = NULL;
Cards = new TList;
CardsCount = 0;
}
catch (Exception &ex)
{
Log->Write("Exception in TCardsInfo::TCardsInfo: "+ex.Message);
}
}
//---------------------------------------------------------------------------
bool TCardsInfo::SetCardsInfo(AnsiString Source, TDateTime _ActualDT)
{
PCardInfo Card;
AnsiString ACardInfo;
try
{
Clear();
Source+=":";
while (Source.Pos(":")!=0) {
ACardInfo = Source.SubString(0,Source.Pos(":")-1);
ACardInfo+="=";
Card = new TCardInfo;
Card->CardName=ACardInfo.SubString(0,ACardInfo.Pos("=")-1);
ACardInfo = ACardInfo.SubString(ACardInfo.Pos("=")+1,ACardInfo.Length());
Card->CardNumber=ACardInfo.SubString(0,ACardInfo.Pos("=")-1).ToInt();
ACardInfo = ACardInfo.SubString(ACardInfo.Pos("=")+1,ACardInfo.Length());
try
{
Card->Sum=ACardInfo.SubString(0,ACardInfo.Pos("=")-1).ToDouble();
}
catch (...)
{
Card->Sum=-1;
}
ACardInfo = ACardInfo.SubString(ACardInfo.Pos("=")+1,ACardInfo.Length());
Card->OperatorName=ACardInfo.SubString(0,ACardInfo.Pos("=")-1);
ACardInfo = ACardInfo.SubString(ACardInfo.Pos("=")+1,ACardInfo.Length());
Card->OperatorCode=ACardInfo.SubString(0,ACardInfo.Pos("=")-1);
ACardInfo = ACardInfo.SubString(ACardInfo.Pos("=")+1,ACardInfo.Length());
Cards->Add(Card);
Source = Source.SubString(Source.Pos(":")+1,Source.Length());
CardsCount++;
}
if (_ActualDT.Val!=0)
ActualDT=_ActualDT;
else
ActualDT=ActualDT.CurrentDateTime();
return true;
}
catch (Exception &ex)
{
Log->Write("Exception in ~SetCardsInfo: "+ex.Message);
return false;
}
}
//---------------------------------------------------------------------------
TCardsInfo::~TCardsInfo()
{
try
{
if (InnerLog)
delete Log;
if (Cards) {
Clear();
delete Cards;
Cards=NULL;
}
}
catch (Exception &ex)
{
Log->Write("Exception in ~TCardsInfo: "+ex.Message);
}
}
//---------------------------------------------------------------------------
void TCardsInfo::Clear()
{
try
{
PCardInfo Card;
for (int i=0;i<Cards->Count;i++) {
Card=(PCardInfo)Cards->Items[i];
delete Card;
}
Cards->Clear();
CardsCount=0;
}
catch (Exception &ex)
{
Log->Write("Exception in TCardsInfo::Clear: "+ex.Message);
}
}
//---------------------------------------------------------------------------
PCardInfo TCardsInfo::GetCard(int _CardIndex)
{
try
{
PCardInfo Card = NULL;
if (_CardIndex<CardsCount)
Card=(PCardInfo)Cards->Items[_CardIndex];
else
Log->Write("Card "+AnsiString(_CardIndex)+" is out of bounds.");
return Card;
}
catch (Exception &ex)
{
Log->Write("Exception in TCardsInfo::GetCard: "+ex.Message);
return NULL;
}
}
PCardInfo TCardsInfo::GetCardByNumber(AnsiString _CardNumber)
{
try
{
PCardInfo Card;
for (int i=0;i<Cards->Count;i++) {
Card=GetCard(i);
if (Card->CardNumber==_CardNumber) {
return Card;
}
}
Log->Write("Card "+AnsiString(_CardNumber)+" not found.");
return NULL;
}
catch (Exception &ex)
{
Log->Write("Exception in TCardsInfo::GetCard: "+ex.Message);
return NULL;
}
}
//---------------------------------------------------------------------------
AnsiString TCardsInfo::GetCardName(AnsiString _CardNumber)
{
try
{
PCardInfo Card=GetCardByNumber(_CardNumber);
if (Card!=NULL)
return Card->CardName;
else
return "";
}
catch (Exception &ex)
{
Log->Write("Exception in TCardsInfo::GetCardName: "+ex.Message);
return "";
}
}
//---------------------------------------------------------------------------
AnsiString TCardsInfo::GetCardNumberByIndex(int _CardIndex)
{
try
{
PCardInfo Card=GetCard(_CardIndex);
if (Card!=NULL)
return Card->CardNumber;
else
return "";
}
catch (Exception &ex)
{
Log->Write("Exception in TCardsInfo::GetCardNumberByIndex: "+ex.Message);
return "";
}
}
//---------------------------------------------------------------------------
double TCardsInfo::GetCardSum(AnsiString _CardNumber)
{
try
{
PCardInfo Card=GetCardByNumber(_CardNumber);
if (Card!=NULL)
return Card->Sum;
else
return -1;
}
catch (Exception &ex)
{
Log->Write("Exception in TCardsInfo::GetCardSum: "+ex.Message);
return -1;
}
}
//---------------------------------------------------------------------------
AnsiString TCardsInfo::GetOperatorName(AnsiString _CardNumber)
{
try
{
PCardInfo Card=GetCardByNumber(_CardNumber);
if (Card!=NULL)
return Card->OperatorName;
else
return "";
}
catch (Exception &ex)
{
Log->Write("Exception in TCardsInfo::GetOperatorName: "+ex.Message);
return "";
}
}
//---------------------------------------------------------------------------
AnsiString TCardsInfo::GetOperatorCode(AnsiString _CardNumber)
{
try
{
PCardInfo Card=GetCardByNumber(_CardNumber);
if (Card!=NULL)
return Card->OperatorCode;
else
return "";
}
catch (Exception &ex)
{
Log->Write("Exception in TCardsInfo::GetOperatorCode: "+ex.Message);
return "";
}
}

+ 0
- 40
1.0/src/CardsInfo/CardsInfo.h View File

@@ -1,40 +0,0 @@
//---------------------------------------------------------------------------
#ifndef CardsInfoH
#define CardsInfoH
#include "TWConfig.h"
#include "LogClass.h"
//---------------------------------------------------------------------------
typedef struct CardInfo
{
AnsiString CardName;
AnsiString CardNumber;
double Sum;
AnsiString OperatorName;
AnsiString OperatorCode;
} TCardInfo;
typedef TCardInfo* PCardInfo;
class TCardsInfo
{
TList *Cards;
bool InnerLog;
TLogClass *Log;
public:
int CardsCount;
TDateTime ActualDT;
TCardsInfo(TLogClass*);
bool SetCardsInfo(AnsiString,TDateTime);
~TCardsInfo();
void Clear();
PCardInfo GetCard(int);
PCardInfo GetCardByNumber(AnsiString);
AnsiString GetCardName(AnsiString);
AnsiString GetCardNumberByIndex(int);
double GetCardSum(AnsiString);
AnsiString GetOperatorName(AnsiString);
AnsiString GetOperatorCode(AnsiString);
};
#endif

+ 0
- 1193
1.0/src/CommandReceiver/CommandReceiver.cpp
File diff suppressed because it is too large
View File


+ 0
- 63
1.0/src/CommandReceiver/CommandReceiver.h View File

@@ -1,63 +0,0 @@
//---------------------------------------------------------------------------
#ifndef CommandReceiverH
#define CommandReceiverH
#include "LogClass.h"
#include "TWConfig.h"
#include "XMLPacket.h"
#include "TFileMap.h"
#include "THTTPGetFileThread.h"
#include <string>
//---------------------------------------------------------------------------
class TCommandReceiver
{
TFileMap *FileMap;
TLogClass *Log;
TWConfig *Cfg;
TXMLPacket *XMLP;
bool InnerLog;
AnsiString GetFileNames(AnsiString _Mask);
bool CopyDir(AnsiString aFrom, AnsiString aTo, bool bClearDir);
bool PacketLoadError;
//THTTPGetFileThread *HTTPGetFile;
int GetFile(AnsiString URL, AnsiString FileName, AnsiString CUID, TDateTime CheckDT);
bool ListFile(AnsiString SourceFileName);
void __fastcall SZListFileEvent(System::TObject* Sender, WideString Filename, unsigned Fileindex, unsigned FileSizeU, unsigned FileSizeP, unsigned Fileattr, unsigned Filecrc, WideString Filemethod, double FileTime);
public:
TCommandReceiver(AnsiString, TWConfig*, TLogClass*, TFileMap*);
~TCommandReceiver();
void Clear();
bool CommandAlreadyRegistered(int CommandUID);
bool Store(AnsiString Ext = "pkt");
void StoreCommand(int CommandId, int CommandUID);
bool StoreRebootCommand(int CommandUID);
void StoreInhibitSendingCommand(int CommandUID);
void StoreSendFileCommand(int CommandUID, AnsiString FileName);
void StoreReceiveFileCommand(int CommandUID, AnsiString FileName, int FileSize, void* Buffer);
void StoreCancelPaymentCommand(int CommandUID, AnsiString SessionNumber);
void StoreGetFileByMaskCommand(int, AnsiString);
void StoreResurrectPaymentCommand(int CommandUID, AnsiString SessionNumber, AnsiString Parameters);
bool StoreHTTPFileRequestCommand(int CommandUID, AnsiString _Mask, TDateTime _FileCheckDT = 0);
bool StoreFullURLHTTPFileRequestCommand(int CommandUID, AnsiString _FileName, AnsiString _URL);
bool StoreShutDownCommand(int CommandUID);
bool StoreBlockCommand(int CommandUID);
bool StoreUnblockCommand(int CommandUID);
void StoreGetKeysCommand(int CommandUID, int KeysId, AnsiString Parameters);
bool UpdateFile(AnsiString SourceFileName, AnsiString TargetFileName);
bool StoreFile(AnsiString SourceFileName, AnsiString TargetFileName);
void ProcessFile(AnsiString RealFileName, AnsiString FileName);
int GetCommand();
bool Process();
bool Enabled;
bool ExtractFile(AnsiString SourceFileName, AnsiString TargetDirName);
bool DeleteDir(AnsiString DirName);
//AnsiString ShowError(AnsiString Header);
AnsiString GetDrive(void);
TDateTime LastUpdatedDT;
bool IsOnTime();
};
#endif

+ 0
- 29
1.0/src/Common/TFunctionThread.cpp View File

@@ -1,29 +0,0 @@
//---------------------------------------------------------------------------
#pragma hdrstop
#include "TFunctionThread.h"
template<typename T>
TFunctionThread<T>::TFunctionThread(T arg): TThread(true)
{
m_arg = arg;
}
//---------------------------------------------------------------------------
template<typename T>
__fastcall TFunctionThread<T>::~TFunctionThread()
{
}
//---------------------------------------------------------------------------
template<typename T>
void __fastcall TFunctionThread<T>::Execute()
{
execFunction(m_arg);
}
//---------------------------------------------------------------------------
//#pragma package(smart_init)

+ 0
- 26
1.0/src/Common/TFunctionThread.h View File

@@ -1,26 +0,0 @@
//---------------------------------------------------------------------------
#ifndef TFunctionThreadH
#define TFunctionThreadH
#include <Classes.hpp>
#include <boost/function.hpp>
template<typename T>
class TFunctionThread : public TThread
{
private:
T m_arg;
protected:
virtual void __fastcall Execute();
public:
boost::function1<void, T> execFunction;
TFunctionThread(T);
__fastcall virtual ~TFunctionThread();
};
//---------------------------------------------------------------------------
#endif

+ 0
- 1044
1.0/src/Common/common.cpp
File diff suppressed because it is too large
View File


+ 0
- 118
1.0/src/Common/common.h View File

@@ -1,118 +0,0 @@
//---------------------------------------------------------------------------
#ifndef commonH
#define commonH
#include <vcl.h>
#include <XMLDoc.hpp>
#include "LogClass.h"
template <class X> class xmlGuard
{
X obj;
public:
xmlGuard(const X& _object = NULL) : obj(_object) {};
~xmlGuard() { /*if (obj) obj.Release();*/ };
X operator->() { return obj; };
X get() { return obj; };
xmlGuard& operator= (const X& C)
{
/*if (Assigned())
obj.Release();*/
obj = C;
return *this;
};
bool Assigned() { return (obj != NULL); };
};
namespace SIDE
{
enum SIDE
{
LEFT = -1,
CENTER = 0,
RIGHT = 1
};
}
class XLog
{
bool InnerLog;
TLogClass* Log;
public:
XLog() {InnerLog = false; Log = NULL;};
~XLog() {if (InnerLog) { delete Log; Log = NULL;} };
void SetUp(TLogClass* _Log, AnsiString LogCaption) {if (_Log) { Log = new TLogClass(LogCaption.c_str()); InnerLog = true;} };
TLogClass* operator ->() { return Log; };
};
double ConvertCoinAcceptorValue(unsigned int Value, unsigned int Precession);
AnsiString ShowError(AnsiString Header);
std::string StripFileName(std::string FullName);
AnsiString GetFileName(AnsiString FullName);
AnsiString GetPath(AnsiString FullName);
AnsiString GetExtName(AnsiString FullName);
std::string getProjectFullPathName(std::string defaultValue = "");
std::string getWCDirectory(std::string defaultValue = "");
std::string getUpdaterDirectory(std::string defaultValue = "");
std::string getUpdaterFullPathName(std::string defaultValue = "");
std::string getRegistryTextValue(char*, char*, char* = "");
HKEY getRegistryKey(std::string);
double GetDouble(AnsiString);
bool IsDouble(AnsiString);
int GetInt(AnsiString);
long GetLong(AnsiString);
TDateTime GetDateTime(AnsiString);
AnsiString ChangeChars(AnsiString Source, AnsiString OldChars, AnsiString NewChars);
AnsiString RemoveSubStrings(AnsiString Source, AnsiString StartChars, AnsiString EndChars);
AnsiString GetSubString(AnsiString Source, AnsiString StartChars, AnsiString EndChars);
//AnsiString ChangeChars2(AnsiString Source, AnsiString OldChars, AnsiString NewChars);
std::string TruncateLocation(AnsiString _fileName);
bool StoreStringToFile(AnsiString FileName, AnsiString Content, TLogClass* Log = NULL);
bool GetFileData(AnsiString FileName, AnsiString &Content, TLogClass* Log = NULL);
int FileCount(AnsiString FileMask);
AnsiString TransLit(AnsiString InString);
AnsiString GetUTCDateTimeString(TDateTime DT);
AnsiString GetHEXString(AnsiString S, AnsiString Delimiter);
std::string mytrim(std::string);
std::string fill(std::string src, const std::string filler, int count, SIDE::SIDE align = SIDE::RIGHT, bool isAllowTrim = true);
std::string fill(int src, const std::string filler, int count, SIDE::SIDE align = SIDE::RIGHT, bool isAllowTrim = true);
bool AddTextNode(xmlGuard <_di_IXMLNode> &Parent, AnsiString Name, AnsiString Text);
bool GetNodeText(xmlGuard <_di_IXMLNode> &Parent, AnsiString Name, AnsiString &Text, bool bNoThrow = false);
bool isNodeExists(xmlGuard <_di_IXMLNode> &Parent, AnsiString Name);
void CheckNode(xmlGuard <_di_IXMLNode> &Node, AnsiString Name);
double my_round(double tt, bool rs = false);
bool TestArchiveFile(AnsiString SourceFileName, TLogClass* Log = NULL);
bool DeleteDir(AnsiString DirName, TLogClass *Log = NULL);
int GetIntFromBuffer(BYTE* fromAddr, int countBytes, int defaultValue = -1);
double GetDoubleFromBuffer(BYTE* fromAddr, int countBytes, double defaultValue = -1);
char* GetTextFromBuffer(BYTE* fromAddr, int countBytes);
void GetTextFromDWORDHalfBuffer(DWORD*, int, std::string&, bool isNeedTrim = true);
char* flipAndCodeBytes(const char* str, int pos, int flip, char* buf);
std::string WCharToString(wchar_t* str);
std::string DateTimeToString(TDateTime source);
int StringToInt(std::string str, int defaultValue = -1);
double StringToDouble(std::string str, double defaultValue = -1);
bool StringToBool(std::string str, bool defaultValue = false);
TDateTime StringToDateTime(std::string source);
int WCharToInt(wchar_t* str, int defaultValue = -1);
double WCharToDouble(wchar_t* str, double defaultValue = -1);
bool WCharToBool(wchar_t* str, bool defaultValue = false);
std::string GetStrFromBuffer(BYTE* fromAddr, int countBytes);
void activeSleep(int timeout, int step = 1);
//---------------------------------------------------------------------------
#endif

+ 0
- 61
1.0/src/Devices/BaseDevice/CCardReader/BaseCardReader.cpp View File

@@ -1,61 +0,0 @@
//---------------------------------------------------------------------------
#pragma hdrstop
#include "BaseCardReader.h"
//---------------------------------------------------------------------------
CBaseCardReader::CBaseCardReader(unsigned int comPortNum, std::string prefix, TLogClass* log)
: TDeviceClass(comPortNum, log, prefix.c_str()), IsWaitingData(false)
{
// from TDeviceClass
GlobalStop = true;
}
void CBaseCardReader::StartWaitData()
{
IsWaitingData = true;
// âîò äóìàþ ÷òî ëó÷øå äåëàòü.. StopPooling() èëè GlobalStop = true
StopPooling();
StartPooling();
}
void CBaseCardReader::StopWaitData()
{
IsWaitingData = false;
StopPooling();
}
int CBaseCardReader::Initialize()
{
return 0;
}
////////////////////////////////////////////////////////////////////////////////
// implementation of "null object" cardReader
CNullCardReader::CNullCardReader(unsigned int comPortNum, TLogClass* pLog)
: CBaseCardReader(comPortNum, "NullCardReader", pLog)
{
}
CNullCardReader::~CNullCardReader()
{
}
void CNullCardReader::StartWaitData()
{
}
void CNullCardReader::StopWaitData()
{
}
void CNullCardReader::Start()
{
}
void CNullCardReader::Stop()
{
}
#pragma package(smart_init)

+ 0
- 36
1.0/src/Devices/BaseDevice/CCardReader/BaseCardReader.h View File

@@ -1,36 +0,0 @@
//---------------------------------------------------------------------------
#ifndef BaseCardReaderH
#define BaseCardReaderH
//---------------------------------------------------------------------------
#include "DeviceClass.h"
#include "LogClass.h"
class CBaseCardReader : public TDeviceClass
{
public:
CBaseCardReader(unsigned int comPortNum, std::string prefix, TLogClass* log);
virtual ~CBaseCardReader() {};
// ìîæíî áûëî êîíå÷íî íå âûæîâûâàòüñÿ è ïðîñòî èñïîëüçîâàòü ñóùåñòâóþùèå ìåòîäû StartPooling / StopPooling
virtual void StartWaitData();
virtual void StopWaitData();
virtual int Initialize();
bool IsWaitingData;
};
class CNullCardReader : public CBaseCardReader
{
public:
CNullCardReader(unsigned int comPortNum, TLogClass* pLog = 0);
~CNullCardReader();
// from CBaseCardReader
virtual void StartWaitData();
virtual void StopWaitData();
// from TDeviceClass
virtual void Start();
virtual void Stop();
};
#endif

+ 0
- 64
1.0/src/Devices/BaseDevice/CCardReader/CardReader.cpp View File

@@ -1,64 +0,0 @@
//---------------------------------------------------------------------------
#pragma hdrstop
#include "CardReader.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
CCardReader::CCardReader(int ComPort,TLogClass* _Log, AnsiString Prefix)
: TDeviceClass(ComPort,_Log, Prefix)
{
LoggingErrors = true;
InitInfo = new _init_info();
FindCardInfo = new _findcard_info();
GetMenuInfo = new _getmenu_info();
WriteCardInfo = new _writecard_info();
}
CCardReader::~CCardReader()
{
if (InitInfo)
delete InitInfo;
if (FindCardInfo)
delete FindCardInfo;
if (GetMenuInfo)
delete GetMenuInfo;
if (WriteCardInfo)
delete WriteCardInfo;
}
int CCardReader::Init()
{
return 0;
}
int CCardReader::FindCard()
{
return 0;
}
int CCardReader::GetMenu()
{
return 0;
}
int CCardReader::WriteCard()
{
return 0;
}
void CCardReader::SetServerStatus(bool value)
{
_ServerConnected = value;
}
bool CCardReader::GetServerStatus()
{
return _ServerConnected;
}

+ 0
- 36
1.0/src/Devices/BaseDevice/CCardReader/CardReader.h View File

@@ -1,36 +0,0 @@
//---------------------------------------------------------------------------
#ifndef CardReaderH
#define CardReaderH
//---------------------------------------------------------------------------
#include "DeviceClass.h"
#include "LogClass.h"
#include "CardReaderParams.h"
class CCardReader : public TDeviceClass
{
protected:
bool _ServerConnected;
virtual void SetServerStatus(bool value);
virtual bool GetServerStatus();
public:
CCardReader(int ComPort = 0,TLogClass* _Log = NULL, AnsiString Prefix = "");
virtual ~CCardReader();
_init_info* InitInfo;
_findcard_info* FindCardInfo;
_getmenu_info* GetMenuInfo;
_writecard_info* WriteCardInfo;
__property bool ServerConnected = {read = GetServerStatus, write = SetServerStatus};
virtual int Init();
virtual int FindCard();
virtual int GetMenu();
virtual int WriteCard();
virtual void StopOperation(){};
};
#endif

+ 0
- 87
1.0/src/Devices/BaseDevice/CCardReader/CardReaderParams.cpp View File

@@ -1,87 +0,0 @@
#include <vcl.h>
#include <stdio.h>
//---------------------------------------------------------------------------
#pragma hdrstop
#include "CardReaderParams.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
//==============================================================================
_init_info::_init_info() :_info()
{
ClearMembers();
Status = cs_Wait;
}
void _init_info::ClearMembers()
{
nSystemCode = 0;
nDeviceCode = 0;
nCom = 0;
}
//==============================================================================
_findcard_info::_findcard_info() :_info()
{
ClearMembers();
Status = cs_Wait;
}
void _findcard_info::ClearMembers()
{
CardFound = false;
memset(psCardNum,0,2048);
}
//==============================================================================
_getmenu_info::_getmenu_info() :_info()
{
ClearMembers();
Status = cs_Wait;
}
_getmenu_info::~_getmenu_info()
{
}
void _getmenu_info::ClearMembers()
{
pnOrderId = 0;
memset(psCardNum,0,2048);
for(int i=0; i<512; i++)
{
pAMenu[i].nID = 0;
pAMenu[i].nParentID = 0;
memset(pAMenu[i].sText,0,100);
pAMenu[i].nPriceInRub = 0;
pAMenu[i].nHasChildren = 0;
memset(pAMenu[i].nReserved,0,16);
}
pnItemsNum = 0;
memset(psCardStatus,0,2048);
}
//==============================================================================
_writecard_info::_writecard_info() :_info()
{
ClearMembers();
Status = cs_Wait;
}
void _writecard_info::ClearMembers()
{
pnOrderId = 0;
memset(psCardNum,0,2048);
nMenuItemID = 0;
nAcceptedInRub = 0;
nAuthoriseCode = 0;
memset(psCardStatus,0,2048);
}

+ 0
- 70
1.0/src/Devices/BaseDevice/CCardReader/CardReaderParams.h View File

@@ -1,70 +0,0 @@
//---------------------------------------------------------------------------
#ifndef CardReaderParamsH
#define CardReaderParamsH
#include "DeviceThread.h"
typedef struct
{
long nID; //Êîä ïóíêòà ìåíþ
long nParentID; //Êîä ïóíêòà ìåíþ-ðîäèòåëÿ
char sText[100]; //Òåêñò ïóíêòà ìåíþ
short nPriceInRub; //Ñòîèìîñòü êîäèðîâàíèÿ ÏÁ ýòîãî ïóíêòà â ðóáëÿõ
short nHasChildren; //Ôëàã åñòü ëè ó ýòîãî ïóíêòà äî÷åðíèå ýëåìåíòû
char nReserved[16]; //Çàðåçåðâèðîâàíî äëÿ ðàçâèòèÿ
} ASKOPM_Menu;
class _init_info : public _info
{
public:
virtual void ClearMembers();
_init_info();
virtual ~_init_info(){};
long nSystemCode;
long nDeviceCode;
short nCom;
};
class _findcard_info : public _info
{
public:
virtual void ClearMembers();
_findcard_info();
virtual ~_findcard_info(){};
char psCardNum[2048];
bool CardFound;
};
class _getmenu_info : public _info
{
public:
virtual void ClearMembers();
_getmenu_info();
virtual ~_getmenu_info();
long pnOrderId;
char psCardNum[2048];
ASKOPM_Menu pAMenu[512];
short pnItemsNum;
char psCardStatus[2048];
};
class _writecard_info : public _info
{
public:
virtual void ClearMembers();
_writecard_info();
virtual ~_writecard_info(){};
long pnOrderId;
char psCardNum[2048];
long nMenuItemID;
short nAcceptedInRub;
long nAuthoriseCode;
char psCardStatus[2048];
};
#endif

+ 0
- 158
1.0/src/Devices/BaseDevice/CCoinAcceptor/CCoinAcceptor.cpp View File

@@ -1,158 +0,0 @@
//---------------------------------------------------------------------------
#pragma hdrstop
#include "CCoinAcceptor.h"
#include "boost/format.hpp"
//---------------------------------------------------------------------------
#pragma package(smart_init)
CCoinAcceptor::CCoinAcceptor(int id, int ComPort,TLogClass* _Log, AnsiString Prefix)
: TDeviceClass(ComPort,_Log, Prefix)
{
ID = id;
ExchangeRate = 1;
Currency = "rur";
MaxCash = 0;
MinCash = 1;
DeviceName = "CoinAcceptor";
m_enable = false;
}
CCoinAcceptor::~CCoinAcceptor()
{
try
{
StopPooling();
}
__finally
{
}
}
bool CCoinAcceptor::isEnableBill()
{
return m_enable;
}
bool CCoinAcceptor::IsItYou()
{
if (DeviceThread)
return DeviceThread->IsItYou();
else
return false;
}
void CCoinAcceptor::SetMaxCash(double value)
{
MaxCash = value;
if (DeviceThread)
{
DeviceThread->MaxCash = MaxCash;
Log->Write((boost::format("SetMaxCash(): MaxCash = %1%") % MaxCash).str().c_str());
}
}
void CCoinAcceptor::SetMinCash(double value)
{
MinCash = value;
if (DeviceThread)
{
DeviceThread->MinCash = MinCash;
Log->Write((boost::format("SetMinCash(): MinCash = %1%") % MinCash).str().c_str());
}
}
void CCoinAcceptor::Enable()
{
m_enable = true;
if ((DeviceState)&&(Log))
Log->Write((boost::format("Idle = %1%") % DeviceState->Idle).str().c_str());
ClearMoney();
DeviceState->BillEnable = true;
SetExtCommand(oc_Enable);
/*if (DeviceThread)
{
DeviceThread->EnterLoop = true;
CheckFrozen();
}*/
}
void CCoinAcceptor::Disable()
{
m_enable = false;
if ((DeviceState)&&(Log))
Log->Write((boost::format("Idle = %1%") % DeviceState->Idle).str().c_str());
DeviceState->BillEnable = false;
SetMaxCash(0);
SetExtCommand(oc_Disable);
/*if (DeviceThread)
{
DeviceThread->EnterLoop = true;
CheckFrozen();
}*/
}
void CCoinAcceptor::ClearMoney()
{
if (DeviceThread)
{
DeviceThread->bill_count_old = 0;
DeviceThread->bill_count = 0;
DeviceState->Count = 0;
}
}
double CCoinAcceptor::GetMoney()
{
double bill_count = 0;
if (DeviceThread)
bill_count = DeviceThread->bill_count = DeviceState->Count;
return bill_count;
}
void CCoinAcceptor::StartDevice()
{
StartPooling();
}
bool CCoinAcceptor::IsInitialized()
{
if (DeviceThread)
return DeviceThread->IsInitialized();
else
return Initialized;
}
bool CCoinAcceptor::CheckFrozen()
{
clock_t CurrentTime = clock();
if((Port != NULL)&&(CurrentTime - GetTimeStamp1()) > (FrozenTimeOut*1000))
{//ďîňîę çŕâčń
if(DeviceState)
{
DeviceState->OutStateCode = DSE_NOTMOUNT;
if (DeviceState->OldOutStateCode != DeviceState->OutStateCode)
{
Log->Write("CoinAcceptor thread is frozen.");;
ChangeDeviceState();
}
}
return false;
}
else
return true;
}
bool CCoinAcceptor::CheckState()
{
if (DeviceThread)
{
if (CheckFrozen())
return true;
else
return false;
}
else
return false;
}

+ 0
- 47
1.0/src/Devices/BaseDevice/CCoinAcceptor/CCoinAcceptor.h View File

@@ -1,47 +0,0 @@
//---------------------------------------------------------------------------
#ifndef CCoinAcceptorH
#define CCoinAcceptorH
#include "DeviceClass.h"
#include "LogClass.h"
enum ca_OutCommands
{
oc_Disable = 1,
oc_Enable = 2,
oc_GetID = 3
};
class CCoinAcceptor : public TDeviceClass
{
private:
bool m_enable;
protected:
bool CheckFrozen();
virtual void ProcessOutCommand(){};
public:
int ID;
double ExchangeRate;
double MinCash;
CCoinAcceptor(int id = 0, int ComPort = 1,TLogClass* _Log = NULL, AnsiString Prefix = "");
virtual ~CCoinAcceptor();
bool isEnableBill();
virtual bool IsItYou();
virtual bool IsInitialized();
virtual void SetMaxCash(double value);
virtual void SetMinCash(double value);
virtual void Enable();
virtual void Disable();
virtual void ClearMoney();
virtual double GetMoney();
virtual bool CheckState();
virtual void StartDevice();
};
//---------------------------------------------------------------------------
#endif

+ 0
- 87
1.0/src/Devices/BaseDevice/CKeyboard/CKeyboard.cpp View File

@@ -1,87 +0,0 @@
//---------------------------------------------------------------------------
#pragma hdrstop
#include "CKeyboard.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
CKeyboard::CKeyboard(int id, int ComPort,TLogClass* _Log, AnsiString Prefix)
: TDeviceClass(ComPort,_Log, Prefix)
{
ID = id;
DeviceName = "Keyboard";
ParentWindow = NULL;
}
</