19.03.2010 01:06
Павел Сосновских
 
Поставлена задача:
надо, чтобы в чеке, в котором накапливаются/расходуются бонусы внизу в разделе скидок чека появилось что-то вида:

Накоплено бонусов:......<сумма>
Бонусов на счете:.........<сумма>
Использовано бонусов:..<сумма>

Соответственно, правлю reciept.lua Пока что получилось сделать только 3ью из этих строк. Для остальных, насколько понимаю, надо использовать:
adder_info.amount и client_account.account_balance_info, но не до конца понимаю как их использовать в нужном разделе чека - print_hard_subtotal

Буду благодарен любой помощи, ибо в ООП на данный момент не очень силен.
22.03.2010 14:55
Павел Сосновских
 
Что-то никто ничего не говорит...
Кое-что-то сделать уже удалось. А именно, строку "Накоплено бонусов...<сумма>". Сделал вот как:
Код:
         if __hard_subtotal.receipt.items:getdiscount(discount):is_initialized() and __hard_subtotal.receipt.items:getdiscount(discount):get():sign() == 0 then
	        if string.len(ukm.rightpad(ukm.left(discount.name, width-20),width-20,".") .. " " ..  tostring(__hard_subtotal.receipt.items:getbasetotal(discount)*ukm.currency(0.05))) < width then
                    text = text .. ukm.adjustment(ukm.rightpad(ukm.left(discount.name, width-20),width-20,"."), tostring(__hard_subtotal.receipt.items:getbasetotal(discount)*ukm.currency(0.05)), width-1, ".") .. "\n";
                 else
                    text = text .. ukm.rightpad(ukm.rightpad(ukm.left(discount.name, width-20),width-20,"."), width-1, ".") .. "\n";
                    text = text .. ukm.leftpad(tostring(__hard_subtotal.receipt.items:getbasetotal(discount)*ukm.currency(0.05)),width-1,".") .. "\n";
                 end
         end
Это все в функции print_hard_subtotal
там, где "--печать скидок чека"
Перед строкой:
Код:
         if __hard_subtotal.receipt.items:getdiscount(discount):is_initialized() and __hard_subtotal.receipt.items:getdiscount(discount):get():sign() ~= 0 then
Сделал немного коряво. Как сделать, чтоб процент не вручную был прописан, а брался из алгоритма скидки?

Осталось сделать баланс на счете клиента. Приведенная раньше мысль об adder_info.amount оказалась неверна. Это поле будет заполнено, если на счет начисляется сумматорами. У меня - алгоритмами скидок. Нужно как-то добраться до client_account.account_balance_info, но как это сделать в скрипте чека разобраться не могу. Может быть можно как-то это вывести в разделе про клиента (print_client). Может быть как-то включить sql-запрос в скрипт чека.
Буду благодарен любым идеям.
22.03.2010 16:27
vdm
 
Грамотно подсказать не могу, не делал в скриптах ничего сложнее комментирования и правки текстов.

По процентам.
Накоплено бонусов: - это должна быть сумма начисления по текущему чеку ?
Тогда ниччего не понял, зачем вручную ее считать, когда в там стандартном виде есть .... getdiscount(discount):get()
По имени или каким-то другим параметрам определить, что текущая скидка - начисляющая на счет и вывести ее с нужным текстом. Хотя если она не сохраняется в чеке... Тогда не знаю.

По счетам - может взять из account.lua - print_client_account_info
account = ukm.map.string.currency.iterator(__client_info.account_info);
и т.д. ... ?
Опять же по каким-то критериям (имя/id) нужно отфильтровать бонусный счет.

sql можно использовать, см. reports_ext.lua
22.03.2010 22:51
Павел Сосновских
 
Цитата:
vdm По счетам - может взять из account.lua - print_client_account_info
account = ukm.map.string.currency.iterator(__client_info.account_info);
и т.д. ... ?
Опять же по каким-то критериям (имя/id) нужно отфильтровать бонусный счет.

