[ОТВЕТИТЬ]
Опции темы
06.03.2015 12:08  
vdm
Если еще нужно.
1 диапазон без ограничения сверху.
Количество вычисляется от суммы чека.
Код:
kolvo = math.floor(tonumber(ukm.rightcut(__rep.receipt_amount,3))/500);
text = text .. ukm.rightpad("Получите на кассе " .. tostring(kolvo) .." карточек ",width, " ") .. "\n";
 
"Спасибо" vdm от:
16.07.2015 17:12  
УКМ_эксплуатант_2
Последнее не сработало. Ругалась на "правый кусь": не стал разбираться.
Главная проблема в том, что сумма получается в "хрен знает" каком формате и стандартные операции (преобразования типов, арифметика) не срабатывает (ukm.currency тоже какой-то убогий).
Пришлось в цикле урезать до точки. Тоже замучился (забыл, что в ЛУА НЕРАВНО записывается как ~=, а не <> или !=; об.....ля с функцией string.sub), но победил...
Делал так (receipt.lua) (вставленные мной куски выделены звездочками)
В начале скрипта:
Код:
-- Модуль печати чека
--переменная для сжатой печати
compresed_print = false;
--**********************************************
ITOGO=0;
--**********************************************
В функцию print_hard_subtotal (наверное, в любом месте можно)
Код:
--печать скидок чека
--*******************************************************************
ITOGO=__hard_subtotal.receipt.subtotal.amount;
--*******************************************************************
Ну и в print_receipt_footer (я захотел после СПАСИБО ЗА ПОКУПКУ):
Код:
 text = text .. ukm.center("СПАСИБО ЗА ПОКУПКУ!",width," ") .. "\n";

--**************************************************************

local sss=tostring(ITOGO);
local it="";
-- получаем без копеек
local i = 1;
while string.sub(sss,i,i) ~= "." do
   it=it..string.sub(sss,i,i);
   i = i + 1;
end;
kolvo = math.floor(tonumber(it)/999);
 text = text .. ukm.center("\n\n****************************************",width," ") .. "\n";
text = text .. ukm.center("Получите на кассе " .. tostring(kolvo) .." купона (-ов)",width, " ") .. "\n";
 text = text .. ukm.center("****************************************",width," ") .. "\n\n";
--**************************************************************
З.Ы. Почитав "мурзилку" по ЛУА от С+ нашел НУ ОЧЕНЬ "ВКУСНУЮ" функцию! Все кто не пользовался (по какой-либо причине) рекомендую!!!
Вот она:
Код:
ukm.debug("ТЕКСТ")
или
Код:
PEREMENNAYA=100;
ukm.debug(PEREMENNAYA);
выведет в логи сервера
ТЕКСТ
или
100
соответственно!

Ну прям в восторге!
 
16.07.2015 17:13  
УКМ_эксплуатант_2
P.P.S. Если кто знает более изящное решение - буду благодарен.
 
17.07.2015 10:01  
vdm
ukm.currency вполне себе удобен тем, что автоматически округляется до копеек.
А вот вручную искать в числе точку чтобы выбросить копейки, смысла не вижу. tostring() от currency всегда дает строку с точкой и двузначными копейками (ну, для рублевых единиц по крайней мере).
"Проблемы" могут быть у tonumber() от строки с нецелым числом, где-то она точку воспринимает как разделитель дробной части, а где-то запятую. Сам с таким сталкивался.
 
28.07.2015 13:08  
УКМ_эксплуатант_2
Во-во! Вот из-за неразберихи с "." и "," пришлось заниматься ....измом...
 
28.07.2015 14:08  
OlegON
Я так полагаю, что десятичный разделитель определяется локалью. Соответственно, надо либо ее контролировать, либо задавать свою.
 
 


Опции темы



Часовой пояс GMT +3, время: 04:16.

Все в прочитанное - Календарь - RSS - - Карта - Вверх 👫 Яндекс.Метрика
Форум сделан на основе vBulletin®
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.