window.OrderModulDefault={ actionFunction: function () {}, } class DataModelOrder extends DataModel{ /* * Constructor */ constructor (data,options) { super(data,options) if(typeof this.productSelected ==="undefined"){ this.productSelected={}; } if(typeof this.productComment ==="undefined"){ this.productComment={}; } console.log(this.constructor.name+' constructor called'); }; }; window.DataModelOrder=DataModelOrder; window.Stepper=function () { /* * Variables accessible * in the class */ let Opts = { complete: ['supplier'], available: ['supplier', 'parameter', 'productSelect', 'invoice', 'send'], enable: ['supplier', 'invoice'], load: [], excludeLoaded:['invoice','send'], loaded: [], active: false, URL: { create: '', }, UrlData:false, onAfterLoad:function () {}, onAfterActivate:function () {}, autoCallback:{ 'invoice':{ onAfterActivate:function () {}, }, 'send':{ onAfterActivate:function () {}, }, }, nowLoaded:false, }; let root=this; /* * Constructor */ this.construct = function (options) { $.extend(Opts, options); }; this.getOpts=function(){ return Opts; } this.setOpts=function(options){ $.extend(Opts, options); } this.init=function (options){ $.extend(Opts, options); debug(Opts); $('.step').each(function(){ let stepName=$(this).data('stepname'); if(Opts.complete.includes(stepName)){ root.setCompleted(stepName); } if(Opts.enable.includes(stepName)){ root.setEnabled(stepName); } if(Opts.load.includes(stepName)){ root.loadStepContent(stepName); } if(Opts.active===stepName){ root.setActive(stepName); } }); root.bindClickAction(); } this.bindClickAction=function (){ let stepClickButtons=$('.stepClick'); stepClickButtons.off('click'); stepClickButtons.on('click',root.stepClick); } this.setCompleted=function (stepName){ console.log(stepName+' completed'); $('.step[data-stepName="'+stepName+'"]').addClass('completed'); } this.unsetCompleted=function (stepName){ console.log(stepName+' Uncompleted'); $('.step[data-stepName="'+stepName+'"]').removeClass('completed'); Opts.complete=arrayRemove(Opts.complete,stepName); } this.unsetEnabled=function (stepName){ console.log(stepName+' Un enabled'); $('.click'+stepName).contents().unwrap(); Opts.enable=arrayRemove(Opts.enable,stepName); } this.setEnabled=function (stepName){ console.log(stepName+' enabled'); let stepItem=$('.step[data-stepName="'+stepName+'"]'); stepItem.html(''+stepItem.html()+''); root.bindClickAction(); //$('.stepClick').click(root.stepClick); } this.addEnabled=function(stepName){ if(!Opts.enable.includes(stepName)){ Opts.enable.push(stepName); } root.setEnabled(stepName); } this.addCompleted=function(stepName){ if(!Opts.complete.includes(stepName)){ Opts.complete.push(stepName); } root.setCompleted(stepName); root.bindClickAction(); } this.loadStepContent=function (stepName){ let data={'type':stepName}; $.extend(data, Opts.UrlData); $.ajax({ async: true, type: "GET", url: Opts.URL.create, data: data, cache: false, success: function(result) { let container=$('.SC'+stepName.capitalize()); if($.inArray(stepName,Opts.excludeLoaded)==-1){ Opts.loaded.push(stepName); }else{ console.log('excluded View'); } container.html(result); if(Opts.nowLoaded){ Opts.nowLoaded(stepName); } Opts.onAfterLoad(); } }); } this.clearLoaded=function () { Opts.loaded=['supplier']; $('.stepContainer').each(function(){ /* console.log(this.classList); console.log(this.classList.contains('SCSupplier')); console.log($(this).attr('class')); */ if(!this.classList.contains('SCSupplier')){ $(this).html(''); } }); } this.setActiveFinish=function(stepName){ let container=$('.SC'+stepName.capitalize()); if(stepName==='productSelect'){ $('.containerStepper').addClass('activeSideBar'); }else{ $('.containerStepper').removeClass('activeSideBar'); } debug('setActiveFinish show:'+stepName); container.show(); Opts.nowLoaded=false; root.active=stepName; Opts.onAfterActivate(); if(typeof Opts.autoCallback[stepName]!=='undefined' ){ Opts.autoCallback[stepName].onAfterActivate(); } } this.setActive=function(stepName){ $('.stepContainer').hide(); if(!Opts.loaded.includes(stepName)){ root.loadStepContent(stepName); Opts.nowLoaded=this.setActiveFinish; }else{ this.setActiveFinish(stepName); } } this.stepClick=function(event){ event.preventDefault(); let stepName=$(event.currentTarget).data('stepname'); console.log('setActive:'+stepName); root.setActive(stepName); } } window.OrderModule = function () { /* * Variables accessible * in the class */ let Opts = { testMode: false, needStepper:true, CSSSelectorForm:'.orderParameterForm', defaultDeliveryDate:'', dataSyncPauseTime:500, token:null, URL: { root:null, getDataTableContentProductList:null, checkReadyToSend:null, index:null, show:null, edit:null, create: null, store: null, update:null, destroy:null, toggleFavorites:null, }, }; const PublicVar = {}; let PublicVar2 = {'asd': '21'}; let ApiToken = null; let Order=null; let root = this; let viewInicialized=[]; this.setOpts = function (options) { $.extend(Opts, options); } this.getOpts = function () { return Opts; } this.clickOrderEdit=function (data){ debug('clickEdit'); debug(data); let ajaxUrl=Opts.URL.edit.replace('%id%',data.id); APP.loadMainContent(ajaxUrl); /* let ajaxData={}; ajaxData._token=Opts.token; $.extend(ajaxData,Order); let ajaxUrl=Opts.URL.edit.replace('%id%',data.id); $.ajax({ url: ajaxUrl, method:'GET', data:ajaxData, success:function (response) { if(response.success){ let orderData=response.data; orderData.supplierId=orderData.supplier_id; delete(orderData.supplier_id); root.initOrder(orderData); root.initStepper(); //root.afterOrderSetSupplierOk(data.data); } } });*/ } this.afterOrderDeleted=function (data){ if(data.success==true){ debug('Order delete success'); APP.loadMainContent(Opts.URL.index); }else{ Toast.create({ title: "Error deleted !", message: '', status: TOAST_STATUS.DANGER, timeout: 5000 }); } } this.clickOrderDeleteConfirmed=function (event){ debug('clickOrderDeleteConfirmed'); debug(event); debug(event.data); $('#dialogModal').modal('hide'); let ajaxData={}; ajaxData._token=Opts.token; let ajaxUrl=Opts.URL.destroy.replace('%id%',event.data.id); $.ajax({ url:ajaxUrl, data:ajaxData, method:"DELETE", success:root.afterOrderDeleted, //error:ajaxErrorHandler }); } this.initViewOrderSelect=function (){ debug('called initViewOrderSelect '); $('.ordersSelectTable button').off('click'); $('.ordersSelectTable button').on('click',function (){ let action=$(this).data('action'); let orderId=$($(this).closest('tr')[0]).data('orderid'); debug(action); debug(orderId); if(action=='delete'){ $('#dialogModal').on('show.bs.modal', function (event) { // If necessary, you could initiate an AJAX request here (and then do the updating in a callback). // Update the modal's content. We'll use jQuery here, but you could use a data binding library or other methods instead. var modal = $(this); modal.find('.modal-title').text('Megerősítés '); modal.find('.modal-body').text('Biztosan törli a megrendelést?'); modal.find('.buttonYes').off('click'); modal.find('.buttonYes').on('click',{id:orderId},root.clickOrderDeleteConfirmed); }); $('#dialogModal').modal('show'); }else{ root.clickOrderEdit({id:orderId}); } }); $('.buttonNew').off('click'); $('.buttonNew').on('click',function (){ APP.loadMainContent(Opts.URL.index,'force=true'); }); } this.initStepper=function (){ debug(Order.getData()); viewInicialized=[]; $('.statusNamePlace').text('Nincs elküldve'); $('.statusNamePlace').addClass('statusBlink'); root.setDeliveryDate('-'); root.setSupplier('-'); let unEnabled=['parameter', 'productSelect', 'invoice', 'send']; $.each(unEnabled,function (index,value) { root.Stepper.unsetEnabled(value); root.Stepper.unsetCompleted(value); }); debug(root.Stepper.getOpts()['available']); debug(Order.getData()['orderStatus']); let stepActive='supplier'; let stepComplete=['supplier']; let stepEnable=[]; let stepOnAfterActivate=function (){}; let avalaibleSteps=root.Stepper.getOpts()['available']; let stepUrlData=false; let stepAutoCallback=[]; for (let stepName of avalaibleSteps) { stepOnAfterActivate=this['initView'+stepName.capitalize()]; let item={}; item['onAfterActivate']=stepOnAfterActivate; stepAutoCallback[stepName]=item; } debug(stepAutoCallback); debug(Order.getData()['id']); if(Order.getData()['id']>0){ debug('hajra'); debug(Order.getData()); if(Order.getData()['deliveryDate']){ root.setDeliveryDate(Order.getData()['deliveryDate']); /* @todo: weekly-t beallitani */ } if(Order.getData()['supplierName']){ root.setSupplier(Order.getData()['supplierName']); } stepUrlData={'supplierId':Order.supplierId,id:Order.id}; for (let stepName of avalaibleSteps) { console.log(stepName); stepComplete.push(stepName); stepEnable.push(stepName); if(Order.getData()['orderStatus']==stepName){ stepActive=stepName; /* debug('initView'+stepName.capitalize()); if(stepName!=='invoice' && stepName!=='send'){ stepOnAfterActivate=this['initView'+stepName.capitalize()]; }else{ stepOnAfterActivate=function (){}; } */ break; } } /* //refactored for loop var BreakException = {}; try { avalaibleSteps.forEach(function(stepName) { console.log(stepName); stepComplete.push(stepName); stepEnable.push(stepName); if(Order.getData()['orderStatus']==stepName){ stepActive=stepName; throw BreakException; } }); } catch (e) { if (e !== BreakException) throw e; }*/ } root.Stepper.init({ complete:stepComplete, enable:stepEnable, loaded:[], active: stepActive, URL: { create: Opts.URL.create, }, UrlData:stepUrlData, onAfterActivate:stepOnAfterActivate, autoCallback: stepAutoCallback, /*{ invoice: { onAfterActivate:root.initViewInvoice }, send: { onAfterActivate:root.initViewSend }, }*/ }); } this.initOrder=function (data){ Order=new DataModelOrder(data); } this.init = function (options) { debug('OrderModul init called'); $.extend(Opts, window.OrderModulDefault, options); Order=new DataModelOrder(); if(Opts.needStepper){ if (typeof this.Stepper == 'undefined') { this.Stepper=new Stepper(); } } if(Opts.testMode){ return root.testMode(); } } this.setSupplier=function (supplierName,supplierId){ if(supplierName){ $('.supplierNamePlace').text(supplierName); } if(supplierId){ Order.setData({supplierId:supplierId}); root.Stepper.setOpts({'UrlData':{'supplierId':supplierId}}); } } this.setDeliveryDate=function (dateText,dateTextTo){ let dateTextHuman=dateText.replaceAll('-','.')+'.'; if(dateTextHuman.length<5){ $('.deliveryDatePlace').text(dateText); return; } if(dateTextTo){ dateTextHuman+=' - '+dateTextTo.replaceAll('-','.')+'.'; } $(Opts.CSSSelectorForm+' .selectedDateText').text(dateTextHuman); $('.deliveryDatePlace').text(dateTextHuman); $(Opts.CSSSelectorForm+' input[name="deliveryDate"]').val(dateText); } this.getData=function (){ return Order; } this.setSupplierCompleted=function () { console.log('bingo'); root.initViewParameter() } this.afterOrderSetSupplierOk=function (data) { Toast.create({ title: "Supplier selected !", message: data.supplier.name , status: TOAST_STATUS.INFO, timeout: 5000 }); root.setSupplier(data.supplier.name,data.supplier.id); Order.setData({id:data.id}); root.Stepper.setOpts({'UrlData':{'supplierId':Order.supplierId,id:Order.id}}); //root.Stepper.setOpts({onAfterLoad:root.setSupplierCompleted}) root.Stepper.setEnabled('parameter'); root.Stepper.addCompleted('parameter'); root.Stepper.setCompleted('parameter'); root.Stepper.setActive('parameter'); } this.initViewSupplier=function (){ debug('call initViewSupplier'); root.Stepper.setOpts({onAfterLoad:function (){}}); $('.supplierItem').off('click'); $('.supplierItem').on('click',function(event){ console.log(Order.getData()); event.preventDefault(); let supplierId=$(event.currentTarget).data('id'); let supplierName=$(event.currentTarget).find('h5.card-title').text(); if(typeof Order.supplierId=='undefined'){ //new order let ajaxData={}; ajaxData._token=Opts.token; ajaxData.supplierId=supplierId; ajaxData.storeType='supplierSelect'; $.extend(ajaxData,Order); $.ajax({ url: Opts.URL.store, method:'POST', data:ajaxData, success:function (data) { if(data.success){ root.afterOrderSetSupplierOk(data.data); } } }); //Order.setData({supplierId:supplierId}); }else{ //ide kellene egy jo kis kerdes if(Order.supplierId!=supplierId){ Toast.create({ title: "Supplier change to!", message: supplierName, status: TOAST_STATUS.WARNING, timeout: 5000 }); root.Stepper.clearLoaded(); Order=new DataModelOrder(); //Order.setData({supplierId:supplierId}); } } return; console.log('-----------'); console.log(root.Stepper.getOpts()); console.log('-----------'); //$('.supplierNamePlace').text(supplierName); root.setSupplier(supplierName,supplierId); console.log(supplierName) //@todo:ide kell egy mentes! //@todo:mentes eredemenyekeppen lehet valtani event.preventDefault(); root.Stepper.setOpts({onAfterLoad:root.setSupplierCompleted}) root.Stepper.setEnabled('parameter'); root.Stepper.addCompleted('parameter'); root.Stepper.setCompleted('parameter'); root.Stepper.setActive('parameter'); }); } this.checkContactNameField=function () { let CSSSelectorForm='.orderParameterForm'; let node=$(CSSSelectorForm+' input[name=contactName]'); if(node.val().length<2){ node.removeClass('is-valid'); node.addClass('is-invalid'); return false; }else{ node.addClass('is-valid'); node.removeClass('is-invalid'); return true; } } this.sendOrderDataToServer=function (updateType,callback,errorCallback) { let ajaxData= {}; let ajaxUrl=Opts.URL.store; let ajaxMethod="POST"; if(Order.id){ ajaxUrl=Opts.URL.update.replace('%id%',Order.id); //ajaxMethod="PUT"; //ajaxData=new FormData($(CSSSelectorForm)[0]); ajaxData._method='PUT'; } ajaxData._token=Opts.token; ajaxData.updateType=updateType; $.extend(ajaxData,Order); debug(Order); debug(ajaxData); debug('ajaxUrl:'+ajaxUrl); ajaxData=jsonToFormData(ajaxData); $.ajax({ url:ajaxUrl, data:ajaxData, type:ajaxMethod, contentType:false, processData: false, success:function (data) { debug('ajax returned data'); debug(data); if(data.success){ //root.afterOrderSetSupplierOk(data.data); callback(data); } }, error: function (xhr, ajaxOptions, thrownError) { ajaxErrorHandler(xhr, ajaxOptions, thrownError); if(typeof errorCallback!='undefined'){ errorCallback(xhr.responseJSON); } }, }); } this.afterOrderSetParameterOk=function (data) { debug('called afterOrderSetParameterOk'); root.Stepper.setOpts({'UrlData':{'supplierId':Order.supplierId,'id':Order.id}}); //root.Stepper.setOpts({onAfterLoad:root.setParameterCompleted}) root.Stepper.setEnabled('productSelect'); root.Stepper.addCompleted('productSelect'); root.Stepper.setCompleted('productSelect'); root.Stepper.setActive('productSelect'); } this.selectCurrentWeek = function() { console.error('selectCurrentWeek'); console.error($('.ui-datepicker').find('.ui-datepicker-current-day a')); $('.ui-datepicker').find('.ui-datepicker-current-selected-weekday a').addClass('ui-state-active') } this.weekHover = function() { console.error('hover Active'); $('.ui-datepicker-calendar tr').off('mousemove'); $('.ui-datepicker-calendar tr').off('mouseleave'); $('.ui-datepicker-calendar tr').on('mousemove', function() { $(this).find('td a').addClass('ui-state-hover'); }); $('.ui-datepicker-calendar tr').on('mouseleave', function() { $(this).find('td a').removeClass('ui-state-hover'); }); } this.weekHoverSlow = function() { console.error('weekHoverSlow'); if($('.ui-datepicker-calendar tr').length<1){ setTimeout(root.weekHoverSlow, 1); return; } root.weekHover(); } this.initDatePicker=function (type) { console.error('asdasdadad'); console.log('tipus' + type); let CSSSelectorForm = '.orderParameterForm'; let startDate=new Date('1900-01-01'); let endDate=new Date('1900-01-02'); $(CSSSelectorForm + ' .datePicker').datepicker("destroy"); if (type == 'weekly') { $(CSSSelectorForm + ' .datePicker').datepicker({ showOtherMonths: true, selectOtherMonths: true, showWeek: true, dateFormat: 'yy-mm-dd', firstDay: 1, minDate: new Date(), afterShow: function (dateText, inst) { root.weekHover(); root.selectCurrentWeek(); }, onSelect: function (dateText, inst) { let date = $(this).datepicker('getDate'); startDate = new getMonday(date); endDate = new Date(date.getFullYear(), date.getMonth(), date.getDate() - date.getDay() + 7); root.setDeliveryDate($.datepicker.formatDate( 'yy-mm-dd',startDate),$.datepicker.formatDate( 'yy-mm-dd',endDate)) }, beforeShow: function () { console.group('beforeShow') console.log(startDate); console.log(endDate); //root.weekHoverSlow(); console.groupEnd(); }, beforeShowDay: function(date) { console.group('beforeShowDay'); console.log(date.toLocaleDateString('hu-Hu')); let cssClass = ''; if(date >= startDate && date <= endDate){ console.error(date.toLocaleDateString('hu-Hu')); cssClass = 'ui-datepicker-current-selected-weekday'; //cssClass = 'ui-state-active'; } console.log(cssClass); console.groupEnd(); return [true, cssClass]; }, onChangeMonthYear: function(year, month, inst) { //root.selectCurrentWeek(); } }); } else { // Szállítási korlátozás adatok betöltése (csak ha hasDeliveryConstraint = true) let availableDates = []; let nextDeliveryDate = null; let hasDeliveryConstraint = false; let holidays = []; let workingDays = []; let datepickerInput = $(CSSSelectorForm + ' .datePicker'); let calendarUrl = datepickerInput.data('delivery-calendar-url'); let supplierId = datepickerInput.data('supplier-id'); let profitCenterId = datepickerInput.data('profit-center-id'); if (calendarUrl && supplierId && profitCenterId) { $.ajax({ url: calendarUrl, data: { supplierId: supplierId, profitCenterId: profitCenterId, orderDateTime: new Date().toISOString(), }, async: false, success: function (data) { hasDeliveryConstraint = data.hasDeliveryConstraint || false; // Ünnepnapok és áthelyezett munkanapok – mindig betöltjük holidays = (data.holidays || []).map(function(h) { return { date: h.date, description: h.description }; }); workingDays = (data.workingDays || []).map(function(w) { return { date: w.date, description: w.description }; }); if (hasDeliveryConstraint) { availableDates = data.availableDates || []; nextDeliveryDate = data.nextDeliveryDate || null; } // Ha nincs szállítási korlátozás, az availableDates és nextDeliveryDate // üres marad – a datepicker az eredeti módon viselkedik }, }); } if (hasDeliveryConstraint && nextDeliveryDate) { // Következő szállítási nap beállítása alapértelmezettként root.setDeliveryDate(nextDeliveryDate); $(CSSSelectorForm + ' .selectedDateText').text(nextDeliveryDate); $(CSSSelectorForm + ' input[name="deliveryDate"]').val(nextDeliveryDate); $('.deliveryDatePlace').text(nextDeliveryDate.replaceAll('-', '.') + '.'); } // Szín jelmagyarázat megjelenítése csak szállítási korlátozás esetén if (hasDeliveryConstraint) { $('#deliveryDateLegend').show(); } let datepickerOpts = { dateFormat: 'yy-mm-dd', minDate: (hasDeliveryConstraint && nextDeliveryDate) ? new Date(nextDeliveryDate) : new Date(), onSelect: function (dateText) { $(CSSSelectorForm + ' .selectedDateText').text(dateText); $('.deliveryDatePlace').text(dateText.replaceAll('-', '.') + '.'); $(CSSSelectorForm + ' input[name="deliveryDate"]').val(dateText); }, }; // beforeShowDay: mindig aktív ha van munkanaptár adat vagy hasDeliveryConstraint datepickerOpts.beforeShowDay = function (date) { let dateStr = $.datepicker.formatDate('yy-mm-dd', date); let holidayEntry = holidays.find(function(h) { return h.date === dateStr; }); let workingDayEntry = workingDays.find(function(w) { return w.date === dateStr; }); let isDelivery = hasDeliveryConstraint && availableDates.includes(dateStr); let cssClasses = []; let tooltip = ''; let selectable = true; if (holidayEntry) { cssClasses.push('work-calendar-holiday'); tooltip = 'Ünnepnap' + (holidayEntry.description ? ': ' + holidayEntry.description : ''); } else if (workingDayEntry) { cssClasses.push('work-calendar-working-day'); tooltip = 'Áthelyezett munkanap' + (workingDayEntry.description ? ': ' + workingDayEntry.description : ''); } if (hasDeliveryConstraint) { if (isDelivery) { cssClasses.push('delivery-day-available'); if (!tooltip) tooltip = 'Szállítási nap'; } else { cssClasses.push('delivery-day-unavailable'); if (!tooltip) tooltip = 'Nem szállítási nap'; selectable = false; } } // Ha ünnepnap és hasDeliveryConstraint nincs bekapcsolva, az ünnepnap is letiltandó if (holidayEntry && !hasDeliveryConstraint) { selectable = false; } return [selectable, cssClasses.join(' '), tooltip]; }; $(CSSSelectorForm + ' .datePicker').datepicker(datepickerOpts); } } this.callChangeOrderType=function(){ console.log(this); console.log(this.value); root.initDatePicker(this.value); //enum('daily', 'weekly') /*let CSSSelectorForm='.orderParameterForm'; let node=$(CSSSelectorForm+' input[name=contactName]'); if(node.val().length<2){ node.removeClass('is-valid'); node.addClass('is-invalid'); return false; }else{ node.addClass('is-valid'); node.removeClass('is-invalid'); return true; } */ } this.initViewParameter=function () { debug('call initViewParameter'); root.Stepper.setOpts({onAfterLoad:function (){}}); let CSSSelectorForm='.orderParameterForm'; $(CSSSelectorForm+' .datePickerClick').click(function(){ $(CSSSelectorForm+' .datePicker').datepicker('show'); }); $(CSSSelectorForm+' .orderParameterDeliveryAddress').select2({}).show(); $(CSSSelectorForm+' input[name=contactName]').off('blur'); $(CSSSelectorForm+' input[name=contactName]').off('keyup'); $(CSSSelectorForm+' input[name=contactName]').on('blur',root.checkContactNameField); $(CSSSelectorForm+' input[name=contactName]').on('keyup',root.checkContactNameField); $(CSSSelectorForm+' input[name=orderType]').off('change'); $(CSSSelectorForm+' input[name=orderType]').on('change',root.callChangeOrderType); $(CSSSelectorForm+' .orderParameterNextButton').off('click'); if(Order.getData()['id']>0){ if(Order.getData()['orderType']=='weekly'){ root.initDatePicker(Order.getData()['orderType']); $(CSSSelectorForm+" input[name=orderType][value=" + Order.getData()['orderType'] + "]").prop('checked', true); const endDate = new Date(Order.getData()['deliveryDate']); endDate.setDate(endDate.getDate() + 6); root.setDeliveryDate(Order.getData()['deliveryDate'],$.datepicker.formatDate( 'yy-mm-dd',endDate)); root.initDatePicker('weekly'); }else{ if(Order.getData()['deliveryDate']){ root.setDeliveryDate(Order.getData()['deliveryDate']); } root.initDatePicker('daily'); } if(Order.getData()['contactName']){ $(CSSSelectorForm+' input[name=contactName]').val(Order.getData()['contactName']); } if(Order.getData()['note']){ $(CSSSelectorForm+' textarea[name=note]').val(Order.getData()['note']); } if(Order.getData()['deliveryAddressId']){ console.log($(CSSSelectorForm+' select[name=deliveryAddressId]')); $(CSSSelectorForm+' select[name=deliveryAddressId]').val(Order.getData()['deliveryAddressId']); } if(Order.getData()['customNotificationEmail']){ console.log($(CSSSelectorForm+' select[name=customNotificationEmail]')); $(CSSSelectorForm+' select[name=customNotificationEmail]').val(Order.getData()['customNotificationEmail']); } }else{ root.initDatePicker('daily'); } $(CSSSelectorForm+' .orderParameterDeliveryAddress').select2({}).show(); $(CSSSelectorForm+' .orderParameterCustomNotificationEmail').select2({}).show(); $(CSSSelectorForm).submit(function(event){ event.preventDefault(); if ($(CSSSelectorForm)[0].checkValidity() === false) { debug('validaton false'); event.stopPropagation(); return; } else { debug('validaton ok'); //do your ajax submition here } $('.deliveryDatePlace').text($(CSSSelectorForm+' input[name=deliveryDate]').val().replaceAll('-','.')+'.'); Order.setData({ contactName:$(CSSSelectorForm+' input[name=contactName]').val(), note:$(CSSSelectorForm+' textarea[name=note]').val(), orderType:$(CSSSelectorForm+' input:checked[name=orderType]').val(), deliveryDate:$(CSSSelectorForm+' input[name=deliveryDate]').val(), deliveryAddressId:$(CSSSelectorForm+' select[name=deliveryAddressId]').val(), deliveryAddress:$(CSSSelectorForm+' select[name=deliveryAddress]').val(), customNotificationEmail:$(CSSSelectorForm+' select[name=customNotificationEmail]').val(), }); console.group('parameter form submit') console.error($(CSSSelectorForm+' input:checked[name=orderType]').val()); console.error($(CSSSelectorForm+' input[name=deliveryDate]').val()); debug(Order.getData()); console.groupEnd(); root.sendOrderDataToServer('parameter',root.afterOrderSetParameterOk); }); } this.blank=function (){}; this.setParameterCompleted=function () { console.log('setParameterCompleted called'); root.Stepper.setOpts({onAfterLoad:function (){}}); //root.initViewProductSelect() } this.bindRowFavoritesAction = function () { $('.buttonItemFavorites').off('click'); $('.buttonItemFavorites').on('click', function () { let productId = $(this).data('id'); console.log(productId); let ajaxUrl=Opts.URL.toggleFavorites.replace('%id%',productId); let ajaxData={}; ajaxData._token=Opts.token; let button=this; console.log(ajaxUrl); $.ajax({ url: ajaxUrl, method:'POST', data:ajaxData, success:function (response) { if(response.success){ if(response.status){ console.log('true'); $(button).addClass('btn-warning'); $(button).removeClass('btn-light'); }else{ $(button).removeClass('btn-warning'); $(button).addClass('btn-light'); console.log('false'); } } } }); /* $(this).toggleClass('btn-warning'); $(this).toggleClass('btn-light'); */ }); } this.bindRowDescriptionAction=function (){ $('textarea.orderItemComment').on('change',function (){ let comment=$(this).val(); let productId=$(this).data('id'); let productComment=Order.getData('productComment'); if(productComment!==null){ if(typeof productComment[productId]=='undefined' && comment.length===0){ return; } if(productComment[productId]===comment){ return; } } productComment[productId]=comment; if(comment.length===0){ delete Order.productComment[productId]; } Order.productComment=productComment; queueAjax.push(Date.now()); root.syncOrderDataToServer(); }); } this.productSelectDatatablesRowFormatter=function (d) { // `d` is the original data object for the row /** @todo: felszedni es updatelni az adott termek memojat az orderban */ console.group('productSelectDatatablesRowFormatter'); console.log(d); let templateData=d; templateData.comment=''; // debug(Order); if(Order.productComment && Order.productComment!==null){ debug(typeof Order.productComment[d.id]); if(typeof Order.productComment[d.id]!='undefined' && Order.productComment[d.id].length>0){ templateData.comment=Order.productComment[d.id]; } } /** @typedef {boolean} d.favorites */ if(d.favorites===true){ templateData.btnFavoritesClass='btn-warning'; }else{ templateData.btnFavoritesClass='btn-light'; } let template=$('template[data-name="orderProductSelectDetails"]').html() templateData.weekly=false; if(Order.getData().orderType==='weekly'){ templateData.weekly=true; /* templateData.weeklyDay=[ {"index":1,"name":"Hétfő"}, {"index":2,"name":"Kedd"}, {"index":3,"name":"Szerda"}, {"index":4,"name":"Csütörtök"}, {"index":5,"name":"Péntek"}, {"index":6,"name":"Szombat"}, {"index":7,"name":"Vasárnap"}, ]; templateData.weeklyDay=[ {"index":2,"name":"Hétfő" }, {"name":"Kedd"}, {"name":"Szerda"}, {"name":"Csütörtök"}, {"name":"Péntek"}, {"name":"Szombat"}, {"name":"Vasárnap"} ]; */ } let productSelected=Order.getData('productSelected'); if(typeof productSelected[d.id]!='undefined'){ templateData.itemQuantity=productSelected[d.id]; } console.log(['templateData',templateData]); let oldTags=Mustache.tags; Mustache.tags = ["~!", "!~"]; if(templateData['specification']=='false' || templateData['specification']==false){ templateData.specificationClass='d-none'; } templateData.pictureImg=''; if(templateData['picture']=='false' || templateData['picture']==false){ templateData.pictureClass='d-none'; }else{ templateData.pictureImg=''; } console.log('templateData',templateData); //templateData['aa_specification']=false; let render=Mustache.render(template,templateData); Mustache.tags =oldTags; console.groupEnd(); return render; /* solution before template return ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ /!* ''+ ''+ ''+ ''+ *!/ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ /!* *!/ '
Info:'+d.note+'
hooreyca :'+d.hooreycaId+'' + '' + '
Extension number:'+d.extn+'
Info:'+d.note+'
Megjegyzés:
'; */ } this.setDatatableHeaderText=function(text){ $('.tableHeaderText').text(text); } this.getTreePathName=function (node){ let res=''; let items=$(node).parents('li').toArray(); items.shift(); items.reverse(); for (const item in items) { console.log($(items[item]).children('a.categoryItem')); if($(items[item]).children('a.categoryItem').length>0){ res+=$(items[item]).children('a.categoryItem').text()+'/' } } res+=$(node).text(); console.log(res); return res; } let selectedProductGroup=null; let dataTableSearchStr=null; let dataTableSearchKrel=false; this.searchProductByString=function (filterStr){ root.setDatatableHeaderText('Termékek szűrve:'+filterStr); dataTableSearchStr=filterStr; $('.dataTableOrderProductSelect').DataTable().ajax.reload(); } this.clickSearchProduct=function (){ debug(this); let filterStr=$('.sidebar-search input[name=searchValue]').val() debug(filterStr); root.searchProductByString(filterStr); } this.clickFavoritesProduct = function () { debug('clickFavoritesProduct'); root.setDatatableHeaderText('Termékek szűrve: kedvencek'); dataTableSearchStr='**favorites**'; $('.dataTableOrderProductSelect').DataTable().ajax.reload(); } this.clickOftenProduct = function () { debug('clickOftenProduct'); root.setDatatableHeaderText('Termékek szűrve: gyakran vásárolt'); dataTableSearchStr='**often**'; $('.dataTableOrderProductSelect').DataTable().ajax.reload(); } this.clickSpecialOffer = function () { debug('clickSpecialOffer'); root.setDatatableHeaderText('Termékek szűrve: Akciós termékek'); dataTableSearchStr='**specialOffer**'; $('.dataTableOrderProductSelect').DataTable().ajax.reload(); } this.clickSpecialCart = function () { debug('clickSpecialCart'); root.setDatatableHeaderText('Termékek szűrve: Kosár termékek'); dataTableSearchStr='**cart**'; $('.dataTableOrderProductSelect').DataTable().ajax.reload(); } this.clickLastProduct = function () { debug('clickLastProduct'); root.setDatatableHeaderText('Termékek szűrve: utoljára vásárolt'); dataTableSearchStr='**last**'; $('.dataTableOrderProductSelect').DataTable().ajax.reload(); } this.clickWeeklyProduct = function () { debug('clickWeeklyProduct'); root.setDatatableHeaderText('Termékek szűrve: Heti termékek'); dataTableSearchStr='**weekly**'; $('.dataTableOrderProductSelect').DataTable().ajax.reload(); } this.clickKrelProduct = function () { debug('clickKrelProduct'); //root.setDatatableHeaderText('Termékek szűrve: Heti termékek'); //dataTableSearchStr='**weekly**'; //$('.dataTableOrderProductSelect').DataTable().ajax.reload(); $(this).parent().toggleClass('krelActive'); dataTableSearchKrel=!dataTableSearchKrel; $('.dataTableOrderProductSelect').DataTable().ajax.reload(); } this.productSelectDataTableColumnDefs=function (){ return [ {"width": "10px", "targets": 0 }, { "className": "dt-left", "targets": 1 }, // { "width": "120px", "targets": 1 }, { "width": "28px", "targets": 2 }, { "width": "41px", "targets": 3 }, { "width": "76px", "targets": 4 }, { "width": "55px", "targets": 5 }, { "width": "70px", "targets": 6 }, { "width": "54px", "targets": 7 }, { "width": "57px", "targets": 8 }, { "width": "42px", "targets": 9 }, { "width": "100px", "targets": 10}, {"className": "dt-center", "targets": "_all"}, ]; } this.productSelectDataTableColumn=function (){ let columnData=[ { "className": 'details-control', "orderable": false, "data": null, "defaultContent": '' }, { "data": "name" }, { "data": "krel" }, { "data": "packing"}, { "data": "unitValue" }, { "data": "productUnit"}, { "data": "sellerUnit" }, { "data": "unitMultiplier"}, { "data": "amountUnit" }, { "data": "price" }, ]; let actionColumn={ "className": 'details-control2', "orderable": false, "data": null, "width": "100px", "defaultContent":'' }; if(Order.getData('orderType')=='daily'){ actionColumn.render = function (data, type, row) { if (row.stock_status === 'out_of_stock') { return ''; } return ''; }; } columnData.push(actionColumn); return columnData; } this.getDatatables=function (orderType){ console.error(orderType); var table = $('.dataTableOrderProductSelect').DataTable( { language: { url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json' }, //"ajax": "{{asset('exapmle2.json')}}", "ajax": { url:Opts.URL.getDataTableContentProductList, data:function (data) { data.searchStr=dataTableSearchStr; data.krel=dataTableSearchKrel; data.groupId=selectedProductGroup; data.supplierId=Order.supplierId; data.deliveryDate=Order.deliveryDate; data.orderId=Order.id; } }, buttons: { buttons: [] }, "columnDefs": root.productSelectDataTableColumnDefs(), "columns": root.productSelectDataTableColumn(), "order": [[1, 'asc']], } ); return table; } this.productSelectDataTableDrawDT=function (e) { //debug( 'Table draw complete: '+new Date().getTime() ); //$('td:contains("*")').html(''); $("td").filter(function(){ return $(this).text() === '*'; }).html(''); if(Order.getData().orderType=='daily'){ $("input[type='number'].inputNumberSpinner").inputSpinner({ template: '
' + '' + //'' + '' + '' + '
', buttonsWidth: "0.5rem", groupClass: "", // css class of the resulting input-group buttonsClass: "btn-outline-secondary", }); } root.bindWeakUserHelper(); /* ---------------------------------------------------------- change order quantity */ $(".dataTableOrderProductSelect .details-control2 input[type=text]").off('change'); $(".dataTableOrderProductSelect .details-control2 input[type=text]").on('change',function (e){ let quantity=$(this).val(); quantity=quantity.replace(',','.'); quantity=parseFloat(quantity); let rowData=$('.dataTableOrderProductSelect').DataTable().row($(this).closest('tr')).data(); root.orderItemsChange(rowData,quantity) }); $(".dataTableOrderProductSelect .details-control2 input[type=text]").each(function (){ //debug('ez a function2') let quantity=$(this).val(); let rowData=$('.dataTableOrderProductSelect').DataTable().row($(this).closest('tr')).data(); if(Order.productSelected[rowData.id]){ debug(rowData); debug($($(this).closest('tr').find('input[type=number]')[0])); debug(Order.productSelected[rowData.id]); let quantityCurrent=Order.productSelected[rowData.id]; if(typeof quantityCurrent!='string'){ quantityCurrent+=''; } $($(this).closest('tr').find('input[type=number]')[0]).val(quantityCurrent.replace(',','.')); } }); $(".dataTableOrderProductSelect .details-control2 button").off('click'); $(".dataTableOrderProductSelect .details-control2 button").on('click',function () { // debug('.details-control2 button click ') // debug(this); $(this).parent().find('input[type=text]').trigger('change'); }); } this.initViewProductSelect=function () { let functionName='initViewProductSelect'; console.log(functionName+' called'); if(viewInicialized.includes(functionName)){ return; } //debug(Object.getOwnPropertyNames(root)); root.setDatatableHeaderText(''); root.Stepper.setOpts({onAfterActivate:function (){}}); //@note: be kell kapcsolni az elonezetet root.Stepper.addCompleted('invoice'); root.Stepper.addEnabled('invoice'); let CSSSelectorForm='.orderParameterForm'; //console.log(Opts.URL.getDataTableContentProductList);change debug((CSSSelectorForm+' .fa-search')); $('.sidebar-search .fa-search').off('click'); $('.sidebar-search .fa-search').on('click',root.clickSearchProduct); $('a.sidebar.favorites').off('click'); $('a.sidebar.favorites').on('click',root.clickFavoritesProduct); $('a.sidebar.often').off('click'); $('a.sidebar.often').on('click',root.clickOftenProduct); $('a.sidebar.last').off('click'); $('a.sidebar.last').on('click',root.clickLastProduct); $('a.sidebar.weekly').off('click'); $('a.sidebar.weekly').on('click',root.clickWeeklyProduct); $('a.sidebar.krel').off('click'); $('a.sidebar.krel').on('click',root.clickKrelProduct); $('a.sidebar.specialOffer').off('click'); $('a.sidebar.specialOffer').on('click',root.clickSpecialOffer); $('a.sidebar.cart').off('click'); $('a.sidebar.cart').on('click',root.clickSpecialCart); $('.sidebar-search input[name=searchValue]').off('keypress'); $('.sidebar-search input[name=searchValue]').on('keypress',function (event) { if ( event.which == 13 ) { event.preventDefault(); } if($(this).val().length>=2){ root.searchProductByString($(this).val()+event.key); } }); $('.sidebar-wrapper .sidebar-menu .sidebar-dropdown .sidebar-submenu li a.categoryItem.clickable').off('click'); $('.sidebar-wrapper .sidebar-menu .sidebar-dropdown .sidebar-submenu li a.categoryItem.clickable').on('click', function () { let groupId=$(this).data('id'); selectedProductGroup=groupId; dataTableSearchStr=null; console.log(groupId); console.log(root.getTreePathName(this)); root.setDatatableHeaderText(root.getTreePathName(this)); /* let ajaxData={ 'groupId':groupId, 'supplier_id':Order.supplierId, }; //$('.dataTableOrderProductSelect').DataTable().ajax.data(ajaxData).load(); */ /* let ajaxUrl=Opts.URL.getDataTableContentProductList+'?groupId='+groupId+'&supplier_id='+Order.supplierId; $('.dataTableOrderProductSelect').DataTable().ajax.url(ajaxUrl).load(); */ $('.dataTableOrderProductSelect').DataTable().ajax.reload(); }); let table = root.getDatatables(Order.getData('orderType')); $('.dataTableOrderProductSelect').on( 'init.dt', function () { console.log( 'Table initialisation complete: '+new Date().getTime() ); } ).dataTable(); $('.dataTableOrderProductSelect').on( 'draw.dt',root.productSelectDataTableDrawDT).dataTable(); //$('.dataTableOrderProductSelect').on( 'draw.dt', ).dataTable(); $('.dataTableOrderProductSelect').on( 'xhr.dt', function () { debug( 'Table xhr complete: '+new Date().getTime() ); } ).dataTable(); //$("input[type='number'].inputNumberSpinner").inputSpinner(); /* ---------------------------------------------------------- Add event listener for opening and closing details */ $('.dataTableOrderProductSelect tbody').on('click', 'td.details-control', function () { let tr = $(this).closest('tr'); let row = table.row( tr ); if ( row.child.isShown() ) { // This row is already open - close it row.child.hide(); tr.removeClass('shown'); } else { // Open this row row.child( root.productSelectDatatablesRowFormatter(row.data()) ).show(); tr.addClass('shown'); root.bindProductDetailsAction(); } } ); viewInicialized.push(functionName); } this.bindProductDetailsAction=function (){ root.bindRowDescriptionAction(); root.bindRowFavoritesAction(); if(Order.getData()['orderType']=='weekly'){ root.bindOrderItemWeekQuantity(); } } this.bindWeakUserHelper=function (){ $( "input.inputNumberSpinner" ).off( "focus"); $( "input.inputNumberSpinner" ).on( "focus", function() { let quantity=$(this).val(); quantity=quantity.replace(',','.'); quantity=parseFloat(quantity); if(quantity===0){ $(this).val('') } }); $( "input[type=text].inputNumberSpinner" ).off( "keypress"); $( "input[type=text].inputNumberSpinner" ).on( "keypress", function(event) { if ( event.which == 13 ) { // console.error('enter pressed'); let actualItem=this; let items=$( "input[type=text].inputNumberSpinner" ); items.each(function (item){ // console.log(this); if(this==actualItem){ // console.error(item); if(item+1<=items.length){ // console.error(items[item+1]); $(items[item+1]).focus(); } return false; } }); } }); } this.bindOrderItemWeekQuantity=function (){ $("input.productSelectDayQuantity").off('change'); $("input.productSelectDayQuantity").on('change',function () { console.log(this.name); console.log(this.value); console.log($(this).data('dayindex')); let rowData=null; let rowNode=$($(this).closest('table.orderProductSelectRowDetailsTable').closest('tr')).prev(); rowData=$('.dataTableOrderProductSelect').DataTable().row(rowNode).data(); console.log(rowData); let quantity=$(this).val(); quantity=quantity.replace(',','.'); quantity=parseFloat(quantity); console.log(rowData.id); root.orderItemsChange(rowData,quantity,$(this).data('dayindex')); // root.orderItemsChange //orderItemsChange //quantity[1683][1] }); } this.afterSyncOrderDataToServer=function (data) { //root.toggleEnableSend(); //console.log('most vegzett. ennyit kiszed'+batchNum); for (let i = 0; i 0){ root.Stepper.addCompleted('send'); root.Stepper.addEnabled('send'); } let styleStr=''; $('table.invoice button.printButton').off('click'); $('table.invoice button.printButton').on('click',function () { window.print(); return; let newWin= window.open(""); newWin.document.write(styleStr); let print=$('table.invoice').clone(); print.find('button.printButton').remove(); // newWin.document.write($('table.invoice').prop('outerHTML')); newWin.document.write(print.prop('outerHTML')); newWin.print(); newWin.close(); }); } this.resetOrder=function () { root.init(); root.setDeliveryDate('-'); root.setSupplier('-'); } this.afterOrderSendOk=function (data) { Toast.create({ title: "Sent!", message: 'Order Sent' , status: TOAST_STATUS.INFO, timeout: 5000 }); $('.buttonOrderSend').off('click'); $('.buttonOrderSend').prop('disabled',true); $('.statusNamePlace').removeClass('statusBlink'); $('.statusNamePlace').text('elküldve'); $('.buttonOrderSending').toggleClass('d-none'); $('.buttonOrderSendOk').toggleClass('d-none'); $('div.invoiceContainer').html(data.retHTML); //root.resetOrder(); } this.afterOrderSendError=function (data) { $('.buttonOrderSend').toggleClass('d-none'); $('.buttonOrderSending').toggleClass('d-none'); $.each(APP.OrderModule.Stepper.getOpts().available,function (index,value) { APP.OrderModule.Stepper.setEnabled(value); APP.OrderModule.Stepper.setCompleted(value); }); } this.initViewSend=function () { console.log('initViewSend called 2'); root.Stepper.setOpts({onAfterLoad:function (){}}); $('.buttonOrderSend').off('click'); $('.buttonOrderSend').on('click',function () { console.log('Send buton clicked'); //@todo: datasynchere and callback $('.buttonOrderSend').toggleClass('d-none'); $('.buttonOrderSending').toggleClass('d-none'); /** * PM158 */ $.each(APP.OrderModule.Stepper.getOpts().available,function (index,value) { root.Stepper.unsetEnabled(value); root.Stepper.unsetCompleted(value); }); /** */ root.sendOrderDataToServer('send',root.afterOrderSendOk,root.afterOrderSendError); /* let ajaxData={}; ajaxData._token=Opts.token; ajaxData.send=true; $.extend(ajaxData,Order); $.ajax({ url: Opts.URL.store, method:'POST', data:ajaxData, success:function (data) { if(data.success){ root.afterOrderSendOk(data); } } });*/ }); } this.testModeSend=function () { } this.testMode=function () { console.log('testMode called ') Order.setData({ id:234, supplierId:7, productSelected:{ 116 : 3, 293 : 2, }, contactName:'Contact Name', note:'Note', type:'daily', deliveryDate:Opts.defaultDeliveryDate, deliveryAddress:12, }); console.log(Order.getData()); console.log('*******************'); //root.Stepper.setOpts({'UrlData':{'supplierId':supplierId}}); root.Stepper.setOpts({'UrlData':{'supplierId':Order.supplierId,id:Order.id}}); this.Stepper.init({ URL: { create: Opts.URL.create, }, /* csupasz az elejerol complete:['supplier'], enable: ['supplier'], active: 'supplier', onAfterActivate:this.initViewSupplier, product select complete:['supplier','parameter','productSelect'], enable: ['supplier','parameter','productSelect'], active: 'productSelect', onAfterActivate:this.initViewProductSelect, fullos complete:['supplier','parameter','productSelect','invoice'], enable: ['supplier','parameter','productSelect','invoice','send'], active: 'productSelect', onAfterActivate:this.initViewProductSelect, send complete:['supplier','parameter','productSelect','invoice','send'], enable: ['supplier','parameter','productSelect','invoice','send'], active: 'send', onAfterActivate:this.initViewProductSelect, */ complete:['supplier','parameter','productSelect'], enable: ['supplier','parameter','productSelect'], active: 'productSelect', onAfterActivate:this.initViewProductSelect, autoCallback: { invoice: { onAfterActivate:root.initViewInvoice }, send: { onAfterActivate:root.initViewSend }, } }); console.log('*******************'); } this.toggleEnableSend=function () { console.log('toggleEnableSend called'); let ajaxUrl=Opts.URL.checkReadyToSend.replace('%id%',Order.id); $.ajax({ url:ajaxUrl, success:function (data) { if(data.success){ if(data.readyToSend){ root.Stepper.addCompleted('send'); /* root.Stepper.addCompleted('invoice'); root.Stepper.addEnabled('invoice'); */ root.Stepper.addEnabled('send'); }else{ root.Stepper.unsetCompleted('send'); /* root.Stepper.unsetCompleted('invoice'); root.Stepper.unsetEnabled('invoice'); */ root.Stepper.unsetEnabled('send'); } } console.log(data); } }); } }