Temat nie aktualny, rozwiązałem to w inny sposób.
Nie długo będzie publiczne i może Tomek zaakceptuje pull requesta :) w sumie plugin nie będzie dotykał nic co w core :)

W dniu 12 kwietnia 2018 12:30 użytkownik Marcin <marcin@nicram.net> napisał:
Napotkałem inny problem.
Generanie robię tak, że po xajaxie odpalam funkcję pobierającą listę faktur i ta zwraca mi wywyłanie funkcji javascriptowej i jako argument podaje tablicę faktur.

w templejtece:
 var stop = false;

function stopPrinting() {
console.log('stopPrinting executed')
stop = true
}

function printInvoice(ids){
console.log('dostalem dane', ids)

if (ids.length < 1) {
    alert('No invoices found.')
    return
}

    ids.forEach(function (id) {
        if (stop === true) {
            console.log('jest zatrzymane');
            return;
        }
        console.log('sprawdzam stop:', stop)
        xajax_printInvoice(id)
    })
    stop = true;

}

function fiscalize() {
if ($('form[name="fiscalizeinvoices"] select[name="division"]').val() == '0') {
    alert('{trans("Division not selected!")}');
    return;
}
stop = false
xajax_getInvoices(JSON.stringify($('form[name="fiscalizeinvoices"]').serializeArray()));
}

funkcję fiscalize() odpalam z "przycisku" po wybraniu wartości z formularza
teraz w php mam :

function getInvoices($form){
$obj = new xajaxResponse();

$formArray = json_decode($form, true);
$data = [];
foreach ($formArray as $item){ // item['name] $item['value']
$data[$item['name']] = $item['value'];
}
//to wyliczenia dat itp

$invoices = LMSHelper::getInvoices($date['from'], $date['to'],
htmlspecialchars($data['customer_type']),
(int)$data['customer'],
(int)$data['division'],
(int)$data['group'],
(isset($data['groupexclude']) ? true : false));


$obj->call('printInvoice', $invoices);

return $obj;
}

function printInvoice($id){
$obj = new xajaxResponse();
if ($id == '277333'){
$obj->call('stopPrinting');
} else {
$obj->append('novitusLog', 'innerHTML', '<p>Wydrukowana faktura: '.$id.'</p>');
}
return $obj;
}

w funkcji printInvoice robię testowe i jeśli id faktury, docelowo w tym miejscu błąd, i jeśli pojawi się błąd chce przestać drukować resztę faktur.

problem mój polega, że jak zwracam $obj->call('printInvoice', $invoices) to przeglądarka wywołuje tę funkcję tyle razy ile jest faktur a zwrotki przychodzą po jakimś czasie. chciałbym aby funkcja w javascript printInvoice() zaczekała na to co zwróci xajax_printInvoice(id) i dopiero wtedy szła dalej, czyli by ta funkcja była synchroniczna. Jak to osiągnąć?

W dniu 12 kwietnia 2018 10:36 użytkownik Marcin <marcin@nicram.net> napisał:
Ok, nie za tym "ifem" robiłem przypisanie do zmiennej 'xajax' :)



W dniu 12 kwietnia 2018 09:59 użytkownik Marcin <marcin@nicram.net> napisał:
Witam
Może ktoś podpowie. Jestem na ukończeniu pisania pluginu do drukarki fiskalnej i zostało tylko drukowanie wybranych faktur a chcę to zrobić asynchronicznie z wykorzystaniem xajax by w div z logiem były na bieżąco printowane statusy komunikacji z drukarką.

w module robię funkcję
function printInvoice(){
$obj = new xajaxResponse();

$html = '<p>Sukcess</p>';

$obj->assign('novitusLog', 'innerHTML', $html);

return $obj;
}

na razie by zwracała mi po prostu statyczny tag htmlowy. w templejtce mam div o id="novitusLog" i do niego chcę pisać logi.

dalej w module rejestruję funkcję i wrzucam do smarty
global $LMS;
$LMS->InitXajax();
$LMS->RegisterXajaxFunction('printInvoice');

$SMARTY->assign('xajax', $LMS->RunXajax());

w templejtce na samym początku mam {$xajax} ale niestety w tym miejscu czysto, żadne dane javascriptowe są nie drukowane :/

Jak poprawnie to zrobić w LMSie? pomoże ktoś?




--
Pozdrawiam
Marcin / nicraM



--
Pozdrawiam
Marcin / nicraM



--
Pozdrawiam
Marcin / nicraM



--
Pozdrawiam
Marcin / nicraM