
DLL, эмулирующая работу сервера персональных карт для касс.

Для FarCards 6.XX

DLL должна предоставить функции GetCardInfoEx и TransactionsEx.
Все остальные функции являются необязательными.

-----------------------------------------------------------------------
function GetCardInfoEx(
  Card: Int64; Restaurant, UnitNo: DWORD;
  Info: Pointer;
  InpBuf: Pointer; InpLen: DWORD; InpKind: Word;
  var OutBuf: Pointer; var OutLen: DWORD; var OutKind: Word
  ): Integer; stdcall;

Эта функция возвращает информацию о карте

параметры:

Card        - номер карты
Restaurant  - код ресторана
UnitNo      - номер кассы
Info        - адрес структуры, которую функция должна заполнить,
              если карта существует
InpBuf      - дополнительная информация от кассы о заказе
InpLen      - длина информации от кассы
InpKind     - тип информации от кассы (0-нет 1-XML)
OutBuf      - дополнительная ответная информация
OutLen      - длина ответной информации (не более 150kb)
OutKind     - тип ответной информации  (2-Pr1me 101-Пластек)

результат

0 - без ошибок, структура Info заполнена
1 - карта не существует

Структура, на которую указывает Info:

Word        размер структуры = 1164 байт (это поле заполнено при вызове)

Byte        Карта существовала, но была удалена
            0 - нет, и сейчас есть
            1 - да, удалена

Byte        Карту надо изъять
            0 - нет
            1 - да

Byte        Истек срок действия
            0 - нет
            1 - да

Byte        Сейчас карта не действует
            0 - нет, действует
            1 - да, не действует

Byte        Нужно ли подтверждение менеджера
            0 - не нужно
            1 - нужно

Byte        Карта заблокирована
            0 - нет
            1 - да
256 байт    Asciiz строка - причина блокировки карты - будет показана на кассе

40 байт     Asciiz строка - имя владельца карты
Int64       Идентификатор владельца карты
DWORD       Номер счета
DWORD       тип неплательщика
Word        номер бонуса
Word        номер скидки
Int64       предельная сумма скидки, в копейках
Int64       сумма, доступная для оплаты счета, в копейках
Int64       сумма на карточном счете N 2, в копейках
Int64       сумма на карточном счете N 3, в копейках
Int64       сумма на карточном счете N 4, в копейках
Int64       сумма на карточном счете N 5, в копейках
Int64       сумма на карточном счете N 6, в копейках
Int64       сумма на карточном счете N 7, в копейках
Int64       сумма на карточном счете N 8, в копейках
256 байт    Asciiz - произвольная информация о карте
256 байт    Asciiz - информация для вывода на экран кассы
256 байт    Asciiz - информация для распечатки на принтере


-----------------------------------------------------------------------

function TransactionsEx(
  Count: DWORD; List: Pointer;
  InpBuf: Pointer; InpLen: DWORD; InpKind: Word;
  var OutBuf: Pointer; var OutLen: DWORD; var OutKind: Word
  ): Integer; stdcall;

Эта функция проводит транзакции для кассового чека

параметры:

Count       - количество транзакций
List        - адрес списка, каждый элемент котoрого - ссылка (Pointer) на
              описание транзакции (см. ниже)
InpBuf      - дополнительная информация от кассы о чеке
InpLen      - длина информации от кассы
InpKind     - тип информации от кассы  (0-нет 1-XML)
OutBuf      - дополнительная ответная информация
OutLen      - длина ответной информации (не более 150kb)
OutKind     - тип ответной информации

результат

0 - все транзакции проведены
1 - ни одна транзакция не проведена
частичного выполнения быть не должно - либо все проходят, либо ни одна!

Описание одной транзакции

Word        размер структуры = 122 байт
Int64       Карта
Int64       Идентификатор владельца карты
DWORD       Номер счета
Byte        Тип транзакции
            0 - платеж (снятие денег со счета)
            1 - скидка
            2 - бонус (начисление денег на счет)
            3 - потраты гостя (сколько заплатил своих денег)

Int64       сумма, в копейках,
              для типа 0 (платеж):
                оплата снятием денег с карты  - отрицательная сумма,
                отмена оплаты - положительная сумма;
              для типа 1 (скидка):
                скидка клиенту - отрицательная сумма,
                отмена скидки - положительная сумма;
              для типа 2 (бонус):
                клиенту начисляется бонус  - положительная сумма,
                отмена бонуса - отрицательная сумма;
              для типа 3 (потраты):
                клиент заплатил - положительная сумма,
                отмена чека - отрицательная сумма;
