if(typeof Supplier==='undefined'){ class Supplier extends DataModel{ /* * Constructor */ constructor (data,options) { super(data,options) if(typeof this.contact ==="undefined"){ this.contact=[]; } console.log('Supplier constructor called'); }; }; window.Supplier=Supplier; } window.SupplierAdmin=function (options,SupplierItem) { /* * Variables accessible * in the class */ let Opts = { token:null, containerCssSelector: '.containerSupplier', testMode:false, URL:{ getDataTableContent:'', index:'', show:'', edit:'', create:'', store:'', update:'', destroy:'', attachFile:'', detachFile:'', }, dataTable:{ orderDirective:[1, 'asc'] }, onAfterInitViewDetails:function (){} }; let Supplier = {}; let root = this; let contactPopupWorkflow='new'; /* * Constructor */ this.construct = function (options,SupplierItem) { console.log('SupplierAdmin constructor called'); $.extend(Opts, options); if(!SupplierItem){ console.log('supplier letre kellet hozni '); if(!APP.Supplier){ APP.Supplier=new window.Supplier(); } root.Supplier=APP.Supplier; } }; this.getOpts=function (){ return Opts; } this.formDataToDataObjectAPICallOld= function (CSSSelector) { let data = new FormData(document.querySelector(CSSSelector)); //let formJSON = Object.fromEntries(data.entries()); var formJSON = {}; data.forEach((value, key) => { // Reflect.has in favor of: formJSON.hasOwnProperty(key) if(!Reflect.has(formJSON, key)){ formJSON[key] = value; return; } if(!Array.isArray(formJSON[key])){ formJSON[key] = [formJSON[key]]; } formJSON[key].push(value); }); $(CSSSelector+' input[data-inputmask]').each(function (){ if(formJSON[$(this).attr('name')]){ formJSON[$(this).attr('name')]=formJSON[$(this).attr('name')].replace(/[_ ]+$/g,""); } }); //formJSON.productGroups=$(".productCategorySelect").select2().val(); /*Multiselect or checkbox to array: ajaxData['productGroup']=$(".productCategorySelect").select2().val(); formJSON.multiselectName = data.getAll('multiselectName'); $.each(formJSON, function (item, value) { formJSON[$.lcFirst(item.replace('contact', ''))] = value; delete formJSON[item]; }); if(formJSON.phone){ formJSON.phone=formJSON.phone.replaceAll('_',''); } if(formJSON.email){ formJSON.email=formJSON.email.replaceAll('_',''); } */ return formJSON; } this.formDataToDataObjectAPICall = function (CSSSelectorForm) { let ajaxData=new FormData($(CSSSelectorForm)[0]); $.each(ajaxData.getAll('profitCenter'),function(key,value){ ajaxData.append('profitCenter[]',value); }) $.each(ajaxData.getAll('productGroup'),function(key,value){ ajaxData.append('productGroup[]',value); }) $.each(ajaxData.getAll('supplierService'),function(key,value){ ajaxData.append('supplierService[]',value); }) $.each(ajaxData.getAll('contactId'),function(key,value){ ajaxData.append('contactId[]',value); }) ajaxData.append('_token',$('input[name=_token]').val()); $(CSSSelectorForm+' input[data-inputmask]').each(function (){ let indexKey=$(this).attr('name'); if(ajaxData.get(indexKey)){ ajaxData.set(indexKey,ajaxData.get(indexKey).replace(/[_ ]+$/g,"")); } }); return ajaxData; } this.clickSaveButton=function (event) { debug('Save clicked'); let CSSSelectorForm=Opts.containerCssSelector+' .supplierForm'; event.preventDefault(); if ($(CSSSelectorForm+' input[name="canSeeInOrder"]').val()==1 && $(CSSSelectorForm)[0].checkValidity() === false) { console.log('validaton false'); event.stopPropagation(); return; } else { console.log('validaton ok'); //do your ajax submition here } let ajaxData=root.formDataToDataObjectAPICall(CSSSelectorForm); let ajaxUrl=Opts.URL.store; let ajaxMethod="POST"; if(root.Supplier.id){ ajaxUrl=Opts.URL.update.replace('%id%',root.Supplier.id); //ajaxMethod="PUT"; //ajaxData=new FormData($(CSSSelectorForm)[0]); ajaxData.append('_method','PUT'); } debug(ajaxMethod); debug(ajaxData); $.ajax({ url:ajaxUrl, data:ajaxData, type:ajaxMethod, contentType:false, processData: false, headers: { 'X-CSRF-TOKEN': $('input[name="_token"]').val() }, success:function (data){ debug('d1: Save success '); debug(data); if(data.success==true){ //Opts.onAfterInitViewDetails=root.autofillDetails; Opts.dataTable.orderDirective=[0, 'desc']; Toast.create("Sikeres rögzítés!", ajaxData.get('name')+" nevű beszálllító elmentve", TOAST_STATUS.SUCCESS,5000); APP.loadMainContent(Opts.URL.index+'?init=0',root.initViewList); } } }); } this.setDetailsViewData=function () { debug('setDetailsViewData'); console.log(Supplier); let CSSSelectorForm=Opts.containerCssSelector+' .supplierForm'; let needToSet=[ 'name','hooreycaId','nameId', 'orderEmail','orderEmail2','address','mailingAddress','phone','fax','customerServicePhone', 'name22', 'openHours', 'ordersDeadline', 'minOrderValue', ]; $.each(needToSet,function () { if(typeof root.Supplier[this]!='undefined'){ $(CSSSelectorForm+' input[name='+this+']').val(root.Supplier[this]); $(CSSSelectorForm+' textarea[name='+this+']').val(root.Supplier[this]); } }) if(typeof root.Supplier['note']!='undefined'){ $(CSSSelectorForm+' textarea[name=note]').val(root.Supplier.note); } if(typeof root.Supplier['emailAttachmentType']!='undefined'){ $(CSSSelectorForm+' input[name=emailAttachmentType][value='+root.Supplier['emailAttachmentType']+']').prop('checked',true); } $(CSSSelectorForm+' *[data-toggle=canSee][data-title='+root.Supplier.canSee+']').click(); $(CSSSelectorForm+' *[data-toggle=canSeeInOrder][data-title='+root.Supplier.canSeeInOrder+']').click(); $(CSSSelectorForm+' *[data-toggle=hooreycaDataActive][data-title='+root.Supplier.hooreycaDataActive+']').click(); let productGroup=[]; $.each(root.Supplier.product_group,function () { productGroup.push(this.name); }); $(CSSSelectorForm+' .productCategorySelect').val(productGroup).change(); let service=[]; $.each(root.Supplier.service,function () { service.push(this.name); }); $(CSSSelectorForm+' .serviceSelect').val(service).change(); let profitCenter=[]; $.each(root.Supplier.profit_center,function () { profitCenter.push(this.name); }); //$(CSSSelectorForm+' .profitCenterSelect').val(profitCenter).change(); //debug(profitCenter); $.each(profitCenter,function () { $('input[value="'+$.escapeSelector(this)+'"]').prop( "checked", true ); }) if(typeof root.Supplier['logoFile']!='undefined' && (root.Supplier['logoFile'])){ $(CSSSelectorForm+' img.imageLogo').attr('src',root.Supplier['logoFile']); } //debug(APP.SupplierAdmin.formDataToDataObjectAPICall('.supplierForm')['productGroup']); //$('[name=productGroup]').val(['Büféáru_édesipari_termékek','Tojás']).change(); //root.setDetailsViewData(); } this.initViewDetails=function (options,SupplierItem){ debug('**call initViewDetails '); if(!APP.ContactPopUp){ console.log('nincs APP.ContactPopUp') APP.ContactPopUp = new window.ContactPopUp(); }else{ console.log('mar van APP.ContactPopUp') } APP.ContactPopUp.init({ active:true, onAfterSave:root.contactAction }); root.renderContact(); $('.supplierForm .buttonNewContact').bind('click',function (){ APP.SupplierAdmin.setContactPopupWorkflow('new'); APP.ContactPopUp.clearData(); APP.ContactPopUp.show(); }); $('[data-toggle="tooltip"]').tooltip(); initRadioButtons(); $(":input").inputmask({ "onincomplete": function () { console.log($(this).data('required')); if ($(this).val().length > 0 || $(this).data('required') === true) { $(this).addClass('is-invalid'); } }, "oncomplete": function () { $(this).removeClass('is-invalid'); $(this).addClass('is-valid'); }, "oncleared": function () { console.log('cleared'); $(this).removeClass('is-invalid'); } }); $('form.supplierForm button.FormSaveButton').off('click'); $('form.supplierForm button.FormSaveButton').on('click',root.clickSaveButton); root.setDetailsViewData(); $(".productCategorySelect").select2(); $(".serviceSelect").select2({ tags: true, createTag: function (params) { let term = $.trim(params.term); if (term === '') { return null; } return { id: term, text: term, newTag: true // add additional parameters } } }); //$(".profitCenterSelect").select2(); $("input[name=logoFile]").change(function(){ setImageFromLocal(this,Opts.containerCssSelector+' .imageLogo'); }); $('form.supplierForm .profitCenterSelectCheckboxAll').off('click'); $('form.supplierForm .profitCenterSelectCheckboxAll').on('click',function () { //console.log(); //let checked=$(this).is(":checked") $('form.supplierForm input.profitCenterSelectCheckbox').prop('checked',$(this).is(":checked")); }); root.renderAttachment(); //Opts.onAfterInitViewDetails(); root.initFileAttachmentFeature(); debug('**end initViewDetails '); } this.selectedUploadFileToggle=function (fileInput){ /* console.log(fileInput.attr('name')); console.log(fileInput[0].files[0]); console.log(fileInput[0].files[0].name); */ if(fileInput){ $('.containerFileUpload').addClass('d-none'); if(fileInput[0].files[0]){ $('.containerUploadedFileName').text(fileInput[0].files[0].name); } $('.containerFileUploadStarted').removeClass('d-none'); $('.containerUploadedSpinner').removeClass('d-none'); }else{ $('.containerUploadedFileName').text(''); $('.custom-file-label.selected').text(''); $('.containerFileUploadStarted').addClass('d-none'); $('.uploadStatusRow').addClass('d-none'); $('.containerFileUpload').removeClass('d-none'); } } this.initFileAttachmentFeature=function () { console.log('-------initFileAttachmentFeature-----------'); if(root.Supplier.id){ $('.containerFileUpload').removeClass('d-none'); $('.containerFileUploadNone').addClass('d-none'); } $(Opts.containerCssSelector+' .buttonUpload').off('click'); $(Opts.containerCssSelector+' .buttonUpload').on('click',function (){ console.group('-------buttonUpload-----------'); let fileInput=$('#inputGroupAttacheFile'); if(fileInput[0].files.length<1){ Toast.create("Hiba!", 'Vállaszon ki fájlt!', TOAST_STATUS.DANGER, 10000); return; } console.log($(Opts.containerCssSelector).find('form.supplierForm')[0]); let data= new FormData($(Opts.containerCssSelector).find('form.supplierForm')[0]); data.append(fileInput.attr('name'),fileInput[0].files[0]); root.selectedUploadFileToggle(fileInput); let ajaxUrl=Opts.URL.attachFile.replace('%id%',root.Supplier.id); console.groupEnd(); $.ajax({ url:ajaxUrl, data:data, type:'POST', contentType:false, processData: false, beforeSend: function() { }, success: function(data) { console.log(data); if(data.success==true){ root.addAttachment(data.data.attachment); root.selectedUploadFileToggle(); } }, error: function(data) { console.log(data.responseJSON); root.selectedUploadFileToggle(); ajaxErrorFieldHandler(data.responseJSON.error); } }) }); } this.clickNew=function () { debug('clickNew'); APP.loadMainContent(Opts.URL.create,root.clickNewCallBack); } this.clickNewCallBack=function () { debug('callbackNew'); root.Supplier=new window.Supplier(); root.initViewDetails(); } this.datatableRowActionEdit=function (rowData,node) { console.log('datatableRowActionEdit Called'); //Opts.onAfterInitViewDetails=root.autofillDetails; let ajaxUrl=Opts.URL.edit.replace('%id%',rowData.id); APP.loadMainContent(ajaxUrl,root.initViewDetails); console.log('datatableRowActionEdit End'); } this.clickOrderDeleteConfirmed=function (event){ debug('clickSupplierDeleteConfirmed'); debug(event); debug(event.data); $('#dialogModal').modal('hide'); let ajaxData={}; ajaxData._token=Opts.token; let ajaxUrl=Opts.URL.destroy.replace('%id%',event.data.id); ajaxData._token=$('input[name=_token]').val(); console.log(ajaxUrl); console.log(ajaxData); let row=$(dataTableCSSSelector).DataTable().row(root.dadatatableRowActionCallerNode.parents('tr')); $.ajax({ url:ajaxUrl, data:ajaxData, method:"DELETE", success:function (data){ if(data.success==true){ row.remove().draw(); root.dadatatableRowActionCallerNode=false; } } }); } let datatableRowActionCallerNode=false; this.datatableRowActionDelete=function (rowData,node) { console.log('datatableRowActionDelete Called'); root.dadatatableRowActionCallerNode=node; $('#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 beszállítót?'); modal.find('.buttonYes').off('click'); modal.find('.buttonYes').on('click',{id:rowData.id},root.clickOrderDeleteConfirmed); }); $('#dialogModal').modal('show'); } this.datatableRowActionButtonClick=function (event){ debug('datatableRowActionButtonClick'); let node=$(event[0].currentTarget); let row=$(dataTableCSSSelector).DataTable().row(node.parents('tr')); let rowData=row.data(); let actionName='datatableRowAction'+node.data('buttontype').capitalize(); if (typeof root[actionName] === "function") { return root[actionName](rowData,node) } } this.initViewList = function (options={}) { debug('listview inicialization'); dataTableCSSSelector=Opts.containerCssSelector+' .dataTable'; // let colNum=$(dataTableCSSSelector+' thead th').length; //buttons insert position need APP.setOpts({ datatableActionButtonClickCallBack:root.clickNew, datatableRowActionButtonClickCallBack:root.datatableRowActionButtonClick, }) let orderDirective=Opts.dataTable.orderDirective; if(typeof options['orderDirective']!='undefined'){ orderDirective=options['orderDirective']; } $(dataTableCSSSelector).DataTable( { language: { url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json' }, //"ajax": "{{asset('exapmle2.json')}}", "ajax": Opts.URL.getDataTableContent, "columnDefs": [ { "targets": colNum-1, "render": function ( data, type, row ) { let buttons=APP.datatableAddRowTrashButton(0,arguments); buttons+=APP.datatableAddRowEditButton(0,arguments); return buttons; }, }, { "targets": 1, "render": function ( data, type, row ) { return type === "sort" ? data.latinise() : data; }, }, //{ "visible": false, "targets": [ 0 ] } ], buttons:{ buttons: [ 'excel','pdf', { extend: 'print', //text: 'Print current page', 'title': 'title custom text', 'messageTop': 'Message On Top', autoPrint: true }, /**/ { text: 'Új felvitele', className: 'btn btn-success newItem', attr:{ /* data:{ a:1, b:2 } */ 'data':'newItem' }, init: function(api, node, config) { $(node).removeClass('ui-button') }, action: function ( e, dt, node, config ) { APP.datatableActionButtonClickCallBack(arguments); /* console.log(e); console.log(dt); console.log(node); console.log(config);*/ } } ] }, "columns": [ { "data": "id" }, { "data": "name" }, { "data": "hooreycaId" }, { "data": "nameId" }, { "data": "created_at" }, null, ], "order": orderDirective, "stateSave": true, "drawCallback": function( settings ) { APP.datatableAddRowAction(dataTableCSSSelector); } } ); debug('listview end'); } this.autofillDetails=function (){ debug('nyeresre allunk'); let randomNumber=getRandomInt(9999); $('input[name=name]').val('Beszalító'+randomNumber); $('input[name=hooreycaId]').val('hb'+randomNumber); $('input[name=nameId]').val('be'+randomNumber); $('input[name=orderEmail]').val('kapcsolat'+randomNumber+'@beszallito.hu'); $('input[name=orderEmail2]').val('informacio'+randomNumber+'@beszallito.hu'); $('input[name=address]').val('8989 Supplier utca '+randomNumber); $('input[name=mailingAddress]').val('8989 Postai út'+randomNumber); $('input[name=phone]').val('+36301234567'); $('input[name=fax]').val('36308889999'); $('input[name=customerServicePhone]').val('+36761234444'); $('textarea[name=note]').val('Megjegyzem '+randomNumber); } this.testMode=function () { console.debug('!!!!testmode !!!!'); root.Supplier = new window.Supplier({ 'contact':[ { id:2, }, { id:3, }, /* { id:3, name:'Kósa Veronika', email:'szamlazas4@funkcio.hu', phone:'{{formatterPhoneNumber("+36204589180")}}' } */ ] }); Opts.onAfterInitViewDetails=root.autofillDetails; APP.loadMainContent(Opts.URL.create,root.initViewDetails); } this.init=function (options,SupplierItem){ $.extend(Opts, options); if(Opts.testMode){ return root.testMode(); } if(SupplierItem){ root.Supplier=SupplierItem } root.initViewList(); } this.renderAttachment=function (){ let rowNum=1; console.log('renderingAttachment'); $.each(root.Supplier.getData('attachment'),function (){ let attachmentData=this; attachmentData.rowNum=rowNum; date=new Date(attachmentData.created_at); attachmentData.date=date.toLocaleString(); attachmentData.link=attachmentData.PublicUrl+'/'+attachmentData.filename; let template=$('template[data-name="supplierAttachmentTableRow"]').html() let render=Mustache.render(template,attachmentData); $('.attachmentTable tbody').append(render); rowNum++; }); root.bindAttachmentClickAction(); } this.addAttachment=function (attachmentData){ console.log(attachmentData); let CSSSelectorForm=Opts.containerCssSelector+' .supplierForm'; root.Supplier.attachment.push(attachmentData); attachmentData.rowNum=root.Supplier.attachment.length; let template=$('template[data-name="supplierAttachmentTableRow"]').html() let render=Mustache.render(template,attachmentData); $(CSSSelectorForm+' .attachmentTable tbody').append(render); root.bindContactClickAction(); Toast.enableTimers(false); Toast.create("Fájl hozzáadva!", attachmentData.original_filename+" fájl hozzáadva", TOAST_STATUS.SUCCESS,5000); } this.resetContactTable=function (){ $('.contactTable tbody tr').remove(); root.renderContact(); } this.renderContact=function (){ let rowNum=1; console.log('renderingContacts'); $.each(root.Supplier.getData('contact'),function (){ let contactData=this; contactData.rowNum=rowNum; //console.log(contactData); let template=$('template[data-name="supplierContactTableRow"]').html() let render=Mustache.render(template,contactData); $('.contactTable tbody').append(render); rowNum++; }); root.bindContactClickAction(); } this.bindContactClickAction =function (){ let node=$('.contactTable .buttonDelete'); node.unbind('click'); node.bind('click',root.contactDeleteClick); node=$('.contactTable .buttonEdit'); node.unbind('click'); node.bind('click',root.contactEditClick); } this.bindAttachmentClickAction=function (){ let node=$('.attachmentTable .buttonDelete'); node.unbind('click'); node.bind('click',root.attachmentDeleteClick); } let currentAttachmentRow=false; this.attachmentDeleteClick=function (event){ let row=$(this).closest('tr'); let id=row.find('input[name=attachmentId]').val(); let ajaxUrl=Opts.URL.detachFile.replace('%id%',root.Supplier.id); //let data= new FormData($(Opts.containerCssSelector).find('form.supplierForm')[0]); //data.append(fileInput.attr('name'),fileInput[0].files[0]); let data={}; data._token=$('input[name="_token"]').val(); data.attachemntId=id; $.ajax({ url:ajaxUrl, data:data, type:'POST', //contentType:false, //processData: false, beforeSend: function() { }, success: function(data) { console.log(data); if(data.success==true){ root.Supplier.attachment=root.Supplier.attachment.filter( function (value,index,arr){ if (value.id!==data.data. attachment.id*1){ return true; } return false; } ); /* */ //row.remove(); root.resetAttachmentTable(); } }, error: function(data) { console.log(data.responseJSON); root.selectedUploadFileToggle(); ajaxErrorFieldHandler(data.responseJSON.error); } }) } this.resetAttachmentTable=function (){ $('.attachmentTable tbody tr').remove(); root.renderAttachment(); } this.contactDeleteClick=function (event){ let row=$(this).closest('tr'); let id=row.find('input[name=contactId]').val(); root.Supplier.contact=root.Supplier.contact.filter( function (value,index,arr){ if (value.id!==id*1){ return true; } return false; } ); row.remove(); root.resetContactTable(); } root.getContactPopupWorkflow = function () { return contactPopupWorkflow; } root.setContactPopupWorkflow = function (status) { contactPopupWorkflow=status; } this.contactEditClick=function (event){ //console.log(this); let row=$(this).closest('tr'); let id=row.find('input[name=contactId]').val(); root.setContactPopupWorkflow('edit'); APP.ContactPopUp.loadData(id); } this.getSupplier=function (){ return root.Supplier; } this.contactAction=function (contactData){ console.log('nah most kellene meg valamit csinalni.') if(root.getContactPopupWorkflow()=='new'){ root.addContact(contactData); }else if(root.getContactPopupWorkflow()=='edit'){ root.editContact(contactData.id,contactData); } } this.editContact=function (id,contactData){ let newContacts=[]; $.each(root.Supplier.getData('contact'),function (index){ if(this.id==id){ newContacts.push(contactData); }else{ newContacts.push(this); } }); root.Supplier.contact=newContacts; root.resetContactTable(); Toast.create("Kapcsolat adatai módosítva!", contactData.name+" nevű kapocsolattartó módosítva", TOAST_STATUS.SUCCESS,5000); } this.addContact=function (contactData){ /* fel kell venni a sorba */ root.Supplier.contact.push(contactData); contactData.rowNum=root.Supplier.contact.length; let template=$('template[data-name="supplierContactTableRow"]').html() let render=Mustache.render(template,contactData); $('.contactTable tbody').append(render); root.bindContactClickAction(); Toast.enableTimers(false); Toast.create("Kapcsolat tartó hozzáadva!", contactData.name+" nevű kapocsolattartó hozzáadva", TOAST_STATUS.SUCCESS,5000); } this.construct(options,SupplierItem); };