Фрилансеры предложат решение вашей задачи уже через несколько минут!

Публикация заказа на фриланс бирже не займет много времени.

21 день назад
Чингиз Манат
39 лет, Азербайджан
21 день в сервисе
Был онлайн 18 дней назад
21 день назад

Добрый день

Имеется софт UCS R-keeper.К нему подключаем CRM внешнюю систему лояльности. Соединение систем проходит через через ретранслятор Farcards, для которого пишется DLL.(Функции: начисление,списание, баланс). Dll-ку написали по инструкции.Баланс работает, а начисление, списание нет. Нужно отредактировать код до рабочего состояния.


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

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

function GetCardInfoL( Card: Int64; Restaurant, UnitNo: DWORD; Info: Pointer ): Integer; stdcall;

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

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

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

результат

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

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

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

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

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

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

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

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

Word номер скидки

Int64 сумма, доступная для оплаты счета, в копейках

40 байт Asciiz строка - имя владельца карты

Word номер бонуса

Byte Карта заблокирована
0 - нет
1 - да

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

Int64 предельная сумма скидки, в копейках

DWORD тип неплательщика

256 байт Asciiz строка - произвольная информация о карте

Int64 сумма на карточном счете N 2, в копейках
Int64 сумма на карточном счете N 3, в копейках
Int64 сумма на карточном счете N 4, в копейках
Int64 сумма на карточном счете N 5, в копейках

DWORD Номер счета - именно он будет передан в остальные функции

Int64 сумма на карточном счете N 6, в копейках
Int64 сумма на карточном счете N 7, в копейках
Int64 сумма на карточном счете N 8, в копейках

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

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

проводит транзакцию для карты

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

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

результат

0 - без ошибок
1 - транзакция не проведена

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

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

Byte Тип транзакции
0 - платеж (снятие денег со счета)
1 - скидка
2 - бонус (начисление денег на счет)
3 - потраты гостя (сколько заплатил своих денег)

Int64 сумма, в копейках,
для типа 0 (платеж):
оплата снятием денег с карты - отрицательная сумма,
отмена оплаты - положительная сумма;
для типа 1 (скидка):
скидка клиенту - отрицательная сумма,
отмена скидки - положительная сумма;
для типа 2 (бонус):
клиенту начисляется бонус - положительная сумма,
отмена бонуса - отрицательная сумма;
для типа 3 (потраты):
клиент заплатил - положительная сумма,
отмена чека - отрицательная сумма;
Word код ресторана
DWORD кассовая дата ( 0 -> 30/12/1899 )
Byte номер кассы
Word резервное поле
далее информация о НДС по налогам A B C D
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

DWORD номер чека

-----------------------------------------------------------------------
Необязательная функция

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

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

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

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

результат

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

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

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

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

-----------------------------------------------------------------------
Необязательная функция

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

Возвращает сообщение, которое будет показано на экране кассы.

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

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

результат

0 - без ошибок
1 - счет не существует

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

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

256 байт Asciiz строка - сообщение
Byte ставить 0

-----------------------------------------------------------------------
Необязательная функция

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

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

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

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

результат

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

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

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

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

-----------------------------------------------------------------------
Необязательная функция

function CheckInfoL( Account: DWORD; Info: Pointer; Size: DWORD ): Integer; stdcall;

Касса сообщает информацию о закрытом чеке. Формат - XML.

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

Account - номер счета
Info - буфер, в котором лежит информация о чеке
Size - длина информации

результат

0 - без ошибок
1 - cчет не существует

-----------------------------------------------------------------------
Необязательная функция

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;

-----------------------------------------------------------------------
Необязательная функция

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

Возвращает сообщение, которое будет распечатано на кассе.
Параметры такие же, как у функции GetCardMessageL.

-----------------------------------------------------------------------
Необязательная функция

function TransactionPacketL( Count: Integer; List: Pointer ): Integer; stdcall;

проводит несколько транзакций за один раз.

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

Count - количество транзакций в списке
List - адрес списка транзакций, каждый элемент этого списка такой:

Account DWORD номер счета
Info Pointer такая же, как в функции TransactionL

результат

0 - все транзакции проведены
1 - ни одна транзакция не проведена

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

----------------------------------------------------------------------
Необязательная функция

procedure AnyInfo( InpBuf: Pointer; InpLen: Integer; var OutBuf: Pointer; var OutLen: Integer ); 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 Init; - вызовется после загрузки DLL
procedure Done; - вызовется перед выгрузкой DLL
=====================================================================

  • Рекламное место свободно
    34 дня за $12
  • Рекламное место свободно
    34 дня за $12
Приглашенные фрилансеры

Нет заявок от приглашенных фрилансеров

Заявки фрилансеров

Нет заявок от фрилансеров

Другие заказы в категории «Прикладное ПО»