Word        код ресторана
DWORD       кассовая дата ( 0 -> 30/12/1899 )
Byte        номер кассы
DWORD       номер чека
   далее информация о налогах в чеке (8 штук)
Int64       сумма с налогом A
Word        размер налога A в процентах * 100  (1500 -> 15.00%)
Int64       сумма с налогом B
Word        размер налога B в процентах * 100
Int64       сумма с налогом C
Word        размер налога C в процентах * 100
Int64       сумма с налогом D
Word        размер налога D в процентах * 100
Int64       сумма с налогом E
Word        размер налога E в процентах * 100
Int64       сумма с налогом F
Word        размер налога F в процентах * 100
Int64       сумма с налогом G
Word        размер налога G в процентах * 100
Int64       сумма с налогом H
Word        размер налога H в процентах * 100

-----------------------------------------------------------------------

procedure Init; stdcall; - вызовется после загрузки DLL

-----------------------------------------------------------------------

procedure Done; stdcall; - вызовется перед выгрузкой DLL

-----------------------------------------------------------------------

function GetCardImageEx( Card: Int64; Info: Pointer ): Integer; stdcall;

Возвращает файл с картинкой для карты, например фотографию владельца
или его подпись.
Тип изображения - BMP, JPEG, GIF.

входные параметры:

Int64       Карта
Info        адрес структуры, которую функция должна заполнить

результат

0 - без ошибок
1 - нет счета либо нет картинки

Структура, на которую указывает Info:

Word        размер структуры = 258 байт

256 байт     Asciiz строка - имя файла с картинкой


-----------------------------------------------------------------------

function GetDiscLevelInfoL( Account: DWORD; Info: Pointer ): Integer; stdcall;

возвращает информацию о текущем дисконтном уровне карты

входные параметры:

Account - номер счета
Info - адрес структуры, которую функция должна заполнить если карта существует

результат

0 - без ошибок, структура Info заполнена
1 - cчет не существует

  Структура, на которую указывает Info:

Word        размер структуры = 90 байт (это поле заполнено при вызове)

40 байт     Asciiz строка - название текущего дисконтного уровня.
40 байт     Asciiz строка - название cледующего дисконтного уровня.
Int64       сумма, необходимая для перехода на следующий уровень

-----------------------------------------------------------------------

procedure FindCardsL( FindText: PAnsiChar; CBFind: Pointer; Back: Pointer ); stdcall;

Поиск счетов по подстроке. 

Для каждого найденного счета DLL должна вызывать call-back функцию CBFind(). 
Первым параметром в ней DLL должна передать Back.
Card и Holder - информация из найденного счета.
Тип функции CBFind:

procedure CBFind( Back: Pointer; Account: DWORD; Card: Int64; Holder: PAnsiChar ); stdcall;

-----------------------------------------------------------------------

procedure AnyInfo( InpBuf: Pointer; InpLen: DWORD; var OutBuf: Pointer; var OutLen: DWORD ); stdcall;

Обмен произвольной информацией

InpBuf - информация от кассы
InpLen - длина информации от кассы
OutBuf - ответная информация
OutLen - длина ответной информации

----------------------------------------------------------------------

function FindEmail( Email: PAnsiChar; Info: Pointer ): Integer; stdcall;

Поиск счета по e-mail.

входные параметры:

Email - искомый e-mail
Info - адрес структуры, которую функция должна заполнить, если счет найден

результат

0 - без ошибок, структура Info заполнена
1 - cчет не существует

  Структура, на которую указывает Info:

Word        размер структуры = 54 байт (это поле заполнено при вызове)
DWORD       Номер счета
Int64       Номер карты
40 байт     Asciiz строка - имя владельца карты

-----------------------------------------------------------------------

procedure FindAccountsByKind( Kind: Integer; FindText: PAnsiChar; CBFind: Pointer; Back: Pointer ); stdcall;

Поиск счетов по разным признакам.

Kind - тип искомой информации
       2 - номер комнаты (для гостиниц)
       3 - по QR коду

Для каждого найденного клиента DLL должна вызывать call-back функцию CBFind().
Первым параметром в ней DLL должна передать Back.
Card и Holder - информация из найденного счета.
Тип функции CBFind:

procedure CBFind( Back: Pointer; Account: DWORD; Card: Int64; Holder: PAnsiChar ); stdcall;

=====================================================================