sql можно использовать, см. reports_ext.lua
Это я все видел. Вот только непонятно как это использовать в receipt.lua
Функции из account.lua, насколько я понимаю, вызываются УКМом с какими-то параметрами. Среди них есть параметр класса client_account, поэтому там легко можно обратиться и к балансу счета. В reports_ext.lua тоже самое - функциям передается параметр(вроде __rep) класса query, с которым можно соответсвующим образом обращаться. В скрипте же receipt.lua подходящих входных параметров не нашел. Или они все же есть?

Цитата:
vdm когда в там стандартном виде есть .... getdiscount(discount):get()
Так не получается. Скидка начисляющая на счет клиента не меняет сумму текущего чека, поэтому приведенный способ даст "0.00". Надо добраться именно до алгоритма скидки.
24.03.2010 20:19
Павел Сосновских
 
Нарисовал после ответа ТП плюса. Приведу выдержки из него на случай, если кому понадобится:

Цитата:
1. Процент скидки из созданного алгоритма вывести в lua нельзя. Предлагаю добавить его в название скидки и выводить вместе с ним;
2. Доступ к классу query есть только для отчетов по внешним скриптам. Для работы с query надо иметь соединение с БД, а оно экспортируется только в отчетах;
3. Класс client_account предоставляет информацию по текущим суммам на счетах клиента.
Описание:
Класс client_account - счета клиентов
client_id - идентификатор клиента, string
client_name - имя клиента, string
account_info - информация о счетах, map<string, currency>
account_balance_info - информация о балансе, map<string, struct_balance_info>
client_patronymic - отчество, optional< string >
client_surname - фамилия, string

Класс struct_balance_info - информация о балансе
account_type_id - ID типа счета, int
balance - баланс, currency
credit - кледит, currency
decrease_type - тип списания, int
increase_type - тип увеличения, int

Пример использования: Получение сумм на счетах зарегистрированного в чеке клиента
local core = ukm.get_core(ukm.mashine.handle);
local text = "";
if core.header.__ok and core.header.client.__ok then
text = text .. "Баланс на счетах клиента:\n";
local account = ukm.map.string.struct_balance_info.iterator(ukm.get_client_account_info(core.header.client).account_balance_info);
while account:next() do
text = text .. ukm.adjustment(account:first(), tostring(account:second().balance), 80," ") .. "\n";
end
end
return text;
и еще добавление к этому:
Цитата:
Хочу только заметить, что информация о балансе на счетах клиента выводится в чек клиента именно в момент оформления этого чека, но эта информация не запоминается вместе с чеком. Таким образом, если напечатать копию чека, то в ней будет информация на момент печати копии. Поэтому рекомендуется в шаблонах копии чеков не выводить информацию о состоянии счетов.



Еще замечу, что такой способ вывода информации о состоянии счетов клиентов не является штатным (соответствующая доработка только запланирована). При этом способе <портится> краткая форма отображения чека на вебе сервера, но остается работоспособной подробная форма просмотра (речь идет о функционале - <отчеты - поиск чека - просмотр чека> на сервере УКМ).
20.04.2010 07:15
EJara
 
Прошу прощенья, не смог разобраться.
При добавлении данного кода в receipt.lua получаю ошибку "attempt to call method `getbasetotal` (a nil value)"
Может кто-нибудь выложить целиком receipt.lua? Если честно - то просто очень не хочется разбираться, если есть готовое решение - с удовольствием использую его
23.04.2010 14:33
Павел Сосновских
 
вот полный текст скрипта: receipt.lua
ну и моя тема как все настраивалось: Бонусная скидка
если что, спрашивайте
23.04.2010 15:37
EJara
 
Спасибо огромное, Павел! В понедельник проверю как это будет работать у меня. А саму скидку уже настроил, тоже по Вашей инструкции
12.11.2010 15:31
didinap
 
Павел, ссылка кажется уже не рабочая. Перезалей пожалуйста куда нибудь.
19.11.2010 20:15
Павел Сосновских
 
Вот:
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 21 сообщение(ий)):
У вас нет прав чтобы видеть скрытый текст, содержащийся здесь.
Часовой пояс GMT +3, время: 14:32.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.